operator-interview-doctrine
Skill3 starsChanged 3 months agoMITView on GitHub
Shared doctrine reference for operator-interview skills. Holds the question taxonomy (context-free questions first, then funnel), the ask-vs-default rule gated on reversibility, the adaptive-depth rubric, stop conditions, AskUserQuestion batch rules, the spec-note schema, and the sign-off protocol. This skill has no operations — it is reference content read by `/operator-interview` (and any caller that elicits a spec from an operator) at interview time. Never inline this doctrine into the consumer skills themselves — operator-confirmed rules must persist in one place.
In this repository41 other files it gives its agents.
- cadence-goalsSkill
- ci-feedback-loopSkill
- compoundSkill
- decision-rights-doctrineSkill
- diataxisSkill
- dispatch-gateSkill
- drift-checkSkill
- family-checkSkill
- fix-then-re-review-ladderSkill
- github-projectsSkill
- gitSkill
- goal-treeSkill
- handoffSkill
- improvement-loopSkill
- kb-captureSkill
- kb-compileSkill
- kb-coreSkill
- kb-lessons-bridgeSkill
- kb-lintSkill
- l1-supervisorSkill
- l2-supervisorSkill
- lessons-learnedSkill
- lN-lifecycle-doctrineSkill
- lN-review-doctrineSkill
- medical-recordsSkill
- operator-interviewSkill
- operator-reviewSkill
- planning-workflowSkill
- pr-review-fanoutSkill
- pull-taskSkill
- ralph-wiggumSkill
- reviewSkill
- root-cause-depthSkill
- scan-documentSkill
- self-improvementSkill
- self-verifySkill
- skillifySkill
- task-workflowSkill
- testing-without-mocksSkill
- vault-cloudSkill
- verify-inherited-premiseSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
13 rules. About 0 are common, 7 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈7
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 16
All the doctrine lives in this file's body so it is deliverable by name (invoke the skill.
- Distinctive: line 47
Before any topic-specific question, ask the context-free questions (Gause & Weinberg): questions whose answers frame every later answer, …
- Distinctive: line 62
After the context-free frame, run the funnel:
- Distinctive: line 76
Every question is worded neutrally.
- Very specific: line 96
When information needed for a decision is unknown, mark it [NEEDS CLARIFICATION] in the working spec.
- Distinctive: line 127
Stop when either holds:
- Very specific: line 129
~70% of needed info: Stop once roughly 70% of the information needed to write a buildable spec is gathered.
- Distinctive: line 133
Saturation: Stop when answers stop adding information — when new questions return restatements of what is already known.
- Very specific: line 146
≤4 questions per batch: Do not exceed four questions in a single AskUserQuestion call.
- Distinctive: line 148
≤4 options per question: Do not exceed four options for any one question.
- Very specific: line 198
Playback: Before asking for sign-off, play the assembled spec back to the operator — Problem/Why, Decisions, Requirements, Acceptance …
- Very specific: line 218
NOT sign-off. Until explicit sign-off, the spec stays status: draft.
- Very specific: line 238
If a rule above is wrong for the current iteration, fix it here via a PR against this skill.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
operator-interview-doctrine — shared operator-interview doctrine
This skill is a doctrine-only reference. It defines what an operator interview
is — how to elicit a specification from a human operator without over-asking or
under-asking. The actual interview skill (operator-interview) is a thin executor
that loads this doctrine at interview time and applies it.
All the doctrine lives in this file's body so it is deliverable by name (invoke the
skill; the rendered body enters context). If you find yourself about to add an
interview rule by editing the operator-interview skill, edit this file
instead — that is the doctrine-drift failure mode this split exists to prevent.
Invariants
The interview calibrates asking to ambiguity. An LLM's built-in bias is to under-ask — to assume a plausible answer and proceed silently. This doctrine exists to counteract that bias: where a decision is irreversible or genuinely ambiguous, ask; where it is reversible and low-impact, apply a recommended default and record it as overridable. Neither silent assumption nor reflexive over-elicitation is acceptable.
The interview separates what/why (the spec) from how (the plan). The spec captures the problem, the decisions, the requirements, and the acceptance criteria. It does NOT prescribe implementation. Planning is a downstream activity over a signed-off spec.
A spec is authority-bearing only when the operator has signed off. Build and
dispatch are gated on frontmatter status: signed-off; a draft spec confers no
build authority. Sign-off binds to the spec as signed — a material change to a
signed-off spec revokes that authority until the operator re-signs (see the sign-off
protocol's re-sign rule).
Question taxonomy
Context-free questions first
Before any topic-specific question, ask the context-free questions (Gause & Weinberg): questions whose answers frame every later answer, regardless of the topic. The two load-bearing ones:
- The real reason. "What is the real problem this solves?" — the surface request is often a proposed solution, not the underlying need. Elicit the need.
- What success is worth. "What is solving this worth — and how will we know it worked?" — establishes the value and the shape of the acceptance criteria.
Context-free questions are asked as prose, open-ended, before the structured batches. They are not multiple-choice; their job is to surface the operator's framing in the operator's own words.
Then funnel
After the context-free frame, run the funnel:
- Broad open — open-ended questions that let the operator describe the space in their own terms.
- Probes — narrower follow-ups that pursue specifics surfaced by the open answers (the "tell me more about X" move).
- Closed confirmation — yes/no or pick-one questions that confirm a specific understanding before it is written into the spec.
Funnel direction is broad → narrow, never the reverse. Do not open with a closed question; you will anchor the operator and miss the framing.
Neutral, non-leading wording
Every question is worded neutrally. Do not embed the answer you expect, do not signal a preferred option through tone or ordering, do not ask "don't you think we should X?" Leading questions corrupt the elicited spec — the operator confirms your assumption rather than stating their need.
Ask-vs-default rule (gated on reversibility)
For every decision the spec must record, classify it by reversibility before deciding whether to ask:
| Decision type | Door | Action |
| Low-impact, easily reversed | two-way door | Apply the recommended default. Record it in the spec as an overridable decision (the operator can change it later at low cost). |
| Irreversible or expensive to reverse | one-way door | Always ask. Never apply a default for a one-way door, no matter how confident the recommendation. |
Reversibility — not confidence — is the gate. A high-confidence recommendation for a one-way door still gets asked, because the cost of being wrong is unrecoverable.
When information needed for a decision is unknown, mark it [NEEDS
CLARIFICATION] in the working spec. Never silently assume. A [NEEDS
CLARIFICATION] marker is a visible, trackable gap — a silent assumption is an
invisible defect.
Adaptive-depth rubric
The interview runs at one of three depths. Suggest a depth from task size and reversibility; the operator may override.
| Depth | Suggested when | Shape |
| quick | Small task, mostly two-way doors, low ambiguity | Context-free questions + a single confirmation batch |
| standard | Moderate task, mixed doors | Full funnel, one or two scoping batches, gap probes |
| thorough | Large task, OR any material one-way door, OR high ambiguity | Full funnel, multiple scoping batches, exhaustive gap probing up to the clarification cap |
One-way doors pull depth up. Even a small task that contains an irreversible
decision is suggested at standard or thorough, because the irreversible decision
must be asked and confirmed.
The suggested depth is presented to the operator and is overridable — the operator's chosen depth wins.
Stop conditions
Over-elicitation destroys value: every extra question past the point of usefulness costs the operator's attention and signals the interviewer cannot judge sufficiency. Stop when either holds:
- ~70% of needed info. Stop once roughly 70% of the information needed to write a
buildable spec is gathered. The remaining gaps are recorded as
[NEEDS CLARIFICATION]or as overridable defaults — they do not block sign-off if the operator accepts them. - Saturation. Stop when answers stop adding information — when new questions return restatements of what is already known. Saturation is a signal that the productive interview is over regardless of the 70% estimate.
Whichever fires first ends elicitation. Continuing past a stop condition is over-elicitation.
AskUserQuestion usage rules
Structured questions go through AskUserQuestion. The batch rules:
- ≤4 questions per batch. Do not exceed four questions in a single
AskUserQuestioncall. - ≤4 options per question. Do not exceed four options for any one question.
- Every option carries a recommended default. Exactly one option per question is marked as the recommended default, so the operator can accept the recommendation with minimal effort. A question with no recommended default violates the ask-vs- default rule — the interviewer is supposed to have a recommendation.
Context-free questions and broad-open funnel questions are asked as prose, not
through AskUserQuestion — they are open-ended and have no option set. Reserve
AskUserQuestion for scoping batches and closed confirmation.
Spec-note schema
The interview produces a spec note written to the operator's Obsidian vault via
the obsidian-notes skill. The schema:
Frontmatter
| Field | Value |
| note type / tag | spec (tag #spec) |
status | draft during the interview → signed-off after operator sign-off → back to draft on a material change (re-sign) |
signed_off | the sign-off date (set when status becomes signed-off; cleared when a material change resets status to draft) |
supersedes | wiki-link to a prior spec this one replaces, when applicable |
Body sections
| Section | Content |
| Problem / Why | The real problem (from the context-free questions) and what solving it is worth. |
| Decisions | Each recorded decision, marked as asked-and-confirmed or as an overridable default (per the ask-vs-default rule). |
| Requirements | Each requirement is singular (one requirement per entry), measurable, and carries a named verification method — test, demo, or inspect. |
| Acceptance Criteria | In EARS form: WHEN <trigger> THEN system SHALL <response>. Use SHALL CONTINUE TO for regression-locks (behavior that must not break). |
| Traceability | Links to Jira / PR(s) / related [[notes]] — only when relevant. Omit the section (or the line) when N/A; do not write empty placeholders. |
| Deferred / assumptions | Deferred scope and recorded assumptions, including every [NEEDS CLARIFICATION] the operator chose to defer. |
The spec ends with an end-to-end verification step — a single named check that exercises the whole deliverable, distinct from the per-requirement verification methods.
The canonical worked example is the spec note that this component's own build
produced:
Notes/2026/06/2026-06-30-operator-interview-spec.md in the host's Obsidian vault.
Match its shape.
Sign-off protocol
- Playback. Before asking for sign-off, play the assembled spec back to the
operator — Problem/Why, Decisions, Requirements, Acceptance Criteria, and any
[NEEDS CLARIFICATION]still open. Playback is the operator's last chance to correct before the spec becomes authority-bearing. Playback is sent as its own message and ends with the played-back spec content — it does not end with a question, and it does not carry the sign-off ask. Playback ends the assistant's turn (the message/response boundary — distinct from a question or a batch within one message): the response stops after playback, with no further content. The sign-off ask is asked only in a subsequent turn, after the operator has had the opportunity to respond — their next input, even if it's just an implicit continue — never emitted back-to-back with playback in the same response. - Explicit sign-off. The sign-off ask is a single, standalone question — e.g.
"Do you sign off on this spec?" — asked on its own turn, per step 1. Ask it
through
AskUserQuestionas a single closed question (e.g. Sign off / Not yet, with a recommended default), per the AskUserQuestion usage rules above. If the operator raises a change during or after playback but before sign-off, handle it as its own exchange — replay the affected section if needed — then re-ask the standalone sign-off question; this is distinct from the re-sign rule (step 5), which applies to a material change made after sign-off has already been granted. The operator must explicitly sign off. Silence, "looks fine," or a non-answer is NOT sign-off. Until explicit sign-off, the spec staysstatus: draft. - Promote. On explicit sign-off, set frontmatter
status: signed-offandsigned_off: <date>. Only then does the spec confer build authority. - Gate. Build and dispatch consumers read
statusfrom frontmatter and proceed only onsigned-off. Adraftspec is not a build authorization. - Re-sign on material change. Sign-off binds to the spec as it read when signed.
A material change — any edit to Decisions, Requirements, or
Acceptance Criteria — to a
signed-offspec revokes sign-off: reset frontmatterstatus: draftand clearsigned_offat the moment the change is written, then run the protocol again from playback (step 1) before the spec regains build authority. Non-material edits — typo/formatting fixes, added traceability links, clarifying prose that changes no decision, requirement, or criterion — do not trigger re-sign. When unsure whether a change is material, treat it as material and re-sign; the cost of an unnecessary re-sign is one confirmation, the cost of a missed one is a build against an unratified spec.
When this doctrine is wrong
If a rule above is wrong for the current iteration, fix it here via a PR against
this skill. Do not patch the rule inside operator-interview — that skill is a pure
executor of this doctrine. Doctrine edits land on a branch and ship as a versioned
doctrine update.
See also
operator-interviewskill — executes this doctrine: runs the funnel, writes the spec note, and drives the sign-off protocol.obsidian-notesskill — CLI surface for the spec-note write (create,property:set,append) and the non-blocking failure contract.planning-workflowskill — the downstream consumer: planning operates over asigned-offspec (what/why) to produce a plan (how).
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

