A field report on coding-agent work
Journey to Cairn
How one useful terminal agent became a parallel workflow, and why the hard problem shifted from starting work to returning to the right workspace.
Field note / the return problem
Starting another agent became easy. Returning to the right one did not.
The current Cairn idea: durable workspace identity, trustworthy attention, and the real terminal waiting behind it.
The terminal stopped being one place
I did not set out to build an agent orchestrator. I was trying to make ordinary coding work less lossy.
A terminal used to be a place I could hold in my head. One repository, one shell, one train of thought. Even with several tabs, position acted as memory: server on the left, tests on the right, risky experiment on another desktop.
Coding agents changed that relationship. A terminal could now contain work that continued without me: reading a repository, changing files, running tests, stopping for approval, or finishing while I looked elsewhere. The terminal remained the right execution surface, but screen position no longer described the work well enough.
The first response was to open more terminals, name them carefully, and isolate attempts with worktrees. That increased capacity and increased the state I had to remember. Returning became harder than starting. Which session needs a decision? What changed? Is it safe to collect? Can I resume the exact conversation rather than create a second copy?
The scarce resource moved from terminal space to human attention.
Claude Code made the loop credible
The important thing about the first useful terminal agent was not the chat. It could participate in the development loop.
When Anthropic introduced Claude Code in early 2025, it could inspect a repository, edit files, run commands and tests, and work with Git from the command line. That crossed my delegation threshold. I could describe an outcome, let the agent encounter the real project rules and failures, then review an attempted change.
The terminal also gave the work durable coordinates. Processes, directories, SSH connections, worktrees, and command output were already legible to other tools. An agent could join that environment without inventing a separate document model for the repository around it.
One useful agent quickly became the smallest stable unit. I wanted another to investigate, one to review, and one to run a focused test. Current Claude Code has broader parallel mechanisms, but my earlier pressure was simpler: the terminal agent worked, so I started giving more work to terminal agents. The next constraint was the harness around them.
Evidence note
The first link anchors the early capability boundary. The second shows how current Claude Code handles parallel agent work.
pi made the harness malleable
Pi changed what I thought I was configuring. The assistant was no longer the product boundary. The harness was.
Pi describes itself as a minimal terminal coding harness. Its core stays small while extensions, skills, prompt templates, packages, providers, and programmatic modes let the user shape the loop. Instead of negotiating with a fixed product, I could compose a worker for a specific job.
That felt like malleable software in practice: adapt the tool when a need appears, then return to the work. I built spawn commands that created a specialist, started it in an isolated worktree, placed it in a visible pane, and recorded a small handoff. Upstream pi did not claim that orchestration opinion; it was a local extension built from pi's primitives.
The freedom moved complexity outward. A composable harness needs durable naming, permissions, isolation, visible state, and a path from a result back to the terminal that produced it. It also needs project context that survives the individual conversation. Repo guidance can restore what an agent should know; the remaining problem was restoring where the human should return.
The lasting lesson was not that one harness should contain every workflow. It was that trustworthy primitives should remain concrete: terminal, workspace, session, worktree, evidence, and handoff.
Evidence note
Pi deliberately keeps orchestration choices outside the core. The spawning described here was a local extension.
Model / changing bottlenecks2025 to 2026
Claude Code
One terminal agent became useful across inspection, editing, commands, tests, and Git.
pi
A minimal, adaptable harness made personal tools, skills, providers, and spawn behavior composable.
cmux
Native workspaces and splits made parallel workers visible enough to supervise directly.
tmux + Cairn
Remote persistence exposed the deeper need: durable workspaces, attention, evidence, and re-entry.
cmux made parallel work visible. tmux made it durable.
Starting workers was no longer the interesting problem. Keeping a coherent relationship with them was.
cmux arrived at the right moment. Native workspaces, splits, vertical tabs, notifications, and a command interface turned custom pi workers into visible places. Parallel work went from a diagram in my head to something I could watch and steer.
Visibility solved a real problem, but a screen full of excellent panes was still a screen full of panes. As more work moved to always-on remote machines, Ghostty plus tmux became the durable arrangement. A session could survive an SSH disconnect, remain on its host, and be reattached later.
Together, those experiments clarified three separate properties that had looked like one problem:
- Capacity: launch several workers without making them interfere.
- Visibility: see the output and state of each worker.
- Continuity: return later and recover the exact work, context, and decision.
Git worktrees handled filesystem isolation. Notifications surfaced moments. By late summer, Codex subagents made explicit ownership and parallel verification part of the same local loop. Across tools, the pattern converged: agents could work separately, but the operator still had to reconstruct which sessions belonged together, which result had been reviewed, and where a response should go.
The unit of work stopped being a pane. It became a persistent relationship among a repository, workspace, agent session, terminal, and human decision.
Related references
These primary references describe the visibility, persistence, isolation, and parallel-agent primitives used in this phase.
The question changed from “How do I run more agents?” to “Which workspace needs me now?”
This was the threshold between arranging terminals and designing an operational surface.
We kept changing altitude
Cairn did not proceed toward one inevitable interface. We rebuilt the containing geometry to discover what should remain stable while the number of active stories grew.
The concrete unit
A real shell, working directory, process, and agent session. The terminal remained the place where work happened.
Parallelism through arrangement
Splits and tabs increased capacity, but screen position carried too much meaning. Every new pane made the map harder to remember.
Workspaces became visible objects
Cards, groups, and spatial layouts tested whether scale could turn many terminals into a glanceable field.
State beat spectacle
A compact list made destination, recency, and exception easier to scan than miniature terminals. Re-entry became more important than seeing everything at once.
Stable instruments around the terminal
The current model uses a persisted native dock with stable instruments around the selected workspace and terminal.
Attention became a state, not a notification
A useful signal should remain true whether it appears in a tab, workspace summary, attention queue, or terminal.
Early notifications were local events: a bell, badge, color, or message attached to one pane. They helped, but they did not form a reliable model. Output could stop because an agent needed approval, had finished, had failed, or had lost its connection while the underlying remote session continued.
Cairn treats run state as evidence with confidence. Supported integrations can report lifecycle events directly. Process and screen evidence can provide a weaker inference. Stale or contradictory signals stay distinct rather than being promoted into certainty. An attention queue is useful only if it does not train the operator to ignore it.
The practical vocabulary stays small: running, waiting, needs a human response, done, or suspended. The labels may look different in each view, but they should project one canonical state. Change the example below and watch three views remain coherent.
Interactive model / thin waistChoose a session state
agent / exact-resume
Change one canonical signal. The workspace, attention queue, and terminal update together.
Session needs you. It appears in the attention queue and the terminal shows a decision.
The departures board became the useful metaphor. A station does not show a live thumbnail of every train. It compresses identity, destination, state, recency, and exceptions into a surface designed for scanning. Cairn applies that principle around the terminal: show the operational facts at a glance, then let the operator dive into the concrete session.
The interface stopped treating output volume as importance. It began routing human attention through a shared state model.
What Cairn is now
Cairn is a native, persisted operations workbench built around real terminals.
It began from the conviction that terminal fidelity was not negotiable. The visual container changed repeatedly, but three commitments survived:
- Keep execution honest: local shells and SSH work remain ordinary terminal sessions, with worktrees providing real filesystem isolation.
- Keep identity durable: repositories, workspaces, terminal tabs, and supported Claude Code, pi, and Codex sessions stay related so re-entry can use each tool's verified resume or fork command.
- Keep attention shared: live state, needs-you signals, activity, and history describe the same work at different altitudes.
The dock is closer to an airplane panel than a universal canvas. A user can split, resize, replace, and persist first-party instruments around the active workspace. That is bounded malleability: the arrangement can change without making the terminal, workspace, session, and evidence model vague.
The terminal remains the center because it is still the most honest place to inspect the work. Cairn's job is to make that terminal findable, contextual, and recoverable when the number of active stories exceeds working memory.
Current session references
Cairn relies on supported session commands rather than inventing opaque resume behavior.
Film still / current product storyStable poster, not autoplay
More agents require more compression
Scale is not a reason to render every session as a live terminal. It is a reason to separate inventory, attention, and engagement.
Only the sessions a person is actively using need expensive live terminal rendering. Everything else can remain lightweight identity, state, evidence, and history until it becomes relevant. That is how an interface can grow from several agents to dozens or hundreds without turning each worker into an equal thumbnail.
Thousands of agents remain a design horizon, not a present usage statistic. Reaching that horizon requires aggregation, delegation, permission boundaries, provenance, and review. The hierarchy must compress: agents into sessions, sessions into workspaces, workspaces into projects or hosts, exceptions into an attention queue, and decisions back into the exact terminal where they belong.
Model / design horizonInventory is not simultaneous rendering
Later products show the same pressure
Kiro Crew and Grok Bot arrived after Cairn's earlier interface experiments, so they are not origin points for this story. They are useful evidence of convergence: persistent workers, explicit state, activity, approvals, handoffs, and a way to return from another surface.
Once agents persist and work in parallel, chat history stops being the primary object. The roster, state model, permission boundary, and return path become first-class. Cairn's answer remains terminal-first and native: start from a high-level signal, then descend into the real process, files, worktree, and session behind it.
Evidence note
These products are included as later market convergence, not as causes of Cairn's earlier experiments.
The best interface for many agents will not make every agent equally loud. It will make the next human decision unmistakably clear.
A cairn marks where to return.
That is the thesis after every rewrite: keep the work in real terminals, preserve its path, and make the workspace that needs you easy to find.
See Cairn for macOS