Run coding agents
from your phone.
Claude Code, Codex, Gemini, OpenCode, Qwen, and terminal agents stay on your Mac. You approve, prompt, and cancel from your phone.
- Claude Code
- Codex
- Gemini
- Qwen
- OpenCode
- Aider
- Cursor Agent
- Continue
- Goose
See Cici in motion.
A two-minute demo of pairing, approving from a phone, and shipping without sitting on your hands.
How do I run Claude Code or a terminal from my phone?
Use Cici to keep the coding agent running on your Mac while your phone becomes the control surface. Start a Cici terminal session for Claude Code, Codex, Gemini, OpenCode, Qwen, Aider, or your own CLI agent, then pair your phone PWA.
When the agent asks for approval or input, Cici sends a push notification. You can approve, always allow, cancel, dictate a follow-up, or type a prompt without opening a raw mobile SSH session.
Control your Mac from wherever you are.
Three steps. Sixty seconds.
- type
Run
cici startin any terminal.A local agent session boots on your Mac and starts watching for your input. Nothing is uploaded — the agent stays on the machine.
$ cici start claude→ session ready› ▍ - scan
Pair your phone with a single scan.
Open the camera, tap the link, you're in. Pairing keys are generated on both ends and never leave your devices.
- drive
Approve, prompt, cancel — from anywhere.
Cici fires the right keystrokes back into the active terminal on your Mac. It feels exactly like sitting at the keyboard.
page.tsx+12 −4Approve this edit?Approve
Everything an agent loop needs. On a phone.
Approve from anywhere.
Tap Approve, Always Allow, or Cancel — Cici fires the right keystrokes (1 ⏎, 2 ⏎, ⌃C) into the active terminal on your Mac. Same as if you were at the keyboard.
Pinged the moment an agent waits.
Cici watches every terminal for the moment an agent stops to ask. Your installed PWA gets a Web Push the second it happens — even with the tab closed.
More than three buttons.
Free-form prompts to nudge the agent. A whip gesture for one-shot follow-ups. Custom button packs for the workflows you run all day.
Clear answers for mobile agent control.
How do I run Claude Code from my phone?
Install Cici on your Mac, start a Cici terminal session for Claude Code, pair your phone with the Cici PWA, and answer Claude Code prompts from your phone when Cici sends an alert.
Can I run my terminal from my phone?
Yes. Cici keeps the terminal session running on your Mac and gives your phone a PWA control surface for terminal output, prompts, approvals, and cancels.
Does Cici run code in the cloud?
No. Cici is local-first. Your coding agents and terminal sessions run on your Mac; the phone controls those local sessions.
Hey — I’m Ben. I built Cici because I was sick of my code pausing when I went to the bathroom.
Or to make coffee. Or to step outside for two minutes. The pattern was always the same — I’d get up, the agent would hit a confirmation prompt, and the whole loop would just stop.
Modern coding agents need a human in the seat. They ask before edits. They ask before commands. They ask, then they wait — and the work that should run in the background ends up serialised through me, glued to a chair.
So I made the smallest thing that fixes it. My phone buzzes the second an agent stops. I tap approve from wherever I am. It keeps going. I keep walking.
That’s the whole product.
One command in. App-owned updates after.
The npm package is the front door. It downloads the signed Mac app from the stable release URL, installs it, and opens it. After that, the app owns its own updates through Sparkle.
@getcici/setup
Thin installer package. Publish this only when the installer changes; app releases ride through the Mac updater.
Latest Cici.app zip
Stable website path that redirects to the current Cloudflare R2 object for the notarized app archive.
Signed appcast
RSS feed used by Sparkle for auto-updates. Each enclosure points at the latest release zip and includes Sparkle's EdDSA signature.
Your agents stay home. You don’t have to.
Every agent runs on your Mac. Traffic between your phone and your Mac is end-to-end encrypted — our relay only forwards sealed bytes it can’t read.
