Free and open source (Apache-2.0)

Every agent. Every server. One workspace.

All your agents work in one place on your own machines, and they never lose their place.

Puka runs Claude Code, Codex, agy and DeepSeek agents across your hub and your SSH servers, in a workspace you shape for each project, and lets a manager agent run the work when you'd rather not. Free, open source, no account.

Apache-2.0 · macOS and Linux · No telemetry · No account

hubalways onCclaudeWorkingXcodexWorkingAagyWorkingDdeepseekWorkinglaptopasleepphonebuild-01gpu-boxsshssh
CoderManagerTerminals, files and gitConnected⌘KUsage
AT2
FN✓
HW!
LC
CclaudehubWorking
> Add rate limits to /v1/orders, with tests
● Read src/routes/orders.rs
● Edit src/middleware/limit.rs
+ 24 − 3
Writing round 3…
Claude · Sonnet · 42k context · working
Xcodexbuild-01Working
> Review the limiter change
● Read 4 files
Burst case: limit resets per key, ok.
Reviewing…
Codex · reviewing
$shellgpu-boxIdle
/home/user/atlas-api $ make bench
bench orders_list ... ok
bench orders_create ... ok
/home/user/atlas-api $
https://alpha.testhub
01 · Always on

Close the laptop. The work goes on.

When you close your laptop, your agents keep running on the hub and finish the work.

  • Agents run on your always-on hub, in a terminal keeper (puka-ptyhost) that survives daemon restarts and updates.
  • Reconnecting browsers redraw the screen and scrollback byte-exact, and typing is never sent twice.
  • An interrupted conversation comes back with one click: Resume conversation.
  • PlannedAgents come back by themselves after the hub reboots.
laptop asleepReconnectedscreen redrawnbyte-exacthubkeeps runningCclaude · atlas-apiClaude · Sonnet · working
Cclaudehubatlas-apiWorking
> Add rate limits to /v1/orders, with tests
● Read src/routes/orders.rs
● Edit src/middleware/limit.rs
+ 24 − 3
Writing round 3…
Scrollback redrawn byte-exact after reconnect
Claude · Sonnet · 42k context · working
Reconnected to hub · 0 missed keystrokes
Xcodex · build-01Interrupted
02 · Manager and crew

Hand off the project. Keep the controls.

A manager agent plans the project, hands each task to a worker agent and checks every result.

  • The manager reads and plans. It never edits code; workers do.
  • Each role (Director, Engineer, Reviewer, QA, Security) runs the agent and model you pick. A fresh agent on another model reviews.
  • Schema, auth and public API changes wait for your approval.
  • An Overview manager works across projects with @-tags.
  • PlannedA separate git worktree for each worker.
CManagerreads · plans · asksPlanningWriting round 1…CEngineerXReviewerother modelmake checkreviewapprovaldatabase migration · needs you
CoderManageratlas-apiNotes
Add rate limits to the orders API, with tests.
Plan: an engineer writes the limiter; a reviewer on another model checks it. The migration waits for you.
▸ Read 6 files
▸ Started 2 workers
Claude: Writing round 3…Codex: Reviewing
✓ make check… Review: running! Approval: database migration
Message the manager…
03 · Handoff

Switch agents mid-conversation. Never lose your place.

When one agent hits its limit, another agent picks up the same conversation and carries on.

  • Hit a usage limit? Switch agent builds an editable handoff from git status, diff stats and a recap, with no model call.
  • The old agent stops cleanly; the new one starts in the same project folder.
  • Each terminal links back to the one it continued from.
Cclaude5-hour limitXcodexcontinued from claudeHandoffno model callbranch feat/order-limitschanged 4 filesrecap burst test failing
CclaudehubNeeds you
5-hour limit reached for Claude.
Handoff to Codex · editable
branch feat/order-limits
status M src/middleware/limit.rs
M tests/orders.rs
recap limiter done; burst test failing
continued_from: claude · hub · atlas-api
04 · Rooms

Several agents. One shared conversation.

Several agents share one conversation and answer in turn when you mention them.

  • Messages go to the agents you mention, in order.
  • Turn caps and budget guards stop endless loops.
  • Commentators read and advise. They can't edit files or run commands until you make them a worker.
  • PlannedA picker for @-mentions.
Room · harbor-webturn 3 / 6@codex chime in?CClaude · EngineerXCodex · Commentary · read-onlyDDeepSeek · Commentary@ mention an agent…
Room · harbor-webturn cap on
@claude draft the cache headers. @codex chime in?
C
Claude · Engineer
Draft ready: long cache on /assets, ETag on pages.
X
Codex · Commentary read-only
Assets look right. For pages, no-cache plus ETag avoids stale HTML.
D
DeepSeek · Commentary read-only
Agree. Add a test for the 304 path.
Turn 3 of 6 · budget guard on
@ mention an agent…
05 · Integrations

