Skip to main content

Installation

Global flag available on every command:

Commands

validate

Check a spec file offline — no LLM calls, no network, no MCP connections.
Checks schema, all references (tools, resolvers, MCPs), prompt file paths, graph structure, and imports any declared hooks to verify they load. Exits non-zero on any error.

inspect

Print a summary of the spec — agents, orchestrators, MCP servers, hooks, and tool tags — without running anything.
Hook config is shown as key names only, never values. MCP tool tags and transport type are shown per server.

generate

Create plugin stubs from the spec. Safe to run repeatedly — existing implementations are preserved by default.
Generates:
  • plugins/resolvers/shared.pySharedResolver with shared methods
  • plugins/resolvers/<agent_id>.py — per-agent Resolver subclass
  • plugins/tools/<tool_id>.py — tool stubs
  • plugins/hooks/<hook_id>.py — hook stubs
  • plugins/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.
Endpoints: 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.
Pass --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:
Default port: 8100 Endpoints: POST /conversations, GET /conversations/{id}/messages, POST /conversations/{id}/messages, POST /conversations/{id}/messages/stream, GET /widget.js