Start With These Commands
| Goal | Command |
|---|---|
| Install the local workflow pack | bunx smithers-orchestrator init |
| Launch a workflow file | bunx smithers-orchestrator up workflow.tsx --input '{"task":"..."}' |
| Launch a discovered pack workflow | bunx smithers-orchestrator workflow implement --prompt "..." |
| List recent and active runs | bunx smithers-orchestrator ps |
| Inspect one run deeply | bunx smithers-orchestrator inspect <runId> |
| Read event logs | bunx smithers-orchestrator logs <runId> |
| Read agent prompts and replies | bunx smithers-orchestrator chat <runId> |
| Approve or deny a pause | bunx smithers-orchestrator approve <runId> / bunx smithers-orchestrator deny <runId> |
| Resume after interruption | bunx smithers-orchestrator up workflow.tsx --run-id <runId> --resume true |
How the CLI Fits With JSX
- JSX is the authoring model.
- The CLI is the operations model.
- Both talk to the same runtime and the same persisted run state.
Command Map
| Command | Purpose |
|---|---|
init | Install a local .smithers/ workflow pack. |
up | Start or resume a workflow execution. |
tui | Open the interactive Smithers observability dashboard. |
ps | List active, paused, and recently completed runs. |
logs | Stream lifecycle events for a run. |
chat | Show agent prompts, responses, and stderr. |
inspect | Print structured run state, steps, approvals, and loop info. |
node | Show enriched node details for debugging retries, tool calls, and output. |
events | Query run event history with filters, grouping, and NDJSON output. |
why | Explain why a run is currently blocked or paused. |
approve / deny | Record a decision for a pending approval gate. |
signal | Deliver external data to a waiting signal node. |
supervise | Watch for stale runs and auto-resume them. |
cancel / down | Stop one run or all active runs. |
hijack | Hand off an agent session or conversation. |
alerts | List, acknowledge, resolve, or silence durable alerts. |
graph | Render a workflow tree without executing. |
revert | Restore workspace to a previous task attempt snapshot. |
retry-task | Retry a specific task within a run, then resume. |
timetravel | Revert to a previous task state with filesystem + DB reset. |
replay | Fork from a checkpoint and resume execution (time travel). |
diff | Compare two time-travel snapshots. |
fork | Create a branched run from a snapshot checkpoint. |
timeline | View execution timeline for a run and its forks. |
scores | View scorer results for a run. |
observability | Start or stop the local Grafana/Prometheus/Tempo stack. |
ask | Query an installed agent CLI via MCP. |
human | List and resolve durable human requests from a <HumanTask> node. |
agents | Inspect built-in CLI agent capability registries and validate metadata. |
memory | View and query cross-run memory facts. |
rag | Ingest documents and query the RAG knowledge base. |
openapi | Preview AI SDK tools generated from an OpenAPI spec. |
workflow | Discover, create, resolve, and run flat workflows in .smithers/workflows. |
cron | Register and run background schedule triggers. |
completions | Generate shell completion scripts. |
mcp add | Register Smithers as an MCP server for an agent integration. |
skills | Sync skill files to agent integrations. |
Resolution Rules
Workflow paths and IDs
up, graph, and revert take explicit workflow file paths:
up:
workflow command family resolves IDs under .smithers/workflows/*.tsx:
bunx smithers-orchestrator workflow run <name> is a real subcommand. bunx smithers-orchestrator workflow <name> is a shorthand that rewrites to it.
Finding persisted state
Commands that operate on existing runs locate the nearestsmithers.db by walking upward from the working directory:
ps, logs, events, chat, inspect, node, why, scores, approve, deny, signal, cancel, down, supervise, diff, timeline, workflow doctor, cron start, cron list, cron rm
No database found: exit with error.
Boolean options
Boolean flags accept either bare form or explicittrue / false. Use false to disable a default-on option:
Commands
init
Install the local workflow pack into.smithers/.
| Option | Description |
|---|---|
--force <boolean> | Overwrite existing scaffold files. Default: false. The help output shows this as a bare boolean flag. |
.smithers/workflows/— seeded workflows (implement,review,plan,ticket,tickets,ralph,improve-test-coverage,test-first,debug).smithers/prompts/— shared MDX prompt templates.smithers/components/— reusable workflow components.smithers/agents.ts— agent configuration based on installed CLIs.smithers/preload.ts,.smithers/bunfig.toml,package.json,tsconfig.json
up
Start or resume a workflow execution.| Option | Description |
|---|---|
--detach, -d <boolean> | Background mode; print runId/pid/logFile and exit. Default: false. |
--run-id, -r <string> | Explicit run ID. |
--max-concurrency, -c <number> | Maximum parallel tasks. Default: 4. |
--root <string> | Tool sandbox root. Default: workflow file’s parent directory. |
--log <boolean> | NDJSON event log output. Default: true. |
--log-dir <string> | NDJSON log directory. |
--allow-network <boolean> | Allow bash tool network access. Does not affect CLI-backed agents. |
--max-output-bytes <number> | Max bytes per tool call return. |
--tool-timeout-ms <number> | Max wall-clock time per tool call. |
--hot <boolean> | Hot reload for .tsx workflows. Default: false. |
--input, -i <string> | Input JSON string. |
--resume <boolean> | Resume existing run. Default: false. |
--force <boolean> | Resume even if run is marked running. Default: false. |
--resume-claim-owner <string> | Internal durable resume claim owner. |
--resume-claim-heartbeat <number> | Internal durable resume claim heartbeat. |
--resume-restore-owner <string> | Internal durable resume restore owner. |
--resume-restore-heartbeat <number> | Internal durable resume restore heartbeat. |
--serve <boolean> | Start an HTTP server alongside the workflow. Default: false. |
--port <number> | HTTP server port when --serve true. Default: 7331. |
--host <string> | HTTP bind address when --serve true. Default: 127.0.0.1. |
--auth-token <string> | Bearer token for HTTP auth. Can also be provided through SMITHERS_API_KEY. |
--metrics <boolean> | Expose /metrics Prometheus endpoint when --serve true. Default: true. |
--supervise <boolean> | Run the stale-run supervisor loop (with --serve). Default: false. |
--supervise-dry-run <boolean> | With --supervise, detect stale runs without resuming. Default: false. |
--supervise-interval <string> | With --supervise, poll interval (e.g. 10s, 30s). Default: "10s". |
--supervise-stale-threshold <string> | With --supervise, stale heartbeat threshold. Default: "30s". |
--supervise-max-concurrent <number> | With --supervise, max runs resumed per poll. Default: 3. |
- Detached mode redirects stdout/stderr to a log file regardless of NDJSON logging settings.
- Exits with code
3when the workflow pauses inwaiting-approval. - Serve mode starts the HTTP app and keeps the process alive until interrupted.
tui
Open the interactive Smithers observability dashboard for the nearestsmithers.db.
ps
List active, paused, and recent runs.| Option | Description |
|---|---|
--status, -s <string> | Filter: running, waiting-approval, waiting-event, waiting-timer, continued, finished, failed, cancelled. |
--limit, -l <number> | Max rows. Default: 20. |
--all, -a <boolean> | Include all statuses. |
--watch, -w <boolean> | Watch mode: refresh output continuously. Default: false. |
--interval, -i <number> | Watch refresh interval in seconds. Default: 2. |
logs
Tail lifecycle events for a run.| Option | Description |
|---|---|
--follow, -f <boolean> | Poll for new events while run is active. Default: true. |
--follow-ancestry <boolean> | Include events from parent runs in the output, ordered root-to-current. Default: false. |
--since <number> | Start from event sequence number. |
--tail, -n <number> | Last N events. Default: 50. |
--follow-ancestry is enabled, events from the full parent chain are merged into a single stream with each line prefixed by the originating run ID.
Reads from the database, not detached-process stdout. See Events.
events
Query run event history with filters, grouping, and NDJSON output.| Option | Description |
|---|---|
--node, -n <string> | Filter events by node ID. |
--type, -t <string> | Filter by event category: agent, approval, frame, memory, node, openapi, output, rag, revert, run, sandbox, scorer, snapshot, supervisor, timer, token, tool-call, voice, workflow. |
--since, -s <string> | Filter to a recent duration window (e.g. 5m, 2h). |
--limit, -l <number> | Maximum events to display. Default: 1000. Max: 100000. |
--json, -j <boolean> | Output NDJSON for piping. Default: false. |
--group-by <string> | Group output by "node" or "attempt". |
--watch, -w <boolean> | Watch mode: append new events as they arrive. Default: false. |
--interval, -i <number> | Watch poll interval in seconds. Default: 2. |
chat
Show agent transcripts for the latest or a specified run. Reconstructs chat from attempt metadata,NodeOutput events, and fallback responseText.
| Option | Description |
|---|---|
--all, -a <boolean> | Show every agent attempt. Default: false. |
--follow, -f <boolean> | Watch for new output. Default: false. |
--tail, -n <number> | Last N chat blocks. |
--stderr <boolean> | Include agent stderr. Default: true. |
inspect
Print structured run state.| Option | Description |
|---|---|
--watch, -w <boolean> | Watch mode: refresh output continuously. Default: false. |
--interval, -i <number> | Watch refresh interval in seconds. Default: 2. |
node
Show enriched node details for debugging retries, tool calls, and output.| Option | Description |
|---|---|
--run-id, -r <string> | Run ID containing the node. |
--iteration, -i <number> | Loop iteration number. Default: latest iteration. |
--attempts <boolean> | Expand all attempts in human output. Default: false. |
--tools <boolean> | Expand tool input/output payloads in human output. Default: false. |
--watch, -w <boolean> | Watch mode: refresh output continuously. Default: false. |
--interval <number> | Watch refresh interval in seconds. Default: 2. |
why
Explain why a run is currently blocked or paused.| Option | Description |
|---|---|
--json <boolean> | Output structured JSON diagnosis. Default: false. |
scores
View scorer results for a specific run.| Option | Description |
|---|---|
--node <string> | Filter scores to a specific node ID. |
approve
Approve a pending approval gate.| Option | Description |
|---|---|
--node, -n <string> | Node ID. Required when multiple gates are pending. |
--iteration <number> | Loop iteration. Default: 0. |
--note <string> | Approval note. |
--by <string> | Approver identifier. |
deny
Deny a pending approval gate. Same options asapprove.
signal
Deliver a durable signal to a run waiting on<WaitForEvent>.
| Option | Description |
|---|---|
--data <string> | Signal payload as JSON. Default: {}. |
--correlation <string> | Correlation ID to match a specific waiter. |
--by <string> | Name or identifier of the signal sender. |
supervise
Watch for stale running runs and auto-resume them.| Option | Description |
|---|---|
--dry-run, -n <boolean> | Show which stale runs would be resumed, without acting. Default: false. |
--interval, -i <string> | Poll interval (e.g. 10s, 30s, 1m). Default: "10s". |
--stale-threshold, -t <string> | Heartbeat staleness threshold before resume. Default: "30s". |
--max-concurrent, -c <number> | Max runs resumed per poll. Default: 3. |
Supervisor behavior
Each poll cycle the supervisor:- Queries stale
runningruns whose heartbeat exceeds--stale-threshold. - Queries
waiting-timerruns that have a timer past its fire time. - For each candidate, applies guards before resuming:
- Workflow existence: skips the run if the workflow
.tsxfile no longer exists on disk. - PID liveness: skips the run if the runtime owner PID is still alive (the run is not actually stale).
- Claim acquisition: attempts to claim the run for resume; skips if another supervisor already claimed it.
- Workflow existence: skips the run if the workflow
- Stale runs are processed first, up to
--max-concurrent. Timer-due runs fill remaining concurrency slots. - Runs that exceed the concurrency cap are rate-limited and retried on the next poll.
cancel
Halt one active run. Marks in-progress attempts as cancelled.2 on success.
down
Cancel all active runs in the nearestsmithers.db.
| Option | Description |
|---|---|
--force <boolean> | Cancel stale runs too. Default: false. |
hijack
Hand off the latest resumable agent session or conversation.| Option | Description |
|---|---|
--target <string> | Expected engine: claude-code or codex. |
--timeout-ms <number> | Wait time for live handoff. Default: 30000. |
--launch <boolean> | Open session immediately. Default: true. |
- Cross-engine hijack is not supported.
- If a live hijack succeeds and the run has a workflow path, Smithers auto-resumes in detached mode.
- If auto-resume fails, prints the equivalent
bunx smithers-orchestrator up ... --resume true --run-id ...command. - Conversation hijack reconstructs agents from the original
.tsxsource.
graph
Render a workflow tree without executing. Uses renderFrame internally.| Option | Description |
|---|---|
--run-id, -r <string> | Run ID for persisted input/outputs. Default: "graph". |
--input <string> | Input JSON. Overrides persisted input. |
revert
Restore workspace to a previous task attempt snapshot. See Revert.| Option | Description |
|---|---|
--run-id, -r <string> | Run ID. |
--node-id, -n <string> | Node ID. |
--attempt <number> | Attempt number. Default: 1. |
--iteration <number> | Loop iteration. Default: 0. |
retry-task
Retry a specific task within a run. Resets the target node (and optionally its dependents) topending, clears their output rows, then resumes the workflow. Only the reset tasks re-execute; completed tasks use cached results.
| Option | Description |
|---|---|
--run-id, -r <string> | Run ID containing the task. |
--node-id, -n <string> | Task/node ID to retry. |
--iteration <number> | Loop iteration. Default: 0. |
--no-deps <boolean> | Only reset this node, not dependents. Default: false. |
--force <boolean> | Allow retry even if run is still marked running. Default: false. |
- Resets the target node and all downstream dependents to
pendingby default. - Clears persisted output rows for reset nodes so the agent starts fresh.
- Cancels any prior failed/waiting attempts so retry budgets don’t block re-execution.
- After resetting, automatically resumes the workflow with
resume: true.
timetravel
Time-travel to a previous task state: revert the filesystem via jj to an attempt’s snapshot, reset the DB state, and optionally resume. Combinesrevert + node reset into one atomic operation.
| Option | Description |
|---|---|
--run-id, -r <string> | Run ID. |
--node-id, -n <string> | Task/node ID to travel back to. |
--iteration <number> | Loop iteration. Default: 0. |
--attempt, -a <number> | Attempt number. Default: latest. |
--no-vcs <boolean> | Skip filesystem revert (DB only). Default: false. |
--no-deps <boolean> | Only reset this node, not dependents. Default: false. |
--resume <boolean> | Resume the workflow after time travel. Default: false. |
--force <boolean> | Force even if run is still marked running. Default: false. |
- Restores the filesystem to the attempt’s
jjPointersnapshot (unless--no-vcs). - Deletes DB frames created after the target attempt.
- Resets the target node and dependents to
pending. - With
--resume, immediately re-runs the workflow from the reverted state.
replay
Fork from a checkpoint and resume execution (time travel). Creates a new run branched from a specific frame of an existing run, optionally resetting a node and overriding input, then immediately resumes execution.| Option | Description |
|---|---|
--run-id, -r <string> | Source run ID to replay from. |
--frame, -f <number> | Frame number to fork from. |
--node, -n <string> | Node ID to reset to pending. |
--input, -i <string> | Input overrides as JSON string. |
--label, -l <string> | Branch label for the fork. |
--restore-vcs <boolean> | Restore jj filesystem state to the source frame’s revision. Default: false. |
diff
Compare two time-travel snapshots.run_id:frame_no or run_id (uses latest frame).
| Option | Description |
|---|---|
--json <boolean> | Output as JSON. Default: false. |
fork
Create a branched run from a snapshot checkpoint (time travel). Unlikereplay, fork does not automatically resume execution unless --run true is passed.
| Option | Description |
|---|---|
--run-id, -r <string> | Source run ID. |
--frame, -f <number> | Frame number to fork from. |
--reset-node, -n <string> | Node ID to reset to pending. |
--input, -i <string> | Input overrides as JSON string. |
--label, -l <string> | Branch label. |
--run <boolean> | Immediately start the forked run. Default: false. |
timeline
View execution timeline for a run and its forks (time travel).| Option | Description |
|---|---|
--tree <boolean> | Include all child forks recursively. Default: false. |
--json <boolean> | Output as JSON. Default: false. |
observability
Start or stop the local observability stack (Docker Compose).| Option | Description |
|---|---|
--detach, -d <boolean> | Background containers. Default: false. |
--down <boolean> | Stop and remove stack. Default: false. |
ask
Query via the best available installed agent CLI.bunx smithers-orchestrator --mcp), and delegates the question. Exits with error if no supported agent is installed.
| Option | Description |
|---|---|
--agent <string> | Force a specific agent: claude, codex, gemini, kimi, or pi. Default: auto-select best available. |
--tool-surface <string> | MCP tool surface to expose: semantic or raw. Default: semantic. |
--no-mcp <boolean> | Disable MCP bootstrap; pass the question as a plain prompt. Default: false. |
--print-bootstrap <boolean> | Print the bootstrap configuration (agent, mode, tool surface) instead of running. Default: false. |
--dump-prompt <boolean> | Print the full system prompt that would be sent to the agent. Default: false. |
--list-agents <boolean> | List all available agents with usability status and bootstrap mode. Default: false. |
mcp-config-file for Claude Code and Kimi, mcp-config-inline for Codex, mcp-allow-list for Gemini, and prompt-only for PI. Use --no-mcp to disable MCP entirely.
agents
Inspect Smithers’ built-in CLI agent capability registries.| Subcommand | Purpose |
|---|---|
agents capabilities | Print the full capability registry for all built-in CLI agents. |
agents doctor | Validate capability metadata for drift or internal contradictions. |
agents capabilities
Print a JSON report of all built-in CLI agent capability registries. Use this to understand which CLI-backed agents Smithers knows about and what features each one advertises.agents doctor
Validate the built-in CLI agent capability registries for drift or contradictions. Exits with code0 when the registry is internally consistent, 1 when problems are detected.
| Option | Description |
|---|---|
--json <boolean> | Print the doctor report as JSON instead of human-readable output. Default: false. |
agents doctor in CI to catch registry drift before deployment.
human
List and resolve durable human requests generated by<HumanTask> nodes.
| Subcommand | Purpose |
|---|---|
human inbox | List all pending human requests across runs. |
human answer <requestId> | Submit a JSON response to a pending request. |
human cancel <requestId> | Cancel a pending request without answering it. |
<HumanTask> nodes pause workflow execution and record a durable request in the database. This command is the operational surface for that inbox. It is more general than approve/deny: a human request can carry structured data of any shape, not just a binary gate decision.
human inbox
requestId, runId, workflowName, nodeId, kind, prompt, status, requestedAt, age, and timeoutAtMs.
Pass --format json for structured output:
human answer
Submit a response to a pending human request. The workflow resumes after the answer is recorded.| Option | Description |
|---|---|
--value <string> | Response as a JSON string. Required. |
--by <string> | Name or identifier of the operator answering. |
<HumanTask> node has a corresponding approval gate, answer automatically bridges the approval as well — no separate bunx smithers-orchestrator approve call is needed.
Exits with code 4 if the request is not found, not pending, or has already expired.
human cancel
Cancel a pending human request without providing an answer.| Option | Description |
|---|---|
--by <string> | Name or identifier of the operator cancelling. |
alerts
List, acknowledge, resolve, or silence durable alert instances.| Action | Purpose |
|---|---|
alerts list | List active alerts from the nearest smithers.db. |
alerts ack <alertId> | Mark an alert as acknowledged. |
alerts resolve <alertId> | Mark an alert as resolved. |
alerts silence <alertId> | Silence an alert without resolving it. |
ack, resolve, and silence require an alert ID.
memory
Inspect cross-run memory facts and perform semantic recall.| Subcommand | Purpose |
|---|---|
memory list <namespace> | List all stored facts in a namespace. |
memory recall <query> | Search memory by semantic similarity. |
--workflow to locate the smithers.db for the target workflow.
memory list
List all facts stored in a namespace.namespace: Namespace to inspect (e.g.workflow:my-flow,global:default).
| Option | Description |
|---|---|
--workflow, -w <string> | Path to a .tsx workflow file. Required to locate the database. |
memory recall
Search stored facts by semantic similarity using vector embeddings.query: Natural language search query.
| Option | Description |
|---|---|
--workflow, -w <string> | Path to a .tsx workflow file. Required to locate the database. |
--namespace, -n <string> | Namespace to search within. Default: global:default. |
--top-k, -k <number> | Number of results to return. Default: 5. |
openapi
Preview the AI SDK tools that Smithers would generate from an OpenAPI spec.| Subcommand | Purpose |
|---|---|
openapi list <specPath> | List all operations parsed from a spec as named tools. |
openapi list
Parse an OpenAPI spec and print the tool names and summaries that Smithers would generate from it.specPath: File path or URL to an OpenAPI spec (JSON or YAML).
operationId — summary (or method + path). The count of tools is printed at the end.
Use this to audit a spec before wiring it into a workflow with openApiTools().
See OpenAPI Tools and OpenAPI Tools Quickstart for the authoring model.
rag
Ingest documents into the RAG store or query it for relevant chunks.| Subcommand | Purpose |
|---|---|
rag ingest <file> | Chunk, embed, and store a document in the vector store. |
rag query <query> | Retrieve the most relevant chunks for a search query. |
--workflow to locate the smithers.db for the target workflow.
rag ingest
Chunk and embed a document into the SQLite vector store.file: Path to the file to ingest.
| Option | Description |
|---|---|
--workflow, -w <string> | Path to a .tsx workflow file. Required to locate the database. |
--namespace, -n <string> | Vector namespace. Default: default. |
--strategy <string> | Chunking strategy: recursive, character, sentence, markdown, token. Default: recursive. |
--size <number> | Chunk size in tokens or characters. Default: 1000. |
--overlap <number> | Chunk overlap. Default: 200. |
rag query
Search the vector store for chunks most relevant to a query.query: Natural language search query.
| Option | Description |
|---|---|
--workflow, -w <string> | Path to a .tsx workflow file. Required to locate the database. |
--namespace, -n <string> | Vector namespace to search. Default: default. |
--top-k, -k <number> | Number of results to return. Default: 5. |
workflow
Manage flat workflows in.smithers/workflows/*.tsx.
| Command | Purpose |
|---|---|
workflow run <name> | Run a discovered workflow by ID. |
workflow | List discovered workflows (no subcommand). |
workflow list | List discovered workflows. |
workflow path <name> | Resolve workflow ID to entry file. |
workflow create <name> | Create a new workflow scaffold. |
workflow doctor [name] | Report discovery, preload, bunfig, and detected agents. |
- Resolve name from
.smithers/workflows/<name>.tsx - Rewrite to
bunx smithers-orchestrator workflow run <name>
- Names: lowercase letters, numbers, hyphens only.
workflow createwrites only the workflow file. Runbunx smithers-orchestrator initfirst for.smithers/agents.tsand.smithers/components/.
Workflow metadata comments
Discovery extracts optional metadata from// comments in the first six lines of each workflow file:
| Marker | Values | Purpose |
|---|---|---|
smithers-source | seeded, generated, user | Origin classification shown in workflow list and workflow doctor. |
smithers-display-name | Free text | Human-readable name for the workflow. |
workflow create automatically inserts both markers.
workflow list
List all discovered workflows under.smithers/workflows/. Output includes each workflow’s ID, entry file path, and source type.
workflow run
Run a discovered workflow by ID.name: workflow ID
workflow run accepts all of the same execution options as up, plus:
| Option | Description |
|---|---|
--prompt, -p <string> | Shorthand for setting input.prompt when --input is omitted. |
- resolves
<name>to.smithers/workflows/<name>.tsx - defaults
--rootto.when not provided - preserves all other
upsemantics including--resume,--detach,--serve, and hot reload
workflow path
Resolve a workflow ID to its entry file path. Prints the absolute path, ID, and source type.name: Workflow ID to resolve.
workflow create
Create a new workflow scaffold file in.smithers/workflows/. The name must contain only lowercase letters, numbers, and hyphens. Exits with code 4 if the name is invalid or the file already exists.
name: ID for the new workflow.
bunx smithers-orchestrator init first to ensure .smithers/agents.ts and .smithers/components/ exist.
workflow doctor
Inspect workflow discovery health. Reports the workflow root, discovered workflows, preload file status, bunfig status, and detected CLI agents. Whenname is provided, scopes the report to that single workflow.
name(optional): Workflow ID to inspect. Omit to inspect all discovered workflows.
cron
Background schedule triggers stored in the nearestsmithers.db.
| Command | Purpose |
|---|---|
cron start | Start the scheduler loop. |
cron add <pattern> <workflowPath> | Add a cron entry. |
cron list | List registered entries. |
cron rm <cronId> | Delete an entry. |
- Polls every 15 seconds.
- Due jobs launch as detached
bunx smithers-orchestrator up ... -dprocesses. workflowPathis replayed throughbunx smithers-orchestrator up; use an explicit file path.
cron start
Start the background scheduler loop in the current terminal. The loop polls every 15 seconds and launches due jobs as detachedbunx smithers-orchestrator up ... -d processes. Runs until interrupted.
cron add
Register a new workflow cron schedule. Returns the generatedcronId.
pattern: Cron expression (e.g."0 * * * *"for hourly,"*/5 * * * *"for every 5 minutes).workflowPath: Path or ID of the workflow to schedule.
cron list
List all registered background cron schedules fromsmithers.db. Output includes cronId, pattern, workflow path, enabled state, and last/next run timestamps.
cron rm
Delete an existing cron schedule by its ID.cronId: UUID of the cron entry to remove (fromcron listoutput).
Framework-Provided Built-Ins
completions
| Shell | Setup |
|---|---|
bash | eval "$(bunx smithers-orchestrator completions bash)" |
zsh | eval "$(bunx smithers-orchestrator completions zsh)" |
fish | bunx smithers-orchestrator completions fish | source |
nushell | Add output of bunx smithers-orchestrator completions nushell to config.nu |
mcp add
Register Smithers as an MCP server for an agent integration.| Option | Description |
|---|---|
--command, -c <cmd> | Override the agent command. |
--no-global | Project-local install. |
--agent <agent> | Target agent (claude-code, cursor, etc.). |
skills
Sync skill files to agent integrations.| Command | Description |
|---|---|
skills add [options] | Sync skill files to agents. |
skills list | List available skills. |
skills also has the alias skill.
skills add
| Option | Description |
|---|---|
--depth <number> | Grouping depth. Default: 1. |
--no-global | Project-local install. |
skills list
Global Options
| Option | Description |
|---|---|
--format <json|yaml|md|jsonl> | Output format. |
--verbose | Full output envelope. |
--filter-output <keys> | Filter JSON by key path (e.g. runs[0].id). |
--schema | Print JSON schema for the command. |
--llms, --llms-full | Print LLM-readable manifest. |
--token-count | Print token count instead of output. |
--token-limit <n> | Limit output to n tokens. |
--token-offset <n> | Skip first n output tokens. |
--help | Command help. |
--version | CLI version. |
--mcp | Start as MCP stdio server. Used by bunx smithers-orchestrator ask and external tooling. |
Operational Behavior
Progress reporting
Duringup execution, the CLI writes progress events to stderr with elapsed timestamps:
→ ✓ ✗ ↻), timer events (⏱), hot-reload status, and run completion.
Signal handling
The CLI listens forSIGINT and SIGTERM. On receipt it:
- Writes
[smithers] received <signal>, cancelling run...to stderr. - Fires the abort controller to cancel in-flight operations.
- Closes the SQLite database connection.
- Exits with code
130(SIGINT) or143(SIGTERM).
SQLite cleanup
On process exit, SIGINT, or SIGTERM the CLI closes the SQLite connection viaclient.close(). This ensures WAL checkpointing and prevents database corruption from unclean shutdowns.
Event formatting
logs and events render each event line as:
✓ green for success, ✗ red for failure, ⏸ for approvals, ⏱ for timers, 🔧 for tool calls, 📚 for RAG, 🧠 for memory. Payloads are truncated to 240 characters by default.
Exit Codes
| Code | Meaning |
|---|---|
0 | Success. |
1 | Execution failure. |
2 | Run cancelled / cancel succeeded. |
3 | up completed in waiting-approval. |
4 | Invalid arguments or user-correctable input error. |
130 | Interrupted by SIGINT. |
143 | Terminated by SIGTERM. |
Related
- runWorkflow — programmatic runtime API
- Events — persisted lifecycle events
- Revert — filesystem snapshot restoration
- Hot Reload —
up --hot true - Approvals —
approveanddeny - Time Travel — snapshots, forking, and replay