Connect your team's apps right to the conversation.

Messages from Slack, email and issue trackers arrive in the conversation, and nothing goes back without your approval.

  • Connections are outbound only (Slack Socket Mode, IMAP polling): no open ports, no public webhooks.
  • Outside messages arrive as data, never as instructions.
  • Every reply waits for your approval before it's sent.
  • Slack, email and issue trackers each come as a plugin. Install only what you use.
#team-dev@email○issuesCManager · atlas-apidata only“Why is the ordersexport slow?”#team-devDraft replyApprove to sendreply to #team-devafter you approve
CoderManageratlas-api
<untrusted source="slack #team-dev">
Can someone check why the orders export is slow?
</untrusted>
The export query skips its index. I drafted a reply:
Looking now: the export query skips its index. A fix is on the way.
Nothing is sent until you approve.
06 · Remote servers

Every server. One workspace.

Agents on remote servers work just like the ones on the machine under your desk.

  • Agents and shells run over your existing SSH keys and config.
  • On Linux servers, the terminal keeper holds processes and screens through network drops.
  • Plain SSH works too, on macOS and unprivileged hosts.
  • When the network returns, Puka reconnects by itself.
Xbuild-01$gpu-boxCstaging-euhubReconnecting…connectedyour existing SSH keys and config
CclaudehubWorking
● Edit limit.rs
Writing round 3…
Xcodexbuild-01Working
cargo test
test result: ok
$shellgpu-boxWorking
make bench
orders_list ... ok
$shellstaging-euReconnecting…
tail -f app.log
GET /health 200
Reconnecting to staging-eu…
hub build-01 gpu-box staging-eu reconnecting
07 · Per-project layout

Every project gets the workspace it needs.

Each project opens up with only the panels you need for that specific project, right where you left them.

  • Split, dock, maximize and pop out tiles: agents, shells, files, git, diffs, docs, web views.
  • Layouts are saved per project and per device: desktop, laptop, phone.
  • A tile can pin another project's files or terminals.
  • PlannedGoing back to an earlier layout.
harbor-webledger-clifield-notesalpha.testconsoleCclaudeXcodexledger-clifield-notes
field-notes
files
notes.md
ledger-cli
diff
claude
shell
harbor-web
web · alpha.test
console
claude
codex
08 · Per-project workflow

Your rules, per project.

You set the rules: agents run their own checks, but they ask you before they touch sensitive areas.

  • The puka-standard development system sets roles, tasks, docs and review. The reviewer is a fresh agent on another model.
  • Gates record each check against the exact commit it checked.
  • Approve everything, only listed topics, or nothing. Every approval is recorded.
  • PlannedInstalling workflow plugins from a git repository or a directory.
change3 filesmake checkpassedXReviewer · Codexother model · passedApproval · database schemawaiting for youApprove
Settings › Development systempuka-standard
Roles
DirectorClaude · Opus
EngineerClaude · Sonnet
ReviewerCodex
QAClaude · Sonnet
SecurityCodex
Checks
make checkmake e2e
Approvals
EverythingListed topicsAuto
databaseauthpublic API
09 · Exchange diffs

See exactly what changed. Every exchange.

Before an agent changes anything, Puka takes a snapshot, so you can see every line it changed.

  • Each turn starts with a git checkpoint under refs/puka/turns/; your branch and index stay untouched.
  • Four views: Unstaged, Staged, All local and This exchange.
  • Line comments go back to the agent as one follow-up prompt.
  • Stage, commit, push, pull and branch in the panel. Discarded files go to the Trash first.
