Claude Code Plugin — Smithers Orchestrator
Ghost doc — This is a real Claude Code plugin found at ~/.claude/plugins/smithers-orchestrator/ on the development machine.
plugin.json
{
"name": "smithers-orchestrator",
"version": "1.0.0",
"description": "Multi-agent orchestration framework using Smithers.",
"author": "Smithers Framework Contributors",
"license": "MIT",
"skills": ["skills/smithers-orchestrator"]
}
The orchestrator includes a monitoring system with structured output:
[10:30:00] ◆ PHASE: Research Status: STARTING
[10:30:01] ● AGENT: Claude Status: RUNNING
[10:30:05] ⚡ TOOL CALL: Read File: src/index.ts
[10:30:12] ✓ PHASE: Research Status: COMPLETE
Workflow Template
The skill teaches this template for new orchestrations:
import { createSmithers, Sequence, Task, Workflow } from "smithers-orchestrator";
import { ToolLoopAgent as Agent } from "ai";
import { anthropic } from "@ai-sdk/anthropic";
import { z } from "zod";
const { smithers, outputs } = createSmithers({
research: z.object({ findings: z.string() }),
summary: z.object({ text: z.string() }),
});
const researcher = new Agent({
model: anthropic("claude-sonnet-4-5-20250929"),
instructions: "Research the topic thoroughly.",
});
const writer = new Agent({
model: anthropic("claude-sonnet-4-5-20250929"),
instructions: "Write a clear, concise summary.",
});
export default smithers((ctx) => (
<Workflow name="research-workflow">
<Sequence>
<Task id="research" output={outputs.research} agent={researcher}>
{`Research: ${ctx.input.topic}`}
</Task>
<Task id="summarize" output={outputs.summary} agent={writer}>
{`Summarize: ${ctx.outputMaybe("research", { nodeId: "research" })?.findings}`}
</Task>
</Sequence>
</Workflow>
));
Best Practices
- Use
createSmithers for schema-driven workflows with auto-persistence
- Use
outputs.xxx as the output prop on <Task> (the Zod schema, not a string key)
- Use
ctx.outputMaybe() for cross-task data flow (returns undefined if not yet available)
- Set
maxIterations on <Loop> to prevent infinite loops
- Include
continueOnFail on non-critical tasks
What This Demonstrates
- Plan-as-code — The JSX program serves as both the execution plan and the runnable workflow.
- Monitoring integration — Structured output format designed for both human and LLM consumption.
- Correct API patterns — Uses
createSmithers with Zod schemas, outputs.xxx references, and ctx.outputMaybe() for cross-task data flow.