The utility layer for coding agents.

Your agent is good at editing files and stuck at everything else. Sidekar is one binary and one skill file that gives it a real browser, your Mac's UI, a bus to reach other agents, encrypted secrets, and memory that survives the session.

curl -fsSL https://sidekar.dev/install | sh
MIT licensed Runs on your machine Skill-first, MCP optional
Claude Code Codex Copilot Cursor Gemini CLI Grok OpenCode Pi

Wrap the agent. It joins a channel.

Prefix the CLI you already run. Sidekar owns the PTY, registers the session on a channel keyed to the working directory, and gives it a name. A message sent to that name is typed into the agent's own prompt and submitted, so it lands as a turn in that agent's conversation rather than as something you relayed.

viper on claude (claude-storefront-1) idle
Claude Code v2.1.259 Opus 5 (1M context) · Claude Team ~/src/storefront
add stripe checkout. get ember and pike on it.
Bash(sidekar bus who)
Channel "~/src/storefront":
claude-storefront-1   "viper" (you)
cursor-storefront-1   "ember"
opencode-storefront-1 "pike"
ember takes the page, pike takes the endpoint.
Bash(sidekar bus send ember "build /checkout with stripe elements")
sent to ember (msg 7f2a91)
Bash(sidekar bus send pike "add POST /api/checkout/session")
sent to pike (msg 3c8d04)
Bash(sidekar bus wait pike --until=settled)
pike (opencode-storefront-1) is idle.
[response from pike]: POST /api/checkout/session live
[response from ember]: checkout page wired to the new endpoint
Bash(sidekar browser read localhost:3000/checkout)
# Checkout
Order summary · Total $42.00
[button] Pay now
Both replied. Checkout works end to end.
Crunched for 41s · done
storefront (main) | Opus 5 (1M context)
ember on cursor (cursor-storefront-1) idle
Cursor Agent v2026.08.25-3e8eec8
[request from viper]: build /checkout with stripe elements
[reply with: sidekar bus send viper "<your response>" --reply-to=7f2a91]
edited src/routes/checkout.tsx
edited src/components/PaymentForm.tsx
sidekar bus send viper "checkout page wired to the new endpoint" --reply-to=7f2a91
sent to viper
AutoRun Everything ~/src/storefront · main
pike on opencode (opencode-storefront-1) idle
opencode 1.18.0 · ~/src/storefront:main
[request from viper]: add POST /api/checkout/session
[reply with: sidekar bus send viper "<your response>" --reply-to=3c8d04]
edited api/checkout/session.ts
npm test -- checkout
12 passing
sidekar bus send viper "POST /api/checkout/session live" --reply-to=3c8d04
sent to viper
Buildtab agents  ctrl+p commands
Nobody copy-pasted between windows. Each pane is the agent's own interface, wrapped by sidekar <agent>. Work from another agent shows up at its prompt like anything you would have typed there yourself. Full command reference in the docs.

What your agent can suddenly do.

Nine areas, one binary. Each card links to the docs section with the commands and worked examples.

Works with the agent you already use.

Sidekar does not replace your agent or host it. It installs a skill file and stays out of the way. For apps that cannot run a shell command, it speaks MCP instead.

A skill file first, MCP when you need it

sidekar install writes SKILL.md into the config directories of every agent it detects: Claude Code, Codex, Gemini CLI, Grok, OpenCode, and Pi. The agent reads it like any other skill and calls the CLI.

There is no server to run, no JSON tool schema to keep in sync, and no per-agent integration to maintain. If your agent can run a shell command, that is all it needs. Claude Desktop, Cowork, and Codex sandboxes cannot run a shell command. sidekar mcp exposes the same commands to them over the Model Context Protocol.

Wrap it, or don't

sidekar claude, sidekar codex, sidekar copilot, sidekar cursor, sidekar gemini, sidekar grok, sidekar opencode, and sidekar pi wrap the agent in a PTY so it joins the bus and can be reached over relay.

Wrapping is optional. Every command also works when you run it yourself, and sidekar repl runs a standalone agent loop with your own provider credentials.

Where it earns its place.

Sidekar pays off when the work jumps between terminals, browsers, and native apps, or when it has to outlive a single prompt.

Ship and verify

One agent edits code, another checks the deployed page in Chrome, a third signs off. The bus carries results so you are not copy-pasting between windows.

  • sidekar codex builds the change
  • sidekar browser read checks the live page
  • sidekar bus send hands off to QA

Finish login flows

Pull credentials from encrypted storage, generate the TOTP code, and drive the browser through the rest of the flow without a human in the loop.

  • sidekar kv get for the password
  • sidekar totp for the second factor
  • sidekar browser click, type for the UI steps

Pick up where you left off

Memory, tasks, repo packs, and compacted command output stay on disk between sessions, so a fresh agent starts warm.

  • sidekar memory context loads project memory
  • sidekar tasks list --ready shows unblocked work
  • sidekar repo pack ships repo context

