with one click
omh-deep-interview
Socratic reqs interview; clarify vague/ambiguous goals
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
Socratic reqs interview; clarify vague/ambiguous goals
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
Drive an omh-ralph run: dispatch, evidence, commit hygiene.
Execute one omh-ralph task: file-scope, commit, report.
Drive omh-ralplan: context package, rounds, distillation.
Drive omh-triage: when to invoke, how to run rounds.
Multi-role consensus triage of an issue backlog.
pipeline: interview→plan→execute→QA→verify (idea→code)
| name | omh-deep-interview |
| description | Socratic reqs interview; clarify vague/ambiguous goals |
| version | 2.0.0 |
| metadata | {"hermes":{"tags":["interview","requirements","socratic","ambiguity","specification"],"category":"omh","requires_toolsets":["terminal","omh"]}} |
omh-deep-research first to gather context, then resume the interview with the confirmed report as input..omh/specs/ for this project.omh/ directory for state and spec filesFollow these phases in order. The skill operates through conversation with the user and file writes for state and spec output.
Before starting a new interview:
listed = omh_state(action="list_instances", mode="interview")
Each entry carries instance_id (the interview id) and active flag.
If omh_state is unavailable, glob .omh/state/interview--*.json manually.omh_state(action="read", mode="interview", instance_id="{id}") — read round summaries to reconstruct contextomh_state(action="write", mode="interview", instance_id="{id}", data={...status: "abandoned"}), then proceed to Phase 1 with a NEW id.omh/research/*-report.md exists with frontmatter
status: confirmed, mention it to the user as available context for
the interview (e.g., "I see a confirmed research report on '{topic}'
at {path} — want me to fold that in as background?"). Do NOT
auto-load it; the user decides.Start the interview with two questions:
Then:
di-{YYYYMMDD}-{short_random} (e.g., di-20260407-x7k).omh/state/interview--{id}.json (engine derives this from instance_id="{id}") with:
HIGHtype set to greenfield or brownfield based on user's answerexisting_context coverage set to N/A for greenfield projectsRun up to 5 rounds (extensible to 10 if user requests). Each round:
Step 1 — Select dimension to probe
Compare coverage bins across dimensions. Target the dimension with the highest ambiguity. When multiple dimensions share the same bin, use weights to break ties:
Load references/scoring-rubric.md for detailed bin definitions and examples.
Step 2 — Ask the question
Ask ONE primary question targeting the selected dimension. Make it specific and grounded in what the user has already told you. Don't ask generic questions — reference their earlier answers.
Good: "You mentioned this is a CLI tool for personal use. What happens when you run it with no tasks configured — should it create a default list, show an error, or something else?"
Bad: "What are your constraints?"
Allow 1-2 brief follow-ups if the user's answer is unclear, contradictory, or raises new questions. Don't force follow-ups if the answer is clear.
Step 3 — Adaptive questioning (if stuck)
If a dimension has been targeted for 2 or more consecutive rounds without moving from its current bin, change your approach:
Step 4 — Update coverage
After processing the user's answer, re-assess the coverage bin for the targeted dimension.
Use the rubric in references/scoring-rubric.md. Be conservative — when in doubt, keep
the bin at its current level rather than prematurely lowering it.
Step 5 — Update state
Update the interview state (increment round, add summary, update coverage):
omh_state(action="write", mode="interview", instance_id="{id}", data={...updated state with new round...})
Each round summary: max ~200 words — capture what was learned, not the full exchange.
Step 6 — Present coverage and ask to continue
Show the user where things stand:
Coverage after round {N}:
Goal: [MEDIUM] → Some clarity, but scope needs bounding
Constraints: [LOW] → Mostly clear, data format TBD
Success Criteria: [HIGH] → Need testable criteria
Existing Context: [N/A] → Greenfield project
Then ask: "Want to continue refining, or is this enough to work with?"
The user always controls exit. Never auto-terminate based on coverage scores.
When the user confirms exit (or max rounds reached):
templates/spec-template.mdstatus: draftcoverage: current bin valuesrounds_completed: total rounds done.omh/specs/{project-name}-spec.mdspec_file = path to specDisplay the full draft spec to the user and ask:
"Here's the specification I've drafted. Please review it. You can:
Handle each response:
On confirm:
status: confirmedstatus: confirmedomh-ralplan to create an implementation plan from this spec."On request changes:
On abandon:
status: abandonedOnly specs with status: confirmed are considered valid by downstream skills.
Throughout the interview, write structured events to .omh/logs/interview-{id}.log:
2026-04-07T06:30:00Z STARTED interview_id=di-20260407-x7k project=my-project type=greenfield
2026-04-07T06:31:15Z ROUND round=1 dimension=goal coverage_change=goal:HIGH→MEDIUM
2026-04-07T06:33:42Z ROUND round=2 dimension=constraints coverage_change=constraints:HIGH→LOW
2026-04-07T06:35:00Z USER_EXIT round=3 reason=user_confirmed
2026-04-07T06:35:30Z SPEC_GENERATED path=.omh/specs/my-project-spec.md status=draft
2026-04-07T06:36:00Z SPEC_CONFIRMED path=.omh/specs/my-project-spec.md
Log events and decisions only — NOT conversation content.
Downstream skills detect completed interviews by checking for files matching
.omh/specs/*-spec.md with status: confirmed in the YAML frontmatter.
State file: .omh/state/interview--{id}.json (engine path; pass instance_id="{id}" to omh_state)
See references/state-schema.md for the full schema.
Key rules:
instance_id per interview. If an active interview already exists for the same project, offer to resume or abandon it before starting a parallel one with the same id.