Installation
Commands
validate
Check a spec file offline — no LLM calls, no network, no MCP connections.
inspect
Print a summary of the spec — agents, orchestrators, MCP servers, hooks, and tool tags — without running anything.
generate
Create plugin stubs from the spec. Safe to run repeatedly — existing implementations are preserved by default.
plugins/resolvers/shared.py—SharedResolverwith shared methodsplugins/resolvers/<agent_id>.py— per-agentResolversubclassplugins/tools/<tool_id>.py— tool stubsplugins/hooks/<hook_id>.py— hook stubsplugins/plugins.toml— plugin manifest
run
Send one message through the engine. Persists the conversation via agent_manager.
serve
Start the stateless engine HTTP API. No persistence, no widget.
GET /health, POST /invoke, POST /stream
Default port: 8090. Override it with --port or the PORT env var (e.g. PORT=8080 agentctl serve --config agents.yml).
chat
Interactive developer console. Keeps one engine alive, lets you ask multiple questions without restarting. Nothing is persisted.
--config (local) or --url (remote), not both. Type exit, quit, or press Ctrl-C to stop.
In local mode, a tool call that requires human approval pauses the run and shows
its sanitized agent, tool, description, and arguments. Choose o to allow that
call once, s to allow the same tool for the current console session, or d to
deny it. Enter q, quit, or exit to stop from the approval prompt. Ctrl-C
and Ctrl-D also stop the console immediately; the pending tool is not executed.
agent-manager
Separate command for the conversation layer + widget:POST /conversations, GET /conversations/{id}/messages, POST /conversations/{id}/messages, POST /conversations/{id}/messages/stream, GET /widget.js