The thinnest harness that can rewrite itself.

$ curl -fsSL https://raw.githubusercontent.com/GSequist/microcc/main/install.sh | sh
> irm https://raw.githubusercontent.com/GSequist/microcc/main/install.ps1 | iex

powershell. installs inside wsl, so run wsl --install first if you have none.

malleable

the harness is the code

Most agents extend through a plugin API — a fixed set of hooks the harness author chose to expose. micro·cc ships as plain, readable Python instead. No compiled binary, no build step: the running process is the files on disk.

Ask for a change in words and it edits its own source, restarts into it, and comes back changed. That works on any install — a dev checkout, or a pip, pipx, brew or uv install on macOS, Linux or WSL — and every fresh install is told in its own system prompt that it can do this.

Editing the package is also the fragile way: the next update replaces the file. So the things you are most likely to want have a second home, and it is a directory rather than an API. Slash commands, renderers, key bindings, panels — what you add for yourself lives in ~/.micro-cc, outside the package, where pip never installs and where your file wins over the built-in default of the same name.

orchestration

subagents that are peers, not children

A subagent is another full instance of the same harness: its own project directory, its own durable conversation, the same tools and skills. One shell call starts it, and it announces itself to the session that spawned it the instant it comes up — no manifest, no registration API.

Status is read from the child's own transcript, and a checkpoint arrives as a real new turn rather than a poll. Sessions message each other directly, and a paused child resumes its exact history.

the whole of it

a loop that rewrites itself

A harness is a loop: the model asks, the machine answers, around again. micro·cc is that loop in plain Python with nothing sealed around it, so the file it runs from is a file the model can open and edit.

When it does, micro·cc waits for the turn to end, re-executes in place under the same process id and rebuilds the conversation from disk. If the new code will not boot, a small supervisor reinstalls the published release.

~/.micro-cc/ your additions, untouched SELF_HEAL_ model machine claude_loop_.py the file it is running between turns the model edits its own file ↻ it restarts in place same pid · same conversation now it can do something new ✗ the new code will not boot ↻ the release is put back at most three tries ↻ it restarts in place same pid · same conversation + retry on error