Skip to content

talonctl reference

talonctl is the management CLI for talond. Use it to inspect a running daemon, scaffold config, manage personas and channels, test providers, work with schedules, and inspect thread/provider state.

All examples use npx talonctl ..., but talonctl ... works the same way when the binary is installed globally. Commands that read config default to talond.yaml, and .env is loaded automatically before config parsing.

CommandPurpose
statusShow daemon health, active containers, and queue depth
reloadHot-reload configuration without restarting
migrateApply database migrations
backupBack up database, config, personas, and skills
doctorCheck system requirements and configuration
setupGenerate a starter config and data directory
add-channelAdd a channel connector to talond.yaml
list-channelsList configured channels
remove-channelRemove a channel from talond.yaml
add-personaScaffold a persona and add it to config
list-personasList configured personas
remove-personaRemove a persona and its bindings
bindBind a persona to a channel
unbindRemove a persona-channel binding
list-capabilitiesList valid capability labels
set-capabilitiesShow or modify capability grants on a persona
add-skillScaffold a skill and attach it to a persona
list-skillsList all skills or filter by persona
add-mcpAdd an MCP server to a skill
env-checkAudit ${ENV_VAR} usage in config
auth-mcpAuthenticate with an MCP server over HTTP using OAuth 2.0
config-showPrint effective config with secrets masked by default
queue-purgePurge queue items by status
chatConnect to the terminal channel
list-providersList configured providers in foreground and background contexts
add-providerAdd a provider to agentRunner, backgroundAgent, or both
set-default-providerChange the default provider for one context
test-providerRun a provider smoke test
list-threadsList persisted threads for a channel
reset-provider-affinityReset provider affinity for one thread or a whole channel
add-scheduleCreate a scheduled task
list-schedulesList scheduled tasks
remove-scheduleDelete a scheduled task permanently
run-subagentInvoke a sub-agent without a running daemon
whatsapp-authScan a QR code and save Baileys credentials
a2a listList A2A tasks
a2a sendSubmit a manual A2A task

Shows daemon health, active containers, and queue depth over IPC.

Terminal window
npx talonctl status
npx talonctl status --ipc-dir ./data/ipc/daemon --timeout 8000

Usage

Terminal window
talonctl status [--ipc-dir <path>] [--timeout <ms>]
OptionDescriptionDefault
--ipc-dir <path>IPC directory used to reach the daemonfrom config
--timeout <ms>IPC response timeout5000

Reloads config, personas, skills, and channel setup without restarting the daemon.

Terminal window
npx talonctl reload
npx talonctl reload --ipc-dir ./data/ipc/daemon --timeout 8000

Usage

Terminal window
talonctl reload [--ipc-dir <path>] [--timeout <ms>]
OptionDescriptionDefault
--ipc-dir <path>IPC directory used to reach the daemonfrom config
--timeout <ms>IPC response timeout5000

Connects to Talon’s terminal channel over WebSocket. Requires a running terminal connector and a token supplied with --token or TERMINAL_TOKEN.

Terminal window
export TERMINAL_TOKEN=your-secret-token
npx talonctl chat --host 127.0.0.1 --port 7700
npx talonctl chat --host 10.0.1.95 --port 7700 --persona researcher
npx talonctl chat --host talond.example.com --port 443 --tls --client-id laptop

Usage

Terminal window
talonctl chat [--host <host>] [--port <port>] [--token <token>] [--client-id <id>] [--persona <name>] [--tls]
OptionDescriptionDefault
--host <host>Terminal connector host127.0.0.1
--port <port>Terminal connector port7700
--token <token>Authentication tokenTERMINAL_TOKEN if set
--client-id <id>Stable client identity for thread persistenceauto-generated
--persona <name>Override the channel’s default personachannel default
--tlsUse wss:// instead of ws://off

Creates a first-pass talond.yaml and data directory after checking the local environment.

Terminal window
npx talonctl setup
npx talonctl setup --config talond.yaml --data-dir data

Usage

Terminal window
talonctl setup [--config <path>] [--data-dir <path>]
OptionDescriptionDefault
--config <path>Where to write talond.yamltalond.yaml
--data-dir <path>Data directory pathdata

Runs environment and configuration checks before you start the daemon or after a config change.

Terminal window
npx talonctl doctor
npx talonctl doctor --config ./talond.yaml

Usage

