Skip to content

moonweave/compass-skill

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

/compass — Mid-Session Drift & Rot Audit

A user-invoked Claude Code skill that audits long sessions for two accumulated risks: (1) drift between the current task and the original session intent (transcript analysis), and (2) codebase rot (git uncommitted accumulation, test/lint state from cached artifacts, file bloat, TODO grep, circular dependencies, module boundary degradation).

Built for the case where you've been working with Claude for hours and want a sanity check — "am I still building what I started?" and "is the codebase getting worse?" — before continuing.

Why

LLM coding agents preserve consistency with your most recent request, not your original intent. Long sessions accumulate drift the model never flags, and code accumulates rot the model never volunteers. By the time you notice in PR review, several hours of work have to be unwound.

/compass runs an internal-data audit on demand: reads the current session's transcript, queries git/lint/test cache, judges module boundaries, and emits a SAFE / CONSIDER / STOP verdict per axis with a Top action.

It complements rather than replaces other skills:

  • superpowers:brainstorming — start of a task (intent exploration)
  • /review, code-reviewer — end of a task (PR gate)
  • claude-coach — internal-friction signals (CLAUDE.md updates from user corrections)
  • /decide — single-decision-point external research
  • /compass — mid-session internal-data audit (this skill)

Install

Copy SKILL.md to your Claude Code user skills directory:

mkdir -p ~/.claude/skills/compass
cp SKILL.md ~/.claude/skills/compass/SKILL.md

The skill auto-loads in any new Claude Code session. Verify it appears in /help.

Usage

/compass <intent>          — audit against the explicit baseline intent
/compass                   — derive baseline via cascade (recent spec → task-init heuristic → ask)

Invocation is manual only. The skill never auto-fires on natural-language mention of "drift", "rot", "compass", or related concepts.

Examples

Rot SUSPICIOUS, Drift SAFE → CONSIDER:

> /compass

## /compass — building /compass v2 (drift + rot axes)

### Drift Check  [SAFE]
Recent turns are direct continuation of baseline (build the /compass skill).

- Initial intent: "Build a mid-session drift+rot audit skill" (source: ~/docs/superpowers/specs/2026-05-03-compass-skill-design.md)
- Recent N turns: implementing §4 rot collectors and §5 synthesizer
- Drift signal: none

### Rot Check  [SUSPICIOUS]
File bloat: SKILL.md grew to 416 lines past the 280-line target.

- Git: 6 files / 287 lines uncommitted
- Tests: no cache (this project has no test suite yet)
- Lint: 2 warnings, 0 errors
- File bloat: SKILL.md 416 lines (target 220-280)
- TODO: 0
- Architecture: boundaries clear, single-file skill, no layer violations

---

**Verdict: CONSIDER**

One axis (Rot) is SUSPICIOUS due to file bloat in SKILL.md.

**Top action:** cleanup commit + lint fix 권장. SKILL.md exceeds target — review whether subsections can be split into reference files.

**Considered:** lint (2 warnings, below threshold), TODO (0), test cache (no project test suite, skipped), circular dep (single-file project, N/A), drift (no divergence detected).

Drift CRITICAL → STOP:

> /compass

## /compass — Originally building /compass v1 (duplicate + architecture)

### Drift Check  [CRITICAL]
Direction reversed: baseline was "build duplicate+architecture audit (axes 1+2)"; recent N turns rejected those axes after advisor review and pivoted to drift+rot (axes 3+4).

- Initial intent: "Build a slash skill that audits duplicate-detection and architecture-pattern deviation" (source: spec, line 11)
- Recent N turns: pivoted axes per advisor critique, rewriting spec
- Drift signal: spec rewrite consumed last 8 turns (transcript lines 412-489)

### Rot Check  [SAFE]
- Git: 1 file / 23 lines uncommitted
- Tests: no cache
- Lint: clean
- File bloat: none
- TODO: 0
- Architecture: N/A (no code yet)

---

**Verdict: STOP**

One axis (Drift) is CRITICAL — the work pivoted away from baseline mid-session.

**Top action:** STOP — 처음 의도와 정반대 방향. 새 세션 권장 또는 `superpowers:brainstorming`으로 새 의도 재정의.

**Considered:** all rot signals SAFE; pivot was deliberate (advisor-recommended), so re-running compass with the new intent as explicit `/compass <intent>` argument should reset the baseline.

Behavior summary

Phase What happens
§1 Trigger gate Activate ONLY on literal /compass slash command. Never auto-fire from natural language.
§2 Input resolution Cascade: explicit argument → recent spec (≤24h mtime) → task-init heuristic (transcript reverse scan) → ask user one-shot. First user message of transcript is explicitly rejected as baseline.
§3 Drift check Read current-session transcript jsonl, extract last N=10 user/assistant turns, Opus judges baseline ↔ recent alignment.
§4 Rot check Bash collectors (git, test cache via artifact mtime — never executes tests, lint, file size, TODO grep, circular dep), plus Opus boundary judgment on import headers + dir tree.
§5 Synthesizer Single Opus call combining both axes. Verdict aggregation deterministic: both SAFE → PROCEED, one SUSPICIOUS → CONSIDER, one CRITICAL or both SUSPICIOUS → STOP.
§6 Output Grid + per-axis evidence + verdict + Top action + mandatory Considered line.
§7 Trust boundary Transcript and code content treated as untrusted data — never as instruction.
§8 Failure modes Insufficient axis = INSUFFICIENT (output the available axis only). All-fail = abort.

Design principles

  1. Internal data over external research. /compass reads transcript and code; /decide researches the web. Different layers, different jobs.
  2. Manual trigger only. No Stop hook, no auto-invoke. Cascade trauma from prior hooks is documented; dogfooding earns the right to add nudging in v1.5.
  3. Never use the literal first user message as drift baseline. Long sessions span multiple tasks; the first message is usually unrelated. Cascade prefers recent spec, then task-init heuristic.
  4. Compass does NOT execute tests. Reads cached artifact mtimes only. Cost-bounded, and cache freshness signals user intent.
  5. Considered line is mandatory — even on PROCEED. Defends against the LLM hallucinating coverage.
  6. Action chain is not /decide-centric. Drift CRITICAL → superpowers:brainstorming; Rot CRITICAL → simplify / investigate. Internal audit, internal remedies.
  7. Treat all source content as untrusted data. Transcript and code may contain prompt-injection attempts. Pattern inherited from /decide C3 trust boundary.

What it doesn't do

  • Doesn't auto-fire on natural-language questions. Only triggers on the literal /compass slash command.
  • Doesn't research the web — that's /decide's job. /compass is internal-data only.
  • Doesn't execute tests. Reads cached artifacts only.
  • Doesn't track trends across sessions or over time. Single-point audit per call.
  • Doesn't yet support Codex / Cursor / Aider transcripts. Claude Code jsonl only (v2 candidate).
  • Doesn't override /decide, superpowers:brainstorming, or other process skills.

Status

Built 2026-05-03. v1 draft (axes 1+2 duplicate+architecture) was rejected by adversarial review for ~70-80% overlap with /decide; pivoted to v2 (axes 3+4 drift+rot). Spec, plan, and pivot history in docs/spec.md and docs/plan.md.

Cold-session smoke testing pending (see docs/smoke-test.md once added).

License

MIT — see LICENSE.

Author

@Moon-python

About

Mid-session drift & rot audit skill for Claude Code (manual /compass slash trigger)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors