Workbench

Two workstations, two AI harnesses, one shared vault, and the wiring between them. How it actually runs.

Stylized black and copper workbench with two monitors, a desktop tower, MacBook Air, Synology NAS, Raspberry Pi, USB audio interface and headphones on a hook.

Machines & lanes

A Windows desktop and a MacBook share one tailnet. Either machine can connect to the other over SSH to pull, build, deploy or run a full agent session there.

Each direction has its own quirks: what PATH looks like over SSH, where the clipboard stops working, which commands need a real terminal. I hit every one of them at least twice before writing them down in one file, so now a session reads the list instead of finding out again. Git uses one deploy key per repository. The Pi and the NAS sit on the same tailnet and have their own page.

lanes pc ⇄ mac · tailscale · per-repository deploy keys

One brain, two harnesses

Claude Code and Codex run on both machines and read the same version-controlled instruction sources. Global config entries resolve through links into those sources, while deployed skills point back to the repositories that own them. What runs is what is in git. There is no deployed copy that can drift.

I can rerun the dotfiles bootstrap at any time. It takes a timestamped backup first and skips whichever tool is hosting the session. Tooling checks for drift between machines. The public skills live in ikkeseb/skills.

skills 15 public · 11 on Codex · version-controlled

~/.claude/CLAUDE.md   the-vault/…/current.md
~/.codex/AGENTS.md    the-vault/…/current.md
 
~/.claude/skills/
  orchestrate     skills/orchestrate
  history-audit   skills/history-audit
  verify-claims   skills/verify-claims
  ...              nearly all symlinks

Shared memory

An Obsidian vault holds the wiki (511 notes, growing +5/day) and the state of every project. Sessions on either machine, in either harness, read it and write to it.

Repositories exchange impact notes through it instead of through me. When one changes something another depends on, it drops a note in a coordination inbox stamped with the sender's HEAD commit. Each recipient ticks its own checkbox when it has caught up, then the note moves to the archive. Since the inbox went live, 85 notes have moved there. An empty inbox means nothing is waiting on me. The vault itself has its own page.

memory 511 notes · impact-note inbox · recipient repo is source of truth

coordination/archive/2026-08-15-lab-portfolio-refresh-work-order.md

from
the-vault @ 2d0e09a
impact
refresh drifted lab cards and add the playground strip

recipients

  • [x] nuez-website · applied
  • [x] archive · drained

inbox recipient ticks archive · 85 drained

Delegated work

Bigger tasks go through /orchestrate. It assigns work to Claude subagents or Codex workers. A checked-in model map says which model takes each job, at what effort and which one verifies it. When a result needs provenance, its record names the run, model and time. A model from the other family checks riskier findings. Per-model field notes record what each one has got wrong so far.

The /second-opinion skill sends finished work to the other model family for one read-only review. Different vendor, different blind spots. /history-audit then mines this machine's own session transcripts for real mistakes and turns the recurring ones into instruction-line proposals, each citing the run that earned it.

For image work, a relay sends the context to a Codex worker, which writes the final ImageGen prompt. A 36-image art run for ante shipped that way. For longer stretches without a human in the loop, the /loop skill runs overnight sessions that report back instead of asking.

delegation /orchestrate · two lanes · model map · cross-family review

claude lane

Wireframe drawing of two roller lanes exchanging through an X of transfer bridges.

codex lane

⇄ cross-family review