self-hosted · for solo developers

Vibe coding,
on your terms.

AI coding agents have arrived. Yours doesn't need to run in someone else's cloud. Kartā unlocks the ChatGPT subscription you already pay for as a private autonomous coding agent on a server you own. Multi-session. Mobile-first. Real Linux desktop in the cockpit. €8/mo. Your code never leaves your disk.

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's uptime to manage. Pick Kartā if any of these matter to you.

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 — not a vendor's database, not a session 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 cockpit + the host: ~€8/mo on Hetzner, $0 → ~$60/mo on AWS Free Tier (≈3 months free), or €0 on a Raspberry Pi.

03 · ownership

One binary. Zero lock-in.

Walk away with your data any time — one command stops everything, your sessions and audit log stay on your disk. No SaaS contract, no hosted tenant to migrate out of, no "we're sunsetting that feature" notice on a Tuesday.

what it does

The actual cockpit, not a feature list.

Six things you'll do every day. Each one is the reason something else didn't quite fit your shape.

A session page mid-stream — agent commentary in chat bubbles, PR/Diagnostics tabs above
live worklog

Watch the agent think.

Every command, every file change, every reasoning step streams as the agent writes them. The shimmer pulses while it's working; the bubble fills as it does. Live, real-time. Vibe coding, with receipts.

Home page — sessions sidebar, repo chips, command palette ready
PRs in-cockpit

Open. Review. Merge.

When the agent's done, click Open PR. The diff, bot reviews, and checks all appear in the same page. Click Squash and merge. Done. No flipping back to GitHub mid-session.

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

Drive it from anywhere.

Mobile-first by design — bottom navigation, generous tap targets, a slide-out drawer. Deep-link any session and open it on your phone; the worklog picks up wherever the agent is. Long-running tasks ping you via Meghadūta, the bundled Telegram bot, when they finish.

📲 indrasvat: [ 0:14 voice note ]

▸ whisper transcribed
"hey, also add a regression test for the
edge case I described earlier"


🪐 kartaa-bot: turn dispatched ✓
→ session 019de7…
voice → turn

Talk to it from the beach.

Send a Telegram voice note. The session continues — yes, really. Long prompts are sometimes faster spoken. Transcription happens on your server; your audio never leaves your tailnet.

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

Recurring agents, cron-shaped.

"Every Monday morning, open PRs for any dependency updates." Schedule real agent sessions on your repos at any cadence. Overlapping runs are handled cleanly. Telegram pings you when each finishes.

desktop · /session/<id>
firefox & localhost:5173
↳ taking screenshot…
xdotool key Tab Tab Return
agent-browser snapshot @e7
↳ "checkout button still misaligned at 390px"
✓ filed regression on PR
computer-use

A real Linux desktop, inside your session.

When the agent needs to test the UI it just built — open a browser, fill forms, take screenshots — Kartā embeds a real Linux desktop right in the cockpit. A bundled browser-automation CLI lets the agent verify its own work, headlessly. No competitor ships this.

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.

The cockpit ships with 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.

With very different bets on who manages what. The honest version of the comparison, qualitative — pricing and feature parity in this space shifts monthly.

Kartā

your ChatGPT plan + ~€8/mo

  • uses the ChatGPT plan you already pay for
  • code stays on your disk · tailnet-only
  • 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.

Plan to spend ~10 min collecting credentials in your browser, ~20 min watching the provisioning script run. The full prep checklist ships with the repo.

  • Hetzner EU-friendly. Just a VPS that works. Recommended for new users. €7.99/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. clone $ git clone https://github.com/indrasvat/kartaa $ cd kartaa # 2. one of these — pick your path $ ./setup.sh # Hetzner ⭐ $ ./scripts/aws-provision.sh # AWS $ ./scripts/rpi-provision.sh # Pi # 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