Skip to main content

System Agents

System Agents is the rebinding surface for the platform's built-in behaviors. The system has dozens of hooks — points where AI Expedite calls "some agent" to do something — and this tab is where you decide which agent answers each one. The default is always set, so the platform works out of the box; this tab is here for when you want a custom voice, a different model, a stricter prompt, or a workspace-specific workflow handling one of those built-in moments.

📷 Screenshot: System Agents tab with the six categories collapsed.

How hooks work

Every hook has a stable hook ID (e.g. chat.code, email.received, code.github-push) that the rest of the platform calls. When the platform fires a hook, it looks up which agent is currently bound to it for your workspace and invokes that agent. Swapping the binding takes effect immediately for the next firing — no deploy, no restart.

If you bind a custom agent and then change your mind, the hook's row keeps the workspace-supplied default visible so you can revert with one click.

Categories

The six categories group hooks by what triggers them:

Chat

Page-specific chat agents. Each AI Expedite page has its own chat surface (Home, Code, Features, Feature, Documents, Document, Usage, Agent Builder, Marketplace, Settings, Ads), and each has its own hook so you can give the chat that lives on /code a different agent than the chat on /ads — useful when an "ads chat" should know your campaign vocabulary while a "code chat" should know your repo conventions.

This is the largest category in the tab — eleven hooks today, one per page.

Code Analysis

  • code.github-push — fires when a commit lands on a connected repository's default branch. Default agent reads the diff, classifies it, and writes the entry that shows up on Code → ChangeLog.

Features

  • feature.initialize — fires when a new feature card is created on the Roadmap. Default agent reads the brief, scopes initial steps, and creates the workspace documents the feature will reference.

Diagrams

  • diagram.fix-plantuml — fires when a PlantUML diagram in a workspace document fails to render. Default agent reads the broken source plus the error, writes a corrected version, and applies it as an inline-diff on the document.

Documents

  • document.create — fires when a workspace document is created.
  • document.update — fires when a document is edited (debounced).
  • document.ai-assist — fires when a document author invokes the in-editor AI helper.

Email

  • email.received — fires on inbound mail to a connected Gmail account. Default agent reviews the email, decides whether it needs a human, and writes a summary into Inbox.
  • email.reply — fires when an author asks AI to draft a reply.
  • email.classify — fires automatically as inbound mail arrives, tags it for routing.

Rebinding a hook

Each hook row shows:

  • Hook name — the human label (e.g. Page: Code).
  • Description — what triggers the hook and what the agent is expected to do.
  • Current agent — the agent currently bound, with a small chip showing whether it's the platform default or a workspace-custom binding.
  • Edit menu — open the agent-selector dropdown. Pick from the workspace's own agents (the ones you've authored in Agent Builder) or from the root catalog (the platform-shipped ones).

Saving the new binding writes to the workspace's hook configuration in Firestore. The next time the hook fires, your chosen agent answers.

Going to the source

Each agent in the dropdown shows a small "open in builder" affordance — clicking it jumps you to Agent Builder scrolled to that agent so you can see what you're binding before you commit. This is the safest way to swap a hook: read the agent's steps and prompts first, then come back here to bind it.