self-hosted · for solo developers

Vibe coding,
on your terms.

Your coding agent runs on a server you own, not a vendor's cloud. Kartā turns the ChatGPT plan you already pay for into a private agent behind your tailnet. ~$15/mo. Your code never leaves your disk. Every session sandboxed.

Kartā cockpit, mid-session: agent reasoning streams live, PR view one click away

why bother

Three sharp opinions.

The hosted tools (Devin, zo.computer, Cursor's background agents) are real products. Pick one if you want zero setup and someone else minding uptime. Pick Kartā if any of these three matter.

01 · privacy

Your code stays on your disk.

Tailscale-only, no public IP, every secret encrypted at rest. Your repos live on a server you own, never a vendor's database or a sandbox in someone else's data center.

02 · the unlock

You already own the agent.

Kartā runs on the ChatGPT plan you already pay for (Plus, Pro, Business, or Enterprise). No second AI subscription. The host runs ~$15/mo on Hetzner, $0 → ~$60/mo on AWS (≈3 months free on starter credits), or €0 on a Raspberry Pi you already own.

03 · ownership

One binary. Zero lock-in.

One command stops everything; your sessions and audit log stay on your disk, yours to walk away with any time. No SaaS contract, no hosted tenant to migrate out of, no "we're sunsetting that feature" email on a Tuesday.

what it does

The actual cockpit, not a feature list.

Every panel earns its pixels. Each one is a reason the hosted tools didn't quite fit.

A session mid-stream — inline event pills for commands, reasoning, and a file diff interleaved with the agent's messages, PR tab one click away
live worklog

Watch the agent think.

Every command, every file change, every reasoning step — streamed live as the agent writes them. Vibe coding, with receipts.

PR tab inside a session — title, branch, diff, checks, and Squash-and-merge dropdown, all inside the cockpit
PRs in-cockpit

Open. Review. Merge.

Click Open PR. The diff, bot reviews, and checks appear in the same page. Click Squash and merge. Done — no tab-hopping to GitHub mid-session.

Mobile home — clean composer, hamburger nav, slash chips
phone-first

Drive it from anywhere.

Deep-link any session, open it on your phone — the worklog picks up where the agent left off. Optional Telegram bridge: wire up your own bot and get pinged when long turns finish.

The composer mid-dictation — a live waveform and timer replace the toolbar while your speech is transcribed on the server
voice dictation

Speak it, don't type it.

Dictate straight into the composer, or send a voice note through the optional Telegram bridge and it becomes a turn. Long prompts are faster spoken, and transcription runs on your own server, so your audio never leaves the tailnet.

Schedules tab — recurring task list, status counters, filter by repo
scheduled runs

Recurring agents, cron-shaped.

"Every Monday, open PRs for any dependency updates." Real agent sessions on cron, with overlap handling baked in. Telegram pings when each finishes.

Desktop tab inside a session — a real Linux desktop, embedded in the cockpit, running the agent's own TUI app
embedded desktop

A real Linux desktop, inside your session.

Open a full Linux desktop right inside any session — watch a long task run, browse in a real Chrome, or poke at the UI the agent just built. The agent can drive it too: it opens apps, runs a TUI, types, and screenshots through a scoped desktop bridge — and never touches the host.

host · per-session sandbox
session starts
↳ docker run --runtime=runsc kartaa-session
✓ fresh container · gVisor kernel intercepts every syscall
rm -rf /home/ubuntu
↳ confined to container · host untouched
git push origin feature-x
✓ routed through bind-mounted token broker
session ends
↳ container destroyed · disk + network state gone
sandboxed by default

Every session, in a fresh sandbox.

Each session runs in its own fresh gVisor-isolated container. A user-space kernel intercepts every syscall; when the session ends, the container is destroyed. Always on, no toggle. Runaway scripts and malicious tool calls can't escape into your real workspace.

The ⌘K command palette searching "gh-ghent" — instant full-text matches across every session title and transcript, with snippets in context
instant search

Find any session, fast.

Full-text across every title, every message, every turn — straight from the sidebar or ⌘K palette. Hit s to focus, type, see snippets with the match in context. It all runs on your box — your transcripts never leave the tailnet.

persistent tools & skills

Your daily-driver CLIs, every session.

Declare gh-ghent, shux, ripgrep, or any binary in /settings/tools. Every new sandbox session installs them on first boot — marker-cached, so re-using the same container is a no-op. Same page wires up the open agent-skills ecosystem via npx skills add. No more re-installing your tools in turn 1 of every PR run.

how it works · 30-sec version

Five boxes. That's it.

The only public-facing things are GitHub and OpenAI — both of which you already use. Kartā never serves a public IP. You reach the cockpit over your tailnet, which IS the firewall.

you
browser · phone · Telegram
your tailnet
the auth layer
your kartā server
AWS · Hetzner · Pi
github
your repos · the bot
+
openai
codex via your ChatGPT plan

three themes, one keystroke

Tuned, not templated.

Three carefully-paired dark palettes. Switch via the dots in the sidebar. Saved per device.

Midnight theme
midnight · default
Ember theme
ember · for late-night vibe
Moss theme
moss · forgiving on the eyes

vs the alternatives

Everyone's solving the same problem.

Different bets on who manages what. An honest, qualitative cut; pricing and feature parity in this space shift monthly.

Kartā

your ChatGPT plan + ~$15/mo

  • uses the ChatGPT plan you already pay for
  • code stays on your disk · tailnet-only
  • every session in a fresh gVisor sandbox
  • real Linux desktop in the cockpit
  • mobile-first · voice → turn via Telegram
  • three swappable themes, hand-tuned
  • walk away with one command

Devin

$500+/mo · hosted

  • zero setup time
  • full VM per session
  • Cognition manages uptime
  • GitLab / Bitbucket support
  • multi-user / SSO / teams
  • code lives in their cloud

zo.computer

subscription · browser sandbox

  • zero setup time
  • browser-accessible from anywhere
  • they manage uptime
  • vendor-managed sandbox
  • state lives in their cloud
  • session ends = sandbox resets

getting started

Two windows. ~30 minutes.

Spend ~10 minutes collecting credentials in your browser, ~20 watching the provisioning ladder run. The TUI walks you through every prereq inline, no separate checklist. See the full install guide →

  • Hetzner EU-friendly. Just a VPS that works. Recommended for new users. ~$15/mo
  • AWS EC2 Already on AWS? $200 credits = ~3 months free. $0 → ~$60/mo
  • Raspberry Pi You have one at home. Want €0/month. €0
~/code · zsh
# 1. download the installer — picks your platform automatically $ open https://kartaa.pages.dev/getting-started/ # 2. mark it runnable, launch — full-screen TUI takes over $ chmod +x ~/Downloads/kartaa-install_* $ ~/Downloads/kartaa-install_* # 3. ~20 min of watching the worklog scroll… tailscale joined 11 systemd units enabled kartaa-doctor: all green # 4. it prints your URL. open it. $ → https://kartaa-<you>.<tailnet>.ts.net/
The agent runs on someone else's GPU. Everything else can run on a server you own.

— that's the whole bet