Skill Sync: 27/27 skills version-pinned, drift detection deployed

24 of 27 skill wrappers had no version tracking. The first sync fixed all 27 in one run and deployed a hook that prevents the situation from recurring. Skill drift is now a detected condition, not a silent one.
Context
Context-curator mounts vault skills as SKILL.md files that Claude Code reads at session start. When a vault skill is updated, the mounted wrapper should update to match. Without version tracking, there was no way to know whether the wrapper a Claude Code session was reading was current or stale. The only way to detect drift was manual inspection : comparing vault source to mounted wrapper by eye.
The first sync audit revealed the full extent of the problem: 24 of 27 mounted wrappers had no version: field at all. 3 vault skills had no mounted wrapper. 12 description mismatches existed between mounted and vault source. Drift was not the exception : it was the default state.
The approach was inspired by Hermes Agent (nousresearch/hermes-agent) self-improvement patterns: version manifests for sync tracking and SessionStart nudges for drift notification.
What Changed
Four components were built together:
A manifest extension added vault_version, vault_hash, mounted_version, and mounted_vault_hash to each skill item, plus a sync_status section categorizing all skills as synced, version_drift, content_drift, unmounted, or orphan_mounted.
A sync engine (skill_sync.py) with --check, --dry-run, --force, and --one NAME modes generates mounted wrappers from vault skill metadata. Running --check exits 0 if all 27 are clean.
A PostToolUse hook (Layer 5 in peon-curator.sh) detects writes to ~/vault/skills/*.md, appends the skill name to a dirty file. Overhead for non-skill writes: ~0.1ms.
A SessionStart nudge reads the dirty file at session start and injects a system message listing stale skills with the sync command to run.
Impact
Before: 24/27 version drift (no version field), 3 unmounted, 12 description mismatches. Drift was invisible.
After: 27/27 synced and version-pinned. skill_sync.py --check exits 0. PostToolUse hook detects future vault edits within milliseconds.
The detection capability is the durable value. The first sync fixed the current state; the hook ensures future drift is surfaced immediately rather than accumulating silently for weeks.
Source
- Experiment: experiments/context-curator/2026-04-02-skill-sync-system
- Project: projects/context-curator/_index
- Pattern: topics/agent-skill-crystallization