The ~/.claude/ directory was previously local-only — a machine wipe
would have lost the accumulated memory, custom skills, and settings.
This commit moves the durable parts into dotfiles with the same
symlink-to-home pattern used for CLAUDE.md, PENDING.md, REVIEWED.md,
and L2-BOOTSTRAP.md.
Preserved (symlinked from ~/.claude/* into here):
skills/audit/ — thinking-folder drift scanner
skills/symmetria/ — practice-of-return discipline
skills/vault-update-people/ — Obsidian People-file maintainer
skills/wake-up/ — session restoration
skills/wrap-up/ — session state capture
memory/ — 55+ memory files (MEMORY.md, sessions,
ledgers, project state, feedback, etc.)
settings/settings.json — user preferences (hooks, flags, no secrets)
Deliberately NOT backed up:
settings.local.json — contains operational secrets (HF_TOKEN,
SSH password in expect scripts); by naming
convention, *.local.* is not synced.
Needs separate review and probable rotation.
sessions/, history.jsonl, caches, telemetry — ephemeral
plugins/, marketplace skills and agents — reinstallable
The working copies at ~/.claude/skills/* and
~/.claude/projects/-Users-davidglidden/memory are symlinks into this
directory, so every write flows here automatically. install.sh
recreates the symlinks on a fresh machine.
FOLLOW-ON (flagged, not in this commit):
settings.local.json contains a HuggingFace token and an SSH password
as plaintext strings inside allowed Bash command patterns. These
should be rotated and moved to secure storage (keychain / pass /
env file outside the settings file).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7.3 KiB
name, description, argument-hint
| name | description | argument-hint |
|---|---|---|
| audit | Scan thinking folder and Obsidian vault inbox for organizational drift — loose files, missing metadata, stale items, broken references. Reports only; never acts without approval. | [thinking|inbox] [--include-deferred] |
Collections Audit
Scan the thinking folder and/or Obsidian vault inbox for organizational drift. Produce a structured report of what's out of place. Propose fixes but never execute without explicit steward approval.
Paths
- Thinking folder:
/Users/davidglidden/_Dev/CapableMind-AI/docs/thinking/David/ - Thinking README (living index):
/Users/davidglidden/_Dev/CapableMind-AI/docs/thinking/README.md - CURATION-MAP:
/Users/davidglidden/_Dev/CapableMind-AI/docs/thinking/David/l2-constitution/CURATION-MAP.md - Vault root:
/Users/davidglidden/Library/Mobile Documents/iCloud~md~obsidian/Documents/David, root-and-branch/ - Vault inbox:
00a. _inbox/(relative to vault root) - Vault People:
03. People/(relative to vault root)
Scope
Parse $ARGUMENTS to determine scope:
- No argument or
all→ audit both targets thinking→ thinking folder onlyinbox→ vault inbox only
Procedure
1. Thinking Folder Audit
Run these checks in parallel where possible. For frontmatter checks, read only the first 5 lines of each file (check for --- opener), never the full content.
a. Loose files at root
Glob for *.md, *.json, *.yaml directly in the thinking folder (not recursive). Exclude CLAUDE.md (belongs at root by convention). Every other file is a MOVE issue.
Propose destinations using naming heuristics:
amendment-*→amendments/substrate-governance-*→l2-constitution/(governance inquiry content)l2-design-*→l2-constitution/D.Glidden - The Chamber*→chamber/orreviews/entities.json,mempalace.yaml→ flag for steward decision (utility files, no obvious home)
b. Missing YAML frontmatter
For every .md file across all subdirectories, check if line 1 is ---. This is a binary check — has frontmatter or doesn't. Report as aggregate per subfolder: "N of M files in l2-constitution/ lack frontmatter."
Do NOT propose specific fields — that's an editorial decision for the steward.
c. CURATION-MAP inventory drift
Read CURATION-MAP.md. Extract any file count statistics (§6 or similar). Compare against actual filesystem counts for l2-constitution/ and its subdirectories. Report mismatches.
Also check: are there files on disk in l2-constitution/ that appear in no CURATION-MAP section? These are "uncharted" files.
d. CURATION-MAP §4 — unresolved ambiguous items
Read CURATION-MAP.md §4 (Ambiguous Status). List any items still awaiting steward classification. These are AMBIGUOUS issues — the audit surfaces them but cannot resolve them.
e. Broken cross-references
Grep for markdown links [...](...) that reference .md files within the thinking folder. For each, check if the target file exists (resolving relative paths from the source file's location). Report broken links with source file and line number.
Keep this check scoped to l2-constitution/ (the largest and most cross-referenced subfolder) to stay fast. Expand scope in v2 if needed.
f. README.md drift
Read thinking/README.md. Find David's section. Extract the file counts from subsection headings (pattern: ### Category (Path/) — N files). Compare against actual file counts in each subdirectory. Report mismatches.
2. Vault Inbox Audit
Run these checks in parallel. Read only frontmatter (first 10 lines) of each inbox file.
a. Empty or placeholder titles
Read frontmatter of each .md file in the inbox. Flag files where the title: field is:
- Empty or whitespace-only
---,***,----, or similar punctuation-only- A single character or bracket expression like
[pattern template]
These are MISSING issues — the file can't be triaged without a usable title.
b. Person-name detection
Identify files whose title: looks like a person or business name: 2–3 capitalized words, no markdown characters, no common sentence starters. Cross-reference against filenames in 03. People/.
- Match found in People → skip (already handled)
- No match → MOVE issue: "Looks like a contact — propose creating People file or routing to
03. People/"
c. Staleness by age
Extract created or draft_created date from frontmatter. Bucket files by age:
- 30–90 days
- 90–180 days
- 180+ days
Report as aggregate with count per bucket: "54 files older than 180 days (Sept 2025 Drafts migration batch)." Do NOT list every file individually — at 67+ files that's noise, not signal.
d. Missing type classification
Count how many inbox files have a type: field in frontmatter. Report the aggregate: "0 of 67 files have type classification."
If the count is low, note the proposed convention for steward consideration:
Proposed
type:values:contact,fragment,prompt,session,reference,pedagogy,admin
This is INFO severity — a convention proposal, not an error.
3. Compile Report
Structure the output exactly as follows:
## Audit Report — [date]
**Scope:** [thinking | inbox | both]
**Files scanned:** X thinking, Y inbox
**Issues found:** N
### MOVE (wrong location)
[one line per file: path → proposed destination]
### MISSING (metadata gaps)
[aggregates per subfolder for frontmatter; individual items for titles]
### STALE (drift / aging)
[CURATION-MAP mismatches, README drift, inbox age buckets]
### AMBIGUOUS (needs steward decision)
[CURATION-MAP §4 items, utility files with no obvious home]
### BROKEN (integrity)
[broken cross-references: source file:line → missing target]
### INFO
[type classification proposal, other non-actionable observations]
Omit any section that has zero items. End with:
Approve all proposed moves? Or review individually?
4. Handle Steward Response
If "approve all":
- Execute MOVE items: use
git mvfor thinking folder files (inside git repo), regularmvfor vault files - After moves in thinking folder: update
thinking/README.mdper the CLAUDE.md convention (scan filesystem, update file counts in subsection headings) - Do NOT batch-approve AMBIGUOUS items — those always require individual decisions
If "review individually":
- Present each MOVE item one at a time
- For each: steward says apply / skip
- After all reviewed, execute approved moves and update README
After execution:
- Report what was moved and what was skipped
- Note any AMBIGUOUS items still unresolved
Important constraints
- Never move files without approval. This is a reporting tool first.
- Never read full file contents for the audit scan — frontmatter and filenames only. Content is the steward's domain.
- Respect the iCloud path. The vault path contains spaces. Always quote paths in Bash commands.
- Git awareness. The thinking folder is inside a git repo. Use
git mvfor moves there. The vault is NOT in a git repo. - Don't propose content changes. Missing frontmatter is reported; what fields to add is the steward's decision.
- Aggregate where possible. 67 individually listed inbox files is not a useful report. Bucket and count.
- CURATION-MAP is governance. Treat §4 items as the steward's decision queue, not as problems to solve.