Files
David F GliddenandClaude Opus 4.7 119285cf43 claude: back up custom skills, memory, and settings with symlink pattern
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>
2026-04-17 13:51:04 +02:00

7.3 KiB
Raw Permalink Blame History

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 only
  • inbox → 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/ or reviews/
  • 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 mv for thinking folder files (inside git repo), regular mv for vault files
  • After moves in thinking folder: update thinking/README.md per 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 mv for 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.