Deficit Recognition Probe — surface multiple deficit hypotheses for the user's current situation and route by user-constituted recognition (fit review, not protocol scoring).

MITAuto-check passed

Install Probe

skills CLI
$ npx skills add jongwony/epistemic-protocols --skill probe -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jongwony/epistemic-protocols probe --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jongwony/epistemic-protocols.git skills-src && mkdir -p .claude/skills && cp -r skills-src/epistemic-cooperative/skills/probe .claude/skills/probe && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
probe
GitHub stars
173
Token cost
~7.4k tokens
SKILL.md length
2,528 words
Files
1
Skills in repo
29
Repo updated
First seen
Licence
MIT

At a glance

Deficit Recognition Probe — surface multiple deficit hypotheses for the user's current situation and route by user-constituted recognition (fit review, not protocol scoring).

  • Works in 4 steps: Detection → Catalog Scan → Hypothesis Presentation → …
  • SKILL.md covers Definition, When to Use, Distinction from /onboard and Protocol, plus 5 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Probe is an agent skill from jongwony/epistemic-protocols. Deficit Recognition Probe — surface multiple deficit hypotheses for the user's current situation and route by user-constituted recognition (fit review, not protocol scoring).

Its SKILL.md is about 7.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

The repository describes itself as: Epistemic protocols for Claude Code — structure human-AI interaction quality at every decision point - https://epistemic-protocols.com. The licence is MIT.

Example prompts

  • “/probe”

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Detection
  2. Catalog Scan
  3. Hypothesis Presentation
  4. Route Integration

What it can do on your machine

Read from SKILL.md and the folder at commit 69bb95b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Probe loads about 7.4k tokens when it runs. Until then it costs about 45 tokens; SKILL.md has 2,528 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~45
When it runs · the whole SKILL.md, loaded when a task matches
~7.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from jongwony/epistemic-protocols at commit 69bb95b, republished under its MIT licence (© jongwony). 2,528 words, ~7,382 tokens.