Terminal window
talonctl doctor [--config <path>]
OptionDescriptionDefault
--config <path>Path to talond.yamltalond.yaml

Applies pending SQLite schema migrations. No daemon is required.

Terminal window
npx talonctl migrate
npx talonctl migrate --config ./talond.yaml

Usage

Terminal window
talonctl migrate [--config <path>]
OptionDescriptionDefault
--config <path>Path to talond.yamltalond.yaml

Creates a backup containing the database, config, personas, and skills.

Terminal window
npx talonctl backup
npx talonctl backup --config ./talond.yaml --output /backups/talon-2026-04-03

Usage

Terminal window
talonctl backup [--config <path>] [--output <path>]
OptionDescriptionDefault
--config <path>Path to talond.yamltalond.yaml
--output <path>Backup output directoryauto-generated

Purges queue rows by status through the daemon IPC layer. By default it removes pending, failed, and completed.

Terminal window
npx talonctl queue-purge
npx talonctl queue-purge --statuses dead_letter,failed
npx talonctl queue-purge --all

Usage

Terminal window
talonctl queue-purge [--ipc-dir <path>] [--timeout <ms>] [--statuses <list>] [--all]
OptionDescriptionDefault
--ipc-dir <path>IPC directory used to reach the daemonfrom config
--timeout <ms>IPC response timeout5000
--statuses <list>Comma-separated list of statuses to purgepending,failed,completed
--allPurge every status, including in-flight itemsoff

Finds ${ENV_VAR} placeholders referenced by config and reports which ones are missing.

Terminal window
npx talonctl env-check
npx talonctl env-check --config ./talond.yaml

Usage

Terminal window
talonctl env-check [--config <path>]
OptionDescriptionDefault
--config <path>Path to talond.yamltalond.yaml

Authenticate with an MCP server over HTTP using OAuth 2.0. Supports login, logout, and status subcommands.

Terminal window
npx talonctl auth-mcp login --server https://mcp.example.com --client-id talon --client-secret $MCP_SECRET --token-url https://mcp.example.com/oauth/token --scopes read,write
npx talonctl auth-mcp status --server https://mcp.example.com
npx talonctl auth-mcp logout --server https://mcp.example.com

Usage

Terminal window
talonctl auth-mcp login --server <url> --client-id <id> --client-secret <secret> --token-url <url> [--scopes <list>]
talonctl auth-mcp status --server <url>
talonctl auth-mcp logout --server <url>
OptionDescriptionDefault
login --server <url>MCP server base URLrequired
login --client-id <id>OAuth client IDrequired
login --client-secret <secret>OAuth client secretrequired
login --token-url <url>OAuth token endpoint URLrequired
login --scopes <list>Comma-separated OAuth scopes—
status --server <url>MCP server base URLrequired
logout --server <url>MCP server base URLrequired

Prints the effective config after env substitution. Secrets stay masked unless you explicitly opt out.

Terminal window
npx talonctl config-show
npx talonctl config-show --show-secrets

Usage

Terminal window
talonctl config-show [--config <path>] [--show-secrets]
OptionDescriptionDefault
--config <path>Path to talond.yamltalond.yaml
--show-secretsShow resolved secret valuesoff

Adds a new channel entry to talond.yaml. The command scaffolds the channel record; you still need to provide channel-specific secrets in config.

Terminal window
npx talonctl add-channel --name my-telegram --type telegram
npx talonctl add-channel --name slack-engineer --type slack

Usage

Terminal window
talonctl add-channel --name <name> --type <type> [--config <path>]
OptionDescriptionDefault
--name <name>Unique channel namerequired
--type <type>Connector type such as telegram, slack, discord, whatsappBaileys, email, or terminalrequired
--config <path>Path to talond.yamltalond.yaml

Lists all configured channels.

Terminal window
npx talonctl list-channels

Usage

Terminal window
talonctl list-channels [--config <path>]
OptionDescriptionDefault
--config <path>Path to talond.yamltalond.yaml

Removes a channel from config. Existing bindings to that channel are removed with it.

Terminal window
npx talonctl remove-channel --name old-slack

Usage

Terminal window
talonctl remove-channel --name <name> [--config <path>]
OptionDescriptionDefault
--name <name>Channel to removerequired
--config <path>Path to talond.yamltalond.yaml

Binds a persona to a channel. The first binding created for a channel becomes that channel’s default route.

