Cortex and Pulse¶
Cortex is the autonomous cognition engine: the work an agent does between conversations. Distilling learnings into memory, tidying its notes and workspace, refining its skills, expanding ideas, and generating suggestions. Watch it in the Cortex tab.
It runs on two model tiers — a fast_model for light passes and a deep_model
for heavy ones — with max_deep_runs_per_day (default 12) as the cost ceiling.
intensity (relaxed by default, or balanced / aggressive) sets the
overall pace.
Cortex is off until you turn it on. On a new deployment the Cortex
engine row in Cortex → Autonomy reads Off in the "All agents" column, so
no agent does background cognition: no scheduled phases, no distilling of
conversations into memory, and no cortex_* tools in chat (an agent can still
read and write its memory when you ask it to). Switch the "All agents" column
on to start it for every agent, at the relaxed cadence unless you pick another;
or leave the fleet off and set one agent's own column to On to pilot it there
first. An agent that was set Off on its own stays off either way.
Settings resolve with one rule in both directions: the agent wins when it has an opinion, the deployment applies when it doesn't. Every per-agent toggle is three-state, including the master switch, so "off for the fleet, on for one agent" works as well as the reverse.
When a background run fails. A run that a provider refuses with a
temporary condition — a rate limit, an overloaded model — is not lost: the
scheduler runs that phase again about 15 minutes later with a fresh start, and
once more an hour after that if needed, before waiting for the next scheduled
time. Runs across the deployment also never all start in the same minute (each
agent's scheduled minute is spread out) and no more than worker_max_concurrency
of them talk to a model at once, so the deployment does not bring a rate limit on
itself. A failure the deployment can heal on its own reaches the notification
bell and the Pulse Ops lane only once the same run has failed twice in a
row; a failure that needs you — an expired sign-in, a locked vault, an empty
balance — rings immediately, with the fix-it button. A success clears the
streak.
Where intensity and max_deep_runs_per_day govern how many runs happen,
two settings bound what a single run may spend: the Step budget (how many
internal steps of thinking and tool use it may take, default 100 ≈ 25 rounds)
and the Time limit (wall-clock seconds, default 1200). A run that exceeds
either stops and its work for that run is discarded. Both follow the same
two-tier rule as everything else and are edited side by side in Cortex →
Autonomy — the "All agents" column for the whole deployment, the per-agent
column for one, Inherit to follow the deployment. Raise them together: a
larger step budget behind the old time limit just fails on time instead. The
Step budget is the recursion limit — there is no second control by that name,
and none for ordinary chat, which is not bounded this way. Each field's help text
names the config key it writes, so a value you have read about in a config file
can be traced back to the row that sets it.
Phases & schedule, the second part of the settings card, is one row per phase: what it is, when it next runs, how the last run went, the same two columns of on/off, and Log / Run now. On a phone each phase becomes a small block instead of a line — the phase's full name, then its schedule, then the two scopes each behind an "All agents" / agent-name label, then the two buttons — so it is always clear which phase you are about to run and which scope a switch belongs to.
Background work has no one watching it, so a run that fails, times out or needs setup raises a notification — the sidebar bell and the Overview Notifications section — naming the agent, the run and the fix, and clearing itself when that run next succeeds. You do not have to open Cortex to find out something went wrong. Runs stopped by a guard rail you configured (over budget, nested too deep) stay quiet: they are working as intended.
Talking about any of it happens in Chat. Every button in Cortex that asks
the agent to do something — "Chat" on a Pulse card, an idea, brainstorm,
prototype or project; "Explore more" on an idea, brainstorm or prototype; "Send
to Agent" on a prototype; "Fix with agent" on a self-check finding — takes you
to the Chat tab on that item's own conversation, switching to the agent the item
belongs to. The first time, the message box arrives pre-filled, not sent: a
short framing that says what you are there to do ("The user wants to explore
more about this idea …") and gives the agent the full workspace path to the
item's files, ending in User: so you type what you actually want and press
Send yourself. Nothing goes to the agent until you do. Each item keeps one
conversation, so coming back opens its history with an empty message box and
continues where you left off rather than starting over; it is a normal chat,
with attachments, the model override, tool approvals and the full history. The
conversation carries a violet CORTEX badge in your conversation list so you
can find it later. The same hand-off works from the simple shell's Cortex page.
Pulse is the output you actually see: short, proactive suggestions surfaced
at the start of a session, optionally pushed to channels or emailed as a daily
digest. quiet_hours_start / quiet_hours_end keep it from interrupting, and
the per-session and per-day caps keep it from becoming noise.