turn 1turn 2turn 3turn 4limit.rsThis exchangeline 14 · use the shared clockline 15 · name the key formatSend 2 comments
src/middleware/limit.rsUnstagedStagedAll localThis exchange
12 let limit = 100;
13 fn check(key) {
14 - now()
15 }
12 let limit = 100;
13 fn check(key) {
14 + clock.now()
15 + // per key
Comment on line 14
Use the shared clock here too, in tests.
Comment on line 15
Name the key format.
2 comments queued
10 · Native terminal

A terminal you'll forget is in a browser.

When you press a key, it shows up right away: no lag, no stuck keys, no lost characters.

  • About 0.1 ms added per keystroke on a local network (95th percentile, about 45× under the 5 ms target).
  • No Escape or Alt delay anywhere, and tab switches within one screen frame.
  • 10,000 lines pasted byte-exact.
  • Heavy output in one panel never freezes typing in another.
Cclaude · hub$ make testkkey press~0.1 ms10,000 linesbyte-exact
CclaudehubWorking
> Why does the burst test fail?
● Read src/middleware/limit.rs:42
The window resets per request, not per key.
● Edit tests/orders.rs:118
Writing round 2…
Claude · Sonnet · 42k context · working
Search commands…
Switch to Manager view⌘⇧M
Split rightleader v
Restart terminalleader r
11 · Files and web

Your files and your site, right there.

Your files, documents and local website sit in panels right next to your agents.

  • File tree, search (⌘P, ⌘⇧F), syntax highlighting and checked saves. ⌘S saves the file, never the page.
  • Markdown renders as a document; one click to edit.
  • The web panel loads your local .test sites over HTTPS and reloads when a worker finishes.
  • A console drawer shows errors and network logs, through the Puka Helper extension (tested in Chromium; Firefox signing in progress).
fileslimit.rsSavedalpha.testconsolefiles · editor · web view, side by side
Files
▾ src
▾ middleware
limit.rs
▸ routes
▾ docs
README.md
limit.rs✓ Saved
pub fn check(key: &str) {
let now = clock.now();
// window per key
}
https://alpha.testConsole
TypeError cart.js:18 total is undefined
12 · Phone

Answer your agents from anywhere.

Your phone tells you which agent needs you, and you can answer with one tap.

  • Push alerts through ntfy say which project and agent need you.
  • Watching mode by default: a tap in your pocket sends nothing.
  • Read diffs file by file and approve, or type in a real composer with an Esc, Ctrl-C, Tab and arrow key row.
  • PlannedVoice input.
atlas-apiWatchingCClaudeneeds youApprove release?ApproveApprovedEsc^CTabpush alert · ntfysenthub
atlas-api ▾WatchingConnected
Needs you
Claude · atlas-api
Test suite passed. Approve release?
▸ Ran make check · passed
EscCtrl-CTab←→
13 · Two views

Delegate or dive in. One key.

Work hands-on in the terminals, or step back and supervise the whole project. One key switches.

  • ⌘⇧M switches between Coder and Manager views, with no reload.
  • Both views share the same projects, repositories and running agents.
  • Coder view packs in terminals, git and diffs; Manager view gives you calm supervision.
CoderManager⌘⇧MCoder viewCX$AManager viewClaude: DoneCodex: Reviewing✓ make check! approvalsame projects · same agents
CoderManagerConnected⌘K
claude
codex
git
diff
CoderManager
How is atlas-api going?
Limiter done, review running.
Claude: DoneCodex: Reviewing
⌘⇧M

Everything else

Usage at a glance

5-hour and weekly usage bars per agent: Claude, Codex, agy.

Token budgets

Daily token limits per project stop a runaway early.

Search past conversations

Find what an agent said, across every past turn.

Tidy crews

Workers that finish move to an archived list.

Manager shift changes

A long-running manager hands over with a summary before its context fills.

Themes

Warm, Midnight, Charcoal, Slate and Black.

Follows your devices

Settings, drafts and layouts are kept on the hub.

Attachments

Drop or paste images and files into a prompt.

Per-agent alerts

Choose the channel and mute what's noisy.

Schedules

Run tasks or message agents on a schedule that survives restarts.

Health check

make doctor checks agents, logins and terminal keepers.

Export and import

Your projects, layouts and settings in one portable file.

How it works

Your machines. Your network.

Your devices

Desktop browsers and Android phones, on your private network: local LAN, or Tailscale over HTTPS.
private network
· HTTPS

The hub

An always-on Mac or Linux box.

puka-daemon
Web and API server, SQLite state, git and file work, notifications.
puka-ptyhost
Owns the terminals; keeps agents alive if the daemon restarts.
SSH

Remote hosts

Any number of Linux or macOS machines, over standard SSH.
Outbound traffic, all of it: agent CLIs talking to their own model providers, git to your remotes, and push alerts to the server you pick. Puka itself sends nothing anywhere except the notification server you choose.

Honest limits

One person, many devices. Each install serves one developer and their own devices. There are no team accounts or sharing.
You need an always-on hub (a Mac, or Linux with systemd) for “keeps working while you're away”. On Windows, use WSL2.
Bring your own agents. You install and sign in to the agent CLIs, on your own plans; Puka runs them.
Not a full IDE. You can edit files, but there are no language servers, refactoring or debugger.
Git features need a git repository. Folders on remote servers are browse-and-read.
Phone access is your own setup. It needs a private network (for example Tailscale) and HTTPS.
Tested in Firefox and Chrome. Safari and iPhone aren't targets yet.
The manager is guided, not forced. It runs the checks and records them; Puka shows you the record.

Start your crew.

Today you build from source, in three steps.

Step 1

Pick your always-on hub.

A Mac, or Linux with systemd. On Windows, use WSL2.

Step 2

Clone and build.

Clone the repository, then run:

make setup && make build
Step 3

Pair your browser.

A one-time code that expires in 10 minutes. Then start your crew.

make pair