AJERIS/Docs

Claude Code Connect

Drive your laptop's Claude Code from any channel. Text your agent on WhatsApp, it routes coding tasks to the Claude Code session running on your Mac, reports progress, and commits the result, all without opening your laptop.

Claude Code Connect

Message your AI agent from WhatsApp. It drives Claude Code on your laptop. You get progress updates in real time and the final result back in the same thread.

You don't open your laptop. You don't sit at a terminal. You just ask: "fix the TS error in my sandbox repo", "run the tests and commit if green", "what's different between this branch and main?" Your coding agent does it.

What you can ask it to do

Anything Claude Code can do on your laptop, you can trigger from WhatsApp:

  • Fix bugs: "there's a type error in src/index.ts line 42, fix it"
  • Run code: "run npm test and tell me if anything fails"
  • Commit and push: "commit my changes with message 'wire up the retry loop' and push"
  • Inspect: "what files changed in the last 3 commits?", "what's in my package.json?"
  • Refactor: "rename handleError to logAndRethrow across the repo"
  • Search: "find every TODO comment in this repo and summarize"

If Claude Code could do it at your desk, you can ask your agent to do it from anywhere.

How it works

Three moving parts:

  1. Your cloud agent (Jarvis): runs on Ajeris infrastructure, reads your WhatsApp/SMS/Telegram messages, picks the right tool for the task.
  2. ajerisd daemon: a small background process on your Mac or Linux box, paired to your cloud agent via secure WebSocket.
  3. Claude Code on your laptop: your own claude CLI, signed in with your Pro/Max subscription or API key. The daemon spawns it via the ACP protocol for each task.

When you text "fix the TS error in index.ts":

  You (WhatsApp) ──→ Ajeris cloud agent
                         │ picks run_on_laptop tool
                         ▼
                    Gateway WebSocket
                         │
                         ▼
                    ajerisd on your Mac
                         │ spawns
                         ▼
                    claude-code-acp subprocess
                         │ reads files, runs bash,
                         │ edits code, commits. The
                         │ same thing it'd do in your
                         │ terminal.
                         ▼
                    progress events stream back ──→ You (WhatsApp)
                    final result ────────────────→ You (WhatsApp)

Total round-trip: 60 seconds for a typical fix, including progress updates along the way.

The chef / waiter / diner experience

Jarvis is the waiter. Claude Code is the chef. You are the diner.

You send your order:

fix the TS error in my sandbox repo at /Users/you/project

The waiter immediately acknowledges:

Working on it. Your laptop is on it. I'll keep you posted.

Progress comes back as the chef cooks:

Running find…

Reading a file…

The final dish arrives:

Done! Found and fixed it:

File: index.ts, line 1 Problem: x was typed as number but assigned the string 'wrong' Fix: Changed the value to 0

Want me to run tsc --noEmit again to confirm it's clean?

You can interrupt mid-cook. Text "stop" or "cancel" and Claude Code halts immediately. Text "also add a test for it" while the session is running and your note gets folded into the next turn.

Install

1. Pair your laptop from WhatsApp

Text your Ajeris agent:

pair my laptop

Your agent replies with a one-time code like AGENT-7A4F and install instructions.

2. Install the CLI

One command, any shell:

npm install -g @ajeris-ai/cli

No login, no keychain prompt from us, no browser redirect. The install takes about 10 seconds.

3. Connect

From any directory (use a project directory if you want the agent to default to that repo):

cd ~/Projects/your-repo
ajeris connect claude-code

When it asks for the pair code, paste the AGENT-XXXX your agent sent you. Approve the macOS keychain prompt when it appears. Always Allow is the right click: the daemon needs to read the device token silently on restart.

You'll see:

✓ Paired as "yourname's Mac"
✓ ajerisd started. Claude Code is now reachable from your agent.

That's it. Text your agent from WhatsApp and it can now drive your laptop.

Requirements

  • Operating system: macOS or Linux (systemd-based distros). Windows is not supported today.
  • Node.js: v20 or newer.
  • Claude Code: claude CLI installed and signed in. We use your own Claude auth: either a Pro/Max subscription (run claude login once) or your personal ANTHROPIC_API_KEY env var. Ajeris does not supply or cache Claude API credentials.
  • Network: a persistent internet connection. The daemon holds a WebSocket to our gateway; it survives network blips and laptop sleep via heartbeat + auto-reconnect.

Permissions and trust

Ajeris maps every tool call Claude Code wants to run into one of seven categories and resolves each against an approval stance stored on your device row. Defaults:

CategoryDefaultWhat it means
bash_in_repoautoShell commands inside your paired repoRoot run without asking.
bash_outside_repoaskShell commands outside your repoRoot SMS you for confirmation.
write_file_in_repoautoFile writes under your repoRoot run without asking.
write_file_outside_repoaskFile writes outside your repoRoot require your SMS approval.
git_pushaskEvery git push SMS you a "do you want to push this?" prompt.
network_mutationaskAny tool that hits the network for a mutation asks first.
deleteaskFile deletes always ask.