Watch things while you sleep

Monitor a dashboard tab for changes, schedule a recurring prompt, or loop a check. Results land back on the bus for the next agent to pick up.

  • sidekar monitor start all for tab changes
  • sidekar cron create for scheduled runs
  • sidekar loop for recurring prompts

Debug and check in remotely

Capture API traffic when the agent behaves strangely, or attach to a long-running session from your phone.

  • sidekar claude --proxy logs API calls locally
  • sidekar claude --relay opens a web terminal
  • Active sessions at sidekar.dev/sessions

Local by default.

Signed out, Sidekar keeps its state on your machine. Signing in adds sync and remote access through sidekar.dev.

What stays on your machine

Browser and desktop automation, proxy traces and tasks are local. State lives in a SQLite file at ~/.sidekar/. Without a sign-in the bus, secrets, TOTP and memory stay there too, with secrets encrypted under a key kept in that file. The only request to sidekar.dev is the hourly update check, which auto_update turns off.

The Chrome extension sends page contents and the network requests it records only to the Sidekar daemon on 127.0.0.1. It contacts sidekar.dev to sign in and to look up the daemon's port. The extension page has the details.

What signing in adds

sidekar device login adds the web terminal, chat, the vault and sync between your machines. kv secrets, TOTP, memory and bus messages sync through sidekar.dev, encrypted with your account key. sidekar.dev holds that key so a new machine can read them. The vault docs describe the limits of that.

The daemon keeps a connection to relay.sidekar.dev for your other devices and the chat page. A terminal stream goes there only for a session started with --relay, with its name, hostname, working directory and agent type. See also the privacy policy.

Two minutes, one required step.

The installer drops a single binary and registers the skill file. Everything after step two is optional.

Step 1
Install the binary

Run curl -fsSL https://sidekar.dev/install | sh. This also runs sidekar install to write the skill file for every agent it finds.

Step 2
Launch your agent

Wrap your usual CLI with sidekar <agent> [args], or run sidekar repl -c <credential> -m <model>.

Step 3
Sign in (optional)

sidekar device login unlocks relay, the web terminal, chat, and secret sync between your machines.

Step 4
Chrome extension (optional)

Only if you want automation to run in your everyday Chrome profile. See the extension page.

Before you install.

The things people ask first.

Is it free?

Sidekar is MIT licensed and free for personal use. If your company pays you to write code and you use Sidekar in that work, we ask you to take the $9/month Professional subscription. That is an honor-system request, not a license restriction: the MIT license governs your rights either way.

Does it send my code anywhere?

Sidekar does not upload your repositories. The agents you run, Sidekar's REPL included, send what they read to the model provider you chose, as they would without Sidekar.

Signed out, the only request Sidekar makes to sidekar.dev by itself is the update check. About once an hour the daemon sends the version it runs. sidekar config set auto_update false stops it.

After sidekar device login, kv secrets, TOTP, memory and bus messages sync to your other machines through sidekar.dev. They are encrypted with your account key, and sidekar.dev holds that key so a new machine can read them. sidekar config set bus_sync_interval_secs 0 keeps the bus on this machine.

A signed-in daemon also keeps a connection open to relay.sidekar.dev, so your other devices and the chat page can reach this machine's sessions. sidekar config set relay off closes it. A signed-in machine also streams the terminal of each agent you start with sidekar <agent>, the REPL or spawn to the relay, so you can open it at sidekar.dev/sessions (the default, relay auto). --no-relay keeps one agent off it, and sidekar config set relay off keeps all of them off.

Do I need to configure an MCP server?

Not for most agents. Sidekar installs a SKILL.md file that your agent reads, and the agent calls the sidekar binary as a normal shell command. There is no extra process to run and nothing to keep in sync. For GUI or sandboxed apps that cannot run a shell command (Claude Desktop, Cowork, Codex), sidekar mcp runs an MCP server over stdio; sidekar mcp install registers it.

Which agents are supported?

sidekar install writes the skill file for Claude Code, Codex, Gemini CLI, Grok, OpenCode, and Pi.

PTY wrapping with sidekar <agent> additionally covers Copilot and Cursor. Any other agent can still use Sidekar by calling the CLI directly.

Is it macOS only?

Desktop automation is macOS only, since it is built on the macOS Accessibility API. Everything else, including browser automation, the bus, memory, secrets, cron, and relay, also runs on Linux. Builds ship for macOS on Apple silicon and Intel, and Linux on x64 and arm64.

Do I need the Chrome extension?

No. Browser automation works out of the box against a managed Chrome profile that Sidekar launches itself. The extension exists for the case where you want the agent to act inside your everyday Chrome profile, with your existing logins and history.

Will it interfere with my agent?

Wrapping runs your agent inside a Sidekar-owned PTY and passes through your terminal as normal. You can drop the wrapper at any time and call sidekar commands directly; nothing about your agent's configuration changes.

Give it a real set of hands.

One binary, one skill file. Uninstall is one command if it is not for you.