Skip to content

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.