Skip to content

Steward

The Steward is the chat surface in Workspace Control’s last tab. Underneath it’s an agent (workspace-control:default) that has the cross-app grants you’ve approved, lives context on every other app + agent + heartbeat in your tenant, and can both reason about and act on your workspace.

If you’ve used a system like Claude Managed Agents or OpenAI’s Assistants API, the Steward is similar in shape. The difference is it knows your whole tenant, not just one product, and the operations it can perform are gated by your wires & grants.

Three categories, increasing power:

Pure reasoning, no tools. Examples:

  • “What apps do I have installed?”
  • “Which heartbeats are failing right now?”
  • “Why might X-Monitor be erroring?”
  • “How many commitments do I have open?”

The Steward answers from its live workspace context. No grants required.

Steward can suggest concrete actions you should take.

  • “What should I do about the failing KPI tracker?” → “Inspect last_error in the Audit log; if it’s an OAuth issue, re-authenticate Office Assistant; if it’s the X-API rate limit, increase the heartbeat interval.”

  • “Should I install Sales-CRM?” → analyzes your installed apps + asks clarifying questions

These responses are reasoning, not tool calls. You decide what to act on.

When you have bilateral grants in place, the Steward can directly invoke agents in other apps. Examples:

  • “Tell Marketing’s CMO to draft 2 X posts about the launch” → If you’ve granted workspace-control → marketing/cmo, the Steward calls marketing/cmo with that prompt and shows you the reply.

  • “Ask Sales’ BDR for the Acme deal status” → Same shape with the sales grant.

  • “Pause Office Assistant’s morning briefing tomorrow” → Steward updates the heartbeat config directly.

When the Steward executes a tool call, it surfaces a tool trace inline in the chat:

✓ marketing/cmo
"Draft 2 X posts about the launch"
> Ok. Drafted 2 posts highlighting the multi-LLM angle. Both
queued for approval in your Approvals queue.

The Steward’s reply text is separate from the tool trace — first you see what it called and what came back, then its summary.

If you ask the Steward to do something and the right grant doesn’t exist, the Steward doesn’t fail silently. It tells you exactly what to set up:

I’d love to do that, but there’s no grant from workspace-control to marketing that includes cmo. Create one in Wires & Grants (allow agents: cmo) and ask me again.

This is intentional — the Steward never makes cross-app calls behind your back. Every grant is your security decision.

Internally the Steward runs a bounded tool-use loop: each user message triggers up to 5 rounds of LLM-tool-result iteration. After that the Steward must produce a text response (no more tool calls allowed in the final round).

5 rounds is plenty for typical use (“delegate, get answer, summarize” = 2 rounds). The cap exists to bound cost on a single user message — you’ll never see the Steward burn dozens of LLM calls on one question.

The Steward chat is stateless on the server side. Your client (the Workspace Control UI) keeps the message buffer in memory and replays it on each call (capped at the most recent 20 messages). When you refresh the page, the conversation resets.

Why: the Steward is a control surface, not a journal. Long-term conversation history would (a) bloat tokens on every call and (b) let mistakes from a stale chat session affect new operations. If you want a record of agent decisions, look at the Group rooms or the Audit log.

The Clear button in the chat resets the buffer immediately.

The Steward authenticates as you (the tenant user signed in). When it executes a cross-app call, the audit log records:

  • user_id = your user
  • agent_id = workspace-control:default (the Steward agent)
  • app_id = the callee app (cost attribution + grants check)

If you delegate something to the Steward and someone else asks “who told the marketing app to draft those posts?”, the audit log points to you + the Steward + the time.

A typical session:

  1. Open Workspace Control → Steward.
  2. “Daily briefing — what’s running, what’s failing, what’s open?”
  3. Steward summarizes. You spot an issue.
  4. “Why is the email-monitor heartbeat failing?”
  5. Steward checks the audit log entries, explains.
  6. “Pause it for the day, I’ll re-auth tomorrow.”
  7. Steward updates the heartbeat status. Tool-trace shows the change.
  8. “OK. Now ask Marketing’s CMO to push 2 extra posts today since the launch is tomorrow.”
  9. Steward executes the cross-app call (grant exists). Tool-trace shows what came back.
  10. Done.
  • Per-message tool rounds: 5
  • Per-tool prompt size: 20 000 chars
  • Conversation buffer (client-side): 20 messages
  • Steward agent’s tools_allowed: the cross-app grants you’ve approved (deny-by-default for everything else)
  • The Steward cannot create grants on its own — that’s your job in the Wires & Grants editor
  • Wires & grants — how to set up the grants the Steward uses
  • Workspace Control — the broader UI tour
  • For developers: the Steward’s tool definition lives in the workspace-control SDK app’s chat handler — see the source under examples/workspace-control/.