/flow-next-strategy
Create or maintain `STRATEGY.md` — the product's target problem, our approach, who it's for, key metrics, and tracks of work. Use when starting a new product, updating direction, or when prompts like 'write our strategy', 'update the roadmap', 'what are we working on', or 'set
Claude Code
$ npx -y skills add gmickel/flow-next --skill flow-next-strategy --agent claude-code
Codex
$ npx skills add gmickel/flow-next --skill flow-next-strategy -a codex -y
Cursor
$ npx skills add gmickel/flow-next --skill flow-next-strategy -a cursor -y
Gemini CLI
$ npx skills add gmickel/flow-next --skill flow-next-strategy -a gemini-cli -y
GitHub Copilot
$ npx skills add gmickel/flow-next --skill flow-next-strategy -a github-copilot -y
OpenCode
$ npx skills add gmickel/flow-next --skill flow-next-strategy -a opencode -y
Windsurf
$ npx skills add gmickel/flow-next --skill flow-next-strategy -a windsurf -y
SKILL.md
flow-next-strategy.SKILL.mdname: flow-next-strategy
description: "Create or maintain `STRATEGY.md` — the product's target problem, our approach, who it's for, key metrics, and tracks of work. Use when starting a new product, updating direction, or when prompts like 'write our strategy', 'update the roadmap', 'what are we working on', or 'set up the strategy doc' come up. Also fires when `/flow-next:prospect`, `/flow-next:plan`, `/flow-next:refine`, or `/flow-next:capture` need upstream grounding and no strategy doc exists yet."
user-invocable: false
# Write-only is deliberate: the update path atomic-writes whole sections (references/update.md), so Edit is not needed
allowed-tools: AskUserQuestion, Read, Write, Bash
/flow-next:strategy — repo-root STRATEGY.md anchor
`flow-next-strategy` produces and maintains `STRATEGY.md` — a short, durable anchor at the repo root (peer of `README.md` / `GLOSSARY.md`) that captures what the product is, who it serves, how it succeeds, and where the team is investing. Downstream skills (`/flow-next:prospect`, `/flow-next:plan`, `/flow-next:refine`, `/flow-next:capture`, `/flow-next:sync`) read it as grounding when `sections_filled >= 1`.
The document is short and structured on purpose. Good answers to a handful of sharp questions produce a better strategy than any amount of prose. This skill asks those questions, pushes back on weak answers, and writes the doc.
**Date the strategy document from `date -u +%Y-%m-%d`** (run it; never assume the year).
Read [working-rules.md](../../references/working-rules.md) first unless you already have this run; it holds for every step of this skill.
Preamble
flowctl is **bundled — NOT installed globally.** `which flowctl` will fail (expected). Define once; subsequent blocks use `$FLOWCTL`:
FLOWCTL="${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/flowctl"
[ -x "$FLOWCTL" ] || FLOWCTL="<plugin-root>/scripts/flowctl" # <plugin-root> = the directory two levels above this skill's SKILL.md file (the harness gave you that file's absolute path when the skill loaded); substitute it literally
[ -x "$FLOWCTL" ] || FLOWCTL=".flow/bin/flowctl"Interaction Method
Default to `AskUserQuestion` (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded). Fall back to numbered options in chat only when the tool is unreachable in the harness or the call errors — never silently skip the question.
**Free-form responses for the substantive sections** (Target problem / Our approach / Who it's for / Key metrics / Tracks). **Single-select with lead-with-recommendation only for routing decisions** (which section to revisit, include this optional section, foreign-file resolution).
Focus Hint
<focus_hint> #$ARGUMENTS </focus_hint>
Interpret any argument as an optional focus: a section name to revisit (`metrics`, `approach`, `tracks`, `problem`, `persona`, `milestones`, `not-working-on`) or a scope hint. With no argument, proceed open-ended and let the file state decide the path.
Core Principles
1. **Anchor, not plan.** Strategy is what the product is and why. Features belong in `/flow-next:prospect`; tasks belong in specs (`/flow-next:flow`). Do not let either creep into the doc. 2. **Rigor in the questions, not the headings.** The section headers are plain English. The interview questions enforce strategy discipline (`references/interview.md`). 3. **Short is a feature.** The template is constrained. Adding sections costs more than it looks like. Push back on expansion. 4. **Durable across runs.** This skill is rerunnable. On a second run it updates in place, preserves what is working, and only challenges sections that look stale or weak. 5. **Survives `.flow/` wipe.** `STRATEGY.md` lives at repo root, never under `.flow/`. The project's strategy belongs to the project, not flow-next.
Execution Flow
Phase 0: Route by file state
**0.1 — Read file state**
STATUS_JSON=$("$FLOWCTL" strategy status --json 2>/dev/null) || STATUS_JSON=
if ! printf '%s' "$STATUS_JSON" | jq -e '
type == "object"
and (.exists | type == "boolean")
and (.husk | type == "boolean")
and (.sections_filled as $n
| ($n | type) == "number"
and ($n | floor) == $n
and $n >= 0
and $n <= 7)
and (.total_sections as $n
| ($n | type) == "number"
and ($n | floor) == $n
and $n >= 5
and $n <= 7)
and (.sections_filled <= .total_sections)
and (.last_updated == null or (.last_updated | type == "string"))
and (.file_path == null or (.file_path | type == "string"))
and (.generator == null or (.generator | type == "string"))
and (.generator_match | type == "boolean")
and (.husk == ((.exists == true) and (.sections_filled == 0)))
and (.generator_match == (.generator == "flow-next-strategy"))
' >/dev/null 2>&1; then
echo "[STRATEGY: unable to classify STRATEGY.md safely — leaving it unchanged]" >&2
exit 0
fi
EXISTS=$(printf '%s' "$STATUS_JSON" | jq -r '.exists')
HUSK=$(printf '%s' "$STATUS_JSON" | jq -r '.husk')
SECTIONS_FILLED=$(printf '%s' "$STATUS_JSON" | jq -r '.sections_filled')
GENERATOR_MATCH=$(printf '%s' "$STATUS_JSON" | jq -r '.generator_match')
FILE_PATH=$(printf '%s' "$STATUS_JSON" | jq -r '.file_path // empty')JSON fields:
- `exists` (bool) — file present
- `husk` (bool) — `exists: true` AND `sections_filled == 0`
- `sections_filled` (int) — populated required + included optional-section count (0-7)
- `total_sections` (int) — 5 required + populated optional sections (5-7)
- `last_updated` (str|null) — ISO date from frontmatter
- `file_path` (str|null) — absolute path of resolved STRATEGY.md
- `generator` (str|null) — frontmatter `generator` value
- `generator_match` (bool) — `generator == "flow-next-strategy"`
**0.2 — Subdirectory walk-up surfacing**
If `file_path` is set and differs from `${PWD}/STRATEGY.md`, surface one line in chat before any question fires:
Using repo-root STRATEGY.md at <file_path>.
This is the only line printed before r
Read more
name: flow-next-strategy description: "Create or maintain `STRATEGY.md` — the product's target problem, our approach, who it's for, key metrics, and tracks of work. Use when starting a new product, updating direction, or when prompts like 'write our strategy', 'update the roadmap', 'what are we working on', or 'set up the strategy doc' come up. Also fires when `/flow-next:prospect`, `/flow-next:plan`, `/flow-next:refine`, or `/flow-next:capture` need upstream grounding and no strategy doc exists yet." user-invocable: false # Write-only is deliberate: the update path atomic-writes whole sections (references/update.md), so Edit is not needed allowed-tools: AskUserQuestion, Read, Write, Bash
/flow-next:strategy — repo-root STRATEGY.md anchor
`flow-next-strategy` produces and maintains `STRATEGY.md` — a short, durable anchor at the repo root (peer of `README.md` / `GLOSSARY.md`) that captures what the product is, who it serves, how it succeeds, and where the team is investing. Downstream skills (`/flow-next:prospect`, `/flow-next:plan`, `/flow-next:refine`, `/flow-next:capture`, `/flow-next:sync`) read it as grounding when `sections_filled >= 1`.
The document is short and structured on purpose. Good answers to a handful of sharp questions produce a better strategy than any amount of prose. This skill asks those questions, pushes back on weak answers, and writes the doc.
**Date the strategy document from `date -u +%Y-%m-%d`** (run it; never assume the year).
Read [working-rules.md](../../references/working-rules.md) first unless you already have this run; it holds for every step of this skill.
Preamble
flowctl is **bundled — NOT installed globally.** `which flowctl` will fail (expected). Define once; subsequent blocks use `$FLOWCTL`:
FLOWCTL="${DROID_PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT}}/scripts/flowctl"
[ -x "$FLOWCTL" ] || FLOWCTL="<plugin-root>/scripts/flowctl" # <plugin-root> = the directory two levels above this skill's SKILL.md file (the harness gave you that file's absolute path when the skill loaded); substitute it literally
[ -x "$FLOWCTL" ] || FLOWCTL=".flow/bin/flowctl"Interaction Method
Default to `AskUserQuestion` (call `ToolSearch` with `select:AskUserQuestion` first if its schema isn't loaded). Fall back to numbered options in chat only when the tool is unreachable in the harness or the call errors — never silently skip the question.
**Free-form responses for the substantive sections** (Target problem / Our approach / Who it's for / Key metrics / Tracks). **Single-select with lead-with-recommendation only for routing decisions** (which section to revisit, include this optional section, foreign-file resolution).
Focus Hint
<focus_hint> #$ARGUMENTS </focus_hint>
Interpret any argument as an optional focus: a section name to revisit (`metrics`, `approach`, `tracks`, `problem`, `persona`, `milestones`, `not-working-on`) or a scope hint. With no argument, proceed open-ended and let the file state decide the path.
Core Principles
1. **Anchor, not plan.** Strategy is what the product is and why. Features belong in `/flow-next:prospect`; tasks belong in specs (`/flow-next:flow`). Do not let either creep into the doc. 2. **Rigor in the questions, not the headings.** The section headers are plain English. The interview questions enforce strategy discipline (`references/interview.md`). 3. **Short is a feature.** The template is constrained. Adding sections costs more than it looks like. Push back on expansion. 4. **Durable across runs.** This skill is rerunnable. On a second run it updates in place, preserves what is working, and only challenges sections that look stale or weak. 5. **Survives `.flow/` wipe.** `STRATEGY.md` lives at repo root, never under `.flow/`. The project's strategy belongs to the project, not flow-next.
Execution Flow
Phase 0: Route by file state
**0.1 — Read file state**
STATUS_JSON=$("$FLOWCTL" strategy status --json 2>/dev/null) || STATUS_JSON=
if ! printf '%s' "$STATUS_JSON" | jq -e '
type == "object"
and (.exists | type == "boolean")
and (.husk | type == "boolean")
and (.sections_filled as $n
| ($n | type) == "number"
and ($n | floor) == $n
and $n >= 0
and $n <= 7)
and (.total_sections as $n
| ($n | type) == "number"
and ($n | floor) == $n
and $n >= 5
and $n <= 7)
and (.sections_filled <= .total_sections)
and (.last_updated == null or (.last_updated | type == "string"))
and (.file_path == null or (.file_path | type == "string"))
and (.generator == null or (.generator | type == "string"))
and (.generator_match | type == "boolean")
and (.husk == ((.exists == true) and (.sections_filled == 0)))
and (.generator_match == (.generator == "flow-next-strategy"))
' >/dev/null 2>&1; then
echo "[STRATEGY: unable to classify STRATEGY.md safely — leaving it unchanged]" >&2
exit 0
fi
EXISTS=$(printf '%s' "$STATUS_JSON" | jq -r '.exists')
HUSK=$(printf '%s' "$STATUS_JSON" | jq -r '.husk')
SECTIONS_FILLED=$(printf '%s' "$STATUS_JSON" | jq -r '.sections_filled')
GENERATOR_MATCH=$(printf '%s' "$STATUS_JSON" | jq -r '.generator_match')
FILE_PATH=$(printf '%s' "$STATUS_JSON" | jq -r '.file_path // empty')JSON fields:
- `exists` (bool) — file present
- `husk` (bool) — `exists: true` AND `sections_filled == 0`
- `sections_filled` (int) — populated required + included optional-section count (0-7)
- `total_sections` (int) — 5 required + populated optional sections (5-7)
- `last_updated` (str|null) — ISO date from frontmatter
- `file_path` (str|null) — absolute path of resolved STRATEGY.md
- `generator` (str|null) — frontmatter `generator` value
- `generator_match` (bool) — `generator == "flow-next-strategy"`
**0.2 — Subdirectory walk-up surfacing**
If `file_path` is set and differs from `${PWD}/STRATEGY.md`, surface one line in chat before any question fires:
Using repo-root STRATEGY.md at <file_path>.
This is the only line printed before r
Faster than your agent alone. And better. A workflow plugin that takes a bug, idea or ticket to a verified pull request: specs, cross-model review by risk, live QA, receipts in your repo. Claude Code · Codex · Cursor · Droid · Grok Build · OpenCode · Muse Code.
Other skills on flow-next.
More skills from other plugins.
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
ask-matt
Ask which skill or flow fits your situation. A router over the skills in this repo.
Questions about flow-next-strategy.
- Which coding agents can use flow-next-strategy?
- flow-next-strategy installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.

