Remote dev: the wrapper is the product, not the transport
Chasing 'direct my dev from the gym' first built a cloud queue, then nearly rebuilt a VPN — until reading the code showed what actually makes a Talkak Claude special: a wrapper that injects an operating directive via --append-system-prompt, plus git-polling memory capture that is terminal-agnostic. The asset is the layer, not the transport; the transport is Tailscale's job.
The founder wanted to direct development from the gym. The obvious-product instinct kicked in
and built a cloud queue: a web panel submits a task → remote_tasks in Supabase →
a desktop worker claims it → runs claude -p on a fresh branch → reports a PR back. It
compiles end to end (schema + RLS + realtime, RemoteDevPanel, RemoteWorker, the
run_remote_task Rust command). But it's fire-and-forget and opaque — and the founder's
real ask was to watch and steer, not to throw a task over a wall.
So the design pivoted to "just attach to my Mac's terminal remotely." That raised the question
that actually mattered: is a Claude running inside Talkak the same as a plain claude over
SSH? I said "identical" — wrong — then "the capture stops" — also wrong. Reading the code
settled it, and corrected me twice:
What actually makes a Talkak Claude special
pty.rs prepends a wrapper dir to the pane's PATH; inline.rs::ensure_wrapper writes a
claude shim that is literally:
exec "<real claude>" --append-system-prompt "$(cat dk-directive.txt)" "$@"That directive is the entire DALKKAK operating discipline — verify-before-claiming honesty,
the <dk-summary> / <dk-node> / <dk-workitem> structured emissions, completion control.
The differentiator is not the terminal and not the model — it's an injected system prompt.
A plain SSH claude is vanilla; a Talkak-pane claude is the same binary with the operating
layer bolted on. Verified the wrapper file exists and that ~17 live pane shells carry that dir
in PATH.
And the memory: capture.rs polls git log every 20 s and turns commits into graph nodes.
That watches the repo, not the pane — so committed work is captured no matter which terminal
made it, as long as the app is running. The fear of "losing context over SSH" was unfounded.
The conclusion that saved a build
The transport (reaching the Mac from anywhere, through NAT, securely) is exactly what
Tailscale gives for free. Rebuilding it as a custom web terminal would reinvent a VPN. So:
transport = Tailscale; the asset = the portable layer (directive + git capture). Making a
remote claude identical to Talkak is one line — export PATH=".../DalkkakAI/bin:$PATH" —
not a build. The only thing worth building later is the cockpit (a tailored web/voice UI) on
top of that transport, and that's a deliberate product bet, after the business wedge.
Also shipped tonight
UI declutter: the floating overlays that covered the screen moved or left — the notifications
bell is now inside the global top bar (was a fixed top-right overlay at max z-index), the dev
MERGED badge is gone, and the remote worker is headless (its status lives in the web list).
The CLAUDE Memory Lab was briefly deleted and then restored — it's a dev asset, not clutter.
The honest through-line: I was wrong three times about whether remote == Talkak, and each time reading the actual code beat the confident guess. The directive that makes that discipline a rule is, fittingly, the thing this whole investigation was about.