Repository navigation
Model Citizen v0.14.0
The control plane for your coding agents, however you run them.
An open-source control plane for coding agents. One checkout of rules, skills, roles and stances, projected into Claude Code and Codex with your own primitives, enforced with hooks, and measured with usage telemetry and cost controls. It layers under the rules libraries and orchestration you already use.
Preferences you can switch: autonomy, delegation, cost, testing, voice, commits, planning, licensing and build versus buy. Three of those bind to enforcement today: autonomy sets which shell-command grade stops and asks, delegation changes spawn routing, and cost resolves a model and budget table per role. The rest are prose that swaps cleanly. The usage report groups rule hits by the variant that was selected, so a switch can be checked rather than assumed.
Compatibility
- claude-code-cli-macos: qualified
- claude-code-vscode-macos: unqualified
- claude-code-cli-linux: qualified
- claude-code-plugin-marketplace: unqualified
- codex-cli-macos: unqualified
- codex-vscode-macos: unqualified
- codex-desktop-macos: unqualified
- codex-cli-linux: unqualified
- cursor: planned
- grok: planned
Native restrictions remain authoritative. See the versioned compatibility catalog for evidence and gaps.
Compatibility policy
Stable interfaces, preview boundaries, deprecation, migration and failed-release recovery are defined in the versioned compatibility policy.
Migration
Upgrade from v0.13.1 by reviewing the generated v0.14.0 projection before applying it: a minor release that renames the product to Model Citizen, adds the citizen command with harness kept as an alias, renames the plugin to model-citizen@model-citizen, and adds one selection resolver with modes and on/off switches for rules, skills, workflows, roles and hooks. Sync now links the repository's rules one file at a time into a real ~/.claude/rules/harness/ directory instead of one directory link. The release also adds the local decision provider's user-level policy file and its binding into Bash command grading, a write-intent ledger for parallel writers, workspaces built from .code-workspace files, session-start injection of a differing project or session stance, a profile fingerprint, schema versions and context attribution on ledger rows, and the concise voice. Every new switch, mode, provider and workspace is off or unchanged until you select it. The architecture-viewer preview is inert until an external adapter is registered and selected.
- Run
citizen sync --dry-runfrom the v0.14.0 checkout and inspect every proposed write, ownership change and conflict. Expect onemigrate ~/.claude/rules/harness (one link per rule replaces the directory link)line followed by onelinkline per rule into that directory, andrelinklines for skills, agents, commands, hooks, the output style, stance links andCLAUDE.md. Nothing outside the harness's own files should appear. - Run
citizen synconly after resolving unmanaged-file and adoption conflicts. Afterwards~/.claude/rules/harnessis a real directory of per-rule links, andcitizen diffreports no drift. harnesskeeps working as an alias ofcitizen; the documentation now namescitizen.- If you installed the Claude Code plugin, move it to the new ID: with a checkout installed run
citizen upgrade --dry-run, thencitizen upgrade, which uninstallsagent-harness@agent-harness, removes theagent-harnessmarketplace, adds it again from its recorded source and installsmodel-citizen@model-citizen. A plugin-only install runs the same four/pluginsteps in a session; see docs/runtime-installation.md. Skills move from/agent-harness:<name>to/model-citizen:<name>. - Your configuration keeps working unchanged. A new
citizen initrecords the stances it wrote underinit_defaults; a v0.13.1 configuration has none, so every stance reads as set by you incitizen selection. To try a mode, runcitizen config set mode minimal(orfull, the defaults); a key you typed still wins over the mode. Switch a unit off withcitizen config set <kind>.<id> off, for examplerules.decisions-and-plans; the four core hooks,grade-bash,stop-gate,brief-guardandneutralize-tool-output, can be switched off only after you setcore_switches_acknowledgedtrue. See docs/modes.md. - With
governance.providerset to anything butnone,grade-bashnow asks the provider about every Bash command it lets through, and an agent write to a governance policy file or to yourconfig.jsonis always asked about. A user-levelgovernance.jsonbesideconfig.jsonis read under the repository's.agent-harness/governance.json. Under providernonenothing changes. - Workspaces are opt-in: set
workspaces_dirto the folder holding your.code-workspacefiles to turn oncitizen workspaceand theworkspace-sessionstart hook; while it is set, sync ownsCLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MDin~/.claude/settings.json. See docs/workspaces.md. - Expect new rows in
~/.local/state/agent-harness/to carryschema_version,profile_fingerprintand, on session rows,context_attribution; rows written earlier are read unchanged and never rewritten. On Claude Code a second edit to a path a live sibling session has claimed withcitizen intent claimis denied;coordination.repeat_overlap: "warn"only warns.
Recovery
- Preserve reported conflicts, adopted backups, external viewer adapter descriptors and external viewer installations.
- To return to v0.13.1, first remove
~/.claude/rules/harness, which v0.14.0 made a real directory holding only links to the checkout's rules, then check out v0.13.1 and runharness synconce. Skip the removal and the v0.13.1 sync refuses at that path, exiting 2 after it has already relinked stances, hooks, skills, commands andCLAUDE.md, which leaves a mixed home until a sync succeeds;--adoptcompletes it only by moving v0.14.0's directory under~/.local/state/agent-harness/pre-harness/as though it were your own backup. After the rollback, v0.13.1'sharness diffandharness doctorreport onemissing linkper rule under~/.claude/rules/harness/: stale journal entries from v0.14.0, harmless because the directory link serves every rule, and cleared by the next v0.14.0 sync. - v0.13.1 ignores modes, switches,
init_defaults,core_switches_acknowledgedandworkspaces_dir, so every rule, command and hook comes back on, and nothing in your configuration needs removing for its sync to succeed. Itslocalprovider reads only the repository's.agent-harness/governance.json, never the user-level file, and itsgrade-bashdoes not ask the provider. If you setworkspaces_dir, runcitizen config unset workspaces_dirandcitizen syncfrom v0.14.0 before rolling back, so sync putsCLAUDE_CODE_ADDITIONAL_DIRECTORIES_CLAUDE_MDin~/.claude/settings.jsonback to what it held; v0.13.1 never touches that key. - A rollback sync does not touch the plugin:
citizen upgradehas no reverse, and a moved install staysmodel-citizen@model-citizen. - Use
harness uninstallto remove the installation, and follow docs/runtime-installation.md for rollback and ownership recovery; use docs/task-continuation.md for task continuation.