Work in progress, built in the open

Your work. Everywhere.

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.

start a task in rival to fix the login bugCtrl Shift J

heard “rival” Rivvl, on Desktop

DesktopRivvl · RunningBuild boxPortfolio · OnlineLaptopPortfolio · OnlinePhoneYou, speaking
  • DesktopRivvlRunning
  • LaptopPortfolioOnline
  • Build boxPortfolioOnline
An illustration. The routing in it is real output from the first demo below.

What it is

An operator, not a chat window.

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.

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.

Many machines, one assistant

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.

Desktop use that asks first

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

See it decide.

These are real outputs. Each one comes from a script in the repository that runs with no microphone, no account, and no server.

A misheard project name does not send work to the wrong repository.

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.

  1. You say“start a task in Rivvl to fix the login bug”

    Exact match

    Routes to Rivvl on desktop

    Heard “Rivvl”. Nothing to correct.

  2. You say“start a task in rival to fix the login bug”

    Near match

    Routes to Rivvl on desktop

    Heard “rival”. Sends “start a task in Rivvl to fix the login bug”.

  3. You say“I need you to check out Zivil.”

    Asks first

    “Did you mean Rivvl?”

    Heard “Zivil”. Will not act until you confirm.

  4. You say“Open Portfolio.”

    Asks which

    “More than one project matches “Portfolio”. Which one did you mean?”

    Portfolio on laptop, or Portfolio on build-box.

Circe can only type words you said.

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

    May typeweathersearch for weather in Ahmedabadsearch for weather in31 spans, all from the goal
    Done whenThe screen shows the result the goal names.
  • Goalclick the Save button

    May typeclick the Save buttonclick the Saveclick10 spans, all from the goal
    Done when“the Save button” was activated once.
  • Goalsave the notes as groceries.txt

    May typesave the notes as groceries.txtsave the notes assave the notes15 spans, all from the goal
    Done whenThere is evidence the file or content was saved.

A written report becomes something worth hearing.

An 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.

The agent wrote
## 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.
Circe says

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.…

Run them yourself

Node 24 and Vite+. The full output and source are in demos/.

git clone https://github.com/Absterrg0/circe && cd circe
vp i
node demos/01-ground-a-spoken-request.ts

Listening…

Talk to it the way you would brief a colleague.

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.

  • “What’s running?”
  • “On Desktop, fix the login bug.”
  • “Open the calculator and add 12 and 30.”

How it works

The model normalizes language. It never holds the wheel.

Every request takes the same path, and every step on it is typed and inspectable in the repository.

  1. 01

    You speak or type

    From the desktop orb, the hotkey, or your phone.

  2. 02

    Grounded

    Names are resolved against real machine, project, agent, and task catalogs.

  3. 03

    A closed plan

    The deterministic Director returns typed commands. Nothing free-form is dispatched.

  4. 04

    Runs where it lives

    The machine that owns the project runs your own coding agent on it.

  5. 05

    Reported back

    On screen in full, and aloud as a short summary.

Directs the agents you already have

  • Claude Code
  • Codex
  • Cursor
  • Grok Build
  • OpenCode
  • Antigravity

Status

Where it stands, plainly.

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.

Coding-agent foundation

Orchestration, providers, Git, terminals, approvals. Inherited from T3 Code.

Solid

Grounded voice routing

Against real project and task catalogs. Covered by the demos and their tests.

Works

Multi-machine pairing and remote control

Local network, Tailscale, SSH, and relay routes to the same machine.

Works

Live spoken conversation

Needs a Circe Mesh link or your own OpenAI API key.

Rough

Desktop and browser use

Fine for simple goals. Longer goals fail too often for a product.

Rough

Cross-machine plans

“Get the file from laptop A, use it on laptop B.” The workflow engine the idea needs.

Not built

Think. Do. Across your machines.

The code is public and MIT licensed. Read it, run the demos, or try a build and tell me where it breaks.