changing it

changing it

The core has no extension API: the loop is a file, and the file is the extension point. What you add for yourself lives outside it, in ~/.micro-cc, where an update cannot reach it.

the life of a self-edit

~/.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

Edit any .py file in the package, by hand or by asking the model in plain words. A two-second poll compares a manifest of file modification times and sizes, and a change marks a reload as pending.

The restart only fires when the app is idle: no turn in flight, no /gui session owning the conversation, no live subagent. Otherwise the poll keeps retrying until the first tick where every gate is clear. Then micro·cc stashes your unsent prompt, flushes messages.jsonl and re-executes in place with os.execv. The process id stays the same and the conversation is rebuilt from disk.

Every launch goes through a small supervisor. If the edited tree fails to boot, it reinstalls the published release over it and retries, at most three consecutive times. A boot that succeeds clears the count, and a crash after a good boot never triggers a reinstall.

$ /reload      re-execs this install: applies your edit now
$ /update      installs a new version: replaces core edits, keeps your layer

source: src/micro_cc/utils/self_reload_.py · src/micro_cc/self_heal_.py · design/architecture.toml

adding to it without editing the core

Editing the package is the strong way to change micro·cc and the fragile one: the next /update overwrites the file. So the things you are most likely to want have a second home, outside the package, where the installer never looks.

Built-in defaults live in the package and are replaced on every release. What you add lives in ~/.micro-cc/, which pip never installs into. The two are merged by name at startup and yours wins — which is a trade, not a free lunch: a default you overrode stops improving for you, because the version you wrote is the one that runs. That is why the defaults are never copied into your directory. A copy would freeze you on today's version for no reason; a file you wrote on purpose is a choice you made.

Editing the core is the other case, and it is not free. /update reinstalls the package and overwrites those edits, and so does the supervisor if a bad edit ever stops the harness booting. The user layer above is the answer for anything that fits it; for anything that does not, edit the core knowing the next update takes it back.

commands/<name>.md
a slash command as a prompt, with $ARGS substituted
commands/<name>.py
a slash command as code: async def run(ui, arg)
renderers/*.py
override how a message type or a tool call is drawn
panels/*.py
lines in the header, or above the input
glyphs.json
the glyph and label for each message type
keys.json
a key mapped to a slash command or an action
banner.txt
the wordmark
statusline.sh
a script that gets JSON on stdin and prints one line; leave it out and the built-in one runs, and still improves with the package

Your files are handed a small, stable facade — notify, get_input, set_input, send_prompt, project_dir, model(), request_render() — and never the app's internals. The facade is versioned: a file written against a different version is disabled rather than left to half-work. A file that will not import is skipped and reported; it never stops the harness booting. Most edits here restart the app into the change at the next idle moment — the status line and the model catalog need no restart at all.

source: src/micro_cc/utils/user_layer_.py

skills

Skills are packaged instructions the model loads when a task calls for them: a workflow with its own reference files, not a single prompt. /new-skill writes one and /skills lists what is installed. They load from ~/.micro-cc/skills/<name>/SKILL.md (every project) or {project_dir}/skills/<name>/SKILL.md (this project only). Bundled with the package:

customizing-micro-cc
Read before changing micro-cc itself (slash commands, look of the TUI, keys, status line, banner, models, or harness source)
design
Create visual design artifacts, in two modes
docx
Comprehensive document creation, editing, and analysis with support for tracked changes, comments, formatting preservation, and text extraction
github
Research public GitHub repositories
graph-orchestration
Reference for the /graph subagent-orchestration mechanism
painted-video
Use when the user wants a painted/brushstroke-style animation synced to music: a real music video (not a typographic lyric video), or any WebGL2 canvas animation keyed to…
pptx
Use this skill any time a .pptx presentation is being created from scratch
system-design-review
Review downstream system effects before and after code changes: concurrency, asyncio task lifetime, cancellation, persistence, process/deployment boundaries, ownership an…
xlsx
Comprehensive spreadsheet creation, editing, and analysis with support for formulas, formatting, data analysis, and visualization

source: src/micro_cc/skills/

MCP servers

/new-mcp registers an external MCP server and /mcp lists what you have. Their tools join the same list as the built-ins, so the model does not care where a tool came from.

source: src/micro_cc/tools/mcp_client_.py

built 2026-10-04 from microcc@6501e4a · v0.2.103 · llms.txt