I run dozens of orchestration agents and sessions at once. Claude Code in one tmux session, Codex in another, more across projects. New superpowers introduce new pains, and two of them got loud fast.
The first is that my attention gets shredded. With a dozen sessions live, the question is never what any one agent is doing. It is which of the dozen needs me right now. I was cycling through sessions to find out, the slowest way to answer it.
The second is that I cannot trust an agent when it says done. The output is prolific and non-deterministic. Done usually means the agent stopped talking, not that the tree is green. Those are different claims, and only one of them lets me walk away.
I looked at what exists. Pi and OpenHands might be the right call when the loop itself is your product. I am building product. Anthropic and OpenAI pour nine figures into the loop every week, so the loop is not where I win. Herder is great and way too much interface for me, which defeats the focus and multiplexing I am after. And for those of us on subscriptions there is a quieter problem: build your own harness and my understanding is you get forced onto the metered API. A custom harness on a subscription is borrowed time at best, a ban at worst.
What I could not find was the operator's cockpit: one seat for running a fleet of the best loops at once. Not a better loop, a better seat in front of them. The bonus of building it myself: the surface area, every keystroke, becomes muscle memory that much faster.
It is called Falken, the falcon over your fleet. Repo is open at github.com/bnjreece/falken.
Five words per session
Falken is performant tmux and bash scripts wrapping the real CLIs. No daemon in the core. Claude Code and Codex each get a thin hook adapter, and both write the same small state file per session. The vocabulary is five words: needs, working, done, wrapped, idle. Needs means blocked on a permission. Working means going. Done means it stopped and the call is mine. Wrapped means I parked it.
Everything else just reads those files, which is why it stays fast with dozens of sessions on one tmux server.
The status bar carries the fleet. Who needs me, named, with wait times, longest first. Who is working. How many are done, how many are parked, a stacked proportion bar, a session count. A dot at the left goes red the moment anything needs me. That dot is most of the value: it answers the attention question without me touching a key.
The hot switcher is one chord, an fzf list of every session with live state, ordered by urgency. Type a few letters to jump, filter by state, wrap or kill inline. Quick keys cover the two common moves: jump to the next session that needs me, cycle the done pile.
One detail took real work. A session with live background work used to read as done: the agent's turn had ended, but a background shell or a build was still running. The hook now catches that and keeps the session working until the work finishes. A false done is worse than a slow one.
Making done mean something
The trust problem needed more than a light. Falken has a verify gate, opt in per repo. Add a falken key with a tier to the repo's package.json and it is gated. On every stop, the hook runs its verify chain. Red blocks the stop. The failure goes back to the agent as fix context, the session stays working instead of flipping to done, and it is capped at three retries so nothing loops forever. Past the cap it surfaces as needs me. Green is the only path to done.
The tier is a blast radius dial. A prototype gets lint. A repo with money or auth or migrations gets lint, typecheck and tests. Any tooling failure, a missing binary or a timeout, surfaces as needs me, never a false green. A per file lint runs right after every write or edit, so errors reach the model mid turn, before the stop gate fires.
That gate is the first piece of something I wrote down as a golden path spec. The idea is to move process out of prompts, which are ignorable, and into the environment, where it is ambient and one key away. Natural language is interpreted, not executed. A ten step prose chain at ninety five percent per step lands around sixty percent. Scripts run or they do not. So every candidate feature gets one question: does this encode determinism, or does it just relocate a prompt? If it only renames prose, I do not build it. I audited the rest of the backlog against what Claude Code ships natively and cut everything it already does. Next is behavioral telemetry: how often the fleet needs me, how many iterations to green.
One more part, optional. Falken can mirror the fleet onto hardware: eight LEDs, one per session, fast blink for needs me, pulse for working, solid for done, off for parked. Track buttons jump between sessions, faders drive fleet autopilot. The box is a $45 Teenage Engineering SP-1 running firmware I wrote. That is the next post.