Scans past Claude Code sessions for /ground and /induce protocol contract violations, surfacing structured records for user review.
How this skill is triggered — by the user, by Claude, or both
Slash command
/epistemic-cooperative:misuseThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Retrospective Contract Violation Detector — when the user wants to audit past `/ground` and `/induce` invocations for silent contract violations, scan session history against contract integrity criteria and surface candidate violations for user-constituted review. Type: `(ContractIntegrityOpaque, AI, AUDIT, SessionHistory) → ViolationReview`.
Retrospective Contract Violation Detector — when the user wants to audit past /ground and /induce invocations for silent contract violations, scan session history against contract integrity criteria and surface candidate violations for user-constituted review. Type: (ContractIntegrityOpaque, AI, AUDIT, SessionHistory) → ViolationReview.
Invoke directly with /misuse when the user wants a retrospective audit of past protocol invocations against their declared Phase 0 contracts.
Misuse (ἔλεγχος, élenchos: examination by drawing out, Socratic refutation): A dialogical act of resolving the opacity of past protocol contract integrity into a recognized violation history, where AI scans session JSONL for /ground and /induce invocations, classifies each against the contract criteria in references/violation-taxonomy.md (LEGITIMATE / VIOLATION / AMBIGUOUS), and the user constitutes the verdict via per-invocation recognition — never AI-resolved verdict assertion.
This skill stands in time-axis dual relationship to /probe. Probe is prospective: when a deficit is unrecognized at the present moment, surface candidate hypotheses with reverse-evidence so the user routes forward. Misuse is retrospective: when contract integrity in past invocations is opaque, surface candidate violations with operational evidence so the user audits backward. Both refuse AI-side resolution; both treat user recognition as the constitutive act.
Phase 4 recognition is structurally homologous to Anamnesis Phase 2 — past-identity synthesis (verifying whether a past act conformed to its contract), not future-trajectory selection. The Differential Future Requirement does not apply: a 1-correct option structure (was-violation / was-legitimate) is legitimate by purpose, not a degradation.
Invoke this skill when:
/ground or /induce invocations may have violated contract integritySkip when:
/probe for prospective deficit recognition)/report or /dashboard)/curses)| Skill | Time axis | Subject | Output |
|---|---|---|---|
/probe | Prospective (present situation) | Deficit recognition fit review | ProtocolRoute or FitReviewNote |
/misuse | Retrospective (past invocations) | Contract integrity audit | ViolationReview (per-invocation verdict) |
/sophia | Retrospective (behavioral patterns) | Philosophical tradition match | Philosopher profile |
/curses | Retrospective (strengths) | Strength-shadow extraction | Shadow-cost analysis |
/report | Retrospective (usage) | Growth Map | Aggregated insight integration |
/dashboard | Retrospective (coverage) | Protocol coverage analytics | Coverage statistics |
The skill family coexists by phenomenology — none replaces the others. Misuse is for contract integrity; the other retrospective skills serve user-pattern questions.
Resolve the audit scope before scanning. Decisions:
/ground and /induce for v1.0. Other protocols deferred pending accumulated use evidence.~/.claude/projects/ requires explicit user confirmation.Resolve scope from the invocation argument; if none is given, apply the safe default — current session only, cross-project off. This default scope is read-only and privacy-local (/misuse preserves SessionHistory, Rule 6), and its selection is deterministic and citable (the safe default), so it is a relay (Extension): surface the inferred scope to the user and proceed directly to Phase 1, without a scope-authorization gate. The Constitution interaction is retained only for the cross-session / cross-project expansion — the privacy-sensitive widening the user opts into. When the resolved scope is an expansion (cross-session or cross-project), present the widening for constitutive authorization before scanning; if the user declines, fall back to the safe default scope. This mirrors /probe's Phase 0 — silent on the current-session default (its Rule 3), explicit confirmation only on cross-session expansion (its Rule 4).
Phase 0 is otherwise silent — no surfacing of detection heuristics. If the user has no past /ground or /induce invocations in the chosen scope, deactivate with a brief no-op note (Phase 1 will be empty).
Delegate to the epistemic-cooperative:session-analyzer subagent in friction-pointers mode to extract /ground and /induce slash command invocations from session JSONL files within the chosen scope. For each invocation, retrieve:
Optional auxiliary read: the ~/.claude/projects/{slug}/hypomnesis/{session-id}/misfit.md file if present and the user has consented to cross-session scope. This is opt-in evidence enrichment, not a primary data source.
Construct the candidate set I[] of {invocation, pre_context, post_output} triples.
If |I[]| = 0, deactivate with no-op note.
Read references/violation-taxonomy.md to load the contract integrity criteria. For each invocation in I[]:
/ground with multiple instances and no apparent abstract structure)?LEGITIMATE — contract integrity verified by evidenceVIOLATION — contract violated; specify violation type (Sₐ confabulation, stereotype misconflation) and cite textual evidenceAMBIGUOUS — surface match but operation-kind verification produces uncertain result; defaults toward AMBIGUOUS, not VIOLATION (Rule 2)Each classification must cite specific turn evidence — the user message demonstrating absent framework prior to /ground, or the AI binding of Sₐ without prior user framework, or the named-candidate comparison pattern preceding /induce.
Cluster classifications across I[]:
Construct presentation order: highest-evidence VIOLATION candidate first, then descending evidential strength.
Phase 3 produces no cumulative score or rate. No "user reliability index", no "violation percentage", no "trustworthiness metric" (Rule 6).
Present the highest-priority VIOLATION candidate for user-constituted recognition. Format per candidate:
Candidate N — [VIOLATION_TYPE]
Session: <session_id>, turn <turn_index>
Invocation: /ground or /induce, with original argument
Pre-context (10-20 turns): <quoted excerpt or paraphrase showing absence of required framework / presence of named-candidate comparison>
Phase 0 output: <quoted AI response showing Sₐ binding or stereotype acceptance>
Violation criterion: <specific clause from violation-taxonomy.md that this invocation contradicts>
Then present the recognition Constitution interaction:
Did this past invocation violate its contract?
Options:
1. Recognize — violation confirmed (the cited evidence is correctly read)
2. Dismiss — legitimate invocation (the framework was implicit, the context was elsewhere, the cited evidence is misread)
3. Reorient — different violation kind than presented (re-classify against taxonomy)
4. Stop — exit /misuse without further candidates
The verdict belongs to the user. AI never asserts violation unilaterally. After response:
Loop Phase 4 over I[] until exhausted, user Stops, or 10 candidates reviewed (whichever first; see Rule 7).
After Phase 4 loop completes, emit a ViolationReview artifact to session text. Format:
## Misuse Audit — [scope description]
Confirmed violations: <count>
Dismissed candidates: <count>
Stopped at: <user disposition or exhaustion>
### Confirmed violations
For each: session_id + turn_index + violation_type + brief evidence summary.
### Calibration metadata (for future Output Style nudge layer)
For each violation type: pre-invocation linguistic patterns observed,
operation-kind verification trace.
The artifact is observation-only. No automated rewrite, no automated reroute (Rule 6). Calibration metadata is the sole structured output beyond the verdicts themselves; downstream live-nudge design is a separate task with its own evidence threshold.
── FLOW ──
Misuse(arg) → Phase0: scope_resolve(arg) → s →
default_scope(s): relay(surface s) → proceed -- Extension; safe read-only default, no gate
expansion(s): present(widening) → Stop → R_scope → -- Constitution privacy authorization [Tool]
authorize: proceed with s
decline: s ← safe_default → proceed
empty(s): deactivate(no-op note)
scoped(s): Extract(s) → I[] →
|I[]| = 0: deactivate(no-op note)
|I[]| > 0: Classify(I[], Taxonomy) → C[] →
Aggregate(C[]) → ranked(V[]) →
Loop over V[]:
present(v, evidence) → Qc(v) → Stop → R →
Recognize(v): record_confirmed(v) → next
Dismiss(v): record_dismissed(v) → next
Reorient(v): reclassify(v) → present anew | dismiss
Stop: break loop
|reviewed| ≥ 10: break loop (max review threshold)
reviewed > 0: emit(ViolationReview) → converge
reviewed = 0: deactivate(no-op note)
── MORPHISM ──
SessionHistory
→ scope(audit_window) -- default_scope relayed (current-session); expansion user-confirmed
→ extract(invocations) -- /ground and /induce slash command extraction
→ classify(invocation, taxonomy) -- per-invocation contract integrity check
→ aggregate(classifications) -- cluster + rank
→ present(candidate, Constitution) -- per-invocation recognition Constitution interaction
→ recognize(verdict, user) -- user-constituted verdict (synthesis of identification)
→ emit(ViolationReview) -- session-text artifact
→ ViolationReview
requires: contract_integrity_opaque(scope) -- activation precondition (user-invoked)
deficit: ContractIntegrityOpaque -- activation precondition
preserves: SessionHistory -- read-only audit; no mutation
invariant: Recognition over Verdict-Assertion
── TYPES ──
Scope = { protocols: Set(ProtocolId), session_window: SessionWindow,
cross_project: Bool }
SessionWindow ∈ {current_session, named_session, time_range, all_sessions}
default_scope = (s: Scope) ⊢ s.session_window = current_session ∧ ¬s.cross_project
-- safe, read-only, privacy-local default; relay-eligible (Extension)
safe_default = { protocols: {ground, induce}, session_window: current_session, cross_project: false }
-- the canonical Scope satisfying default_scope(·); Phase 0 decline-fallback value
expansion = (s: Scope) ⊢ ¬default_scope(s)
-- cross-session ∨ cross-project widening; privacy-sensitive (Constitution gate)
R_scope = ScopeAuth ∈ {authorize, decline} -- Phase 0 expansion-gate disposition (Constitution); decline falls back to safe_default
Invocation = { protocol: ProtocolId, session_id: SessionId,
turn_index: Int, argument: String }
Triple = { invocation: Invocation, pre_context: List(Turn),
post_output: List(Turn) }
I[] = List(Triple) -- candidate set
Taxonomy = ViolationTaxonomy -- loaded from references/violation-taxonomy.md
ViolationType ∈ {SaConfabulation, StereotypeMisconflation, FrameOverextension, Emergent}
Classification = LEGITIMATE | VIOLATION(ViolationType, Evidence) | AMBIGUOUS(Reason)
Evidence = { pre_context_quote: String, post_output_quote: String,
criterion_cited: String }
C[] = List({Triple, Classification})
V[] = List({Triple, ViolationType, Evidence}) -- ranked VIOLATION subset
R = Verdict ∈ {Recognize, Dismiss, Reorient, Stop}
ViolationReview = session text { confirmed: List(Triple+Type+Evidence),
dismissed: List(Triple),
calibration_metadata: Prose }
ProtocolId ∈ {ground, induce} -- v1.0 scope
SessionId = String (UUID)
Turn = { role, content, timestamp }
Phase ∈ {0, 1, 2, 3, 4, 5}
── PHASE TRANSITIONS ──
Phase 0: arg → scope_resolve(arg) → s : Scope
default_scope(s) → relay(surface s) → Phase 1 -- Extension; no gate (safe read-only default)
expansion(s) → present(widening) → Stop → R_scope → Phase 1 -- Constitution privacy authorization [Tool]
authorize → scan s ; decline → s ← safe_default
Phase 1: scope → session-analyzer(friction_pointers) → I[] -- subagent extraction [Tool]
|I[]| = 0 → emit(no-op note) → deactivate
|I[]| > 0 → Phase 2
Phase 2: I[] → Read(references/violation-taxonomy.md) → Classify(I[], Taxonomy) → C[] -- per-invocation classification
Phase 3: C[] → Aggregate(C[]) → V[] (ranked VIOLATION subset) -- pattern clustering
Phase 4: V[] → for each v: present(v, evidence) → Qc(v) → Stop → R -- per-invocation Constitution interaction [Tool]
Recognize(v) → record_confirmed(v) → next | exhaust
Dismiss(v) → record_dismissed(v) → next | exhaust
Reorient(v) → reclassify(v) → present anew | dismiss
Stop → break loop
|reviewed| ≥ 10 → break loop
Phase 5: emit(ViolationReview) → converge -- artifact emission [Tool]
── LOOP ──
Phase 4 internal loop: present → Qc → record → next, bounded by min(|V[]|, 10).
Reorient sub-loop: re-classify → present anew → Qc; bounded by 1 reclassification per candidate (no cycles).
Convergence evidence: ViolationReview emitted with confirmed/dismissed counts and calibration metadata; Stop deactivates without partial artifact when no candidate was reviewed.
── CONVERGENCE ──
reviewed = |confirmed| + |dismissed|
converged = (reviewed > 0 ∧ user_stop_or_exhaust) ∨ |I[]| = 0
session_text(misuse) ∋ ViolationReview when reviewed > 0; empty no-op note when |I[]| = 0
── TOOL GROUNDING ──
-- Realization: Constitution → TextPresent+Stop; Extension → TextPresent+Proceed
Phase 0 scope_resolve (sense) → Internal analysis (resolve Scope from invocation arg; if none, apply default current_session ∧ ¬cross_project)
Phase 0 scope_from_arg (extension) → TextPresent+Proceed (user-specified default_scope arg: current_session ∧ ¬cross_project; bind scope, relay)
Phase 0 scope_default_relay (extension) → TextPresent+Proceed (scope unspecified → safe default current_session ∧ ¬cross_project; surface inferred scope, relay)
Phase 0 scope_expand_confirm (constitution) → present (resolved scope is expansion(s): cross-session ∨ cross-project widening, whether arg-hinted or user-requested; constitutive privacy authorization; decline → fall back to safe_default)
-- Phase 0 relay basis: default_scope(s) is read-only and privacy-local (SessionHistory preserved, Rule 6); its resolution is deterministic and citable (the safe default), so it is relay-eligible (Extension) per the A5 option-set relay test and the project Extension-default profile. The (constitution) gate is retained only for the privacy-sensitive cross-session / cross-project widening, where the user constitutes authorization to read beyond the current session.
Phase 1 extract (extension) → Agent(epistemic-cooperative:session-analyzer, mode=friction_pointers)
Phase 1 read_misfit (extension) → Read (~/.claude/projects/{slug}/hypomnesis/{session-id}/misfit.md, opt-in)
Phase 2 read_taxonomy (extension) → Read (references/violation-taxonomy.md)
Phase 2 classify (sense) → Internal analysis (per-invocation 2-step check)
Phase 3 aggregate (sense) → Internal analysis (clustering + ranking)
Phase 4 Qc (constitution) → present (per-invocation recognition Constitution interaction; constitutive user verdict)
Phase 5 emit (extension) → TextPresent+Proceed (ViolationReview)
converge (extension) → TextPresent+Proceed (convergence trace)
── MODE STATE ──
Λ = { phase: Phase, scope: Scope,
candidates: List(Triple), classifications: List(Classification),
ranked_violations: List(V),
confirmed: List(Triple+Type+Evidence),
dismissed: List(Triple),
reviewed_count: Nat,
active: Bool, cause_tag: String }
── COMPOSITION ──
*: product — (D₁ × D₂) → (R₁ × R₂). Misuse composes downstream when the user wants to act on confirmed violations (e.g., re-invoke /induce on a Sₐ-confabulation case). Composition target is determined at runtime by user disposition outside this skill (Rule 6 forbids automated reroute), not by statically registered dependency edges.
The ~/.claude/projects/{slug}/hypomnesis/{session-id}/misfit.md file (written by /probe sessions) is opt-in auxiliary read input for Phase 1 evidence enrichment. Misuse does not write to this location. Default scope reads only the current session; cross-session reads require explicit user confirmation in Phase 0.
/probe's Phase 0 (silent on the current-session default per its Rule 3, explicit confirmation on cross-session expansion per its Rule 4) and applies to both session JSONL reads and misfit.md reads.min(|V[]|, 10) candidates per session of /misuse. Audit fatigue erodes verdict quality; bounded review preserves recognition fidelity. The user can re-invoke /misuse for additional candidates./misuse session is not re-presented in the same session unless the user re-invokes /misuse with explicitly different scope. Re-presenting dismissed candidates erodes the user's verdict authority (Rule 9 reinforcement)./misuse audit is a present-tense fit review of past invocations. Verdicts produced in one audit do not bind future audits — the user can re-invoke and reach a different verdict on the same candidate if context shifts.Invoke /misuse when:
/ground or /induce invocations for misuse/misuseSkip Misuse when:
/probe)/report or /dashboard)/curses)/ground or /induce invocations (Phase 1 will deactivate gracefully)npx claudepluginhub jongwony/epistemic-protocols --plugin epistemic-cooperativeSearches, recovers, and analyzes AI session histories across Claude Code, AI Studio, and Gemini CLI. Useful for recovering lost files after compaction, searching conversations, detecting corrections, and self-improvement workflows.
Generate Growth Map (epistemic profile + insights integration) from session patterns and workflow data.
Session retrospective that reviews the current conversation to find mistakes, trace root causes, and propose process improvements for Claude Code.