Voice you can trust
A spoken request is matched against the real projects, tasks, and machines you have. When a name is unclear, Circe asks. A model never invents an id or picks between two matches on its own.
Work in progress, built in the open
Circe is one assistant for all of your machines. Say what you want, and it happens on the machine that owns the work, using the coding agents you already pay for.
heard “rival” Rivvl, on Desktop
What it is
Circe sits on top of the coding agents you already use and gives you one calm way to direct them, by voice or text, across every machine you own.
A spoken request is matched against the real projects, tasks, and machines you have. When a name is unclear, Circe asks. A model never invents an id or picks between two matches on its own.
Each machine owns its projects, credentials, and history. Work runs on the machine that owns the project, or the one you name. A disconnected machine is reported, never swapped for another.
Circe can open apps, click, type, and scroll in your own signed-in apps. It repeats the goal before it touches anything, types only words you said, and reports done only when the screen shows it.
Demos
These are real outputs. Each one comes from a script in the repository that runs with no microphone, no account, and no server.
Speech recognition gets names wrong, and an assistant that guesses acts on the wrong code. Circe corrects a close mishearing, asks about a distant one, and asks which machine when two own the same name.
You say“start a task in Rivvl to fix the login bug”
Routes to Rivvl on desktop
Heard “Rivvl”. Nothing to correct.
You say“start a task in rival to fix the login bug”
Routes to Rivvl on desktop
Heard “rival”. Sends “start a task in Rivvl to fix the login bug”.
You say“I need you to check out Zivil.”
“Did you mean Rivvl?”
Heard “Zivil”. Will not act until you confirm.
You say“Open Portfolio.”
“More than one project matches “Portfolio”. Which one did you mean?”
Portfolio on laptop, or Portfolio on build-box.
On a real desktop the model never writes free text into your apps. It picks from a closed list of spans cut from your instruction, so a web page with hidden instructions cannot make it type something else. What counts as done is fixed before the first click.
Goalsearch for weather in Ahmedabad on the browser
weathersearch for weather in Ahmedabadsearch for weather in31 spans, all from the goalGoalclick the Save button
click the Save buttonclick the Saveclick10 spans, all from the goalGoalsave the notes as groceries.txt
save the notes as groceries.txtsave the notes assave the notes15 spans, all from the goalAn agent finishes with Markdown, code fences, and file paths. Reading that aloud is useless. The full report stays in the task. Speech gets whole sentences inside a budget, with the code replaced by one plain line.
## Fixed the login redirect
The callback handler dropped the `next` parameter when the session cookie was already set. I now carry it through the redirect and added a test for the signed-in case.
```ts
const next = url.searchParams.get("next") ?? "/";
return redirect(sanitizeNext(next));
```
**Checks:** 14 tests pass, typecheck clean. The change is on branch `fix/login-redirect` and is ready for review.Fixed the login redirect The callback handler dropped the next parameter when the session cookie was already set. I now carry it through the redirect and added a test for the signed-in case. The code details are waiting in your workspace. Checks: 14 tests pass, typecheck clean.…
Listening…
Press the hotkey and speak. Ask what is running, start work on a named machine, answer an agent’s question, or approve a request. Circe tells you what it did, and asks when it is not sure what you meant.
How it works
Every request takes the same path, and every step on it is typed and inspectable in the repository.
From the desktop orb, the hotkey, or your phone.
Names are resolved against real machine, project, agent, and task catalogs.
The deterministic Director returns typed commands. Nothing free-form is dispatched.
The machine that owns the project runs your own coding agent on it.
On screen in full, and aloud as a short summary.
Directs the agents you already have
Status
Circe is not a finished product. This is a prototype I am building in the open, and this is the state of each part today.
Orchestration, providers, Git, terminals, approvals. Inherited from T3 Code.
Against real project and task catalogs. Covered by the demos and their tests.
Local network, Tailscale, SSH, and relay routes to the same machine.
Needs a Circe Mesh link or your own OpenAI API key.
Fine for simple goals. Longer goals fail too often for a product.
“Get the file from laptop A, use it on laptop B.” The workflow engine the idea needs.
The code is public and MIT licensed. Read it, run the demos, or try a build and tell me where it breaks.