You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The word "invariant" currently names both the wrong content and the right content, so neither
reads reliably, and the folder holding that content sits behind a Claude-specific path despite
being consumed by other harnesses. The skill uphold-invariants and its backing folder tools/claude/config/references/ are named around "invariant," but the content inside is tiered
Must/Should/Consider guidance — only the Must tier is unconditionally true the way an invariant
is; Should explicitly allows exceptions and Consider is pure judgment with no default either way.
Meanwhile docs/invariants/ now exists as a project-level convention for genuinely
unconditional, Must-only domain facts. scan-invariants has the same problem: it scans against
that same graded content and holds more references to the folder than any other file.
The location is wrong for the same reason the name is. tools/claude/link.bash already links the
folder into ~/.agents as well as ~/.claude, so non-Claude harnesses read it today — but it
lives under tools/claude/config/, which says it belongs to one harness.
Ideal state
The skill currently named uphold-invariants is renamed to uphold-standards
The skill currently named scan-invariants is renamed to scan-standards, and its
description no longer says it checks "whether a codebase upholds its invariants"
The graded content lives at tools/agents/config/standards/, not under any single harness's
directory
tools/agents/ follows the standard tool-folder shape with its own link.bash, so symlinks agents works and features/update/symlinks.bash discovers it with no registration
tools/claude/link.bash no longer links the folder; the two lines that pointed at references/ are gone
The folder is linked to both ~/.claude/standards and ~/.agents/standards, matching the two
destinations it has today
The superseded ~/.claude/references and ~/.agents/references symlinks are gone, not merely
unused. symlinks does prune broken links, but not at the depth these sit at, so both must be
removed explicitly — see the Must in docs/standards/symlinks.md
The renamed README's framing language no longer calls its content "invariants" — it describes
itself as graded Must/Should/Consider standards
Every skill and doc referencing the old path points at the new one: discuss, design, review-code, review-completion, review-converge, scan-standards, uphold-standards, tools/claude/config/CLAUDE.md, and the affected routines/ files
uphold-invariants and scan-invariants no longer exist as names outside @archive/, freeing
both for accurate reuse by future project-level skills
Out of scope
Moving tools/claude/config/skills/ — skills are also linked into ~/.agents and have the same
harness-neutrality argument, but they are a much larger move and are not needed to fix the
naming problem. Separate work.
Building the project-level skills that load docs/invariants/ and docs/standards/ — separate
follow-up work this rename enables by freeing the names, not part of it
Any change to the actual Must/Should/Consider content — naming, terminology, and location only,
not a content rewrite
tools/claude/config/@archive/ — archived content is pruned by features/update/symlinks.bash
and never symlinked, so its stale references can stay
Starting points
tools/claude/config/skills/uphold-invariants/SKILL.md — the skill that loads the folder
tools/claude/link.bash — the two symlink lines that move to tools/agents/link.bash
tools/@new — the template for the tool folder being created
QA plan
Run symlinks — expect ~/.claude/standards and ~/.agents/standards to both resolve to tools/agents/config/standards/
Run symlinks agents on its own — expect it to succeed and relink only that folder,
confirming the new tool folder is discoverable by name
Run find ~/.claude ~/.agents -maxdepth 1 -type l ! -exec test -e {} \; -print — expect no
output. Any line is a leftover references symlink; symlinks will not remove these, so they
must be deleted by hand
Open a new Claude Code session in this repo and make a trivial code edit — expect uphold-standards to auto-invoke the same way uphold-invariants used to
Run /scan-standards with a theme argument — expect it to locate the relocated folder and read
the theme file rather than erroring on a missing path
Grep the repo for uphold-invariants, scan-invariants, and references/, excluding @archive/ — expect zero hits. Note that /Library/Preferences/ in tools/macos/config/macos-defaults and a VS Code docs URL in tools/vscode/config/keybindings.json both contain the substring references/ and are false
positives
Read the relocated README's framing paragraph — expect it no longer claims all three tiers are
"invariants"
Done when
No file in the repo still calls the graded Must/Should/Consider content "invariants," and that
content no longer lives under a single harness's directory.
Current state
The word "invariant" currently names both the wrong content and the right content, so neither
reads reliably, and the folder holding that content sits behind a Claude-specific path despite
being consumed by other harnesses. The skill
uphold-invariantsand its backing foldertools/claude/config/references/are named around "invariant," but the content inside is tieredMust/Should/Consider guidance — only the Must tier is unconditionally true the way an invariant
is; Should explicitly allows exceptions and Consider is pure judgment with no default either way.
Meanwhile
docs/invariants/now exists as a project-level convention for genuinelyunconditional, Must-only domain facts.
scan-invariantshas the same problem: it scans againstthat same graded content and holds more references to the folder than any other file.
The location is wrong for the same reason the name is.
tools/claude/link.bashalready links thefolder into
~/.agentsas well as~/.claude, so non-Claude harnesses read it today — but itlives under
tools/claude/config/, which says it belongs to one harness.Ideal state
uphold-invariantsis renamed touphold-standardsscan-invariantsis renamed toscan-standards, and itsdescription no longer says it checks "whether a codebase upholds its invariants"
tools/agents/config/standards/, not under any single harness'sdirectory
tools/agents/follows the standard tool-folder shape with its ownlink.bash, sosymlinks agentsworks andfeatures/update/symlinks.bashdiscovers it with no registrationtools/claude/link.bashno longer links the folder; the two lines that pointed atreferences/are gone~/.claude/standardsand~/.agents/standards, matching the twodestinations it has today
~/.claude/referencesand~/.agents/referencessymlinks are gone, not merelyunused.
symlinksdoes prune broken links, but not at the depth these sit at, so both must beremoved explicitly — see the Must in
docs/standards/symlinks.mditself as graded Must/Should/Consider standards
discuss,design,review-code,review-completion,review-converge,scan-standards,uphold-standards,tools/claude/config/CLAUDE.md, and the affectedroutines/filesuphold-invariantsandscan-invariantsno longer exist as names outside@archive/, freeingboth for accurate reuse by future project-level skills
Out of scope
tools/claude/config/skills/— skills are also linked into~/.agentsand have the sameharness-neutrality argument, but they are a much larger move and are not needed to fix the
naming problem. Separate work.
it would split Claude Code's config across two repos
docs/invariants/anddocs/standards/— separatefollow-up work this rename enables by freeing the names, not part of it
not a content rewrite
tools/claude/config/@archive/— archived content is pruned byfeatures/update/symlinks.bashand never symlinked, so its stale references can stay
Starting points
tools/claude/config/skills/uphold-invariants/SKILL.md— the skill that loads the foldertools/claude/link.bash— the two symlink lines that move totools/agents/link.bashtools/@new— the template for the tool folder being createdQA plan
symlinks— expect~/.claude/standardsand~/.agents/standardsto both resolve totools/agents/config/standards/symlinks agentson its own — expect it to succeed and relink only that folder,confirming the new tool folder is discoverable by name
find ~/.claude ~/.agents -maxdepth 1 -type l ! -exec test -e {} \; -print— expect nooutput. Any line is a leftover
referencessymlink;symlinkswill not remove these, so theymust be deleted by hand
uphold-standardsto auto-invoke the same wayuphold-invariantsused to/scan-standardswith a theme argument — expect it to locate the relocated folder and readthe theme file rather than erroring on a missing path
uphold-invariants,scan-invariants, andreferences/, excluding@archive/— expect zero hits. Note that/Library/Preferences/intools/macos/config/macos-defaultsand a VS Code docs URL intools/vscode/config/keybindings.jsonboth contain the substringreferences/and are falsepositives
"invariants"
Done when
No file in the repo still calls the graded Must/Should/Consider content "invariants," and that
content no longer lives under a single harness's directory.