Terminal window
npx talonctl bind --persona assistant --channel my-telegram

Usage

Terminal window
talonctl bind --persona <name> --channel <name> [--config <path>]
OptionDescriptionDefault
--persona <name>Persona namerequired
--channel <name>Channel namerequired
--config <path>Path to talond.yamltalond.yaml

Removes a persona-channel binding.

Terminal window
npx talonctl unbind --persona assistant --channel my-telegram

Usage

Terminal window
talonctl unbind --persona <name> --channel <name> [--config <path>]
OptionDescriptionDefault
--persona <name>Persona namerequired
--channel <name>Channel namerequired
--config <path>Path to talond.yamltalond.yaml

Authenticates a WhatsApp Baileys connector by printing a QR code and saving the resulting credentials.

Terminal window
npx talonctl whatsapp-auth --auth-dir ./baileys-auth
npx talonctl whatsapp-auth --auth-dir ./baileys-auth --timeout 180

Usage

Terminal window
talonctl whatsapp-auth [--auth-dir <path>] [--timeout <seconds>]
OptionDescriptionDefault
--auth-dir <path>Directory used to store Baileys credentials./baileys-auth
--timeout <seconds>Seconds to wait for a QR scan120

Creates a persona directory and appends the persona to config. Optional flags let you set model, provider, skills, capabilities, and a starter prompt source in one step.

Terminal window
npx talonctl add-persona --name assistant
npx talonctl add-persona --name coder --model gpt-5.4 --provider codex-cli \
--skills web-search,file-editing --capabilities "channel.send:terminal,subagent.invoke"

Usage

Terminal window
talonctl add-persona --name <name> [--config <path>] [--templates-dir <path>] [--model <model>] [--provider <provider>] [--capabilities <caps>] [--require-approval <caps>] [--skills <skills>] [--system-prompt-file <path>] [--description <text>]
OptionDescriptionDefault
--name <name>Persona namerequired
--config <path>Path to talond.yamltalond.yaml
--templates-dir <path>Template directory used for starter promptstemplates
--model <model>Persona model nameunset
--provider <provider>Provider overrideunset
--capabilities <caps>Comma-separated allow-listunset
--require-approval <caps>Comma-separated approval-gated capabilitiesunset
--skills <skills>Comma-separated skill namesunset
--system-prompt-file <path>Existing Markdown file to use as system promptunset
--description <text>Persona description written to frontmatterunset

Lists all configured personas.

Terminal window
npx talonctl list-personas

Usage

Terminal window
talonctl list-personas [--config <path>]
OptionDescriptionDefault
--config <path>Path to talond.yamltalond.yaml

Removes a persona from config and deletes its bindings.

Terminal window
npx talonctl remove-persona --name old-bot

Usage

Terminal window
talonctl remove-persona --name <name> [--config <path>]
OptionDescriptionDefault
--name <name>Persona to removerequired
--config <path>Path to talond.yamltalond.yaml

Prints the capability labels Talon recognizes for persona configuration.

Terminal window
npx talonctl list-capabilities

Usage

Terminal window
talonctl list-capabilities

This command does not read talond.yaml, so it has no config flags.

Shows or updates capability grants on an existing persona.

Terminal window
npx talonctl set-capabilities --persona assistant --show
npx talonctl set-capabilities --persona assistant --add "channel.send:my-telegram,subagent.invoke"
npx talonctl set-capabilities --persona assistant --remove "db.query:own"

Usage

Terminal window
talonctl set-capabilities --persona <name> [--allow <labels>] [--add <labels>] [--remove <labels>] [--require-approval <labels>] [--show] [--config <path>]
OptionDescriptionDefault
--persona <name>Persona namerequired
--allow <labels>Replace the allow list with a comma-separated setunset
--add <labels>Add labels to the allow listunset
--remove <labels>Remove labels from the allow listunset
--require-approval <labels>Replace requireApproval with a comma-separated setunset
--showPrint current capabilities without modifying themoff
--config <path>Path to talond.yamltalond.yaml

Creates a new skill and attaches it to a persona.

Terminal window
npx talonctl add-skill --name web-search --persona assistant
npx talonctl add-skill --name docs-writer --persona webmaster --format skillmd

Usage

