runtime | string | claude-code | Must match a runtimes/<name>.yaml. |
model | string | runtime default | Runtime-specific model id. |
role_prompt | path or list of paths | — | System prompt source. A single string keeps the current behavior — the file is passed straight to the runtime. A list concatenates the files in declared order (separated by an em-dash) into state/role_prompts/<project>-<agent>.md and points the runtime at that file. Re-materialized on every render, so editing any source file flows into the agent’s prompt at the next up / reload. |
permission_mode | string | auto (headless) | Claude Code permission mode. Headless agents default to auto: a classifier lets routine work run without prompts and blocks risky actions outright, so an unattended pane never freezes on a permission dialog. attended is teamctl-specific — it marks a human-at-keyboard agent, so teamctl passes no --permission-mode and skips the PreToolUse deny hook that blocks synchronous-prompt tools (AskUserQuestion, plan mode) on headless agents. Set bypassPermissions for the old bypass-everything behavior (disposable sandboxes only); other Claude modes (plan, acceptEdits, dontAsk) pass through. Note: auto requires Claude Opus 4.6+ / Sonnet 4.6 on the Anthropic API (not Bedrock/Vertex); on other models/providers it is unavailable and Claude Code falls back. |
interfaces.telegram | map | — | Manager-only. 1:1 Telegram bot for this manager (presence implies it receives Telegram forwards and may call reply_to_user). |
autonomy | string | low_risk_only | full · low_risk_only · proposal_only. |
can_dm | list | [] = unrestricted | Short-names this agent may DM. |
can_broadcast | list | [] = unrestricted | Channel names this agent may post to. |
reports_to | string | — | Worker-only. The manager this worker answers to. |
effort | string (enum) | wrapper default | Per-agent reasoning effort: low · medium · high · xhigh · max. Renders as EFFORT=<value> and is passed to the runtime (e.g. claude --effort <value>). Strict: an unknown value fails validation rather than silently falling back. |
ultracode | bool | false | Per-agent ultracode opt-in. When true, emits "ultracode": true into the agent’s rendered Claude Code settings (the file passed via --settings); the resulting session behavior is Claude Code’s. A Claude Code setting, distinct from the effort: row above. Claude Code agents only; on other runtimes it renders nothing and logs a warning. |
on_rate_limit | list | global default | Overrides the global rate-limit hook chain for this agent. Each entry is the name of a hook defined under the global rate_limits.hooks. Unset falls back to the global rate_limits.default_on_hit chain (which is [wait] when empty). |
display_name | string | agent id | Human-friendly label the TUI shows (roster, detail header, mailbox attribution, statusline) in place of the agent id. Non-empty, ≤64 chars. Render-time only: the agent id stays canonical for routing, tmux session names, and YAML cross-refs (can_dm, can_broadcast, reports_to). |
hooks | list | [] | Per-agent Claude Code hooks, merged additively into the agent’s rendered settings.json (the built-in interactive-prompt deny hook keeps precedence). Each entry: { event, matcher?, command }, where command is a compose-root-relative path resolved like role_prompt. Claude Code agents only; on other runtimes it renders nothing and logs a warning. |
mcps | map | {} | Per-agent MCP servers, merged alongside the built-in team mailbox server (a declared server named team is rejected). Keyed by server name; each value: { command, args?, env? }. Runtime-agnostic: rendered for any runtime whose descriptor sets supports_mcp, skipped with a warning otherwise. |
subagents | list | [] | Per-agent Claude Code sub-agents. Each entry is a compose-root-relative path to a sub-agent markdown file (frontmatter name / description / optional tools / model; body becomes its system prompt). Passed via Claude Code’s --agents, additively on top of the project .claude/agents/. Claude Code agents only; on other runtimes it renders nothing and logs a warning. |
skills | list | [] | Per-agent Claude Code skills. Each entry is a compose-root-relative path to a skill directory (the folder holding SKILL.md). Materialized into a per-agent scope dir and exposed via claude --add-dir, additively on top of the project .claude/skills/. Claude Code agents only; on other runtimes it renders nothing and logs a warning. |
interfaces.telegram.bot_token_env | string | — | Env var holding the BotFather token. Populated by teamctl bot setup. |
interfaces.telegram.chat_ids_env | string | — | Env var holding a comma-separated allow-list of chat ids. |