From soloflow
Extracts a structured idea from raw input into a numbered .soloflow/active/ideas/ markdown file. Supports optional clarification loop and spawns agent for extraction.
npx claudepluginhub kesteva/soloflow --plugin soloflow-dev<idea or feature description># /soloflow:idea-extractor Phase 1 of the SoloFlow pipeline. Turns raw input into a structured idea file, and optionally runs external research on it. The user's idea is: **$ARGUMENTS** --- ## Model resolution (applies to every Agent spawn below) Before invoking the Agent tool, resolve `models.<name>` per the three-tier recipe in [docs/CUSTOMIZATION.md#config-resolution](../docs/CUSTOMIZATION.md) and pass the resolved value as the Agent tool's `model` parameter. Mapping used in this command: - `idea-extractor` → `models.idea_extractor` (fallback: `sonnet`) - `researcher` → `models.res...
Share bugs, ideas, or general feedback.
Phase 1 of the SoloFlow pipeline. Turns raw input into a structured idea file, and optionally runs external research on it.
The user's idea is: $ARGUMENTS
Before invoking the Agent tool, resolve models.<name> per the three-tier
recipe in docs/CUSTOMIZATION.md#config-resolution
and pass the resolved value as the Agent tool's model parameter.
Mapping used in this command:
idea-extractor → models.idea_extractor (fallback: sonnet)researcher → models.researcher (fallback: sonnet).soloflow/ does not exist, report: "SoloFlow not initialized. Run /soloflow:init first." and stop.Resolve clarify_enabled:
$ARGUMENTS contains the literal token --skip-clarify, set clarify_enabled = false and strip the token from $ARGUMENTS before using it downstream..soloflow/config.json exists and contains phases.clarify === false, set clarify_enabled = false.config/defaults.yaml (via ${CLAUDE_PLUGIN_ROOT}) has phases.clarify: false, set clarify_enabled = false.clarify_enabled = true.If clarify_enabled is false, set brief = $ARGUMENTS and proceed to Step 2.
Read ${CLAUDE_PLUGIN_ROOT}/skills/clarify-idea/SKILL.md via the Read tool and apply its "When to invoke" checklist against $ARGUMENTS. The checklist covers: goal, target user/surface, success signal, scope boundary, grounding.
If every checklist item is satisfied, the input is already clear — set brief = $ARGUMENTS and proceed to Step 2 without running the loop.
Otherwise, run the clarification routine defined in the skill:
AskUserQuestion).AskUserQuestion at a time, preferring multi-choice, following threads, until the checklist is satisfied.brief to that markdown block..soloflow/active/ideas/IDEA-*.md, extracting each numeric suffix, and taking max + 1 (zero-padded to 3 digits). See the "ID allocation" section in the project CLAUDE.md for the shared recipe.brief (either the raw $ARGUMENTS or the clarified brief produced in Step 1.5). If it's a clarified brief, prefix it with: "The following is a clarified brief produced from a user conversation. Treat the Synthesis section as the canonical ask; use the transcript only for extra context.".soloflow/active/ideas/IDEA-{NNN}.md using noclobber / wx semantics. If the target already exists (another parallel worker raced), recompute the next ID and retry.BUGFIX routing: If the extractor classified the idea as BUGFIX, tell the user: "This looks like a bug. Consider /soloflow:quick for faster resolution." Then stop — do not proceed to research.
Print a prose summary of the idea first so the user has context:
Do NOT print the open questions as prose — they go into the structured picker below.
Then make a single batched AskUserQuestion call whose questions list is built in this order:
One question per open_questions entry from the extractor output, in order. For each:
question: the question field verbatimheader: a short label derived from the question (≤20 chars)options: the extractor's candidates array if present (2–4 concrete candidate answers). Always rely on the AskUserQuestion tool's built-in free-form fallback so the user can type their own answer. If candidates is absent or empty, pass an empty options list and the user will answer free-form.Final question — the proceed picker. Read the extractor's research_recommendation and research_rationale from the idea file frontmatter. Print a one-line recommendation before the question:
recommended: "Research recommended — {research_rationale}"not_needed: "Research likely not needed — {research_rationale}"Resolve research_enabled per the config resolution recipe
(.soloflow/config.json → config/defaults.yaml → fallback true) reading
phases.research. If research_enabled === false, omit the
"Approve + Research" option entirely — research is globally disabled for
this project.
Question: "How should we proceed with IDEA-{NNN}?" with options:
(recommended) if research_recommendation is recommended. (Omitted when phases.research === false.)/soloflow:planner. Label with (recommended) if research_recommendation is not_needed or if phases.research === false.If the extractor produced zero open questions, the batch degenerates to just the proceed picker — that's fine.
The tool call blocks until the user responds to every question — do not proceed until it returns.
After the tool returns, update the idea file:
**Answer:** {user response} beneath the question under ## Open Questions in the body, and mirror the answer into the YAML frontmatter as open_questions[i].answer.status: draft → status: answered. Otherwise leave status unchanged.Then branch on the proceed answer:
AskUserQuestion follow-ups (or a free-form question) to collect the specific modifications, update the idea file, then re-present Step 3's batched picker. Loop until the user approves or rejects.If the user chose "Approve + Research":
subagent_type: "shadow-researcher") with:
.soloflow/active/research/IDEA-{NNN}-research.md.Commit the newly written state files via Bash. Stage only the specific paths you wrote in this run — never git add . / git add -A.
git add .soloflow/active/ideas/IDEA-{NNN}.md (and .soloflow/active/research/IDEA-{NNN}-research.md if Step 4 ran).git diff --cached --quiet reports no staged changes, skip (idempotent re-run).git commit -m "chore: capture IDEA-{NNN}".Skip this step silently if the project is not inside a git repo (git rev-parse --is-inside-work-tree) or if .soloflow/ is gitignored.
Tell the user:
Idea extracted: IDEA-{NNN} ({title})
{Research report: IDEA-{NNN}-research.md — if applicable}
Use the AskUserQuestion tool to ask whether to refine now. Do not phrase this as a suggestion in prose — the user must answer through the picker.
question: "Refine IDEA-{NNN} into execution-ready tasks now?"header: "Refine now"multiSelect: falseoptions (in this order):
label: "Refine now (Recommended)", description: "Run /soloflow:planner against IDEA-{NNN} immediately, in this same session."label: "Not yet", description: "Stop here. Run /soloflow:planner IDEA-{NNN} later when ready."The tool call blocks until the user responds.
${CLAUDE_PLUGIN_ROOT}/commands/planner.md with the Read tool and execute its procedure end-to-end with $ARGUMENTS = IDEA-{NNN}. Treat that file's instructions (model resolution, Step 1 → Step 4) as a continuation of this run — including its own human checkpoint. Do not re-run Step 1 to ask the user to pick an idea; the ID is already known./soloflow:planner, which Step 6 invokes inline when the user chooses "Refine now."