Skip to main content
Routing controls which mode, harness (provider + model), and reasoning effort a task starts with. You configure it as a table of configs on the Routing settings page. The first message of a task is matched against your configs and routed to the one that applies.

Configs

Each config has four columns:
ColumnWhat it sets
TriggerThe keyword that selects this config (e.g. ultra).
Modeagent (start working), plan (plan first), goal (track a goal), or ask (answer read-only, no code edits).
HarnessThe provider + model the task runs on (e.g. Codex GPT 5.5).
EffortReasoning effort: low, medium, high, xhigh (+ ultracode for Claude Code).

The default config

Every workspace has an undeletable default config. It applies to any task that doesn’t match another trigger. New workspaces default to agent mode, Codex GPT 5.5, medium effort. Edit this row to change the default model and effort for the whole workspace.

Custom configs

Add a config, give it a trigger, and pick its mode / harness / effort. Starting a task with that trigger routes to the config — and the trigger is removed from the message before the agent sees it. For example, a config with the trigger ultra:
@twill /ultra fix the failing test
runs the ultra config (its harness, effort, and mode) on the request fix the failing test.

How triggers fire per integration

Triggers fire differently depending on the integration:
IntegrationHow a config is selected
Slack, Notion, AsanaA /trigger in the message/comment text.
GitHubA /trigger in the issue/comment text, or an issue label matching the trigger.
LinearAn issue label matching the trigger.
In-app composerPick the mode, model, and effort directly.
Routing applies to the first message of a task. Follow-ups continue on the task’s existing harness.