cxc-interview
SkillDev toolsUse for Codexclaw Interview mode: persistent IPABCD I-phase requirements discovery, contradiction hunting, focused user questions, question/answer evidence recording, and readiness gating before Plan. Triggers: interview, 인터뷰, requirements clarification, ambiguity, contradiction scan, ask me questions, I phase, cxc-interview.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the cxc-interview skill
What this skill tells your AI
The instructions your AI receives, as published by lidge-jun/codexclaw in plugins/codexclaw/skills/interview/SKILL.md and read by ahel’s review.
Use this skill for Interview work within the user's scope. Loading it or receiving
a natural-language I hint does not enter the phase. Actual entry uses an explicit
user command or authorized cxc orchestrate I --session <id> with the current
SessionStart binding. No-FSM requests remain advisory without a transition.
Contract
- Interview questions use synchronous
request_user_input, subject to the host's rules. Do not userequest_user_input_asyncor a legacy async variant for Interview rounds: this workflow needs returned answers and ledger-backed readiness. General mid-work questions follow Async user questions. - The main session owns questions, user answers, tracker updates, and devlog records.
- Subagents may search for contradictions and propose question candidates, but they do not ask the user directly.
- Ask across four dimensions: Goal, Constraint, Success criteria, Ontology.
- Re-scan contradictions after every user answer.
- Do not advance to Plan while a high contradiction or pending question remains.
- Record medium/low unresolved items as OPEN ASSUMPTIONS before leaving Interview.
- When Interview reveals work that will span 2+ PABCD cycles, flag the unit as
multi-cycle so that the first work-phase enters as a docs-only roadmap cycle
(LOOP-DOCS-FIRST-01,
cxc-loop). Interview settles unit residence (UNIT-RESIDENCE-01) but does not write decade docs — that is the roadmap cycle's job.
Classify the loop before Plan
Before leaving Interview, identify whether the verifier defines done (specification or repair) or only better (open-ended optimization), and record the corresponding loop archetype. Ground the distinction in the repository and the user's outcome. For a load-bearing architecture or workflow choice, explain the concrete trade-offs before narrowing it; include a materially different approach when it helps expose an assumption. When evidence cannot settle a cheap, bounded comparison, offer a parallel spike and evidence-based selection. Do not invent irrelevant feature or technology choices that the project already settles.
Question quality (INTERVIEW-Q-01)
- Target the weakest dimension first and name why it is the current bottleneck.
- Ask focused questions that expose an ASSUMPTION or boundary — not a feature-list roundup.
Bundle several only when they are INDEPENDENT: never batch two questions where one
answer changes the other (INTERVIEW-INDEPENDENT-01). Independence governs, not a count.
Note the transport limit:
request_user_inputaccepts at most three questions per call, so a larger independent batch has to be split across calls. - Prefer repo-grounded confirmation ("the code does X — is that intended?") over re-asking what the codebase already answers.
- Treat every answer as a claim to pressure-test: vague or hedged answers do not raise a dimension's readiness; they keep or deepen the gap.
Grounding questions in state (INTERVIEW-GROUND-01)
Question quality is a STATE problem before it is a wording problem. A question generated with no accumulated knowns and no recorded gaps comes out vague no matter how the prompt is phrased — that is the failure mode behind questions like "이어서 어느 방향으로 진행할까요?".
The loop that prevents it:
- Answers are captured automatically by the
PostToolUsehook into.codexclaw/interviews/<sessionId>.jsonl. - Fold them into the tracker before asking again:
cxc scan record --session <id> --derive --map <questionId>=<goal|constraint|success|ontology>. Each answered question becomes aknown[]fact on its dimension; each asked-but-unanswered one becomes an explicitunknown[]gap, and answering it later retires the gap. Unmapped questions are skipped rather than guessed, so pass--mapfor every question that should count. - Read
.codexclaw/sessions/<id>.jsonback and let the weakest dimension choose the next question. This is also what makes Mind routing adaptive:selectMindsranks by dimension level, so with an empty tracker all four tie and it degrades to a fixed order.
Readiness is reached through step 2, not through an assertion. A dimension counts
toward I -> P when the session's interview ledger shows a question that was ASKED, an
answer that was RECORDED, and a --map attributing that question to that dimension.
That is why --map matters: an answered question nobody attributed proves nothing about
any dimension.
--known <dimension>=<text> records a fact you already hold. It moves a dimension off
low and can carry it to high, but it can NOT make it count for readiness — a typed
fact is not an answered question, and four --known flags would otherwise be a complete
interview in one command.
--dim <dimension>=<low|mid|high> records an explicit level assertion when coverage alone
understates what you know. It deliberately cannot set max: that level bypasses the ledger
check entirely, so it stays out of the writer's reach.
When the interview genuinely is not complete, the sanctioned way past the gate is the attested
cxc orchestrate P --attest-file <path> carrying
{"from":"I","to":"P","did":"<why the interview is complete>","override":true},
which leaves a ledger row. It is the exception now, not the only door — until 260825 the gate
demanded a level no writer could produce, so every interview spent an override and the row
stopped distinguishing anything. (The file flag is required on Windows: PowerShell cannot pass
inline JSON as a single argument.) from/to are not optional here — the parser
coerces them before the override is ever read, so {"override":true} alone is
refused (ATTEST-SHAPE-01 in cxc-pabcd).
Show the state before asking (INTERVIEW-RENDER-01)
Emit a short status block immediately before request_user_input: what is now known, which
dimension is weakest and why it is the current bottleneck, and what the answer will change.
The runtime cannot force this — hooks only inject text — so it is the main session's job.
Without it a well-grounded question still reads as context-blind, because the user cannot see
the reasoning that produced it.
Sub-modes (INTERVIEW-CATALOG-01)
Pick by the user's knowledge level:
- Clarification (default) — the user already knows roughly what they want; questions structure goals, constraints, success criteria.
- Catalog Discovery — the user names a vague domain but no features ("사주 앱 만들고
싶어", "뭘 만들지 모르겠어"); present the option ontology from
$cxc-pabcdreferences/catalog-discovery.yaml. See below. - Configurator — compile the selections into a spec (PRD sections, MVP cut, risk register, PABCD plan seed).
Heuristic: concrete feature/goal -> Clarification; vague domain, no tech specifics -> Catalog Discovery; explicit user request -> honor it.
Catalog Discovery — design/UX LEADS (CATALOG-DESIGN-FIRST-01)
The user cannot choose from options they have never seen (strong form of INTERVIEW-TEACH-01).
Present the option ontology in references/catalog-discovery.yaml (under $cxc-pabcd).
Hard barrier: iterate axis_order by ascending stage; do NOT present a stage until
every required entry of all earlier stages is answered. Stage 1 is design (6 dials: mood,
lightness, density, shape, typography, motion), all required: true — MUST be answered
before any Stage 2 (domain) or Stage 3 (feature/data/security/ops/cost) question appears.
- Design methodology — Product-Personality Selection first (from dev-uiux-design §1): for
each design dial show
question_options(labels + trade-offs) anchored on familiar products, then ask. Refine via Korean Request Translation, Reference Discovery, Design Read. - Deriving backend questions — two paths populate Stage 3: structural (chosen Stage-2
domain
implies[]+ Stage-3derived_from, resolved transitively) and keyword (scan user's initial free-text against Stage-3auto_activate_rules). Confirm high-impact activations. - The catalog is a DATA STRUCTURE — do not invent entries not in it.
Configurator: once selections are complete, compile them (with resolved implies[]
chains) into: PRD sections, an MVP cut ordered by cost_class, a risk register of every
risk_class: high entry, and a PABCD plan seed carrying the work class + loop archetype.
Option-set quality (INTERVIEW-OPTION-01)
When presenting options during Interview, generate against typicality bias: the 2-3 options
a model volunteers are usually one attractor family. Deliberately include at least one
atypical (low-probability) approach. Offer A · B · BOTH (parallel spike, select by evidence) instead of forcing one pick. A BOTH answer becomes an explore-and-select
work-phase (loop-engineering §11.4).
Rescan + readiness (INTERVIEW-SCAN-01)
- Run a contradiction rescan after every answer, AND one final rescan before any proceed/close decision — surface what still remains. (This final rescan is process discipline; the runtime does not encode scan recency.)
- Runtime readiness has two halves. Shape (
isInterviewReady): every dimension athighormax+ contradictions empty + assumptions recorded +scanRounds >= 1. Provenance (the I -> P gate on the agent CLI path): every dimension counted athighmust trace to a question that was asked, answered, and attributed with--map.maxneeds no ledger backing because no writer can produce it. - The practical consequence:
--knownalone never opens I -> P. Ask the question, let thePostToolUsehook capture the answer, thencxc scan record --derive --map <qid>=<dimension>. - Treat readiness as a coverage claim on top of that: each dimension has concrete knowns, no unresolved unknown changes scope, and every contradiction has exited into an answer or a recorded assumption. Summarize the remaining OPEN ASSUMPTIONS before claiming I -> P readiness.
Closeout fork (INTERVIEW-FORK-01)
In non-goal HITL Interview only (under an active goal the Interview is suppressed and
request_user_input is hard-denied — see Goal firewall), after a scan round do not drift forward
silently. Present a numbered choice and let the user pick: 1. Proceed to Plan ·
2. Keep interviewing · 3. Record assumptions and pause. Do not offer a question BUDGET
("ask 2-3 more"): no tracker field persists it, so the number is unenforceable across turns,
and INTERVIEW-INDEPENDENT-01 governs batching by independence rather than count.
There is no build/execute path out of Interview — the only forward move is Plan, normally after
the readiness gate passes, unless the human explicitly overrides (override is recorded as an
audit entry); the agent CLI path also supports override via
an attest carrying {"from":"I","to":"P","did":"<reason>","override":true} with
equivalent ledger transparency (from/to are coerced before the override is
read, so {"override":true} alone is refused — ATTEST-SHAPE-01).
proceed means "advance to Plan", not permission to implement; the evolving
plan/devlog stay draft interview artifacts until then.
A chosen proceed executes as a real transition — cxc orchestrate P --session <id> (or the
chat free-pass orchestrate p) — never as narration alone: a "moving to Plan" sentence without
the persisted I->P edge is not Plan entry (ORCH-MANDATE-01, canonical in cxc-loop).
Runtime Status (shipped)
The interview runtime is shipped, not planned:
PostToolUseauto-capture forrequest_user_inputrecords each question/answer round to.codexclaw/interviews/<sessionId>.jsonl(handlePostToolUse,captureInterviewAnswers).- L18: after each captured answer, the same PostToolUse hook REINJECTS the rescan
directive as
additionalContext(RESCAN_REINJECT_DIRECTIVE) when the session is in an interactive I-phase — so the Mind contradiction rescan fires after every answer instead of fading with transcript distance. Under an active/unreadable goal it stays silent (capture only, firewall intact). - The I-phase directive carries the Mind-dispatch contract (
MIND_DISPATCH_DIRECTIVE), so the main session runs the contradiction-rescan loop: select Minds, dispatch read-only contradiction lenses, triage (high -> ask the user; low/medium -> recorded assumption), then ask the user to proceed or keep interviewing. - Mind spawn shape (MIND-SPAWN-SHAPE-01): only when Mind dispatch is authorized, read Mind dispatch completely before dispatch. It preserves read-only lens roles, non-full forks, snapshot and settings contracts while adapting argument fields and returned handles to the live native schema.
- Readiness gating requires recorded scan evidence (
scanRounds >= 1) before I -> P. - Agent I→P override: when the agent CLI path (
cxc orchestrate P --session <id> --attest-file <path>, carrying{"from":"I","to":"P","did":"<reason>","override":true}) encounters an unready interview tracker, it bypasses the readiness gate — mirroring the human chat override inapplyHumanTransition. The tracker is NOT modified;flags.interviewis pre-flipped at the transition level. The ledger recordsactor:"agent",override:true, and ascanEvidencesnapshot of the pre-override gate state. Thedidnarrative must be non-empty and non-placeholder.
Goal firewall: the whole Interview is suppressed under an active goal — the explicit
trigger path, the passive re-injection paths (UserPromptSubmit modes 2/3), AND the
Stop continuation loop all check goal-active and refuse to drive the Interview, and
request_user_input is hard-denied. The Interview is HITL-only; handleStop releases
immediately at phase === "I" (it never blocks/continues an interview, even mid-cycle
under an active goal). The InterviewTracker discipline still governs the four
dimensions and OPEN ASSUMPTIONS.
Signals
- GitHub stars
- 37
- Forks
- 7
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
cxc-interview- Source
- github.com/lidge-jun/codexclaw