Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Spec version (separate cadence from binary): see
SPEC.md Changelog §19. The spec and the
binary version independently — the binary tracks SemVer over the
implemented surface; the spec tracks decisions and architecture.
[1.3.0] — 2026-05-28
Added
ai cloneidentity routing: reads~/.config/aiConstitution/metadata/projects.jsonand appliesgit config user.name/emailper URL-pattern match;--identity <name>forces a named entry (#394)ai hooks available: lists hooks from both the embedded library and theai-hookatom registry on skill-atoms.com (#397, #399)ai hooks list: per-client wiring columns — INSTALLED / CLAUDE (global|project|-) / COPILOT (#400)ai hooks install --copilot: wiresConstitution.runtime.mdinto~/.copilot/instructions/(#400)ai hooks propose: scaffolds.pyor.shhook files from a description or--from-violationaudit log (#389)ai audit override/ai audit violation: write structured markdown records to~/.ai/audit/(#386)ai memory retire: archives a named memory entry and removes it from MEMORY.md (#386)ai issue file: creates GitHub issues from description, body, or--from-auditlog files (#387)ai hooks share,ai mode share,ai persona share,ai profile share,ai skills share: file upstream contribution issues on the atom registries (#387)ai skills available: deduplication hides sub-skills listed independs_on; shows parent with(+N)count (#375, #379)ai skills install: resolvesdepends_onand installs all sub-skills automatically (#375)ai skills link: symlinks installed skills into~/.claude/skills/and~/.copilot/instructions/(#373)ai setup: skill selection step after wizard; idempotent~/.claude/CLAUDE.mdrewrite (#368, #370, #376)ai doctor: hook wiring completeness check;checkPersonasBlockonly warns when persona sections exist (#391, #404)ai status: unified vs 4-file constitution detection; correct wired hook count (#390, #402)- skill-atoms:
type: "ai-hook"added to schema; 13 governance hooks published as atoms (#55 in skill-atoms)
Fixed
ai update --migratenow calls the real migration pipeline (runMigrateFlatten,runMigrateAddBehavioral,runMigrateGenerateRuntime) instead of printing placeholder text (#396)ai hooks install --all: hook wiring now covers all 11 event hooks, not just 5;readWiredHookNameshandles both group and flat settings.json formats (#401)ai setup: no longer produces misleading migration warning on fresh TTY install; createsaudit/,memory/,governance/directories on first run (#361, #368)ai doctorandai statusno longer false-positive on missingCommon.md/Code.md/Writing.mdfor unified-model installs (#390)ai hooks list:__init__.py,_lib.py,test_*.py,*.example,*.tomlfiltered from display (#381, #400)
Changed
ai atomsgroup removed; atom management delegated to theatomsbinary fromconvergent-systems/atoms(#363)ai brand,ai sync status,ai plan list/new/showimplemented (#354, #355)ai skills available+ai hooks available: now fetch fromhttps://ai-atoms.com/exports/catalog.json— single CDN fetch replaces GitHub API calls (#416)ai skills install: fetches skill content from ai-atoms.com catalog (system_prompt_fragmentfield) instead of GitHub API (#418)ai hooks install: fetches hook scripts from ai-atoms.com catalog (scriptfield) with embed fallback for infrastructure files; 13 hooks shipped by catalog (#419)ai hooks run <slug>: new portable cross-platform hook runner — settings.json entries now useai hooks run auditinstead of absolutepython3paths (#411)ai constitution setup: new subcommand bootstrapping a personal constitution via the guided TUI wizard (#408)ai constitution restore --url <git-url>: restore~/.ai/from a personal git repo URL (#408)ai setupTUI: hook selection step added before skill selection; users pick individual hooks interactively (#410)- ai-atoms.com: 14 governance hook atoms published (13 with Python scripts +
hook/lib);hook-v1.jsonschema extended withscriptanddepends_onfields - 281 skills in ai-atoms.com catalog: 18 additional convergent-systems skills (commit, cleanup, diagram, make-clean, make-work, refactor, etc.) published to ai-atoms.com (previously only in skill-atoms.com)
- Website:
ai-constitution.convergent-systems.coupdated — four-file model replaced with unified Constitution.md description; version updated to v1.3.0 (#426)
Changed (post-initial entry)
- Embed stripped: 12 hook
.pyscripts removed from binary embed; hooks now source exclusively from ai-atoms.com catalog with_lib.pyremaining as the only embedded infrastructure (#424) ai skills installfallback: when a skill isn’t in ai-atoms.com catalog yet, falls back to skill-atoms GitHub API automatically (#429)
Fixed (post-initial entry)
ai hooks install --claude: purges old absolute-path entries before re-wiring so hooks don’t fire twice after upgrading (#413)readWiredHookNames: recognizes portableai hooks run <slug>format alongside oldpython3 /abs/pathformat (#414)ai hooks list:lib.pyfiltered (transition artifact);audit-logger.pywired toPreToolUse(#421)ai status: wired hook count now reflects both group and flat settings.json formats (#402)
[1.4.3] — 2026-05-29
Added
ai doctorcompact constitution checks — detects whenConstitution.compact.mdis missing or whenCLAUDE.mdstill references the full form;ai doctor --fixgenerates the compact form and updates the include (#460).ai setupreads Q36 to wire only selected clients — Claude Code and Copilot wired globally; Cursor and Codex print per-repo instructions (#459).- All clients use compact form — Cursor (
init-integrate --cursor) and Codex (AGENTS.md) now link toConstitution.compact.md(#459).
[1.4.2] — 2026-05-29
Fixed
ai setupnow wires the compact form into clients —Constitution.compact.md(~8KB) is generated immediately afterConstitution.mdand wired into~/.claude/CLAUDE.mdand Copilot instead of the full 38KB constitution. Both clients receive the same compressed,§ID-prefixed form on every session (#458).
[1.4.1] — 2026-05-29
Added
ai skills available— two-line display with full untruncated descriptions; header shows count and install hints (#456).ai skills available -p— Bubble Tea checkbox TUI:> [x]style selection, scrolling viewport,spaceto toggle,ato toggle all,ctrl+d/uto page,enterto install (#457).
Changed
ai setupskill step now uses the same checkbox TUI instead of the old numbered text prompt, and fetches from the ai-atoms catalog (single fetch) instead of per-atom GitHub API calls (#457).
[1.4.0] — 2026-05-29
Added
ai wrap <tool> [-- args...]— cross-platform Go dispatcher for command-wrapper interception. All wrapper logic moved from bash to Go; per-OS shims (git.cmd,git.ps1,gh.cmd,gh.ps1) delegate to it. Closes the Windows enforcement gap where protected-branch and pre-commit-secret gates silently did not fire (#443).ai doctor: Windows Python App Execution Alias detection +--fix— detects zero-byte Store stubs that shadow a real Python installation;--fixremoves them automatically (#451).ai doctor: blocking wrapper hook drift check — verifies every blocking pre-hook incommand-wrappers.tomlis installed on disk; surfaces[⚠]with remediation hint (#447).- Per-pattern severity in
patterns.json—block_level: "blocking"(default, abort) or"warn"(emit warning, allow). High-confidence patterns (GitHub, AWS, GCP) are explicitly"blocking"; medium-confidence patterns with false-positive risk are"warn"(#455). - Local allowlist in
patterns.local.json—disable: ["jwt-token"]suppresses specific patterns per-repo without touching the global canonical file (#455). make docs— generates the README command table fromNewRootCmd().Commands()so it can’t drift;gen_docs.gois the generator (#454).ParseSectionsAnyinconstitution.go— handles both legacy## N. Name Rulesand template-generated## §N Namesection headers; enablesai compress --check-coverageon normally-generated constitutions (#448).ai compress --check-coverage— compares full-extraction rule IDs againstConstitution.compact.md; exits non-zero on missing IDs (#446).- Lossless compact form —
Constitution.compact.mdnow generated from the rule extractor rather than a hand-written string; 158 rule IDs verified end-to-end (#448, #449). - Go
BlockLevel+IsBlocking()helpers insrc/pkg/patterns/patterns.go— propagatesblock_levelfrompatterns.jsonintoMatchvalues (#455).
Changed
ai setupdoes a full minimum install — now runsinstallAllHooksAndWire(catalog + infrastructure + settings.json wiring),embed.ExtractWrappers(platform-appropriate command-wrappers), and Windows Python prerequisite fix before writing hooks (#452).- Hook enforcement is now fail-closed —
runHookForWrapreturns exit 1 +ENFORCEMENT DEGRADEDmessage when a blocking hook file is missing or Python is absent, instead of silently returning 0 (#445). - Config error in
ai wrapfails closed — unreadablecommand-wrappers.tomlexits 1 with a remediation hint instead of passing through to the real binary (#445). ai wrapdoes not forward tool args to hooks — hooks read git state viagit diff --staged/git branch --show-current; passing git subcommand tokens causedargparsefailures in strict-mode hooks (#453).- Hook stdin is
nilin wrapper mode — prevents pre-hooks from consuming stdin the real binary needs (A.3) (#453). worktree-guardis advisory — markedenforcement = "advisory"incommand-wrappers.toml; convention enforcement, not a security gate (#445).- Constitution template is cross-platform — §3.4.1 presence test now includes per-OS table (POSIX sh / PowerShell / cmd); §3.4.2 clipboard rule has per-OS commands;
0600/0400replaced with portable intent;ls -lareplaced with platform-neutral description; path-separator normalization clause (§3.2.13); portable path resolution (§3.5.6); shell-neutral command discipline (U18); line-endings/encoding (U19) (#450). ruleHeadReandbulletSubRuleReupdated to capture three-level IDs (N.M.K) in addition to two-level (#448).- Template bold subsection heads stripped of
§prefix (**§N.M.K.**→**N.M.K.**) so the numeric ID is extractable (#448). ExtractWrappersis platform-filtered —.cmd/.ps1only on Windows; bash shims only on POSIX;notify-mevariants on all platforms (#443).- SPEC.md label standardized to
v1.0.0-drafteverywhere (#447). - README command table regenerated from
NewRootCmd().Commands()— alphabetical, source-of-truth, addsai wrap(#454).
Fixed
- Duplicate
newCompressCmd()registration inroot.AddCommandremoved (#441). - Go version floor standardized to 1.26 across all modules and
.tool-versions(#441). renderCompactConstitutionhand-written body replaced with extractor-based generator (#449).- §4.1–§4.8 and §3.2.2/§1.6 plain bullets tagged with stable
N.M.KIDs in constitution template (#449). TestDoctorTerminalNotifierFoundassertion tightened to per-line check (was false-positive when any[⚠]appeared alongside anyterminal-notifiermention) (#447).command-wrappers.tomlheader updated to reflect post-fail-closed enforcement model (#447).
[1.4.3] — 2026-05-29
Added
ai setupinstalls Claude official plugins — when Claude Code is selected in Q36, setup registersanthropics/claude-plugins-officialmarketplace and installssecurity-guidance(always) plus any plugins selected in Q36c (superpowers, amendment-author, hook-author, etc.) (#462).ai doctorcompact constitution checks — detects whenConstitution.compact.mdis missing or whenCLAUDE.mdstill references the full form;ai doctor --fixgenerates the compact form and updates the include (#460).ai setupreads Q36 to wire only selected clients — Claude Code and Copilot wired globally; Cursor and Codex print per-repo instructions (#459).- All clients use compact form — Cursor and Codex
AGENTS.mdnow link toConstitution.compact.md(#459).
Fixed
- Skill symlinks for
make-work,make-review,makewere pointing to macOS temp dirs left by test runs; relinked to correct~/.ai/skills/targets (#461). - Skills install tests now isolate
CLAUDE_SKILLS_DIRto prevent writing dangling symlinks into the real~/.claude/skills/(#461). envand.env*added to.gitignoreto prevent accidental commit of local credentials.
[1.4.4] — 2026-05-29
Added
ai setupinstalls Claude official plugins — registersanthropics/claude-plugins-officialmarketplace and installssecurity-guidance(always) plus Q36c selections (#462).ai setupwires clients from Q36 selection — only selected clients wired; Cursor/Codex print per-repo reminder (#459).ai doctorcompact checks — detects missingConstitution.compact.mdor staleCLAUDE.mdinclude;--fixcorrects both (#460).- Profile picker wired — Q07 answer now maps to correct domain sections in
Constitution.md(code → Technical, writing → Prose) (#469).
Fixed
- Six
os.Symlink()calls replaced withsymlinkOrCopy()— falls back to file copy on Windows without Developer Mode (#464, #470). - Hook validation uses
discoverPythonArgs()instead of hardcodedpython3; bash validation skipped on Windows (#465, #470). - Pre-commit hook body uses portable
ai hooks runinstead ofexec python3with bash shebang (#465, #470). - Path separator checks now match both
/and\for Windows AI_ROOT paths (#466, #470). checkBinPathskips POSIX system bin list on Windows (#467, #470).- Stale
Code.md not foundline removed fromai versionoutput — it is a section inConstitution.md(#463). - Skill symlinks
make-work,make-review,makerelinked from broken temp paths; tests now isolateCLAUDE_SKILLS_DIR(#461).
[Unreleased]
Spec — v0.10: GitHub Actions trinity
workflow-atoms.com(introduced v0.9) splits into three sibling registries (action-atoms.com,workflow-atoms.com,pipeline-atoms.com) matching how GitHub layers actions / workflows / pipelines. Seven atom registries total; eight Convergent Systems Astro sites (SPEC §14.1).- Canonical-identity vs consumption-form (SPEC §7.11.1): atoms.com
URLs are the canonical identity humans/CLI/docs use; GHA’s
uses:accepts onlyowner/repo@ref; the CLI translates atoms.com URLs to the GH-grammar form at file-write time. Each atom version corresponds to exactly one git tag on the backing repo;ai doctorsurfaces drift. - New CLI verbs:
ai actionandai pipeline(same shape asai workflow). All three accept the canonical atoms.com URL form as the install argument. - Wizard adds Q36d/e/f/g in Phase 8 (one per layer plus the install-mode prompt).
settings.tomlv0.4: addsactionRegistry,pipelineRegistry,[action],[pipeline],[atoms.cache.action],[atoms.cache.pipeline]; the v0.9[workflow] installmoves to[atoms] install(cross-layer setting).- The v0.9
atom-actiondata-fetcher idea is dropped — it conflated runtime data-atom fetching (still useful, but a separate concern) with workflow-atom consumption (which can’t be runtime-fetched because GHA parses YAML at workflow-init time).
Changed — refactor: single-binary distribution
- Hook library is now embedded into the
aibinary via//go:embed(seesrc/cmd/ai/embed/). Repo-roothooks/andbin/directories removed. The 15 hook files + wrapper templates + patterns.json- command-wrappers.toml live at
src/cmd/ai/embed/{hooks,wrappers}/. Extracted onto disk at install time viaai setuporai hooks install --all/ai hooks install command-wrappers.
- command-wrappers.toml live at
ai clone <url>subcommand replacesbin/cloneshell script. Identity-routing againstmetadata/projects.jsonis stubbed for v0.8; the v0.8 implementation runsgit cloneand installs the pre-commit secret hook into the clone.ai audit rotatesubcommand replacesbin/audit-rotate.sh. Same behavior (gzip prior-month JSONLs);--dry-runflag honored.ai hooks installis now the canonical surface for materializing the embedded library:--all,<name>, orcommand-wrappers. Idempotent;--forceto overwrite.bin/aiPATH-shim removed. A misconfigured PATH already yields a clear “command not found”; the stub provided no signal beyond that..goreleaser.yamlldflags fixed. Previously targetedmain.version(no such var); now stamps.../internal/buildinfo.{version,commit,date}correctly.ai versionoutput:v0.8.0 (commit abc1234, built 2026-05-23T08:00:00Z).
Added
SPEC.mdv0.8 — authoritative implementation specification.questions.yamlv0.8 — wizard question taxonomy.settings.toml.example— canonical defaults for~/.config/aiConstitution/settings.toml.GOALS.md— G1-G7 goals, non-goals, anti-goals.ARCHITECTURE.md— navigational architecture overview, indexed toSPEC.mdsections.docs/adr/— ADR-0001 through ADR-0004 backfilled from spec decisions:- ADR-0001 Atoms architecture (versioned immutable units).
- ADR-0002 Command Wrapper Facade for cross-tool enforcement.
- ADR-0003 No trufflehog;
patterns.json+ optional gitleaks. - ADR-0004 Markdown issue templates in v0.8; YAML Issue Forms deferred.
.github/ISSUE_TEMPLATE/— six Markdown templates perSPEC.md §9.5and§14.3:epic,feature,story,task,hook,finding.hooks/— Python stdlib-only hook library:patterns.json,audit.py,secret-block.py,secret-precommit.py,branch-guard.py,worktree-guard.py,no-verify-strip.py,destructive-gh-guard.py,destructive-terraform-guard.py,destructive-kubectl-guard.py,audit-command.py,checkpoint-tick.py,command-wrappers.toml.bin/— helper scripts:clone,audit-rotate.sh,git.template,gh.template,ai(PATH-shim error stub).governance/policy/branch-guard.json— canonical protected branch set.governance/wizard/— pointer toquestions.yaml.governance/seed/answers.example.yaml— wizard answer template.src/cmd/ai/— cobra-based CLI scaffold; every verb fromSPEC.md §3is registered (stubs for v0.8).src/internal/— packages:config,paths,audit,state,hooks,atoms(all skeletal).src/pkg/patterns/— Go bindings forpatterns.json(consumes the same canonical pattern set as the Python hooks).src/pkg/version/— build-time version stamping (-ldflags "-X .../version.Version=…").web/ai-constitution/— Astro scaffold for the methodology site. No live brand-atoms fetch (deferred); inline brand tokens from[email protected]perSPEC.md §14.4.
Changed
.github/workflows/secret-scan.yml— replacedtrufflehogwith a diff scan againsthooks/patterns.json.SPEC.md §10.4forbids trufflehog; the canonical CI net is gitleaks (opt-in) and thepatterns.jsonset is authoritative for what gets blocked.
Spec corrections (v0.8 → see SPEC.md §19)
- Fixed typo:
itsx own→its own(header status line). - Fixed section numbering:
§13.1–13.4(Settings.toml Schema) and§14.1–14.4(Brand Integration) had subsections labeled with the previous section’s number; now consistent with their parent.