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.
Deficit Recognition Probe — surface multiple deficit hypotheses for the user's current situation and route by user-constituted recognition (fit review, not protocol scoring).
$ npx skills add jongwony/epistemic-protocols --skill probe -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install jongwony/epistemic-protocols probe --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ 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-srcUse ~/.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/
Install the "probe" agent skill from https://github.com/jongwony/epistemic-protocols/tree/main/epistemic-cooperative/skills/probe into .claude/skills/probe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "probe", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/jongwony/epistemic-protocols/tree/main/epistemic-cooperative/skills/probeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add jongwony/epistemic-protocols --skill probe -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install jongwony/epistemic-protocols probe --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jongwony/epistemic-protocols.git skills-src && mkdir -p .agents/skills && cp -r skills-src/epistemic-cooperative/skills/probe .agents/skills/probe && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "probe" agent skill from https://github.com/jongwony/epistemic-protocols/tree/main/epistemic-cooperative/skills/probe into .agents/skills/probe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "probe", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jongwony/epistemic-protocols --skill probe -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install jongwony/epistemic-protocols probe --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jongwony/epistemic-protocols.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/epistemic-cooperative/skills/probe .cursor/skills/probe && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "probe" agent skill from https://github.com/jongwony/epistemic-protocols/tree/main/epistemic-cooperative/skills/probe into .cursor/skills/probe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "probe", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/jongwony/epistemic-protocols.git --path epistemic-cooperative/skills/probe--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add jongwony/epistemic-protocols --skill probe -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install jongwony/epistemic-protocols probe --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jongwony/epistemic-protocols.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/epistemic-cooperative/skills/probe .gemini/skills/probe && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "probe" agent skill from https://github.com/jongwony/epistemic-protocols/tree/main/epistemic-cooperative/skills/probe into .gemini/skills/probe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "probe", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install jongwony/epistemic-protocols probeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add jongwony/epistemic-protocols --skill probe -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/jongwony/epistemic-protocols.git skills-src && mkdir -p .github/skills && cp -r skills-src/epistemic-cooperative/skills/probe .github/skills/probe && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "probe" agent skill from https://github.com/jongwony/epistemic-protocols/tree/main/epistemic-cooperative/skills/probe into .github/skills/probe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "probe", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add jongwony/epistemic-protocols --skill probe -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install jongwony/epistemic-protocols probe --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/jongwony/epistemic-protocols.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/epistemic-cooperative/skills/probe .opencode/skills/probe && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "probe" agent skill from https://github.com/jongwony/epistemic-protocols/tree/main/epistemic-cooperative/skills/probe into .opencode/skills/probe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "probe", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
probeDeficit 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).
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.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 69bb95b. It shows what the files ask for, not the result of running them.
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.
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.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
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.
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.
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.
The full file from jongwony/epistemic-protocols at commit 69bb95b, republished under its MIT licence (© jongwony). 2,528 words, ~7,382 tokens.
.claude/skills/probe/SKILL.md (or your agent's skills folder).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.
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.
Invoke this skill when:
Skip when:
/onboard)| Skill | Stance | Input | Output |
|---|---|---|---|
/onboard | Pattern-based recommendation + optional trial | Session history patterns | Recommended protocol + scenario + trial |
/probe | Active AI-hypothesized deficit recognition | Current user situation | At 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.
Detect that the user's situation admits ambiguous deficit framing. Heuristics:
/probePhase 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.
Scan the user's situation against the full catalog of epistemic deficits. For each candidate hypothesis, build a Set(CoverageEntry) where each entry pairs:
deficit: DeficitName matched against the situationprotocol: ProtocolId that addresses that deficitevidence: Evidence — the situation signal supporting the matchreverse_evidence: Evidence — the observation that would shrink the coverage to exclude this entryA 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).
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).
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:
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.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).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.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.
/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.misfit.md records or session history beyond the current session) requires an explicit Active-authority confirmation; never default behavior.|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./onboard). The two skills occupy distinct stances.── 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)./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.Λ.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).Invoke /probe when:
Skip Probe when:
/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
Just SKILL.md in epistemic-cooperative/skills/probe of jongwony/epistemic-protocols.
Open the folder on GitHubat commit 69bb95b
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Probe this skilljongwony/epistemic-protocols | 173 | — | ~7.4k | Automated safety check: Pass | MIT | |
| Hypothesesdavepoon/buildwithclaude | 3.6k | — | ~2k | Automated safety check: Pass | MIT | |
| Workspace Surface Auditaffaan-m/ECC | 274k | 3 repos | ~1.3k | Automated safety check: Notes | MIT | |
| Recognition Rewardssickn33/agentic-awesome-skills | 47k | 1 repos | ~3.4k | Automated safety check: Pass | MIT | |
| Runtime Behavior Probeopenai/openai-agents-python | 30k | — | ~3.8k | Automated safety check: Pass | MIT | |
| Surfacesrid/emanote | 963 | — | ~1.5k | Automated safety check: Pass | Custom licence |
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.
affaan-m/ECC
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.
sickn33/agentic-awesome-skills
Recognition register: employee, reward type, category, visibility, message and points awarded.
openai/openai-agents-python
Plan controlled runtime probes when explicitly invoked; execute only after the required probe approval.
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…
affaan-m/ECC
アクティブなリポジトリ、MCPサーバー、プラグイン、コネクター、環境サーフェス、ツールのセットアップを監査し、最も価値の高いECCネイティブスキル、フック、エージェント、オペレーターワークフローを推奨する。ユーザーがClaude Codeのセットアップを支援してほしい場合や、環境で実際に何が使えるかを理解したい場合に使用する。
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…
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…
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…
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.
jongwony/epistemic-protocols
This skill should be used when the user asks to "formal review", "formal lens review", or invokes /formal-review.
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.
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).
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.
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.
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.
SKILL.md names no scripts, command-line tools or credentials: Probe is instructions for the agent only.
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.
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.
Probe is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
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.
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.
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.