--- name: flow-next-interview description: Interview user in-depth about an epic, task, or spec file to extract complete implementation details. Use when user wants to flesh out a spec, refine requirements, or clarify a feature before building. Triggers on /flow-next:interview with Flow IDs (fn-1-add-oauth, fn-1-add-oauth.2, or legacy fn-1, fn-1.2, fn-1-xxx, fn-1-xxx.2) or file paths. user-invocable: false --- # Flow interview Conduct an extremely thorough interview about a task/spec and write refined details back. **IMPORTANT**: This plugin uses `.flow/` for ALL task tracking. Do NOT use markdown TODOs, plan files, TodoWrite, or other tracking methods. All task state must be read and written via `flowctl`. **CRITICAL: flowctl is BUNDLED — NOT installed globally.** `which flowctl` will fail (expected). Always use: ```bash FLOWCTL="${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/flowctl" $FLOWCTL ``` ## Pre-check: Local setup version If `.flow/meta.json` exists and has `setup_version`, compare to plugin version: ```bash SETUP_VER=$(jq -r '.setup_version // empty' .flow/meta.json 2>/dev/null) # Portable: Claude Code uses .claude-plugin, Factory Droid uses .factory-plugin PLUGIN_JSON="${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/.claude-plugin/plugin.json" [[ -f "$PLUGIN_JSON" ]] || PLUGIN_JSON="${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/.factory-plugin/plugin.json" PLUGIN_VER=$(jq -r '.version' "$PLUGIN_JSON" 2>/dev/null || echo "unknown") if [[ -n "$SETUP_VER" && "$PLUGIN_VER" != "unknown" ]]; then [[ "$SETUP_VER" = "$PLUGIN_VER" ]] || echo "Plugin updated to v${PLUGIN_VER}. Run /flow-next:setup to refresh local scripts (current: v${SETUP_VER})." fi ``` Continue regardless (non-blocking). **Role**: technical interviewer, spec refiner **Goal**: extract complete implementation details through deep questioning (40+ questions typical) ## Input Full request: $ARGUMENTS Accepts: - **Flow epic ID** `fn-N-slug` (e.g., `fn-1-add-oauth`) or legacy `fn-N`/`fn-N-xxx`: Fetch with `flowctl show`, write back with `flowctl epic set-plan` - **Flow task ID** `fn-N-slug.M` (e.g., `fn-1-add-oauth.2`) or legacy `fn-N.M`/`fn-N-xxx.M`: Fetch with `flowctl show`, write back with `flowctl task set-description/set-acceptance` - **File path** (e.g., `docs/spec.md`): Read file, interview, rewrite file - **Empty**: Prompt for target Examples: - `/flow-next:interview fn-1-add-oauth` - `/flow-next:interview fn-1-add-oauth.3` - `/flow-next:interview fn-1` (legacy formats fn-1, fn-1-xxx still supported) - `/flow-next:interview docs/oauth-spec.md` If empty, ask: "What should I interview you about? Give me a Flow ID (e.g., fn-1-add-oauth) or file path (e.g., docs/spec.md)" ## Setup ```bash FLOWCTL="${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/flowctl" ``` ## Detect Input Type 1. **Flow epic ID pattern**: matches `fn-\d+(-[a-z0-9-]+)?` (e.g., fn-1-add-oauth, fn-12, fn-2-fix-login-bug) - Fetch: `$FLOWCTL show --json` - Read spec: `$FLOWCTL cat ` 2. **Flow task ID pattern**: matches `fn-\d+(-[a-z0-9-]+)?\.\d+` (e.g., fn-1-add-oauth.3, fn-12.5) - Fetch: `$FLOWCTL show --json` - Read spec: `$FLOWCTL cat ` - Also get epic context: `$FLOWCTL cat ` 3. **File path**: anything else with a path-like structure or .md extension - Read file contents - If file doesn't exist, ask user to provide valid path ## Interview Process **CRITICAL REQUIREMENT**: You MUST use the `AskUserQuestion` tool for every question. - DO NOT output questions as text - DO NOT list questions in your response - ONLY ask questions via AskUserQuestion tool calls - Group 2-4 related questions per tool call - Expect 40+ questions total for complex specs **Anti-pattern (WRONG)**: ``` Question 1: What database should we use? Options: a) PostgreSQL b) SQLite c) MongoDB ``` **Correct pattern**: Call AskUserQuestion tool with question and options. ## Question Categories Read [questions.md](questions.md) for all question categories and interview guidelines. ## NOT in scope (defer to /flow-next:plan) - Research scouts (codebase analysis) - File/line references - Task creation (interview refines requirements, plan creates tasks) - Task sizing (S/M/L) - Dependency ordering - Phased implementation details ## Write Refined Spec After interview complete, write everything back — **scope depends on input type**. ### For NEW IDEA (text input, no Flow ID) Create epic with interview output. **DO NOT create tasks** — that's `/flow-next:plan`'s job. ```bash $FLOWCTL epic create --title "..." --json $FLOWCTL epic set-plan --file - --json <<'EOF' # Epic Title ## Problem Clear problem statement ## Key Decisions Decisions made during interview (e.g., "Use OAuth not SAML", "Support mobile + web") ## Edge Cases - Edge case 1 - Edge case 2 ## Open Questions Unresolved items that need research during planning ## Acceptance - [ ] Criterion 1 - [ ] Criterion 2 EOF ``` Then suggest: "Run `/flow-next:plan fn-N` to research best practices and create tasks." ### For EXISTING EPIC (fn-N that already has tasks) **First check if tasks exist:** ```bash $FLOWCTL tasks --epic --json ``` **If tasks exist:** Only update the epic spec (add edge cases, clarify requirements). **Do NOT touch task specs** — plan already created them. **If no tasks:** Update epic spec, then suggest `/flow-next:plan`. ```bash $FLOWCTL epic set-plan --file - --json <<'EOF' # Epic Title ## Problem Clear problem statement ## Key Decisions Decisions made during interview ## Edge Cases - Edge case 1 - Edge case 2 ## Open Questions Unresolved items ## Acceptance - [ ] Criterion 1 - [ ] Criterion 2 EOF ``` ### For Flow Task ID (fn-N.M) **First check if task has existing spec from planning:** ```bash $FLOWCTL cat ``` **If task has substantial planning content** (description with file refs, sizing, approach): - **Do NOT overwrite** — planning detail would be lost - Only ADD new acceptance criteria discovered in interview: ```bash # Read existing acceptance, append new criteria $FLOWCTL task set-acceptance --file /tmp/acc.md --json ``` - Or suggest interviewing the epic instead: `/flow-next:interview ` **If task is minimal** (just title, empty or stub description): - Update task with interview findings - Focus on **requirements**, not implementation details ```bash $FLOWCTL task set-spec --description /tmp/desc.md --acceptance /tmp/acc.md --json ``` Description should capture: - What needs to be accomplished (not how) - Edge cases discovered in interview - Constraints and requirements Do NOT add: file/line refs, sizing, implementation approach — that's plan's job. ### For File Path Rewrite the file with refined spec: - Preserve any existing structure/format - Add sections for areas covered in interview - Include edge cases, acceptance criteria - Keep it requirements-focused (what, not how) This is typically a pre-epic doc. After interview, suggest `/flow-next:plan ` to create epic + tasks. ## Completion Show summary: - Number of questions asked - Key decisions captured - What was written (Flow ID updated / file rewritten) Suggest next step based on input type: - New idea / epic without tasks → `/flow-next:plan fn-N` - Epic with tasks → `/flow-next:work fn-N` (or more interview on specific tasks) - Task → `/flow-next:work fn-N.M` - File → `/flow-next:plan ` ## Notes - This process should feel thorough - user should feel they've thought through everything - Quality over speed - don't rush to finish