Iii iii-agentic-backend
install
source · Clone the upstream repo
git clone https://github.com/iii-hq/iii
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/iii-hq/iii "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/iii-agentic-backend" ~/.claude/skills/iii-hq-iii-iii-agentic-backend && rm -rf "$T"
manifest:
skills/iii-agentic-backend/SKILL.mdsource content
Agentic Backend
Comparable to: LangGraph, CrewAI, AutoGen, Letta
Key Concepts
Use the concepts below when they fit the task. Not every agentic workflow needs all of them.
- Each agent is a registered function with a single responsibility
- Agents communicate via named queues (ordered handoffs) and shared state (accumulated context)
- Approval gates are explicit checks in the producing agent before enqueuing the next step
- An HTTP trigger provides the entry point; agents chain from there
- Pubsub broadcasts completion events for downstream listeners
Architecture
HTTP request → Enqueue(agent-tasks) → Agent 1 (researcher) → writes state → Enqueue(agent-tasks) → Agent 2 (critic) → reads/updates state → explicit approval check (is-approved?) → Enqueue(agent-tasks) → Agent 3 (synthesizer) → final state update → publish(research.complete)
iii Primitives Used
| Primitive | Purpose |
|---|---|
| Initialize the worker and connect to iii |
| Define each agent |
trigger , , | Shared context between agents |
| Async handoff between agents via named queue |
| Explicit condition check before enqueuing |
| Broadcast completion to any listeners |
| Entry point |
Reference Implementation
See ../references/agentic-backend.js for the full working example — a multi-agent research pipeline where a researcher gathers findings, a critic reviews them, and a synthesizer produces a final report.
Common Patterns
Code using this pattern commonly includes, when relevant:
— worker initializationregisterWorker(url, { workerName })
— async handoff between agentstrigger({ function_id, payload, action: TriggerAction.Enqueue({ queue }) })- trigger
,state::set
,state::get
— shared context between agentsstate::update - Explicit condition check via
before enqueuing next agentawait iii.trigger({ function_id: 'condition-fn', payload })
— completion broadcasttrigger({ function_id: 'publish', payload: { topic, data }, action: TriggerAction.Void() })- Each agent as its own
withregisterFunction
prefix IDsagents::
— structured logging per agentconst logger = new Logger()
Adapting This Pattern
Use the adaptations below when they apply to the task.
- Replace simulated logic in each agent with real work (API calls, LLM inference, etc.)
- Add more agents by registering functions and enqueuing to them with
TriggerAction.Enqueue({ queue }) - For approval gates, call a condition function explicitly before enqueuing the next agent
- Define queue configs (retries, concurrency) in
underiii-config.yamlqueue_configs - State scope should be named for your domain (e.g.
,research-tasks
)support-tickets
segments should reflect your agent hierarchy (e.g.functionId
,agents::researcher
)agents::critic
Engine Configuration
Named queues for agent handoffs are declared in iii-config.yaml under
queue_configs. See ../references/iii-config.yaml for the full annotated config reference.
Pattern Boundaries
- If a request is about adapting existing HTTP endpoints into
(including prompts asking forregisterFunction
endpoint maps + loops), prefer{ path, id }
.iii-http-invoked-functions - Stay with
when the primary problem is multi-agent orchestration, queue handoffs, approval gates, and shared context.iii-agentic-backend
When to Use
- Use this skill when the task is primarily about
in the iii engine.iii-agentic-backend - Triggers when the request directly asks for this pattern or an equivalent implementation.
Boundaries
- Never use this skill as a generic fallback for unrelated tasks.
- You must not apply this skill when a more specific iii skill is a better fit.
- Always verify environment and safety constraints before applying examples from this skill.