content/projects/scos.md — typed by Claude, passed by Omri

StarcampOS

One dark window holding every job, every live Claude session, and the button that says approved.

Started
August 2026
Built with
Electron, TypeScript, React, node-pty, xterm.js

What it is

StarcampOS is the room I work in. One dark window with three things in it: a board of every job across all my repositories, live terminals running Claude, and a button that says approved.

Work with Claude across a dozen repositories and you lose the thread — which repo that job was in, which session is sitting there waiting on an answer, what you actually agreed to last time. That used to live in my head and in eleven terminal windows. Now it is one screen I can look at.

How it works

The filesystem is the database. No server, no store. A job is a markdown file in a repo's specs/ folder, and the status: line in its header decides which column it sits in. Change the file in any editor and the board moves, because the file is the board. Approving a job rewrites exactly that one line and commits exactly that one file — nothing else is touched, and nothing is ever published without me.

The terminals are real terminals. "Work on this" opens an actual claude command-line session inside the repository the job belongs to, running as a genuine terminal process drawn in a pane, and types the brief into it. Not a chat window dressed as a terminal — the real CLI, with its own scrollback.

The status lights don't guess. Each session is handed a settings file that wires up hooks: small callbacks Claude fires when it starts thinking, finishes a turn, or reaches for a tool. Each one writes a tiny status file the window is already watching. So a station glowing waiting is the session reporting on itself, not the interface inferring from silence.

A swarm is a shared folder. A job can carry a roster of several agents at once. They get one directory between them — a task board, a mailbox each, an append-only transcript, and a small mail tool — and they coordinate by writing files to one another. The window reads all of it and draws it: role lanes, who is working, mail moving between them. It writes exactly one thing itself, and only when I click: a message from me. It watches the swarm. It is never a member of it.

approved · Omri Nahum · this card, as it reads today