Agentic AI on nostackai comes in two forms: a single tool-using agent step inside a logic block, and a deployable multi-agent crew you invoke as a unit.

ai_agent — a tool-use loop

ai_agent gives a model a set of tools — other logic blocks. The model decides which tool to call, receives the result, and iterates until it produces a final answer. Each tool's input schema becomes the parameter spec sent to the model.

json
{
  "type": "ai_agent",
  "systemPrompt": "You are a reorder agent. Reorder any SKUs below their threshold.",
  "userPrompt": "Run the daily reorder check for category={{input.category}}",
  "tools": [
    { "logicblock": "check-inventory", "description": "Check stock for a SKU" },
    { "logicblock": "create-po",       "description": "Create a purchase order" },
    { "logicblock": "notify-team",      "description": "Notify the ops team on Slack" }
  ],
  "maxRounds": 5,
  "responseVariable": "result"
}

Bounded by design

maxRounds caps how many tool-call rounds the agent may take (hard cap 10). If it runs out, it returns a partial result marked incomplete rather than looping forever.

Agent crews

A crew is a multi-agent workflow you build on a canvas: several agents — each with a prompt, model, tools, guardrails, and memory — wired together with logic nodes (condition, loop, human gate). You deploy a crew, give it a status, and invoke it as one unit.

  • Agents carry a prompt, a model, and a set of tools.
  • Guardrails constrain behaviour — allowed/blocked topics, write-tool approval gates, and more (schema-driven).
  • Memory sets how prior turns are retained (e.g. a sliding window).
  • Tool approval — write tools can require an approval gate before they run.

Deploy intercepts missing guardrails

Deploying a crew with no guardrails prompts you to add them first — a nudge to make agent behaviour intentional before it goes live.

run_crew — invoke a crew from a logic block

Crews compose with the rest of the platform via the run_crew step. The logic block handles structured data flow; the crew handles reasoning and multi-agent coordination — neither leaks into the other's concern.

json
{
  "type": "run_crew",
  "crewSlug": "customer-support-crew",
  "input": "{{steps.0.output}}",
  "timeoutMs": 120000,
  "outputVar": "crewResult"
}
text
Logic block: processComplexInquiry
  s1: get_entity(Customer, id: {{input.customerId}})
  s2: run_crew(crew: "customer-support-crew", input: {{s1.output}})
  s3: create_entity(SupportTicket, {
        resolution: {{s2.crewResult.outputSnapshot}}
      })

Crews also fire from events

Because run_crew is a logic-block step, a crew can run from any trigger a logic block can — including an event-driven automation on an entity write.