원클릭으로
interview
Socratic interview to crystallize vague requirements into clear specifications. Cross-agent: Claude Code, Codex, Gemini CLI.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Socratic interview to crystallize vague requirements into clear specifications. Cross-agent: Claude Code, Codex, Gemini CLI.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Discover, sync, and publish blog posts from 3B knowledge base. Runs dry-run sync to find publishable posts, lets user select which to publish, syncs English versions, expands them into narrative blog posts, then translates to Korean using /translate-ko workflow. Use when user says "publish blog", "sync posts", "new blog posts", or "blog publish".
Audit and repair all symlinks from 3B to global config profiles (~/.claude, ~/.claude-work) and project repositories. Use this skill whenever the user says "check symlinks", "symlink audit", "verify symlinks", "fix symlinks", "symlink health", or "check links". Also trigger when the user reports settings not propagating, config drift between profiles, or after Claude Code UI updates or plugin reinstalls — these commonly overwrite symlinks with regular files via atomic rename.
Automate edX course study sessions using Chrome MCP browser tools. Claude reads page content via screenshots, analyzes quiz questions and presents answers in batch tables, navigates between pages, and creates study notes progressively. User handles all iframe interactions (selecting answers, clicking Submit, scrolling quiz pages). Two modes: study (notes + explanations) and exam (fast answers only). Use when user says "edx study", "let's study", "continue studying", "start exam", "exam mode", "practice exam", "course exam", or "edx [course-name]".
Intake, analyze, and process research papers (PDF or arXiv URL) into the 3B knowledge system. Extracts academic metadata, generates structured analysis, identifies 3B/Claude applicability, creates knowledge entries, and drafts blog + LinkedIn posts. Maintains a searchable paper library index. Use when user says "research paper", "analyze paper", "read this paper", "paper review", shares an arXiv link/PDF path, or wants to process a research paper.
Aggregate journal entries into higher-level summaries using clean-slate rollup strategy. Combines daily entries into weekly, weekly into monthly, monthly into quarterly, quarterly into yearly. Cleans ephemeral levels after aggregation. Use when user says "rollup", "aggregate journals", "weekly summary", "monthly rollup", or "summarize this week/month".
Translate English content to natural Korean. Supports blog posts, PR descriptions, documentation, READMEs, and general text. Uses voice calibration from writing examples and a 4-step workflow (Analyze, Translate, Rewrite, QA). Use when user says "translate to Korean", "Korean translation", "translate this", "ko version", or "한국어로".
| name | interview |
| description | Socratic interview to crystallize vague requirements into clear specifications. Cross-agent: Claude Code, Codex, Gemini CLI. |
| aliases | ["socratic"] |
Socratic interview that turns a vague request ("build a payment module", "add search to my app") into a concrete, actionable specification via structured questioning. Works across Claude Code, Codex, and Gemini CLI.
/3b:interview [topic]
Trigger keywords: "interview me", "clarify requirements", "socratic interview"
This SKILL uses Claude Code tool names (Read, Write, Edit, Grep,
Glob, Bash, AskUserQuestion, WebFetch). When running on a
different platform:
AskUserQuestion equivalent — use plain-text
option blocks (see "Codex fallback" below).ask_user instead of AskUserQuestion.The interview runs as an in-conversation flow driven by the
socratic-interviewer role and rotating perspectives (see step B.6). No
MCP tools, no Python runtime, no persistence — the host conversation is
the engine. For a Python-engine variant with numeric ambiguity scoring
(0–1 scale, 40/30/30 weighting) and file-locked persisted
InterviewState, see ../../engine/ — same agents/
SSoT, opt-in for programmatic integrators.
Read ${CLAUDE_PLUGIN_ROOT}/agents/socratic-interviewer.md and adopt that
role for the interview.
On Codex and Gemini CLI, ${CLAUDE_PLUGIN_ROOT} is a Claude Code
convention — substitute your platform's plugin-root path (usually the
directory containing plugin.json).
If the user's topic mentions an existing project, or the working directory contains a manifest file:
Glob to check for common manifests: pyproject.toml,
package.json, go.mod, Cargo.toml, Dockerfile, .env.example,
requirements.txt.Read on the most informative ones to extract
language, framework, dependencies, CI/CD tool, package manager, etc.For each question, route via one of the four paths below. Track which path each question takes (see B.5 rhythm guard).
PATH 1a — Auto-confirm (high-confidence factual, no user block):
When ALL of the following are true:
pyproject.toml, package.json, Dockerfile, go.mod,
.env.example)Then:
PATH 1b — Code Confirmation (medium confidence — user confirms):
When the codebase has relevant information but confidence is not high enough for auto-confirm (inferred from patterns, multiple candidates, or no manifest match):
Present findings to the user as a confirmation question via
AskUserQuestion (or platform equivalent):
{
"questions": [{
"question": "I see JWT-based auth in src/auth/jwt.py. Is this the auth method for the new module?",
"header": "Auth confirm",
"options": [
{"label": "Yes, use JWT", "description": "Extend the existing JWT auth"},
{"label": "No, different method", "description": "I'll specify a different auth approach"}
],
"multiSelect": false
}]
}
Counts as a non-user round for the rhythm guard (B.5).
PATH 2 — Human Judgment (decisions only humans can make):
When the question asks about goals, vision, acceptance criteria, business logic, preferences, tradeoffs, scope, or desired behavior for new features:
Present the question directly to the user via AskUserQuestion (or
platform equivalent) with contextually suggested options where relevant.
Resets the rhythm-guard counter to 0.
PATH 3 — Code + Judgment (facts exist but interpretation needed):
When code contains relevant facts BUT the question also requires judgment
(e.g., "I see a saga pattern in orders/. Should payments use the same?"):
[from-user] (human made the decision).Resets the rhythm-guard counter to 0.
PATH 4 — Research Interlude (external knowledge needed):
When the question asks about third-party APIs, pricing models, library capabilities, version compatibility, security advisories, or industry standards that are NOT answerable from the local codebase:
WebFetch or WebSearch to gather external information.Facts, not decisions: "Stripe rate limit is 100 req/s" is research. "We should use Stripe" is a DECISION — route that to PATH 2.
Counts as a non-user round for the rhythm guard (B.5).
When in doubt, use PATH 2. It is safer to ask the user than to guess.
Track independent ambiguity threads: scope, constraints, outputs, verification, non-goals. Do NOT let the interview collapse onto one subtopic — even if the user goes deep on one thread, the ledger forces you to come back to the others before closing.
Every ~3 rounds, run a breadth check: ask yourself "which of the open threads have I not touched in 3+ rounds?" If any are stale, next question should surface them.
Track consecutive non-user answers (PATH 1a auto-confirms, PATH 1b code confirmations, and PATH 4 research confirmations).
If 3 consecutive questions were answered without direct user judgment (PATH 1a, 1b, or PATH 4), the next question MUST be routed to PATH 2 (directly to user), even if it appears code- or research-answerable.
This preserves the Socratic dialectic rhythm — the interview is with the human, not the codebase or external docs. Auto-confirmed answers especially need this guard: if the AI answers too many questions on its own, the user loses awareness of what the AI is assuming about their project.
Reset the counter whenever the user answers directly (PATH 2 or PATH 3).
At each round, pick the perspective that best matches the current state:
| Perspective | File | When to use |
|---|---|---|
| researcher | ${CLAUDE_PLUGIN_ROOT}/agents/researcher.md | Early rounds with low context; investigation needed |
| simplifier | ${CLAUDE_PLUGIN_ROOT}/agents/simplifier.md | When scope is creeping or the user is over-specifying |
| architect | ${CLAUDE_PLUGIN_ROOT}/agents/architect.md | When the problem surface suggests structural issues |
| breadth-keeper | ${CLAUDE_PLUGIN_ROOT}/agents/breadth-keeper.md | When recent rounds have collapsed onto one thread |
| seed-closer | ${CLAUDE_PLUGIN_ROOT}/agents/seed-closer.md | When the interview is nearing readiness for closure |
| ontologist | ${CLAUDE_PLUGIN_ROOT}/agents/ontologist.md | When the user's stated problem seems symptomatic rather than root-cause |
Read the relevant perspective file and apply its YOUR APPROACH +
YOUR QUESTIONS sections to shape the next question. Do NOT load all
perspectives at once — pick one per round based on need.
Before suggesting closure, apply the canonical criteria from
${CLAUDE_PLUGIN_ROOT}/agents/seed-closer.md:
If any material decision remains unresolved, do NOT close. Ask the single highest-impact follow-up question instead. Only when all criteria pass does the interview qualify for closure.
When closure criteria pass and the user confirms, produce a structured summary with YAML frontmatter + markdown body. Write this directly in the conversation (not to a file — the user decides where to file it):
---
topic: {user's original topic, one line}
goal: {primary objective, 1–2 sentences}
constraints:
- {hard constraint 1}
- {hard constraint 2}
acceptance_criteria:
- {specific measurable criterion 1}
- {specific measurable criterion 2}
non_goals:
- {what this explicitly will NOT do}
open_questions:
- {question explicitly deferred for later}
---
# Interview Summary — {topic}
{2–3 paragraph narrative capturing the interview's key decisions and
rationale. Mention which perspective drove which decision when notable.}
AskUserQuestionOn Codex, there is no native equivalent to AskUserQuestion. For any
step that calls for it, fall back to a plain-text prompt:
I have a question:
{question text}
Options:
(1) {option 1 label} — {option 1 description}
(2) {option 2 label} — {option 2 description}
(3) {option 3 label} — {option 3 description}
Other: type your own answer.
Please reply with a number or your own answer.
This loses the clean option-list UX but is otherwise functionally equivalent.
ask_userOn Gemini CLI, use ask_user in place of AskUserQuestion. The argument
shapes are slightly different — consult Gemini CLI docs for the current
spec.
User: /3b:interview Add payment module to existing project
(Perspective: researcher)
Q1: "Is this a greenfield or brownfield project? If brownfield, what's
the working directory?"
→ PATH 1a after Glob found pyproject.toml:
ℹ️ Auto-confirmed: Brownfield, Python 3.12 / FastAPI (pyproject.toml)
(rhythm counter: 1)
(Perspective: researcher)
Q2: "What payment provider will you use?"
→ PATH 2 (human decision — no code can answer this)
User: "Stripe"
(rhythm counter reset to 0)
(Perspective: breadth-keeper — noting we've locked in stack + provider
but haven't touched failure modes, auth, or acceptance criteria)
Q3: "How should payment failures affect order state?"
→ PATH 2 (design decision)
User: "Saga pattern — rollback the order if charge fails"
(counter stays at 0)
(Perspective: architect — probing structural fit)
Q4: "I see src/auth/jwt.py. Should the Stripe webhook endpoint also
sit behind JWT, or is it a public endpoint with signature verification?"
→ PATH 1b (found auth; needs decision on how to apply)
User: "Public endpoint, Stripe signature verification only"
(counter: 1 — but user answered so resets)
(Perspective: seed-closer — scope + failure + auth + provider clear)
Q5: "What are the acceptance criteria for this feature — specifically,
what must be verifiable at merge time?"
→ PATH 2
User: "Successful Stripe charge end-to-end, webhook signature validated,
refund endpoint works, order state transitions correctly on both paths"
(counter: 0)
(Seed-ready Acceptance Guard: scope / outputs / verification all
explicit; no open material decisions.)
Q6: "Ready to finalize the interview summary?"
→ User: "yes"
---
topic: Add payment module to existing project (Python 3.12 / FastAPI brownfield)
goal: Integrate Stripe payments into the existing FastAPI service with
saga-pattern rollback on charge failure and a public webhook endpoint
verified by Stripe signatures.
constraints:
- Must integrate with existing FastAPI / Python 3.12 stack
- Webhook endpoint must be public (no JWT) but signature-verified
- Order state must rollback on charge failure (saga pattern)
acceptance_criteria:
- End-to-end successful Stripe charge flow
- Webhook signature validation working
- Refund endpoint functional
- Order state transitions correct on both success and failure paths
non_goals:
- Multi-currency support (v1 US only)
- Subscription billing (one-time charges only in v1)
open_questions:
- Exact error-retry policy on failed webhook delivery — to be decided
at implementation time
---
# Interview Summary — Add payment module
The user is adding Stripe-based payments to an existing FastAPI (Python
3.12) service. The design uses a saga pattern for order/charge
consistency: if the Stripe charge fails, the order is rolled back.
The Stripe webhook endpoint is intentionally public (not behind JWT) but
guarded by Stripe signature verification — standard pattern. Existing
JWT auth in `src/auth/jwt.py` is preserved for user-facing endpoints
but not applied to the webhook.
Acceptance is end-to-end: real Stripe charge, webhook validation, refund
flow, and correct order-state transitions on both success and failure.
Subscription billing and multi-currency are explicitly out of scope for
v1. Retry policy on webhook delivery failures is deferred to
implementation.
After the summary is written, it's yours — paste it into a design doc, PR description, ticket, or spec template. The skill's job ends at the summary; downstream workflows are up to you.