Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Manage .flow/ tasks and specs. Triggers: 'show me my tasks', 'list specs', 'what tasks are there', 'add a task', 'create task', 'what's ready', 'task status', 'show fn-1-add-oauth'. NOT for /flow-next:plan or /flow-next:work.
.claude/skills/gmickel-flow-next/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 69% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 87% | 0% |
| case-07 | ✗→✓ | ▲ Improved | -12% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 68% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 105% | 0% |
Quick task operations in .flow/. For planning features use /flow-next:plan, for executing use /flow-next:work.
CRITICAL: flowctl is BUNDLED — NOT installed globally. which flowctl will fail (expected). Define once; subsequent blocks use $FLOWCTL:
bashFLOWCTL="${CODEX_HOME:-$HOME/.codex}/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"
Discover all commands/options:
bash$FLOWCTL --help $FLOWCTL <command> --help # e.g., $FLOWCTL task --help
bash# Check if .flow exists $FLOWCTL detect --json # Initialize (if needed) $FLOWCTL init --json # List everything (specs + tasks grouped) $FLOWCTL list --json # List all specs $FLOWCTL specs --json # List all tasks (or filter by spec/status) $FLOWCTL tasks --json $FLOWCTL tasks --spec fn-1-add-oauth --json $FLOWCTL tasks --status todo --json # View spec with all tasks $FLOWCTL show fn-1-add-oauth --json $FLOWCTL cat fn-1-add-oauth # Spec markdown # View single task $FLOWCTL show fn-1-add-oauth.2 --json $FLOWCTL cat fn-1-add-oauth.2 # Task spec # What's ready to work on? $FLOWCTL ready --spec fn-1-add-oauth --json # Create task under existing spec $FLOWCTL task create --spec fn-1-add-oauth --title "Fix bug X" --json # Set task description and acceptance (combined, fewer writes; unique per-task temp paths) $FLOWCTL task set-spec fn-1-add-oauth.2 --description "${TMPDIR:-/tmp}/flow-desc-fn-1-add-oauth.2.md" --acceptance "${TMPDIR:-/tmp}/flow-accept-fn-1-add-oauth.2.md" --json # Or use stdin with heredoc (no temp file): $FLOWCTL task set-description fn-1-add-oauth.2 --file - --json <<'EOF' Description here EOF # Start working on task $FLOWCTL start fn-1-add-oauth.2 --json # Mark task done echo "What was done" > /tmp/summary.md echo '{"commits":["abc123"],"tests":["npm test"],"prs":[]}' > /tmp/evidence.json $FLOWCTL done fn-1-add-oauth.2 --summary-file /tmp/summary.md --evidence-json /tmp/evidence.json --json # Validate structure $FLOWCTL validate --spec fn-1-add-oauth --json $FLOWCTL validate --all --json
bash # List all specs $FLOWCTL specs --json
# Or show a specific spec to check its scope $FLOWCTL show fn-1 --json
bash $FLOWCTL task create --spec fn-N --title "Short title" --json
bash # Unique per-task temp paths — written + consumed in this one block cat > "${TMPDIR:-/tmp}/flow-desc-fn-N.M.md" << 'EOF' Bug/Feature: Brief description
Details:
EOF cat > "${TMPDIR:-/tmp}/flow-accept-fn-N.M.md" << 'EOF'
EOF $FLOWCTL task set-spec fn-N.M --description "${TMPDIR:-/tmp}/flow-desc-fn-N.M.md" --acceptance "${TMPDIR:-/tmp}/flow-accept-fn-N.M.md" --json
bash# All specs $FLOWCTL specs --json # All tasks $FLOWCTL tasks --json # Tasks for specific spec $FLOWCTL tasks --spec fn-1-add-oauth --json # Ready tasks for a spec $FLOWCTL ready --spec fn-1-add-oauth --json
bash$FLOWCTL show fn-1-add-oauth.2 --json # Metadata $FLOWCTL cat fn-1-add-oauth.2 # Full spec
(Legacy fn-1.2 / fn-1-xxx.2 still works.)
bash$FLOWCTL spec create --title "Spec title" --json # Returns: {"success": true, "id": "fn-N-spec-title", ...}
bash$FLOWCTL spec close fn-1-add-oauth --json
A spec closed because we decided not to build it also gets a file in .flow/memory/declined/<concept-slug>.md, written directly (agent prose, no flowctl verb): title, the decision in one line, short reasoning, and a ## Prior requests list opened with today's date and where the request came from. The file already exists → append the dated line under ## Prior requests and leave the decision as written. Without it the concept comes back next quarter with nothing to point at, and the next planner proposes it fresh.
Only a policy refusal earns a file. A spec closed as superseded, merged into another spec, already implemented, or obsolete is not a decline — filing it there teaches future planners that shipped or in-flight work is rejected scope. Reopening a declined concept is the user's call alone.
fn-N-slug where slug is derived from title (e.g., fn-1-add-oauth, fn-2-fix-login-bug)fn-N-slug.M (e.g., fn-1-add-oauth.1, fn-2-fix-login-bug.2)Legacy formats fn-N and fn-N-xxx (random 3-char suffix) are still supported.
$FLOWCTL --help to discover all commands and options.flow/ JSON or task markdown by hand has broken this..flow/ state, via --json (detect, list, specs, tasks, show, ready) or cat for markdown. An answer assembled from files skimmed by hand has broken this.flowctl done carrying both --summary-file and --evidence-json. A bare status flip has broken this./flow-next:plan and /flow-next:work. Improvising them here has broken this.Other measured skills in the registry, with their headline benchmark lift.