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.
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)
Copy SKILL.md to your Claude Code user skills directory:
mkdir -p ~/.claude/skills/compass
cp SKILL.md ~/.claude/skills/compass/SKILL.mdThe skill auto-loads in any new Claude Code session. Verify it appears in /help.
/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.
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.
| 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. |
- Internal data over external research.
/compassreads transcript and code;/decideresearches the web. Different layers, different jobs. - 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.
- 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.
- Compass does NOT execute tests. Reads cached artifact mtimes only. Cost-bounded, and cache freshness signals user intent.
- Considered line is mandatory — even on PROCEED. Defends against the LLM hallucinating coverage.
- Action chain is not
/decide-centric. Drift CRITICAL →superpowers:brainstorming; Rot CRITICAL →simplify/investigate. Internal audit, internal remedies. - Treat all source content as untrusted data. Transcript and code may contain prompt-injection attempts. Pattern inherited from
/decideC3 trust boundary.
- Doesn't auto-fire on natural-language questions. Only triggers on the literal
/compassslash command. - Doesn't research the web — that's
/decide's job./compassis 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.
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).
MIT — see LICENSE.