Terminal window
talonctl add-skill --name <name> --persona <persona> [--format <format>] [--config <path>]
OptionDescriptionDefault
--name <name>Skill namerequired
--persona <persona>Persona that should receive the skillrequired
--format <format>Skill format: yaml or skillmdyaml
--config <path>Path to talond.yamltalond.yaml

Lists all configured skills or filters by persona.

Terminal window
npx talonctl list-skills
npx talonctl list-skills --persona assistant

Usage

Terminal window
talonctl list-skills [--persona <name>] [--config <path>]
OptionDescriptionDefault
--persona <name>Filter by persona nameall personas
--config <path>Path to talond.yamltalond.yaml

Adds an MCP server definition to a skill. stdio servers use --command; sse and http servers use --url.

Terminal window
npx talonctl add-mcp --skill web-search --name brave --transport stdio \
--command node --args dist/server.js
npx talonctl add-mcp --skill docs --name public-api --transport http \
--url https://api.example.com/mcp

Usage

Terminal window
talonctl add-mcp --skill <name> --name <name> --transport <type> [--command <cmd>] [--args <args...>] [--url <url>] [--env <pairs>] [--skills-dir <path>]
OptionDescriptionDefault
--skill <name>Skill namerequired
--name <name>MCP server name inside the skillrequired
--transport <type>stdio, sse, or httprequired
--command <cmd>Command to execute for stdio transportunset
--args <args...>Command arguments for stdio transportunset
--url <url>Server URL for sse or http transportunset
--env <pairs>Comma-separated KEY=VAL pairsunset
--skills-dir <path>Skills directory overrideskills

Lists configured providers from both agentRunner and backgroundAgent.

Terminal window
npx talonctl list-providers

Usage

Terminal window
talonctl list-providers [--config <path>]
OptionDescriptionDefault
--config <path>Path to talond.yamltalond.yaml

Adds a provider to the foreground runner, background workers, or both.

Terminal window
npx talonctl add-provider --name gemini-cli --command gemini \
--context both --context-window 1000000 --default-model gemini-2.5-pro --enabled
npx talonctl add-provider --name codex-cli --command codex \
--context agent-runner --context-enabled true --trigger-metric cache_read_input_tokens \
--threshold-ratio 0.8 --recent-message-count 10 --summarizer session-summarizer

Usage

Terminal window
talonctl add-provider --name <name> --command <cmd> [--context <ctx>] [--context-window <tokens>] [--context-enabled <enabled>] [--trigger-metric <metric>] [--threshold-ratio <ratio>] [--recent-message-count <count>] [--summarizer <name>] [--enabled] [--default-model <model>] [--config <path>]
OptionDescriptionDefault
--name <name>Provider namerequired
--command <cmd>CLI binary pathrequired
--context <ctx>Target context: agent-runner, background, or bothboth
--context-window <tokens>Context window size in tokens200000
--context-enabled <enabled>Enable context management for agent-runner providersunset
--trigger-metric <metric>Rotation metric: input_tokens, cache_read_input_tokens, cache_creation_input_tokens, or cache_total_input_tokensunset
--threshold-ratio <ratio>Rotation threshold0.5
--recent-message-count <count>Verbatim messages kept after rotation10
--summarizer <name>Sub-agent used for session summariessession-summarizer
--enabledEnable the provider immediatelyoff
--default-model <model>Set options.defaultModelunset
--config <path>Path to talond.yamltalond.yaml

Switches the default provider for either foreground runs or background workers.

Terminal window
npx talonctl set-default-provider --name codex-cli --context agent-runner
npx talonctl set-default-provider --name claude-code --context background

Usage

Terminal window
talonctl set-default-provider --name <name> --context <ctx> [--config <path>]
OptionDescriptionDefault
--name <name>Provider name to promoterequired
--context <ctx>agent-runner or backgroundrequired
--config <path>Path to talond.yamltalond.yaml

Runs a minimal provider smoke test to confirm the binary is installed, authenticated, and usable.

Terminal window
npx talonctl test-provider --name claude-code
npx talonctl test-provider --name codex-cli --context background

Usage

Terminal window
talonctl test-provider --name <name> [--context <ctx>] [--config <path>]
OptionDescriptionDefault
--name <name>Provider name to testrequired
--context <ctx>agent-runner or backgroundagent-runner
--config <path>Path to talond.yamltalond.yaml

Lists persisted threads for a channel, including connector-specific external IDs, latest provider, and latest activity.

Terminal window
npx talonctl list-threads --channel my-telegram

Usage

Terminal window
talonctl list-threads --channel <name> [--config <path>]
OptionDescriptionDefault
--channel <name>Channel namerequired
--config <path>Path to talond.yamltalond.yaml

Clears sticky provider affinity so the next message goes through normal provider selection again. You can target one thread with --external-id or wipe an entire channel with --all.

Terminal window
npx talonctl reset-provider-affinity --channel my-telegram --external-id 123456789
npx talonctl reset-provider-affinity --channel slack-engineer --all --yes

Usage

Terminal window
talonctl reset-provider-affinity --channel <name> (--external-id <id> | --all) [--yes] [--config <path>]
OptionDescriptionDefault
--channel <name>Channel namerequired
--external-id <id>One thread’s connector-specific external IDunset
--allReset every thread on the channeloff
--yesSkip confirmationoff
--config <path>Path to talond.yamltalond.yaml

Connector-specific external IDs:

ConnectorExternal ID format
Telegramchat_id
Slack<channelId>:<thread_ts> or <channelId>
TerminalclientId
WhatsAppsender wa_id
Email<address>:<messageId>

Creates a durable cron-based scheduled task for a persona.

Terminal window
npx talonctl add-schedule --persona assistant --channel my-telegram \
--cron "0 8 * * 1-5" --label "Morning briefing" \
--prompt "Review my tasks and send a short morning briefing."

Usage

Terminal window
talonctl add-schedule --persona <name> --channel <name> --cron <expr> --label <label> --prompt <prompt> [--prompt-file <path>] [--config <path>]
OptionDescriptionDefault
--persona <name>Persona that owns the schedulerequired
--channel <name>Channel used for the scheduled threadrequired
--cron <expr>Five-field cron expressionrequired
--label <label>Human-readable labelrequired
--prompt <prompt>Prompt text sent on each runrequired
--prompt-file <path>Load the schedule’s system prompt from a file—
--config <path>Path to talond.yamltalond.yaml

Lists all schedules or filters by persona.

Terminal window
npx talonctl list-schedules
npx talonctl list-schedules --persona assistant

Usage

Terminal window
talonctl list-schedules [--persona <name>] [--config <path>]
OptionDescriptionDefault
--persona <name>Filter by persona nameall personas
--config <path>Path to talond.yamltalond.yaml

Deletes a scheduled task permanently. This command takes the schedule ID as a positional argument.

Terminal window
npx talonctl remove-schedule abc123

Usage

Terminal window
talonctl remove-schedule <schedule-id> [--config <path>]
OptionDescriptionDefault
--config <path>Path to talond.yamltalond.yaml

Runs a sub-agent directly without a daemon. This is useful for testing prompt design and JSON contracts in isolation.

Terminal window
npx talonctl run-subagent --name session-summarizer \
--input '{"transcript":"User: Hi\nAssistant: Hello!"}'
npx talonctl run-subagent --name memory-retriever \
--input '{"query":"deployment steps"}'

Usage

Terminal window
talonctl run-subagent --name <name> --input <json> [--config <path>] [--subagents-dir <path>]
OptionDescriptionDefault
--name <name>Sub-agent namerequired
--input <json>JSON payload passed to the sub-agentrequired
--config <path>Path to talond.yamltalond.yaml
--subagents-dir <path>Override the sub-agents directoryunset

Lists A2A tasks with optional filters.

Terminal window
npx talonctl a2a list
npx talonctl a2a list --status working --target software-engineer --limit 50

Usage

Terminal window
talonctl a2a list [--status <state>] [--target <persona>] [--limit <n>] [--config <path>]
OptionDescriptionDefault
--status <state>Filter by submitted, working, completed, failed, or canceledall states
--target <persona>Filter by target personaall personas
--limit <n>Maximum number of rows to show20
--config <path>Path to talond.yamltalond.yaml

Submits a manual A2A task to another persona for testing or ops work.

Terminal window
npx talonctl a2a send software-engineer "Review the latest PR"
npx talonctl a2a send software-engineer "Run the smoke tests" --source james

Usage

Terminal window
talonctl a2a send <target-persona> <message> [--source <persona>] [--config <path>]
OptionDescriptionDefault
--source <persona>Source persona name recorded on the taskcli
--config <path>Path to talond.yamltalond.yaml