Skip to content
Kadro
02Docs · Teams

Kadro Teams — the multi-agent cockpit

Last updated · 2026-05-16

A Kadro Team is a named collection of agents working a shared mission against one repository. Each agent owns a role, a provider/model pairing, and an isolated git worktree, and the dashboard gives the operator one surface to watch all of them at once. This page documents what the cockpit actually renders today — not what is planned.

For the broader product overview, see the docs landing. For Settings (themes, default shell, telemetry consent, keybindings), see /docs/settings.

Subscription access

Kadro ADE is gated by an active Pro subscription, resolved at app launch by the SubscriptionGate component. If the app cannot verify Pro access, it shows a subscription gate with options to open the pricing page, retry sync, or sign out.

The sidebar exposes a two-segment toggle between Workspaces and Teams modes. The Teams segment surfaces existing Teams, the creation wizard entry, and the route into the cockpit dashboard.

What a Team contains

The frontend store (useTeamStore) keeps each Team as an in-memory snapshot keyed by team_id, with three primary collections:

  • Agents — per-agent snapshots with agent_id, a current AgentStatus (working, idle, silent, and so on), the timestamp of the last MCP tool-call heartbeat, and a short activity tail of three recent snippets.
  • Invocations — live agent-to-agent calls, each with an id, caller, callee, and status. These drive the arrow overlay drawn between chips on the Now panel.
  • Assignments — lifecycle snapshots keyed by invocation id (created, delivered, completed, failed, timed_out), driven by typed Assignment*events so the dashboard updates within roughly 100 ms instead of waiting for the two-second notebook poll.

A separate notebook store backs the append-only NDJSON mission log (decisions, findings, lifecycle events, handoffs, and chat), and a task projection store reconstructs the work plan from notebook envelopes.

The cockpit layout

The Team dashboard is one screen with several regions rather than separate routes:

  • A status bar across the top with mission identity, an elapsed timer, the Dashboard/Terminals/Summary tab strip, an End run action, and a View mission button.
  • A cockpit grid with three panels — Plan, Now, and Talk — driven by CockpitTabs at the smaller container-query breakpoints.
  • A focus toolbar that appears above the grid when a single agent is focused, showing the agent id, presence status, current task envelope status, and recovery actions (Nudge, Reset) when the agent is stuck.
  • A command composer docked below the grid (only while the stop controller is idle).

Plan panel

A grouped task list built from the task projection. Groups are In progress (pinned), In review, Blocked, Queued, and Done. Selecting a task opens a detail pane with the full envelope, references, and ownership.

Now panel

Agents bucketed by live status. Acting agents render as full cards via ActingCardList — role, provider, current task id, and a status dot that mixes presence tint with envelope status. On deck and Standby agents render as compact chips in OnDeckStrip. Clicking any card or chip focuses that agent, which dims the rest of the cockpit and reveals the focus toolbar. A RecentFeed tail of the notebook sits beneath the rosters.

An overlay (InvocationArrowOverlay) draws live arrows between chips when one agent invokes another, anchored to each chip’s DOM node through a ref map maintained by the dashboard.

Talk panel

The mission timeline. Two tabs: Chat (threaded chat and operator entries) and Activity (the wider notebook including lifecycle, findings, decisions, and handoffs). Sticky-to-bottom scrolling with a Load older affordance when the notebook stream has more entries available before the current window.

The command composer

The Variant C composer is a single rounded shell with three regions, left to right: a target chip, a text input, and a circular send button. A floating autocomplete popover anchors above the shell.

  • Target chip. Mirrors focusedAgentId: shows the focused agent when one is selected and falls back to a team-wide indicator otherwise. Clicking the chip clears focus and returns the composer to broadcast mode.
  • Mentions. Typing @ at a word boundary opens the autocomplete with up to six suggestions filtered against the team roster. / move the highlight, Enter or Tab accepts the suggestion (instead of submitting), and Esc dismisses the popover without losing the typed text. The composer always re-parses a leading @id on submit, so a manually-typed mention also routes as a direct message.
  • Routing. With no focus and no leading mention, the input broadcasts to the team. With focus or a leading mention, it sends a direct message to that single agent.

Composer keybindings

  • ⌘L — focus the composer input from anywhere in the cockpit.
  • Enter — send. When the autocomplete is open, Enter accepts the highlighted suggestion instead.
  • ⌘↵ — always sends, even with the autocomplete open.
  • Esc — clears agent focus when an agent is focused; otherwise dismisses the autocomplete popover.

Slash commands

The composer reserves a slash-command namespace. Today, the only fully wired command is /stop, which arms the stop controller for the current mission (the same path the status bar’s End-run button uses). /status, /replan, and /revieware parsed and reserved but return a “not wired yet” error from the submit handler. Treat these as placeholders, not features.

Invocations and stuck recovery

Per-agent presence walks working → idle → silent on a short decay tick driven by the dashboard. When the focused agent reaches a stuck state, the focus toolbar offers two operator actions that round-trip through the Tauri client:

  • Nudge — sends a presence-aware nudge to the agent without resetting its session.
  • Reset— resets the agent’s session state for the current mission.

Both actions are only available when the team lifecycle is running and the stop controller is idle. Errors surface inline in the toolbar.

Terminals and summary tabs

The status bar exposes two siblings of the dashboard:

  • Terminals — direct PTY attach to any agent for read-along access to its raw CLI session.
  • Summary— the mission summary view: read-only diffs against the base branch, derived from git log and numstat against each agent’s worktree.

See also

  • /docs/settings — the six Settings tabs (General, Account, Appearance, Providers, Keybindings, Privacy).
  • /docs — install, workspaces, providers, the roadmap, and the FAQ.
  • Agents belong in worktrees — the design argument behind isolated agent worktrees.