Okf domain elicit
Conduct a structured, resumable domain-elicitation interview and emit an OKF knowledge bundle (ubiquitous language, tri-temporal domain events, business rules, context map) as you go. Use when the user wants to map a domain, elicit domain knowledge from a non-technical stakeholder, run a domain-discovery or event-storming session, or when another skill needs to drive a resumable domain interview.From its SKILL.md
npx -y skills add NickMoignard/okf-domain-elicitAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
5.1 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
OKF Domain Elicitation
Conduct a domain interview that survives across sessions and emits an OKF bundle as it runs. Three leading words govern every run:
- saturation — a line of questioning is done only when it goes saturated: an answer that is concrete, bounded, exemplified, and exception-tested, spawning no new thread.
- branch queue — every unexplored case is pushed to an on-disk queue and worked until empty. Depth-first, breadth-tracked; nothing is dropped.
- tri-temporal — every time-bearing fact records when it happened, when the organisation received it, and when it was entered. See TRI-TEMPORAL.md.
This skill supplies the structure and the artefacts; pair it with a relentless interviewing stance (e.g. /grilling) for the persistence.
Session workspace — resume before asking anything
All state lives on disk so the interview survives context-window and session boundaries. On invocation:
- Determine the topic slug (ask the user for the subject if unset).
- Look for
.interview/<slug>/. If it exists, READstate.jsonandqueue.jsonl, resume from the recorded state and active thread, and announce where you are resuming. - If it does not exist, create it:
.interview/<slug>/
state.json # {state, active_thread, topic, temporal_relevance}
queue.jsonl # one branch per line: {id, prompt, status, parent}
index.md # OKF bundle root — see BUNDLE-FORMAT.md
glossary.md # ubiquitous language — see GLOSSARY-FORMAT.md
events.md # domain-event timeline — see EVENTS-FORMAT.md
rules.md # business rules — see RULES-FORMAT.md
context-map.md # bounded contexts — see CONTEXT-MAP-FORMAT.md
Persist after every captured fact and every state transition. Never hold the queue or captured facts only in context — the disk is the source of truth.
State machine
Walk these states. The engine is the loop NARRATE → DRILL → BRANCH, popping the branch queue back into NARRATE until termination holds. Full prompts: QUESTION-BANKS.md.
- S0 Frame — scope, goal, actors at the edges. Set
temporal_relevance(calendar day? clock second?) instate.json. - S1 Narrate — elicit one concrete story as an event timeline; append events to
events.md. - S2 Drill — per event extract trigger · actor · data-in · rule · outcome · timing · identity, plus its tri-temporal states (see TRI-TEMPORAL.md).
- S3 Branch — "what else could happen here?" Push each exception / alternate / failure to
queue.jsonlaspending. - S4 Define — pin terms (each with a non-example), cardinalities, and boundaries; write to
glossary.mdandcontext-map.md. - S5 Reflect — replay the model back in the stakeholder's words; capture corrections.
Probing reflex
Apply to EVERY answer, in every state — this is the relentless core:
vague quantifier ("usually","a few","normally") → ask for the boundary
abstraction with no example → demand a concrete instance
asserted rule ("we always X") → hunt the exception
new term → write to glossary.md WITH a non-example
new actor or event → push to queue.jsonl
time-bearing fact → capture all three tri-temporal states
else (concrete, bounded, exemplified, exception-tested)
→ mark thread saturated; pop next pending branch
Branch queue protocol
- A branch is
{id, prompt, status: pending|active|saturated, parent}— one JSON object per line, append-only. - To work a branch: set it
activeinstate.json, run S1→S3 on it, then append a line marking itsaturated. - Pop the next
pendingbranch only once the active thread is saturated. - On resume, the queue is the source of truth for what is left — read it, never reconstruct from memory.
Completion criteria
Stop only when ALL hold. These are checkable — do not declare done early:
queue.jsonlhas nopendingbranch.- Every term in
glossary.mdhas both a definition and a non-example. - Every event in
events.mdcarries all three tri-temporal states, or an explicitn/a — {reason}. - The S5 replay produced no material correction.
- New questions yield only restatements of known facts.
Emit
Write OKF as you go — never batch at the end. Each artefact follows its *-FORMAT.md; together they form an OKF bundle rooted at index.md. Keep index.md current as artefacts gain content. The bundle is the deliverable — hand it off (e.g. to /to-prd or /to-issues) once the completion criteria hold.
What ships with it: 10 files
13.6 KB alongside SKILL.md
- BUNDLE-FORMAT.md773 B
- CONTEXT-MAP-FORMAT.md942 B
- EVENTS-FORMAT.md1.3 KB
- .gitignore50 B
- GLOSSARY-FORMAT.md1014 B
- LICENSE1.0 KB
- QUESTION-BANKS.md2.9 KB
- README.md3.0 KB
- RULES-FORMAT.md864 B
- TRI-TEMPORAL.md1.8 KB