Employees are harnesses
Claude Code and Codex run headless in a git worktree of your repository, on your subscriptions. Local models through Ollama, LM Studio or an MLX server serve Shiioo's own loop. Each is one [[employees]] entry; a task goes to the first whose subscription window isn't used up.
The office is one binary
shiioo is the server (the record, the rules, the API and dashboard, the Telegram bot, the workers) and the node that runs the agents, in one process on your machine. Its data is one directory with an embedded database. No Postgres, no containers.
The record is the only state
Every run is an append-only, hash-chained event log: each model message, tool call, result, rule verdict and approval. Workers hold fenced leases, so a crash, a sleeping laptop or a lost connection means the run resumes from its log, and a side effect never silently happens twice.
Rules first, you second
rules.toml says what agents may do without asking: allow, ask or deny per tool, command, path and repo. Before every tool call the harness asks Shiioo. Most calls are decided at once; the rest wait for your tap. A dead server means deny, never an unguarded agent.
Your phone is the interface
Telegram to delegate, approve and be told when something finished or needs you. A mobile dashboard over Tailscale for the live log, the diff and the buttons. No public address anywhere: the bot long-polls, the dashboard sits on your tailnet.