You can flip any of these per device in your /manage dashboard. Strict security posture: set everything to ask. Fast developer posture: leave the defaults.

The device token minted at pair time is stored in your macOS keychain (or Linux libsecret) with a permissive ACL so the daemon can read it silently on restart. Only processes running as your user can read it, the same trust boundary as your ~/.ssh keys or shell history.

Commands

ajeris connect claude-code

Pair this machine to your cloud agent. Prompts for the one-time code.

ajeris status

Show whether the daemon is running and connected to the gateway.

$ ajeris status
ajerisd: running (pid 45332)
bridge:  online   (last seen 3s ago)
repoRoot: /Users/you/project

ajeris uninstall

Revoke this device, stop and remove the daemon, delete the config and keychain entry. One command, full cleanup.

ajeris --version

Print the CLI version. Update with npm install -g @ajeris-ai/cli@latest.

Architecture details

Per-device auth

Each paired laptop gets its own rotating device token. Revoke a device from /manage and its WebSocket drops within one second; subsequent connection attempts with the revoked token are rejected.

Heartbeat + reconnect

The daemon sends a WebSocket ping every 30s. If no pong arrives within 10s, it treats the connection as half-open (this is the state Mac sleep + network churn leaves behind), forcibly closes the TCP socket, and reconnects with exponential backoff. You close your laptop lid mid-conversation; you open it 30 minutes later and your agent still reaches you.

Progress relay

Claude Code emits events over ACP (agent_message_chunk, tool_call, tool_call_update). We pick milestone events (starting, running bash, reading/editing a file, committing, running tests) and relay them to your channel throttled to one message every 15 seconds. You get awareness without spam.

Interrupt semantics

While a session is running, your channel handler checks for an active-session registry entry. Words that read as a cancel intent (stop, cancel, kill it, nevermind) fire ACP session/cancel. Any other message queues as a follow-up prompt the same session will pick up on its next turn.

The daemon doesn't ship credentials

Ajeris does not bundle or cache Anthropic API keys. Your ajerisd spawns @zed-industries/claude-code-acp, which spawns your local claude CLI, which reads your own ~/.claude/ login or ANTHROPIC_API_KEY. The tokens billing your Claude Code work stay on your Anthropic account. Ajeris pays only for the thin orchestration layer (Jarvis picking tools and composing replies).

Troubleshooting

"Your laptop isn't reachable"

The daemon is running locally but the WebSocket to our gateway is dead. Usually a recent sleep/wake cycle left a half-open connection.

launchctl kickstart -k gui/$(id -u)/com.ajeris.ajerisd
ajeris status

The heartbeat logic added in CLI 0.2.2 makes this much rarer. If it persists, check ~/Library/Logs/ajeris/ajerisd.err.log for network errors.

"Claude Code auth not detected" warning at pair time

You have the claude CLI installed but not signed in, and ANTHROPIC_API_KEY isn't set. Fix with:

claude login

…and re-run ajeris status to confirm.

macOS keychain prompts every restart

Your first pair showed a dialog like "ajerisd wants to access the device token in your keychain." You declined Always Allow (or clicked Allow instead). Fix:

ajeris uninstall
ajeris connect claude-code

When the dialog appears this time, click Always Allow. CLI 0.2.3+ also sets a permissive keychain ACL at write time so post-restart reads are silent.

Pair code expired

Codes live for 5 minutes. Ask your agent for a fresh one:

pair my laptop

Re-pairing without uninstalling first

Safe as of CLI 0.2.3+. Run ajeris connect claude-code again; the installer unloads the previous launchd entry, writes the fresh plist, and reloads. Older versions required ajeris uninstall first.

Pricing

Nothing extra for Claude Code Connect itself. It's included with every Ajeris account.

You pay your existing Anthropic bill (Pro/Max sub or API usage) for the tokens Claude Code burns on your laptop. Ajeris pays the orchestration LLM that Jarvis uses to pick tools and compose replies. Two clean lanes.

Roadmap

Honest about what's next:

  • Terminal + phone, one session. Today each run_on_laptop call spawns a fresh Claude Code session. Next: ajeris claude as a terminal TUI that attaches to the daemon's persistent session, so you can drive the same conversation from your desk AND your phone and the state stays in sync.
  • Connector-first fallback. When a structured tool exists (Gmail API, Slack API, Shopify), Jarvis prefers that over the laptop. Today it works when Jarvis picks; we're making it the default.
  • Windows support. Not today. WSL2 only path for now.

Questions?

Text your Ajeris agent, or email hi@ajeris.com. We read every one. If you're shipping something interesting on top of this, we want to hear it.

PreviousAccess Controls PolicyNextMemory model
ajeris.comPrivacyTermshi@ajeris.com