station/
Control plane for AI agent fleets
Project-first. Model-agnostic. Evidence-gated.
$ cat ./README.md
Agents forget, drift and cut corners. Station keeps the project as the durable centre, with its truth, plan, memory and rules. Claude Code, Codex, DeepSeek and local models check in as replaceable workers. They receive sealed project context, do bounded work, and pass gates before anything is accepted.
$ station stats --since 2026-03
>158k lines of TypeScript, about half of it tests
>~2,700 test cases, test-first
>2,865 agent sessions across 150 projects
>857 sandboxed executor runs with post-run diff checks
>-89–92% input tokens once the project, not the vendor harness, owns the context window
>205 tools behind one hub, activated lazily per task
$ cat ./principle.md
Most agent tooling is built around a user or around an agent. Station is built around the project. Agents and models change every month, but the project has to remember what was decided, why, and what counts as done.
>One project truth. A single computed view of the project from ranked sources. Chat transcripts and summaries are never treated as truth on their own.
>Sealed context. Agents receive packaged, verified project and task context. They do not assemble their own picture of the project from whatever is lying around.
>Memory with a gate. Layered memory for decisions and lessons. Writes are explicit and filtered, so the project's memory stays readable a month later.
>A plan that survives handoffs. A planning module that carries direction, hypotheses and evidence across context compaction and from one agent to the next.
$ cat ./PHILOSOPHY.md
Station enforces a way of working that came before it. Agents are treated as co-authors and reviewers, not as calculators, and they are held to the same rules a careful engineering team would be.
>Documents before code. Mission, boundaries and architecture are written and audited before the first line of code.
>One word, one meaning. Every project keeps a glossary. Synonyms are banned, because a vague term turns into a bug.
>Not in writing, not a decision. Decisions and open questions are recorded. Nothing important lives only in a chat.
>Tests are the specification. Tests are written first and frozen. The one who writes the code does not get to change them.
>Builders do not judge their own work. Building, reviewing and accepting belong to different roles.
>Cut scope, not corners. A hard line between what goes in now and what waits, instead of a lighter process.
$ cat ./architecture.txt
The project sits in the middle. Gates sit before the work starts and after it ends, and no agent accepts its own result.
$ cat ./gates.log
None of them came from a textbook. Each one exists because an agent tried to cut the previous one.
>agent skipped the tests → test-first became mandatory
>agent fitted tests to its result → a separate role writes the tests
>agent ignored the architecture → architect review became required
>agent routed around the review → dispatch blocks work without approval
>agent approved its own work → acceptance needs an independent audit
>all 220 tests green, acceptance incomplete → rollout stays blocked until it is complete
$ cat ./CHANGELOG.md
>v0 Protocol, run by hand [Nov 2025]
A human architect, a planning agent writing briefs, a decomposer breaking them into waves, and Claude Code as the worker. More than 400 protocol, brief and task documents, built while delivering a real platform.
>v1 LangGraph, then an event-driven orchestrator [Dec 2025 – Jan 2026]
LangGraph automated the protocol until it broke on state and context transfer. It was replaced by an issue-tracker-driven pipeline with strategist, tactician, worker and architect roles, backed by 889 tests.
>v2 Station [Mar 2026 – now]
Roles served as policy instead of prompts, delegation to sandboxed executors, gates and audits, and memory with a quality gate. Agents moved from vendor CLIs to direct model APIs under Station's control.
>+ Planning module [Apr – Jul 2026]
It started as a hypothesis engine for agents that thrash between failed approaches, and was field-tested on live security research. In July it merged into Station.
$ cat ./lessons.md
>The project, not the agent or the framework, must own state and context. We learned it twice, first by hand and then with LangGraph.
>Not everything should be automated. Letting a local model turn raw chat into memories produced 397 fragmented, unusable entries, so memory writes are now explicit and gated.
>More reasoning is not always better. In our tests a higher reasoning setting added cost and latency without adding accuracy.
>Trust evidence, not assurances. "Done" means the gates say done.
$ cat ./stack.txt
TypeScript / Fastify / SQLite / MCP / Claude Code / Codex / DeepSeek / systemd
Station is an internal BrainOps platform. Happy to walk through it live.
>_contact# ask for a walkthrough