Running on the ranch since August 2026 Personal infrastructure — not a product

Corral

One window for every agent I have running, and one rail for everything waiting on me.

The Corral window: four agent conversations side by side, a conversation list down the left, and room tabs across the top.

Ten agents in ten terminal panes means ten places to look before you can answer the only question that matters first thing in the morning: does anything need me?

Corral is my answer to that. It runs on the ranch server and puts every live agent conversation in one window — Claude Code beside Codex beside Grok beside a local model on the Mac mini — with every permission prompt they're blocked on collected in a single rail down the right-hand side.

It's a control plane, not a runtime. Corral never executes fleet work itself; it opens conversations, shows what they want to do, and carries my answer back. A selftest asserts the hub contains no subprocess, no os.system, and no dispatch route at any privilege level. The power stays with the agents, where their own gates can see it.

6agent lanes,
one protocol
~1,200pages indexed
for search
1rail for every
approval
0execute routes,
at any privilege

Me, first

This is personal infrastructure. There's nothing to download and no repo to star; it knows my machines, my notes, and my habits, and it would be useless to you as-is.

The shape generalizes, though. If you run more than two agents at once you already have the problem Corral solves — work scattered across terminals, approvals discovered late, and nowhere that answers what's blocked right now. I'm publishing the screenshots because the pattern is worth arguing about, not because there's a signup at the end.

Six rooms, one window

Live

Every agent, one protocol

Corral speaks ACP, so which agent runs is a choice rather than a rewrite. Claude Code, ChatGPT's Codex, Grok, a local model on the Mac mini, a chartered cloud box, or a plain SSH shell — each gets a pane, and each pane wears the model, the effort, and the context it's actually running.

Needs you

Every approval, one rail

When an agent wants to edit a file or run a command, the prompt carries the diff, the exact tool arguments, and the file's hash before I decide. An unanswered prompt is a refusal, never a quiet yes — the agent stays as blocked as it was.

Fleet

The machines as a place

Cloud boxes, chartered workers and their expiry clocks, host heartbeats, what each box costs — read from what every one of those systems already publishes about itself. No live cloud API call happens on a page load, and a box with no recorded price says so instead of guessing.

FinOps

Spend, as reported

Subscriptions, month-to-date API spend, and the projection against my monthly target. Corral computes none of it — every figure is another tool's own published number, printed verbatim. A missing cost renders as unreported, never as zero.

Library

Every brain, one search box

One search across the notes vault, the decision records, session briefs, research, and every project's own docs — about 1,200 pages, and each hit says which brain it came from. Read-only by construction: the hub has no write path into any of them.

Today

The quiet room

The landing page, and the one I want to be boring: what fired overnight, what failed, what's still waiting. Looking like there's nothing to do is the win condition, so it has to be trustworthy when it says so.

How it sits on the harness

Corral doesn't get powers the agents don't have.

Every pane is a real agent process on the host, with the same tool gate it would have in a terminal. Corral starts it, renders it, and gives that gate a button. That's the whole trick — and it's why the surface can be this open without being reckless.

You — a paired browser
Pairing takes a shell account on the host, not a password. Anyone on the network can ask for a code; only I can approve one.
Corral — the hub
Composes, renders, routes. Owns the permission posture of each pane. No execute route at any privilege level.
↓  ACP — one protocol, agents plug in  ↓
The agents — each with its own tool gate
Claude Code Codex Grok Local — Ollama Delegate box SSH shell Gemini DeepSeek
The ranch — repos, notes, boxes, hardware
Anything that needs a hardware key is still signed on a different machine, against bytes displayed there.

One thing Corral does own is the permission posture. Panes deliberately don't inherit my ambient shell config — an early measurement caught that config silently suppressing every prompt, which would have produced a rail that was empty, faithful, and useless. So Corral writes its own config for each pane and shows the live posture as a pill on the pane's title bar.

One lane is missing on purpose. DeepSeek is third-party, and a pane isn't a classified API call — it's a shell in my working tree, next to my notes and my keys. There's no request to classify and nothing to refuse, so there's no lane. Gemini is listed but refused up front: the vendor retired the client, and a pane that opens and immediately dies is worse than an honest "no".

What it actually looks like

Live, on the ranch server. Real agents, really blocked — but on throwaway work, because my actual queue is nobody's business. Public addresses are masked and scratch paths shortened; nothing else is touched.

What it doesn't do

  • No phone push. The rail only reaches me while I'm looking at it — which is also why there's no quiet-hours setting. Nothing wakes me, so there's nothing to suppress.
  • One host. Corral runs on the ranch server and doesn't federate to the other machines in the house.
  • No signing. Anything that needs the hardware key is still signed at a different machine, against bytes displayed there. A review killed routing that ceremony through Corral, and it stayed killed.
  • No adoption of running agents. Corral is a place to start conversations, not yet a place to pick up the ones already running in a terminal.
  • It starts unattended; it never acts unattended. A conversation scheduled for 3am opens and works until it hits a gate — then it sits there, blocked, until I'm awake. That's the correct outcome, not a bug to design around.

Corral is the newest piece of a personal AI setup I've been building and writing about for a while. AI-OS is the on-ramp, AI-OS Seed is the floor underneath it, and the notes are where I work out whether any of it survives contact with reality.

If you'd rather have the thinking than the screenshots, start with the notes — and tell me what you'd have built differently.

Argue with this

Comments ride GitHub Discussions — sign in with GitHub and say where I'm wrong.