Conversations & approvals

Conversations & approvals

Cabinet's safety story is one rule: no agent acts on another agent's behalf without your approval.

When a lead decides the researcher should brief a competitor, or the editor should polish a draft, or the marketer should run a weekly post batch, that decision becomes a proposal in the Approval Queue. You see who proposed what, to whom, with which model and effort. You approve, change settings inline, or reject.

What can be proposed

Three action types. Same approval surface for all of them.

ActionWhat it createsDefault approval
LAUNCH_TASKA task in the kanban Inboxrequired
SCHEDULE_JOBA new YAML in .jobs/required
SCHEDULE_TASKA one-off task at a future timerequired

You can auto-approve low-impact proposals (e.g., LinkedIn post drafts under $0.10) by setting policy in .cabinet:

approvals:
  auto:
    - kind: LAUNCH_TASK
      maxCostUsd: 0.10
      fromAgent: linkedin-operator
      toAgent: copywriter

Anything outside policy still queues. There's no global "trust this agent forever" toggle, on purpose.

What you see in the queue

For each proposal:

  • Kind — LAUNCH_TASK / SCHEDULE_JOB / SCHEDULE_TASK
  • From → To — proposing agent and target agent
  • Title + detail — what they want to run
  • Model — defaults to the target agent's model, but editable inline
  • Effort — low / medium / high, editable
  • Schedule (for SCHEDULE_*) — cron string, editable
  • Estimated cost — token estimate × current model price

You can change any of those before approving. A common move: a lead suggests Opus + high effort for a quick task; you downgrade to Sonnet + medium and approve.

Why this matters

Most agent platforms either:

  1. Run everything autonomously and let you find out later, or
  2. Make every action a chat turn you have to babysit.

Cabinet sits in the middle. Agents propose, you approve. The lead can plan a whole week's work in one turn, you scan the queue in 30 seconds and ship it, and the team executes without further interruption. The proposal queue is the seam where human judgment lives.

Where conversations live

Every approval (and every chat with an agent) is a durable conversation stored under .chat/. You can:

  • Re-read any past chat — they're plain text on disk.
  • Search them with ⌘K.
  • Reference a past chat from a new prompt with @chat:slug.
  • Convert a chat into a routine if you find yourself re-running it.

.chat/ is git-ignored by default — chats can be long and noisy — but you can opt in per-cabinet if you want them version-tracked.

Manual conversations

You can also chat with an agent directly. Click their avatar in the AI team panel:

  • Cmd+Shift+A opens the agent panel for the current page (the agent reads the page as context).
  • The agent panel is a normal chat, but @-mentions can pull in any page or folder as context.
  • If the agent decides the conversation should turn into work, they propose a task — same approval flow.

Manual chats don't auto-write to the cabinet. You decide whether the conversation becomes a page (use /save) or stays in .chat/.

Read on