Download SKILL.mdSave it as .claude/skills/probe/SKILL.md (or your agent's skills folder).
name
probe
description
Deficit Recognition Probe — surface multiple deficit hypotheses for the user's current situation and route by user-constituted recognition (fit review, not protocol scoring).
user_invocable
true

Probe Skill

Deficit Recognition Probe — when the user is uncertain which epistemic deficit (and therefore which protocol) fits the current situation, surface AI-generated multi-hypothesis candidates with reverse-evidence conditions, and route on user-constituted recognition. Type: (DeficitUnrecognized, AI, RECOGNIZE, UserSituation) → ProtocolRoute.

Invoke directly with /probe when the user wants a fit review across the protocol catalog before committing to a single protocol invocation. The AI may also surface these hypotheses on its own when it detects genuine deficit-ambiguity — offered as a low-confidence horizon for the user's fusion, not a covert frame (Rule 1); explicit invocation is one entry, not the only one.

Definition

Probe (ἐπίγνωσις, epígnōsis: knowing-upon, recognition of what was already there): A dialogical act of resolving a user's vague sense that "something is off" into a recognized deficit + protocol route, where AI scans the user's recent situation against the catalog of epistemic deficits, presents at minimum two hypotheses with falsification conditions, and the user constitutes the route via recognition — never AI-resolved scoring.

This skill stands in structural homology with Anamnesis (/recollect) — both realize the RECOGNIZE operation family. Anamnesis recognizes past context from vague recall; Probe recognizes present-situation deficit from vague unease. Anamnesis output is RecalledContext; Probe output is ProtocolRoute. Both treat user recognition as the constitutive act and refuse AI-side resolution.

When to Use

Invoke this skill when:

  • The user feels something is off but does not yet name which epistemic deficit fits
  • A protocol invocation is being considered, and the user wants a fit review across alternatives before committing
  • Multiple plausible routes coexist (e.g., "is this a goal problem or a context problem?") and the user wants the alternatives surfaced explicitly with their reverse-evidence conditions

Skip when:

  • The deficit is already named with confidence (invoke the matching protocol directly)
  • The user wants pattern-based recommendation from session history with optional trial (use /onboard)

Distinction from /onboard

SkillStanceInputOutput
/onboardPattern-based recommendation + optional trialSession history patternsRecommended protocol + scenario + trial
/probeActive AI-hypothesized deficit recognitionCurrent user situationAt minimum two hypothesis candidates + user-constituted route

The two coexist by design — neither replaces the other. Probe is for experienced users with frame-binding uncertainty; /onboard is for users who want pattern-based learning.

Protocol

Phase 0: Detection

Detect that the user's situation admits ambiguous deficit framing. Heuristics:

  • The user's request describes symptoms ("something feels off", "not sure which protocol") rather than naming a deficit
  • The session shows a pattern that maps to two or more candidate deficits with comparable plausibility
  • The user explicitly invokes /probe

Phase 0 detection is silent — internal analysis, no output of its own. On a positive detection the protocol may proceed to surface the hypothesis horizon (Phase 1–2) without waiting for an explicit /probe, provided the surface is horizon-marked (Rule 1). If detection fails (the deficit is already clearly named with confidence), deactivate without surfacing.

Phase 1: Catalog Scan

Scan the user's situation against the full catalog of epistemic deficits. For each candidate hypothesis, build a Set(CoverageEntry) where each entry pairs:

  • A deficit: DeficitName matched against the situation
  • The protocol: ProtocolId that addresses that deficit
  • evidence: Evidence — the situation signal supporting the match
  • reverse_evidence: Evidence — the observation that would shrink the coverage to exclude this entry

A hypothesis with |coverage| = 1 is a single-protocol projection (preserves prior single-protocol behavior). A hypothesis with |coverage| ≥ 2 is a set-valued coverage — multi-protocol projection within one hypothesis. This intra-hypothesis multi-protocol projection is structurally distinct from the inter-protocol composition defined in the ── COMPOSITION ── block; do not conflate the two.

When Λ.coverage_constraint is set (from a prior Narrow(CoverageSubset)), filter the scan output to hypotheses whose coverage protocol set intersects with the constraint — this preserves user-directed narrowing across re-scan iterations.

Construct the candidate set. Keep at minimum two candidates with non-overlapping reverse-evidence conditions — singleton high-confidence framing is forbidden (see Rules section, Rule 5).

Intent-decoding disambiguation (Rule 18): Before defaulting a candidate to a missing-information framing (e.g., ContextInsufficient//inquire), check Euporia's own deficit (aporia, euporia/skills/elicit/SKILL.md): the user holds a direction but has not fixed which decisions it turns on. The undetermined decision may show in the user's own utterance, in evidence within Probe's scope — current-session evidence (Rule 3 default scope), the user's own codebase, project rules or Northstar documents, or environment (cross-session recall stays opt-in per Rule 4) — or in the decision structure of the domain the intent sits in. When it holds, include AbstractAporia (/elicit) in the candidate set — a decision the user has not named is intent-decoding, not external-fact supply, and belongs to /elicit rather than /inquire. A missing fact the work needs, with the intent itself settled, still routes to /inquire.

Single-pass routing scope: Phase 1 enumerates named deficits across the catalog as a one-shot fit review. Per-protocol convergence dynamics — including the rounds within a protocol such as /elicit — remain internal to that destination protocol; Probe does not surface, measure, or aggregate convergence efficiency across uses (Rule 7 reinforcement; how rounds are shown is the destination protocol's surface, not Probe's).

Phase 2: Hypothesis Presentation

Present the candidate hypotheses as text output before the Constitution interaction. Each rendered line under Coverage: corresponds to one CoverageEntry (deficit, protocol, evidence, reverse_evidence). Format per hypothesis:

Hypothesis N — N interpretations possible / decision point is X
  Coverage:
    /<protocol_a> (<DeficitName>):
      Evidence: <quote or paraphrase>
      Reverse-evidence: <observation that would shrink coverage to exclude this entry>
    /<protocol_b> (<DeficitName>):
      Evidence: <...>
      Reverse-evidence: <...>
  (Singleton |coverage|=1: render the single CoverageEntry as one protocol line, equivalent to prior single-protocol format)

Coverage option-set minimality: When |coverage| ≥ 2, coverage subsets are NOT enumerated as additional options — the per-entry Evidence and Reverse-evidence within the Coverage block serve as the short descriptions that guide singleton selection. The user invokes a singleton through free response or Narrow(CoverageSubset). This preserves option-set minimality and induces the Hermeneutic circle through iterative user-initiated dialogue rather than AI-side menu expansion. (This contextual rule informs the gate decision and therefore precedes the gate options.)

The hypothesis surface above offers a candidate horizon of the deficit space — open to your recognition, redirection, or transcendence, not a settled answer. Present the recognition Constitution interaction as a free-response prompt:

Which hypothesis fits your present situation?

Free response — the disposition is constituted by the user's natural utterance.
Recognition / Redirect / Dismiss / Narrow scope / Stop are all reachable via free response; no typed selection is required.

The disposition field belongs to the user. AI does not score, rank, or pre-resolve the choice. Free response preserves the user's implicit freedom to respond beyond any anticipated typed options — this freedom is inherent in conversation turn structure: gated does not mean unstructured; it means the user's response is constitutive (Rule 12 Recognition over Recall, inscribed in this SKILL.md; and evidence is presented as text output before the gate rather than folded into it).

Phase 3: Route Integration

After user response (free-response utterance from Phase 2):

Free-response parse: Phase 3 resolves the utterance to the R coproduct constructor whose semantic intent most closely matches — affirmative adoption of a presented hypothesis routes to Recognize, alternative deficit/protocol nomination routes to Redirect, rejection of all hypotheses routes to Dismiss, scope restriction (situation slice or coverage subset) routes to Narrow, and exit signal routes to Stop. The presented hypotheses serve as the recognition substrate; no typed selection is required. When the utterance does not unambiguously resolve into a single constructor, Phase 3 issues one bounded re-prompt requesting clarification; persistent ambiguity after the bounded retry defaults to Stop to preserve the user's exit-without-disposition right.

Disposition handling:

  • Recognize: Emit the recognized route as session text, carrying target_coverage: Set(CoverageEntry) — each entry pairs a deficit with its protocol, plus the supporting evidence and reverse-evidence. The user may invoke any subset of coverage protocols; the constituted recognition record covers the entire coverage set.
  • Redirect: Record the user-named deficit/protocol as the recognized route. AI does not contest user redirection.
  • Dismiss: Emit a short fit-review note recording that none of the presented hypotheses fit. No protocol is recommended.
  • Narrow scope — branches by argument type (distinct semantics):
    • Narrow(s: Slice): User restricts the situation scope (e.g., a specific decision, file, conversation slice). Rebind U.session_slice ← s, clear Λ.dismissed_in_session (new scope justifies fresh dismissals), and re-run Phase 1.
    • Narrow(s: CoverageSubset): User restricts the protocol set of the selected hypothesis without changing situation scope. Write Λ.coverage_constraint ← s, preserve Λ.dismissed_in_session (situation unchanged), and re-run Phase 1 — Scan filters output to hypotheses whose coverage protocols intersect s. Compound-filter exhaustion: if |H[]| < 2 cannot be satisfied after both Λ.coverage_constraint and Λ.dismissed_in_session filters apply, surface a fit-review note explaining the constraint combination and deactivate (explicit handling for the compound case; do not rely on the generic narrow_iterations ≥ 3 exhaustion path alone).
  • Stop: Deactivate without disposition.

No cumulative score, grade, or ranking is produced or stored across uses.

── FLOW ──
Probe(U) → Detect(U) →
  named_deficit(U): skip → deactivate
  vague_deficit(U): Scan(U, Catalog, Λ.coverage_constraint) → H[] →           -- each h ∈ H[] carries Set(CoverageEntry), |coverage|≥1
    |H[]| < 2: enrich Scan or expand Catalog window → re-scan
    |H[]| ≥ 2: present(H[]) → Qc(H[]) → Stop → utterance → parse → R →
        Recognize(h):     emit(ProtocolRoute(h.coverage)) → converge            -- target_coverage = h.coverage : Set(CoverageEntry)
        Redirect(d):      emit(ProtocolRoute(d)) → converge
        Dismiss:          emit(FitReviewNote(no_fit)) → converge
        Narrow(s: Slice): rebind(U.session_slice, s) → clear(Λ.dismissed_in_session) → Phase 1
                          -- new situation scope justifies clearing dismissals
        Narrow(s: CoverageSubset): write(Λ.coverage_constraint, s) → Phase 1
                          -- coverage filter only; situation scope unchanged; dismissals preserved
        Stop:             deactivate

── MORPHISM ──
UserSituation
  → detect(vague_deficit)             -- recognize that a deficit is implied but not named
  → scan(situation, Catalog, Λ.coverage_constraint)
                                      -- enumerate candidate hypotheses as Set(CoverageEntry); set-valued coverage
                                      --   (multi-protocol projection within a hypothesis is structurally distinct
                                      --    from inter-protocol composition defined in the COMPOSITION block)
  → present(H[], multi_hypothesis)    -- surface offered as one horizon for the user's fusion (marked: low-confidence + per-entry reverse-evidence + transcendable); the user's recognition, not the surface, is constitutive
  → recognize(h, user)                -- user adopts h.coverage as a whole; refinable via Narrow(CoverageSubset)
  → emit(ProtocolRoute | FitReviewNote)   -- ProtocolRoute carries target_coverage as Set(CoverageEntry)
  → ProtocolRoute | FitReviewNote
requires: vague_deficit(U)             -- activation precondition: a detected vague deficit; on detection the surface may follow as a marked horizon (Rule 1), invoked or AI-initiated
deficit:  DeficitUnrecognized          -- activation precondition
preserves: Catalog                     -- catalog read-only; U is rebindable on Narrow
invariant: Recognition over Resolution

── TYPES ──
U                = UserSituation { utterance: String, session_slice: Optional(Slice) }
Catalog          = Set(DeficitEntry)               -- all named deficits + Emergent
DeficitEntry     = { deficit: DeficitName, protocol: ProtocolId,
                     trigger_signal: String, reverse_evidence_template: String }
Evidence         = String                           -- quoted or paraphrased situation evidence
CoverageEntry    = { deficit: DeficitName, protocol: ProtocolId,
                     evidence: Evidence, reverse_evidence: Evidence }
                   -- per-protocol unit; deficit label is co-located with its protocol (no top-level deficit set)
Hypothesis       = { coverage: Set(CoverageEntry) } -- |coverage| ≥ 1
                   -- |coverage|=1: singleton hypothesis (single-protocol projection)
                   -- |coverage|≥2: set-valued coverage (multi-protocol projection within one hypothesis)
H[]              = List(Hypothesis)                 -- |H[]| ≥ 2 invariant
Scan             = (UserSituation, Catalog, Optional(Set(ProtocolId))) → H[]
                   -- third argument is Λ.coverage_constraint; when set, output is filtered to hypotheses
                   --   whose coverage protocol set intersects with the constraint
CoverageSubset   = Set(ProtocolId)                  -- 0 < |CoverageSubset| < |selected.coverage|
                   -- non-empty proper subset of a selected hypothesis's coverage protocols
Qc               = present hypothesis set with evidence and reverse-evidence;
                   free-response Constitution interaction (Phase 3 parses utterance into R)
R                = Recognition ∈ {Recognize(Hypothesis),                  -- adopts entire coverage
                                  Redirect(DeficitName | ProtocolId),
                                  Dismiss,
                                  Narrow(Slice | CoverageSubset),         -- distinct semantics per variant; see FLOW
                                  Stop}
ProtocolRoute    = session text { target_coverage: Set(CoverageEntry) }    -- |target_coverage| ≥ 1
                   -- recognized_deficits = π_deficit(target_coverage); evidence_trace = π_evidence(target_coverage)
                   --   (derived projections, not separate fields)
FitReviewNote    = session text { presented_hypotheses, dismissed: true }
DeficitName      ∈ {BoundaryUndefined, ContextInsufficient,
                    MappingUncertain, AbstractionInProcess, AbstractAporia,
                    GoalPlanUncompiled, ApplicationDecontextualized,
                    ContextSuspect, RecallAmbiguous, TargetUngrasped,
                    MethodUnderdetermined,
                    DirectionUnrecognizable, CandidateFieldUnderexpanded,
                    FitUnrecognized} ∪ Emergent
ProtocolId       ∈ {bound, inquire, ground, induce, elicit,
                    apportion, contextualize, sublate, recollect,
                    grasp, conduct, preview, ideate, sketch} ∪ Emergent
Phase            ∈ {0, 1, 2, 3}

── PHASE TRANSITIONS ──
Phase 0: U → Detect(U) → vague_deficit(U)?                          -- silent trigger detection
Phase 1: U → Scan(U, Catalog, Λ.coverage_constraint) → H[]          -- catalog scan; each h carries Set(CoverageEntry)
           Λ.coverage_constraint set → filter H[] to {h : π_protocol(h.coverage) ∩ Λ.coverage_constraint ≠ ∅}
           |H[]| < 2 → enrich(U) → Phase 1                          -- multi-hypothesis invariant
           |H[]| ≥ 2 → Phase 2
Phase 2: H[] → present(H[], evidence, reverse_evidence) → Qc(H[]) → Stop → utterance → parse → R   -- free-response Constitution interaction [Tool]
Phase 3: R → integrate(R, U) →
           Recognize(h)            → emit(ProtocolRoute(h.coverage)) → converge   -- target_coverage : Set(CoverageEntry)
           Redirect(d)             → emit(ProtocolRoute(d)) → converge            -- user-named alternative
           Dismiss                 → emit(FitReviewNote(no_fit)) → converge       -- no fit, recorded
           Narrow(s: Slice)        → rebind(U.session_slice, s) → clear(Λ.dismissed_in_session) → Phase 1
           Narrow(s: CoverageSubset) → write(Λ.coverage_constraint, s) → Phase 1  -- preserve dismissed_in_session
           Stop                    → deactivate                                    -- exit without disposition

── LOOP ──
Phase 1 → Phase 2 → Phase 3 →
  Recognize: converge
  Redirect: converge
  Dismiss: converge
  Narrow(Slice): rebind U to narrower scope → Phase 1
  Narrow(CoverageSubset): apply coverage filter → Phase 1
  Stop: deactivate
Max 3 narrowing iterations. Exhausted: surface candidate set as fit-review note → deactivate.
Convergence evidence: per disposition, emit one of {ProtocolRoute, FitReviewNote} or deactivate without artifact (Stop).

── CONVERGENCE ──
recognized = R ∈ {Recognize(h), Redirect(d), Dismiss}
exhausted  = narrow_iterations ≥ 3
session_text(probe) ∋ {ProtocolRoute | FitReviewNote} (Stop deactivates without artifact)

── TOOL GROUNDING ──
-- Realization: Constitution → TextPresent+Stop; Extension → TextPresent+Proceed
Phase 0 Detect      (sense)    → Internal analysis (heuristic vague-deficit detection)
Phase 1 Scan        (sense)    → Internal analysis (catalog match against situation)
Phase 1 enrich      (sense)    → Internal analysis (situation broadening when |H[]| < 2)
Phase 2 Qc          (constitution)     → present (multi-hypothesis surface) + free-response receive (no typed option enumeration)
Phase 3 parse       (sense)        → Internal analysis (free-response utterance → R coproduct by semantic intent; bounded retry on ambiguous)
Phase 3 emit        (extension)    → TextPresent+Proceed (ProtocolRoute or FitReviewNote)
Phase 3 rebind      (track)    → Internal state update (Narrow(Slice) disposition — rebinds U.session_slice, clears Λ.dismissed_in_session)
Phase 3 write       (track)    → Internal state update (Narrow(CoverageSubset) disposition — sets Λ.coverage_constraint, preserves Λ.dismissed_in_session)
converge            (extension)    → TextPresent+Proceed (convergence trace)

── MODE STATE ──
Λ = { phase: Phase, U: UserSituation,
      hypotheses: List(Hypothesis), presented: Set(Hypothesis),
      dismissed_in_session: Set(Hypothesis),
      coverage_constraint: Optional(Set(ProtocolId)),   -- written by Narrow(CoverageSubset); consumed by Phase 1 Scan filter
      narrow_iterations: Nat,
      disposition: Optional(Recognition),
      active: Bool, cause_tag: String }

── COMPOSITION ──
*: product — (D₁ × D₂) → (R₁ × R₂). Probe composes downstream into the recognized protocol when the user selects Recognize or Redirect — composition target is determined at runtime by user disposition.

Storage Reference

The hypomnesis sibling misfit.md sub-index (under {config_dir}/projects/{slug}/hypomnesis/{session-id}/) is the designed-for read location for accumulated probe usage records — fit-review notes, recognized routes, and dismissed hypotheses. Probe reads this sub-index when available to enrich situation context. {config_dir} is the Claude Code config directory — CLAUDE_CONFIG_DIR when set, else ~/.claude; a substrate detail of this realization, not protocol vocabulary. Read the value and substitute an absolute path before reading; a ${...} left in this text is inert, since Read/Grep perform no shell expansion. The writer mechanism is out of scope for this skill and is implemented separately at the substrate layer.

Show full SKILL.md (1,080 more words)Show less

Rules

  1. Horizon-marked surfacing (not invocation-gated) — Probe surfaces its hypotheses on explicit /probe invocation OR when the AI detects genuine deficit-ambiguity (Phase 0) and offers the surface as one horizon for the user's fusion of horizons. AI-initiated surfacing is licensed precisely by the marking already inscribed elsewhere — low-confidence dialogic form (Rule 11), per-entry reverse-evidence (Rule 5), free-response transcendence (Rule 8), and user-held disposition (Rule 6) — which together render the framing visible as framing, so a surfaced hypothesis cannot covertly install itself as the user's own fore-understanding. Still forbidden: unmarked surfacing (presenting the set as the settled deficit-space or the answer rather than a transcendable horizon), and sticky/background re-activation (Rule 2). The user's recognition stays the constitutive act; AI surfacing aids the fusion, it does not perform it.
  2. No sticky mode — per-occasion surfacing — Probe has no persistent activation: no always-on background loop, no implicit carry-over re-activation across turns, no sticky session state. AI-initiated surfacing (Rule 1) fires per-occasion on a genuine ambiguity detected in the present turn and then rests; it is not a standing scanner. Each surfacing — invoked or AI-initiated — is a fresh, self-contained occasion.
  3. Current-session default scope — Default evidence window is the present session. Cross-session evidence is opt-in only.
  4. All-time scope requires explicit confirmation — Cross-session recall (reading prior misfit.md records or session history beyond the current session) requires an explicit Active-authority confirmation; never default behavior.
  5. Multi-hypothesis required — Minimum two alternatives with distinct reverse-evidence conditions per hypothesis. Singleton high-confidence framing collapses Probe into Resolution; this is forbidden. Anti-singleton guard operates at hypothesis level (|H[]| ≥ 2). Each hypothesis carries set-valued coverage (|coverage| ≥ 1; |coverage| ≥ 2 represents intra-hypothesis multi-protocol projection — structurally distinct from inter-protocol composition defined in the ── COMPOSITION ── block). The reverse-evidence requirement applies per CoverageEntry within Hypothesis.coverage. Two-level cardinality: A single hypothesis with |coverage| = 2 does NOT satisfy this guard — |H[]| ≥ 2 requires at minimum two distinct Hypothesis records, each with its own coverage. The |H[]| ≥ 2 guard operates on hypothesis count; |coverage| ≥ 1 on per-hypothesis projection.
  6. Disposition field belongs to the user — Recognize / Redirect / Dismiss / Narrow / Stop is a constitutive user act. AI never resolves the disposition unilaterally.
  7. No cumulative score / grade / ranking — Across uses, no fitness metric, success rate, or aggregated quality score is produced or stored. Each probe is independent.
  8. Stop / Narrow / Dismiss always reachable via free response — Stop, Narrow, and Dismiss are always available as user dispositions; they are reached through natural-language utterance (parsed by Phase 3 lexical patterns) rather than typed selection. Graceful exit and scope narrowing are always available — no typed dropdown is required to reach them.
  9. Blocked vocabulary — The terms "wrong", "misuse detected", and "should have used" must not appear in Probe output. These vocabularies frame Probe as a corrective judge rather than a fit-review companion.
  10. Recommended vocabulary — Use "fit review" as the positive framing replacement for the blocked vocabulary in #9. Output describes hypotheses, evidence, and reverse-evidence; never verdicts.
  11. Hypothesis form — Each hypothesis is phrased as low-confidence dialogic: "N interpretations possible / decision point is X". Certainty framings ("clearly", "definitely", "the answer is") are forbidden.
  12. Recognition over Recall — Present structured hypothesis options via Cognitive Partnership Move (Constitution) and yield turn. Each option carries differential reverse-evidence so the post-selection state is anticipatable.
  13. Detection with Authority — AI detects candidate deficits with cited situation evidence; the user constitutes the recognition. AI never resolves the disposition.
  14. Convergence evidence — Present a transformation trace before declaring convergence: Recognize/Redirect/Dismiss/Narrow produce a session-text artifact (ProtocolRoute or FitReviewNote); Stop deactivates without an artifact.
  15. Coexistence with /onboard — Probe does not replace pattern-based recommendation (/onboard). The two skills occupy distinct stances.
  16. Structural-change calibration — When a candidate hypothesis concerns whether a structural change crosses the architectural threshold, distinguish at hypothesis construction time:
    • Architectural inscription: addition of a new core protocol, category-level promotion. Deferral pending accumulated use evidence applies.
    • Type-level realization: type-level realization of an already-inscribed ── COMPOSITION ── product within an existing protocol's operational scope. Internal iteration; deferral framing does not apply. The distinction informs evidence / reverse_evidence formulation when structural-change extent (line count, file count, scope size) is the apparent signal — extent alone does not determine architectural status. Maps approximately onto the downstream-remediation axis a candidate is also classified on — surgical (a deterministic 1–2 line edit) versus design (a decision-bearing structural change): type-level realization ≈ surgical, architectural inscription ≈ design (≈ denotes approximate analogical mapping between vocabulary axes; not formal type-isomorphism — ≅ is reserved for the latter, e.g., Katalepsis P'≅R).
  17. Intent-decoding disambiguation — When constructing Phase 1 candidates, a missing-information framing (ContextInsufficient//inquire) must not crowd out AbstractAporia//elicit by default: include /elicit in the candidate set when the user has not fixed which decisions their direction turns on, per Euporia's own deficit (aporia, euporia/skills/elicit/SKILL.md) — whether that shows in the utterance, in evidence within Probe's scope (Rule 3 default scope; cross-session recall stays opt-in per Rule 4), or in the decision structure of the domain the intent sits in.

UX Safeguards

  • Session immunity for dismissed hypotheses — A hypothesis dismissed in the current session is not re-presented in the same session unless the user explicitly re-probes the same scope. Re-presenting a dismissed hypothesis without user-driven re-scope erodes the user's disposition authority (Rule 6 reinforcement). Realized via Λ.dismissed_in_session: Phase 3 Dismiss adds presented hypotheses to this set; Phase 1 Scan filters out members of this set. Clearing rules: Narrow(Slice) clears the set (new situation scope justifies fresh dismissals); Narrow(CoverageSubset) preserves the set (situation unchanged, only coverage filter applied).
  • Progress opacity — No progress counter, no "X of Y hypotheses considered" framing. Such counters reintroduce a quasi-score (Rule 7 reinforcement).
  • Ephemeral recognition — Each probe disposition is a present-tense fit review, not a permanent record. The user's disposition does not bind future probes (Rule 7 reinforcement).
  • Pre-gate evidence visibility — All hypothesis evidence and reverse-evidence is laid out before the disposition gate so the user reads context before deciding (evidence stays out of the disposition question itself; structural).
  • Vocabulary discipline — Probe output uses "hypothesis", "fit review", "evidence", "reverse-evidence", "disposition", "route". The skill never speaks of mistakes, errors, or misuse (Rule 9 + Rule 10 reinforcement).

Trigger Signals

Invoke /probe when:

  • The user describes symptoms but cannot name a single protocol that fits
  • The user is about to invoke a protocol but expresses uncertainty between two or more candidates
  • The user asks "which one fits this?" without providing a specific deficit name
  • The user wants a fit review before committing to a protocol invocation

Skip Conditions

Skip Probe when:

  • The user has already named the deficit with confidence
  • The user requests pattern-based recommendation from session history (/onboard)

© jongwony, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in epistemic-cooperative/skills/probe of jongwony/epistemic-protocols.

Open the folder on GitHubat commit 69bb95b

Compare with similar skills

Probe next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Probe compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Probe this skilljongwony/epistemic-protocols173—~7.4kAutomated safety check: PassMIT
Hypothesesdavepoon/buildwithclaude3.6k—~2kAutomated safety check: PassMIT
Workspace Surface Auditaffaan-m/ECC274k3 repos~1.3kAutomated safety check: NotesMIT
Recognition Rewardssickn33/agentic-awesome-skills47k1 repos~3.4kAutomated safety check: PassMIT
Runtime Behavior Probeopenai/openai-agents-python30k—~3.8kAutomated safety check: PassMIT
Surfacesrid/emanote963—~1.5kAutomated safety check: PassCustom licence

Similar skills

  • Hypotheses

    davepoon/buildwithclaude

    Manages the project's testable hypotheses — surfacing new ones, refining existing ones, updating status, reviewing the full set, and assessing hypothesis state based on evidence gathered so far.

    3.6k GitHub stars~2k tokensUpdated yesterday
    Business, Finance & HRAuto-check passed
  • Audit the active repo, MCP servers, plugins, connectors, env surfaces, and harness setup, then recommend the highest-value ECC-native skills, hooks, agents, and operator workflows.

    274k GitHub starsUsed in 3 repos~1.3k tokens
    Agent WorkflowsAuto-check: notes
  • Recognition Rewards

    sickn33/agentic-awesome-skills

    Recognition register: employee, reward type, category, visibility, message and points awarded.

    47k GitHub starsUsed in 1 repo~3.4k tokens
    Auto-check passed
  • Runtime Behavior Probe

    openai/openai-agents-python

    Official

    Plan controlled runtime probes when explicitly invoked; execute only after the required probe approval.

    30k GitHub stars~3.8k tokensUpdated today
    DevelopmentAuto-check passed
  • Surface

    srid/emanote

    How a downstream app consumes the shared @kolu/surface stack (@kolu/surface · surface-app · surface-nix-host · surface-mcp) — declaring a typed reactive surface, serving it, consuming it (SolidJS…

    963 GitHub stars~1.5k tokensUpdated 2 mo ago
    Auto-check passed
  • アクティブなリポジトリ、MCPサーバー、プラグイン、コネクター、環境サーフェス、ツールのセットアップを監査し、最も価値の高いECCネイティブスキル、フック、エージェント、オペレーターワークフローを推奨する。ユーザーがClaude Codeのセットアップを支援してほしい場合や、環境で実際に何が使えるかを理解したい場合に使用する。

    274k GitHub stars~761 tokensUpdated 2 days ago
    Agent WorkflowsAuto-check: notes

More from jongwony/epistemic-protocols

All 29 skills in this repo
  • Outcome

    jongwony/epistemic-protocols

    This skill should be used when the user asks to "run the outcome eval", "paired bare vs protocol", "which decisions did the protocol surface", "count what the AI asked or presented", "does /inquire…

    173 GitHub stars~1.3k tokensUpdated yesterday
    Auto-check: notes
  • Realize

    jongwony/epistemic-protocols

    This skill should be used when the user asks to "run the eval", "test whether the protocol actually works at runtime", "check type realization", "measure protocol fulfillment", "run the…

    173 GitHub stars~3.3k tokensUpdated yesterday
    Auto-check: notes
  • Verify

    jongwony/epistemic-protocols

    This skill should be used when the user asks to "verify protocols", "check consistency before commit", "validate definitions", "run pre-commit checks", "verify soundness", or wants to ensure…

    173 GitHub stars~1.4k tokensUpdated yesterday
    Auto-check passed
  • Encapsulation

    jongwony/epistemic-protocols

    This skill should be used when the user asks to "audit plugin encapsulation", "check self-containment semantics", "find contributor-knowledge assumptions", or invokes /encapsulation.

    173 GitHub stars~2k tokensUpdated yesterday
    Auto-check passed
  • Formal Review

    jongwony/epistemic-protocols

    This skill should be used when the user asks to "formal review", "formal lens review", or invokes /formal-review.

    173 GitHub stars~3.5k tokensUpdated yesterday
    Auto-check: notes
  • Recollect

    jongwony/epistemic-protocols

    The user vaguely recalls something discussed before but cannot name it — one session, or a line of work, topic, or settled concept across several: find it in past records to recognize.

    173 GitHub stars~8.7k tokensUpdated yesterday
    Auto-check passed

Questions about Probe

What does Probe do?

Deficit Recognition Probe — surface multiple deficit hypotheses for the user's current situation and route by user-constituted recognition (fit review, not protocol scoring). Probe is an agent skill from jongwony/epistemic-protocols. Deficit Recognition Probe — surface multiple deficit hypotheses for the user's current situation and route by user-constituted recognition (fit review, not protocol scoring).

How do I install Probe in Claude Code?

Run `npx skills add jongwony/epistemic-protocols --skill probe -a claude-code`. Or copy the skill folder (epistemic-cooperative/skills/probe in jongwony/epistemic-protocols) into .claude/skills/probe in your project. Claude Code loads it when a task matches its description.

How do I install Probe in Codex?

Run `npx skills add jongwony/epistemic-protocols --skill probe -a codex`. Or copy the skill folder (epistemic-cooperative/skills/probe in jongwony/epistemic-protocols) into .agents/skills/probe in your project. Codex loads it when a task matches its description.

Can I use Probe in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jongwony/epistemic-protocols --skill probe -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/probe, .gemini/skills/probe, .github/skills/probe and .opencode/skills/probe in your project.

What does Probe need to run?

SKILL.md names no scripts, command-line tools or credentials: Probe is instructions for the agent only.

Does Probe access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Probe safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Probe use?

Probe is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Probe use?

About 7.4k tokens (SKILL.md is roughly 30k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Probe?

Skills that share tags, products or a category with Probe: Hypotheses (davepoon/buildwithclaude, 3.6k stars), Workspace Surface Audit (affaan-m/ECC, 274k stars), Recognition Rewards (sickn33/agentic-awesome-skills, 47k stars) and Runtime Behavior Probe (openai/openai-agents-python, 30k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Probe?

jongwony (a GitHub user) maintains it in jongwony/epistemic-protocols, which has 173 GitHub stars. The repository holds 29 skills in this directory. The repository was last updated on October 6, 2026.

Source: jongwony/epistemic-protocols on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.