Cyrus Missions · for VS Code and Cursor
Hand the work to the agents you already have.
One plans. You approve. One builds, in checked rounds. You review the result — in the editor you already use.
Works with Claude Code · Cursor Agent · OpenAI Codex CLI · Gemini CLI · GitHub Copilot CLI · Aider · opencode · Kimi CLI. Cyrus brings no model of its own.
describe the work
Add a farewell(name) function to greet.mjs that returns the text Goodbye, followed by the name, and add greet.test.mjs with node:test tests for greet and farewell.
export function greet(name) { return "Hello, " + name;}
Cursor Agent, the usual doer (the agent that builds), is not signed in on this computer — this mission uses Claude Code.
plans it
Mission brief: add farewell + first test file to hello-app
A two-file change in a 4-line project. … There is no package.json, no test runner, no existing test file. So this mission is really two things: a trivial sibling function, and the project’s first test file.
- Add
export function farewell(name)togreet.mjsreturning"Goodbye, " + name— mirroringgreet’s existing style … Don’t rewritegreet. - Add
greet.test.mjsimporting both from./greet.mjs, usingnode:test+node:assert… with at least one assertion per function on the exact output string.
Done means: node --test in the project directory passes with both tests running and visibly reporting (not zero tests found, not a silent pass).
Out of scope: a package.json / test npm script, input validation or error handling in either function, … a test framework (vitest/jest), CI config, README updates, touching anything outside these two files.
Scope, honestly: minutes, one iteration.
approve the plan
Nothing has been built. The plan is ready and the mission is idle: it waits for you, however long that takes.
In the editor this is the button under the plan, beside Edit brief and Regenerate. The replay waits for your press too.
builds it
round 1 · 7 tool calls · 35 s- ✓Readgreet.mjs
- ✓PowerShellGet-ChildItem -Force | Select-Object Name, Mode
- ✓Editgreet.mjs
- ✓Writegreet.test.mjs
- ✗PowerShellnode --version; node --test
- ✗PowerShellnode --test
- ✓Bashnode --test
export function greet(name) { return "Hello, " + name;} export function farewell(name) { return "Goodbye, " + name;}
import { test } from "node:test";import assert from "node:assert";import { greet, farewell } from "./greet.mjs"; test("greet returns a greeting with the name", () => { assert.strictEqual(greet("Ada"), "Hello, Ada");}); test("farewell returns a farewell with the name", () => { assert.strictEqual(farewell("Ada"), "Goodbye, Ada");});
✔ greet returns a greeting with the name (1.5542ms)✔ farewell returns a farewell with the name (0.3572ms)ℹ tests 2ℹ pass 2ℹ fail 0
review the result
greet.mjs:5-7 adds farewell exactly mirroring greet — named export, string concatenation, "Goodbye, " + name, comma-space, no trailing punctuation, and greet.mjs:1-3 is untouched. greet.test.mjs imports both from ./greet.mjs with node:test + node:assert and one strictEqual per function on the exact strings …
I couldn’t re-run node --test myself (the command needs approval in my environment), but the doer’s run shows in the tool log as a real passing Bash invocation, and I verified both files directly.
node --test output was not independently reproduced during review — only the doer’s logged run attests to it.The summary says what it rests on — and what it does not. Then it is yours: accept it, or say what to fix and the next round starts.
Every line is from the mission’s own record (2026-10-11-task-3b07): its goal, the plan the agent wrote, its tool log, the check’s output, the review and the summary. Paths are shortened to file names.
One agent is enough
Cyrus brings no model of its own. One coding agent on your computer, signed in, can plan and build. With two, one reviews the other.
Which agentsThe plan waits for you
An agent writes a plan first. Nothing is built before you approve it, and a mission never starts or continues by itself.
How a mission runsEvery round is checked
The build goes in rounds. Cyrus runs the checks itself after each one, an agent reviews it, and the summary says what it rests on.
What it does on its ownThree steps to a first result
Each step ticks itself when Cyrus finds it done.
A “Get started with Cyrus” page opens once after you install, and the Control Center, the Missions view and an empty mission panel all show the same step — with the one button that is next.
-
Get an agent ready
One coding agent, installed and signed in, is enough. Setup shows each agent on your computer as it was found, with the exact command for whatever is missing.
-
Choose a project
Any folder you want work done in — in the editor, the folder open in the window. The Control Center finds the folders your projects are in.
-
Start your first mission
Describe a small change, the way you would brief a colleague. Read the plan, approve it with Run, review the result.
What you set up stays, as settings: which agent plans and which builds, the folders Cyrus looks in, and everything optional are boxes in Setup — to change any time.
How a mission runs
Five things happen. Three of them are yours.
The mission above is these five, once. A larger one repeats the fourth: the agent builds a round, Cyrus runs the checks, an agent reviews it, and the next round starts from what is still open.
- Youdescribe the work
- An agentplans it
- Youapprove the plan
- An agentbuilds itin rounds, each one checked
- Youreview the result
A plan you can read
The agent writes what it understood, what it will do, what “done” means and what is out of scope — before anything is touched. Edit it, or have it written again.
Checks Cyrus runs itself
After a round, Cyrus runs the project’s own checks in its own environment. A check that could not run is told apart from one that failed.
A history you can go back to
Every round is saved on a git branch of its own, cyrus/<mission>, which is never pushed. Plans, checklists and summaries are plain files in the project.
A look around
The Control Center, and what is one step in from it.
Every project on your computer in one place. These are renders of the product’s own pages; the projects and people in them are demo data.
Real render · demo data Every project, every piece of work, on one board.
Your to-dos and what came in first; then every mission in the column it has reached — planning, your approval, building, your review, done — each with its project’s mark. In an editor tab, or in a window of its own.
Real render · demo data Three steps, one button at a time.
Each step ticks itself when Cyrus finds it done on your computer. What you set up stays, as settings.
Real render · demo data One next step — and a box to answer it.
What it asks you or what it did for you, how it was checked, how to try it. The rest of its story is folded until you want it; every round is kept on a git branch of its own, which is never pushed.
Real render · demo data A chat that knows your projects, missions and tasks.
Ask what to do first or why a mission stopped. What it proposes is a card with one button; nothing is created until you press it.
Real render · demo data What Cyrus needs on this computer, as it was found.
Agents, connections, where your projects live — with the exact command for whatever is missing, run only when you say so.
Which agents
The ones on your computer, on your own accounts.
Each of these can plan and can build. One can do both, or one can plan and review while another builds. Choose once for the computer, per project, or per mission — and when the chosen one cannot run, the mission moves to one that can and says so.
- Claude Code
- Cursor Agent
- OpenAI Codex CLI
- Gemini CLI
- GitHub Copilot CLI
- Aider
- opencode
- Kimi CLI
In the mission above, Cursor Agent — the usual builder — was signed out. Cyrus said so before the first word was typed, and Claude Code did both jobs.
What it costs, and what it does on its own
Said plainly, before you install it.
- Cyrus is free. The agents are not.
- Every plan, every build round and every review is a request to the agents you chose, on your subscription or API key with them.
- A mission never starts or continues by itself.
- It may pause to ask you something; only you set it going again. A window that closes mid-round leaves it “interrupted”, with Resume.
- Your first mission always waits at its plan.
- After that, in the editor, a task small enough for one sitting is built straight after its plan; anything larger waits for your approval.
- While it builds, the agent edits files and runs commands.
- In your project, without asking each time. At most 30 rounds; it stops after 3 in a row without progress.
- A summary says what it rests on.
- Which items passed a command Cyrus ran, which were accepted on reading alone, and what was not established — as in the example above.
- Cyrus has no server of its own.
- It sends nothing to its author: no telemetry, no account. Plans, checklists and summaries are plain files in your project, under
.cyrus/.
More, when you want it
None of it is needed for a first mission.
Ask Cyrus
A chat beside the Control Center. It answers in cards — a task, a mission, a whole new project with its plan — and each is a proposal until you press it.
Mail and chats
An assistant that reads the mail and the websites you choose, Microsoft Teams among them, and files what matters under its project. It only reads.
Off until you turn it onMeetings
Cyrus records a meeting on your computer when you start it, turns it into text there, and writes the minutes: decisions, who does what, what is open.
Off until you turn it on · WindowsFrom a Claude Code chat
Connected, a chat can start and follow missions: “use cyrus to add a dark mode to the settings page.”
Asked once, never assumedFrom a terminal
The same loop without an editor: cyrus run --goal "…" — and cyrus ui opens the Control Center in a window of its own.
Images, audio, video
Adapters for image, audio and video services sit beside the coding agents, for missions that make more than code.
Get it
Install the extension. The rest is found for you.
In your editor
Or type this into the editor’s Quick Open box (Ctrl+P / ⌘P):
ext install cyrus-build.cyrus-missionsIt installs its own parts when the editor starts, and uses the editor’s own copy of Node.js where the computer has none. What changed in each version.
Reading this on your phone?
Send the three steps and the two links to your inbox, and open them at your desk.
Help and reports
Something wrong, unclear, or missing?
It goes to the person who builds Cyrus. Say what happened and what you expected; leave an address if you want an answer.
Reports cannot be taken here at the moment. The extension’s pages on the Marketplace and Open VSX have a place for questions and reviews.