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
✓ Paired with your account
✓ Listening — 3 jobs at once
brew install 9thdesigns/tap/cma-agent
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
claudeEdits files in real repositories
Cursor
Cursor Pro, Ultra or Teams
cursor-agentEdits files in real repositories
Gemini CLI
Gemini Code Assist Standard or Enterprise
geminiEdits files in real repositories
Antigravity
Free Google account, or Google AI Pro / Ultra
agyEdits files in real repositories
Codex CLI
ChatGPT Plus, Pro, Business or Enterprise
codexEdits files in real repositories
Grok Build
SuperGrok, SuperGrok Plus or X Premium+
grokEdits files in real repositories
CodeWhale
DeepSeek API account, or your own models
codewhaleEdits files in real repositories
Ollama
Free — your own models, your own hardware; cloud models on your Ollama account
ollamaAnswers 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.
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.
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.
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.
-
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-agentNo Homebrew? Install it with npm instead
npm install -g https://github.com/9thdesigns/cma-agentNeeds 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:
- Claude Code — Claude Pro, Max or Team
- Cursor — Cursor Pro, Ultra or Teams
- Gemini CLI — Gemini Code Assist Standard or Enterprise
- Antigravity — Free Google account, or Google AI Pro / Ultra
- Codex CLI — ChatGPT Plus, Pro, Business or Enterprise
- Grok Build — SuperGrok, SuperGrok Plus or X Premium+
- CodeWhale — DeepSeek API account, or your own models
- Ollama — Free — your own models, your own hardware; cloud models on your Ollama account
-
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 -
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 startA 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 withcma-agent status, and remove it later withbrew uninstall cma-agent.
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.
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 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.
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.