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.
{
"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.
{
"type": "run_crew",
"crewSlug": "customer-support-crew",
"input": "{{steps.0.output}}",
"timeoutMs": 120000,
"outputVar": "crewResult"
} 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.