cma-agent · v0.27.0

You already pay for this. Stop paying for it twice.

cma-agent is a small helper for your Mac or Linux machine — or for a small cloud machine we run for you. Set it up once and your work runs through a tool you already signed into, so it comes out of the plan you already have, not a new bill counted word by word.

New to AI? Skip this and start on ours

  • Your logins stay on the machine
  • It calls us, we never call it
  • macOS and Linux
~ — cma-agent
brew install 9thdesigns/tap/cma-agent
cma-agent pair

✓ Paired with your account

cma-agent start

✓ Listening — 3 jobs at once

brew install 9thdesigns/tap/cma-agent
What it drives

Install one, or install all of them. It finds whatever is there.

You say which machine and which tool, so Cursor and Claude Code on the same laptop spend two different subscriptions. cma-agent status tells you what it found and what each one can do.

Claude Code

Claude Pro, Max or Team

claude

Edits files in real repositories

Cursor

Cursor Pro, Ultra or Teams

cursor-agent

Edits files in real repositories

Gemini CLI

Gemini Code Assist Standard or Enterprise

gemini

Edits files in real repositories

Antigravity

Free Google account, or Google AI Pro / Ultra

agy

Edits files in real repositories

Codex CLI

ChatGPT Plus, Pro, Business or Enterprise

codex

Edits files in real repositories

Grok Build

SuperGrok, SuperGrok Plus or X Premium+

grok

Edits files in real repositories

CodeWhale

DeepSeek API account, or your own models

codewhale

Edits files in real repositories

Ollama

Free — your own models, your own hardware; cloud models on your Ollama account

ollama

Answers in text only

Ollama is the odd one out, and worth understanding. It is not a subscription — it is a model already on your disk, listening on 127.0.0.1, which our servers cannot reach no matter what we do. The companion is already standing on the right computer, so it simply asks the model next door. No tunnel, no port forward, nothing exposed.

Why you'd want it

The work moves. Your logins stay put.

Four things this changes, and why each one needed a small program on your machine instead of a checkbox on ours.

Your vendor credentials never leave it

The companion doesn't read them, store them, or transmit them. Each CLI reads its own login from your OS keychain or config directory when we spawn it, exactly as it does when you run it yourself. What we store is a routing target: the machine's name, the labels you gave your logins, and which one a provider should use. There is no secret on the server side to leak.

No token is ever read Your keychain, untouched

Outbound only

The machine calls us and long-polls for work. Nothing listens, no ports open, no firewall rules to write.

Bounded by silence, not a clock

A coding turn is four seconds or forty minutes and nothing about the request tells you which. A run producing output keeps running; one that goes quiet is stopped and reported.

It works in real repositories

Point a session at a folder you shared and the turn runs inside that directory — real history, real branches, real uncommitted changes. Sessions on a linked GitHub repository each get their own git worktree off one shared clone, so two running at once have separate files and separate branches. Every path is resolved against the folders you shared and anything outside them is refused.

Nothing shared until you share it Your own git credentials

Install

Three commands. About two minutes.

You need a Configure My AI account and at least one of those tools already on the machine. We never see its login.

  1. Install the companion

    A small background process. Homebrew leads because it pulls Node in as a dependency, and the companion needs Node whether or not you have it.

    brew install 9thdesigns/tap/cma-agent
    No Homebrew? Install it with npm instead
    npm install -g https://github.com/9thdesigns/cma-agent

    Needs Node 20 or newer already installed. Homebrew installs Node for you; npm assumes it.

    You also need at least one of these on that machine:

  2. Pair it with your account

    Run this on the machine, then enter the code from Devices → Add a machine in the web app. The code is single-use and expires in ten minutes.

    cma-agent pair
  3. Leave it running

    It claims work and runs it. A Local machine provider now appears in your provider list, with one entry per login the companion can see.

    cma-agent start

    A sleeping Mac can't answer. Either stop it sleeping while on power (System Settings → Battery), or run it under caffeinate -s cma-agent start. Check what the machine can see any time with cma-agent status, and remove it later with brew uninstall cma-agent.

Or let us run the machine

No computer to leave on? A small cloud machine runs your plan.

Pick Use your own subscription → A cloud machine we run and we stand one up with the CLI and the companion installed. You sign it into your plan from any browser, once. From then on it does everything a paired laptop does — chats, code sessions, and the scheduled bots a laptop can't serve while it sleeps — and it is asleep whenever it isn't working.

Asleep when idle

It stops itself 10 minutes after its last job and wakes the moment one arrives — a message, a code session, a bot on a schedule.

About 3¢ an hour from your credits while it is awake, and nothing while it sleeps.

Signed in from anywhere

The machine hands you the vendor's own sign-in link. Open it on your phone, approve it, paste back the code if it asks for one. The credential is written on the machine and stays there.

Claude Code · Codex CLI · Cursor · Grok Build · Antigravity

Kept up to date

It checks for a newer CLI and companion when it boots and every 24 hours while awake, installs them when idle, and restarts itself.

checked daily · installed when idle

Your plan's own limits still apply — a rate limit or an expired sign-in shows on the machine's page as a status you can act on, with the vendor's reset time when there is one. Ollama stays a laptop thing: the point of it is your own hardware.

Once it's running

One machine, and everything it already has.

More than one account

A work login and a personal one, each in its own config directory, each its own provider in the web app.

cma-agent runtimes:add --runtime claude_code --label "Work"

Which account really ran it

The address is read back out of each login's own config directory — beside the credential, never inside it — and shown on every run.

cma-agent accounts

Your own repositories

Share a folder and the web app can see the git repositories inside it. There is no default root and no scan-my-home-directory mode.

cma-agent repos:add ~/code

Several sessions at once

It claims up to three jobs at a time, set from one to five on the Devices page. A machine that must not go above some number can cap itself — the lower of the two wins, so the local one only ever restrains the page.

cma-agent max-jobs 2

Bring your own model

Ollama's catalogue is the machine's, not ours — whatever you pulled shows up in the picker within about thirty seconds.

ollama pull llama3.2

A default for unnamed work

A provider can leave the login blank. This machine decides what blank means, per runtime, and reports the hop rather than hiding it.

cma-agent use work
What it can't do

What to know before you install it.

  • On your own computer, work only runs while it is awake and online. Chats, code sessions and the composer are fine. Embedded widgets, API endpoints and scheduled bots need something that works without you — an API key, credits, or a cloud machine we run, which wakes itself.
  • A Gemini CLI or Antigravity turn reads and edits files, but is not given a shell. Neither can run git — the machine pushes their work for them. Auto-approving a shell there would mean handing over the machine, and this allowance fails closed instead. Gemini still gets the app's pull-request and web tools; Antigravity does not, because its MCP config lives in a directory that is the user's, not ours.
  • CodeWhale spends whatever it is configured with. Usually a DeepSeek API key, which bills per token rather than as a monthly plan.
  • An Ollama run has no tools. It answers in text, so it cannot read or edit a repository. Good for chat and drafting on your own hardware; the wrong choice for work that has to change code.
  • Cursor's billing is not Claude's. A Claude Max plan is a rate limit; Cursor Pro includes a credit pool that manually-selected frontier models draw down. Pointing widgets or scheduled bots at a Cursor provider can exhaust a month in a way a Claude Max provider cannot.
  • Headless CLIs take a single prompt, so prior turns are flattened into it. Long conversations cost more here than the same conversation would on a hosted API with prompt caching.
Get started

Hook up a machine and stop paying twice.

The helper is free and anyone can read its source. It is a way into your account, not a product of its own. Make the account, then run three commands.