[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71M09G6BQWSYSWDQ9JBJ86M":3,"skill-same:01M71M09G6BQWSYSWDQ9JBJ86M":67},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":6,"updatedAt":52,"install":53,"resources":66},"01M71M09G6BQWSYSWDQ9JBJ86M","mastermind-idea",null,"Product ideation and feature brainstorming: an Idea Manager explores options, then validates approved ideas and splits them into dev and ops tasks.","monoes\u002Fmonomind","monoes","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F276744696?v=4","01M71KWF37AJ2NJBP3KWBVSDGT","01M71KWF4CSF8ADH0M6HA09VD2",23,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fmastermind-idea\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35,36],"mastermind idea","idea","domain","feature","ideas","dev","ops","splits","tasks","ideation","brainstorming","product","options","manager","2026-11-10 10:56:23",false,"---\nname: mastermind-idea\ndescription: \"Product ideation and feature brainstorming: an Idea Manager explores options, then validates approved ideas and splits them into dev and ops tasks.\"\ntype: domain-skill\ndefault_mode: confirm\n---\n\n# Mastermind Idea Domain\n\nThis skill is invoked directly via `\u002Fmastermind:idea`, or by `\u002Fmastermind:master` (pack extras — `monomind packs add extras`).\n\n**Extract `--monotask` flag:** If present in `$ARGUMENTS`, set `USE_MONOTASK=true` and remove it from `$ARGUMENTS`. Default: `USE_MONOTASK=false`.\n\n**File mode (default, `USE_MONOTASK=false`):**\n\nInvoke `Skill(\"mastermind:ideate\", $ARGUMENTS)` immediately — it provides the same research, evaluation, elaboration, and task-decomposition pipeline with file-first storage (`docs\u002Fideas\u002F` and `docs\u002Ftasks\u002F`). The rest of this skill is skipped in file mode.\n\n**Board mode (`USE_MONOTASK=true`):**\n\nContinue with the full monotask board pipeline below (Steps 3-6).\n\n---\n\n## Inputs\n\n- `brain_context`: BRAIN CONTEXT block (injected by master, or loaded standalone via mastermind-protocol\u002FSKILL.md brain load)\n- `prompt`: the ideation goal for this run\n- `project_name`: monotask space name\n- `mode`: auto | confirm\n\nNote: the `board_id` that mastermind:master may pass is its own orchestration board. The idea domain always creates a dedicated **ideation board** with its own pipeline columns — do not reuse master's board_id.\n\n---\n\n## Complexity Assessment\n\nAssess the prompt to determine execution mode:\n\n**Simple (direct execution):** Single-answer ideation, one agent:\n- \"Give me 5 name ideas for this feature\"\n- \"Suggest one pivot angle for this product\"\n→ Use a single researcher or content-creator agent. Skip Steps 3–6. Go straight to Step 7 (Brain Write).\n\n**Complex (full pipeline):** Any of these:\n- Product strategy or pivot exploration (multiple angles needed)\n- Feature ideation requiring market and user context\n- Competitive landscape brainstorm\n- Full product vision document\n→ Run Steps 3–6 (Board Setup → Idea Manager → Validation → Elaboration + Tasks).\n\n---\n\n## Standalone Execution (when called without master)\n\nIf this skill is invoked directly (not by master):\n\n1. Load brain context following mastermind-protocol\u002FSKILL.md Brain Load Procedure (namespace: `idea`)\n2. Run intake from mastermind-intake\u002FSKILL.md if prompt is vague\n3. For complex prompts: run Steps 3–6 below\n4. At end: follow mastermind-protocol\u002FSKILL.md Brain Write Procedure (namespace: `idea`)\n\n---\n\n## Simple Execution\n\nFor simple prompts (single agent, single output):\n\n1. Spawn one Task agent with the ideation request as a self-contained briefing\n2. Collect output\n3. If called standalone (not from master): follow mastermind-protocol\u002FSKILL.md Brain Write Procedure (namespace: `idea`)\n4. Return unified output schema with `status: complete`\n\n---\n\n## Complex Execution\n\n### Step 3 — Monotask Board Setup\n\nSet up the space and ideation board. The ideation board has a dedicated pipeline with six columns (not master's board).\n\n```bash\n# Compatible with macOS bash 3.2\nproject_name=\"${project_name:-$(basename \"$PWD\")}\"\ndate=$(date -u +%Y-%m-%dT%H:%M:%SZ)\nidea_canonical=\"${project_name}-idea\"\n\n# Find or create space (by exact name)\nspace_id=$(monotask space list 2>\u002Fdev\u002Fnull | awk -F'|' '{gsub(\u002F^ +| +$\u002F,\"\",$1);gsub(\u002F^ +| +$\u002F,\"\",$2);if($2==n)print $1}' n=\"$project_name\" | head -1)\n[ -z \"$space_id\" ] && space_id=$(monotask space create \"$project_name\" 2>\u002Fdev\u002Fnull | grep -oE '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')\n[ -z \"$space_id\" ] && { echo \"ERROR: Could not find or create space '$project_name'\"; exit 1; }\n\n# Find existing idea board by canonical name — reuse across runs (same pattern as master Step 6)\n# board list format is \"uuid: name\" (colon-space separator, NOT pipe)\nBOARD_ID=$(monotask board list 2>\u002Fdev\u002Fnull | awk -F': ' '{gsub(\u002F^ +| +$\u002F,\"\",$1);gsub(\u002F^ +| +$\u002F,\"\",$2);if($2==n)print $1}' n=\"$idea_canonical\" | head -1)\n\nif [ -n \"$BOARD_ID\" ]; then\n  echo \"Reusing idea board: $BOARD_ID ($idea_canonical)\"\n  columns=$(monotask column list \"$BOARD_ID\" --json)\n  COL_NEW=$(echo \"$columns\"       | jq -r '.[] | select(.title == \"New\")        | .id' | head -1)\n  COL_EVALUATED=$(echo \"$columns\" | jq -r '.[] | select(.title == \"Evaluated\")  | .id' | head -1)\n  COL_ELABORATED=$(echo \"$columns\"| jq -r '.[] | select(.title == \"Elaborated\") | .id' | head -1)\n  COL_TASKED=$(echo \"$columns\"    | jq -r '.[] | select(.title == \"Tasked\")     | .id' | head -1)\n  COL_ICED=$(echo \"$columns\"      | jq -r '.[] | select(.title == \"Iced\")       | .id' | head -1)\n  COL_REJECTED=$(echo \"$columns\"  | jq -r '.[] | select(.title == \"Rejected\")   | .id' | head -1)\n  [ -z \"$COL_NEW\" ]        && { echo \"ERROR: 'New' column missing on board $BOARD_ID — was board created with wrong schema?\"; exit 1; }\n  [ -z \"$COL_EVALUATED\" ]  && { echo \"ERROR: 'Evaluated' column missing on board $BOARD_ID\"; exit 1; }\n  [ -z \"$COL_ELABORATED\" ] && { echo \"ERROR: 'Elaborated' column missing on board $BOARD_ID\"; exit 1; }\n  [ -z \"$COL_TASKED\" ]     && { echo \"ERROR: 'Tasked' column missing on board $BOARD_ID\"; exit 1; }\n  [ -z \"$COL_ICED\" ]       && { echo \"ERROR: 'Iced' column missing on board $BOARD_ID\"; exit 1; }\n  [ -z \"$COL_REJECTED\" ]   && { echo \"ERROR: 'Rejected' column missing on board $BOARD_ID\"; exit 1; }\nelse\n  echo \"Creating idea board: $idea_canonical\"\n  BOARD_ID=$(monotask board create --space \"$space_id\" \"$idea_canonical\" --json 2>\u002Fdev\u002Fnull | jq -r '.id \u002F\u002F empty')\n  [ -z \"$BOARD_ID\" ] && { echo \"ERROR: Failed to create idea board '$idea_canonical'\"; exit 1; }\n  monotask space boards add \"$space_id\" \"$BOARD_ID\" >\u002Fdev\u002Fnull 2>&1 || true\n  COL_NEW=$(monotask column create \"$BOARD_ID\"       \"New\"        --json | jq -r '.id \u002F\u002F empty')\n  COL_EVALUATED=$(monotask column create \"$BOARD_ID\" \"Evaluated\"  --json | jq -r '.id \u002F\u002F empty')\n  COL_ELABORATED=$(monotask column create \"$BOARD_ID\" \"Elaborated\" --json | jq -r '.id \u002F\u002F empty')\n  COL_TASKED=$(monotask column create \"$BOARD_ID\"    \"Tasked\"     --json | jq -r '.id \u002F\u002F empty')\n  COL_ICED=$(monotask column create \"$BOARD_ID\"      \"Iced\"       --json | jq -r '.id \u002F\u002F empty')\n  COL_REJECTED=$(monotask column create \"$BOARD_ID\"  \"Rejected\"   --json | jq -r '.id \u002F\u002F empty')\nfi\n```\n\n**After either branch above, validate and echo all values.** This is the canonical source for Step 4 Task construction.\n\n```bash\n# Guard all column IDs — catches silent jq failures in the create branch\n[ -z \"$COL_NEW\" ]        && { echo \"ERROR: COL_NEW empty after board setup\"; exit 1; }\n[ -z \"$COL_EVALUATED\" ]  && { echo \"ERROR: COL_EVALUATED empty after board setup\"; exit 1; }\n[ -z \"$COL_ELABORATED\" ] && { echo \"ERROR: COL_ELABORATED empty after board setup\"; exit 1; }\n[ -z \"$COL_TASKED\" ]     && { echo \"ERROR: COL_TASKED empty after board setup\"; exit 1; }\n[ -z \"$COL_ICED\" ]       && { echo \"ERROR: COL_ICED empty after board setup\"; exit 1; }\n[ -z \"$COL_REJECTED\" ]   && { echo \"ERROR: COL_REJECTED empty after board setup\"; exit 1; }\n\n# Validate BOARD_ID looks like a UUID before proceeding\n[[ ! \"$BOARD_ID\" =~ ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ ]] && \\\n  { echo \"ERROR: BOARD_ID '$BOARD_ID' is not a valid UUID — aborting to prevent board name corruption\"; exit 1; }\n\n# Echo literal values — READ THESE and embed them as string literals in the Step 4 Task prompt.\n# These are shell variables; they DO NOT survive into the Task agent's context.\necho \"=== IDEA BOARD LITERAL VALUES ===\"\necho \"BOARD_ID=$BOARD_ID\"\necho \"COL_NEW=$COL_NEW\"\necho \"COL_EVALUATED=$COL_EVALUATED\"\necho \"COL_ELABORATED=$COL_ELABORATED\"\necho \"COL_TASKED=$COL_TASKED\"\necho \"COL_ICED=$COL_ICED\"\necho \"COL_REJECTED=$COL_REJECTED\"\necho \"===================================\"\n```\n\n---\n\n### Step 4 — Idea Manager Agent (Divergent Thinking)\n\n**Before spawning the Idea Manager**, pick specialists from the shared agent index instead of hardcoded agent types (pick order in `mastermind-agent-select\u002FSKILL.md`).\n\n**If `mcp__monomind__pick` is available**, call it twice — `{ task: prompt, kind: \"agents\", categories: [\"marketing\",\"specialized\",\"design\",\"testing\"], top: 6 }` and `{ task: prompt, kind: \"agents\", categories: [\"engineering\",\"architecture\",\"core\",\"specialized\"], top: 2 }` — merge the `agents.ranked[].name` values (unique, max 8) into `specialist_list`, and skip the Bash block below unless fewer than 2 came back.\n\n```bash\nPROMPT=\"$prompt\"\n\n# The shared agent index: Jev when configured, keyword ranking otherwise. It\n# only returns agents that exist.\n# Local only — never npx. Accept a binary only when its pick output is the\n# unified index (skill entries carry `source`); see mastermind-agent-select.\nmmpick() { for c in monomind .\u002Fnode_modules\u002F.bin\u002Fmonomind; do\n    command -v \"$c\" >\u002Fdev\u002Fnull 2>&1 || continue\n    out=$(\"$c\" pick \"$@\" --json 2>\u002Fdev\u002Fnull) || continue\n    printf '%s' \"$out\" | jq -e '[.skills.ranked[]? | has(\"source\")] | (length > 0 and all)' \\\n      >\u002Fdev\u002Fnull 2>&1 && { printf '%s\\n' \"$out\"; return 0; }\n  done; return 127; }\npick_names() { mmpick -t \"$1\" --categories \"$2\" --top \"$3\" \\\n    | jq -c '[.agents.ranked[].name]' 2>\u002Fdev\u002Fnull; }\n\n# User\u002Fmarket\u002Fops angle specialists, then technical angle specialists\nuser_market_agents=$(pick_names \"$PROMPT\" \"marketing specialized design testing\" 6)\ntech_agents=$(pick_names \"$PROMPT\" \"engineering architecture core specialized\" 2)\n\n# Merge: top 6 market\u002Fops + top 2 tech (cap at 8 total)\nspecialist_list=$(jq -s 'add \u002F\u002F [] | unique | .[0:8]' \\\n  \u003C(printf '%s' \"${user_market_agents:-[]}\") \\\n  \u003C(printf '%s' \"${tech_agents:-[]}\") 2>\u002Fdev\u002Fnull)\n\n# Fallback if picking is unavailable or returned too few — need at least 2 specialists\nspecialist_count=$(echo \"$specialist_list\" | jq 'length \u002F\u002F 0' 2>\u002Fdev\u002Fnull || echo 0)\n[ \"${specialist_count:-0}\" -lt 2 ] && specialist_list='[\"researcher\",\"planner\",\"Software Architect\",\"Technical Writer\",\"Frontend Developer\",\"reviewer\"]'\n\necho \"Selected specialists: $specialist_list\"\n```\n\n**CRITICAL — Variable substitution required before constructing the Task call:**\nThe Task agent runs in an isolated context and cannot inherit shell variables. Before writing the Task prompt below, read the literal UUID values from the `=== IDEA BOARD LITERAL VALUES ===` echo block above and embed them as **hard-coded strings** in the prompt. Do NOT write `${BOARD_ID}`, `${COL_NEW}`, etc. in the prompt — the agent will receive those as literal dollar-sign strings and its `monotask card create` calls will fail, causing it to improvise with `monotask board create` and corrupt board names. Replace every `${BOARD_ID}`, `${COL_NEW}`, `${project_name}`, `${brain_context}`, `${prompt}`, `${date}`, and `${specialist_list}` with the actual value before calling Task. Leave `$result`, `$CARD_ID`, and other loop-internal variables as-is — they are bash variables the agent itself will set at runtime, not substitution targets.\n\nSpawn the Idea Manager with `run_in_background: false` so its output is available for Step 5.\n\n```javascript\nTask({\n  subagent_type: \"coordinator\",\n  description: \"Idea Manager for project \" + project_name,\n  run_in_background: false,\n  prompt: `SAFETY CHECK: Before doing anything else, verify that the BOARD_ID you received matches UUID format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12 hex chars). If it does not, STOP immediately and report \"ERROR: BOARD_ID was not substituted — received: \u003Cvalue>\". Do NOT call monotask board create, monotask space create, or any board\u002Fspace\u002Fcolumn creation commands. Your only job is creating CARDS on the board you were given.\n\nYou are the Idea Manager for project \"${project_name}\".\n\nCONTEXT: ${date} | Project: ${project_name} | Spawned by: mastermind:idea\n\nBRAIN CONTEXT:\n${brain_context}\n\nYOUR BOARD: ${BOARD_ID}\nCOL_NEW: ${COL_NEW}\nYOUR GOAL: ${prompt}\n\nSTEP 1 — PLAN\nDecompose the ideation goal into distinct exploration angles. For each angle, identify:\n- Perspective (market, user, technical, competitive, business operations)\n- Which specialist to assign\n- Expected output format\n\nSTEP 2 — SPAWN SPECIALISTS\nSpawn one Task agent per angle (all in parallel, mesh topology). Each agent receives the\nangle description, brain context, and project context, and must return a JSON array of ideas.\n\nThe following specialist agents have been pre-selected from the shared agent index as best-fit for this prompt.\nSpawn ALL of them in one message, assigning each a distinct angle:\n\nSPECIALISTS: ${specialist_list}\n\nAssign each specialist the angle that best matches their domain expertise.\nFor any specialist you don't recognize, assign them the closest research or analysis angle.\nAlways ensure at minimum these angles are covered even if the same agent covers multiple:\n- Market \u002F competitive landscape\n- User \u002F UX perspective\n- Growth \u002F acquisition\n- Business operations \u002F process\n- Technical feasibility (at least one engineering-category agent)\n\nEach specialist must classify every idea with one of these categories:\n  feature             — new product capability for end users\n  technical-baseline  — infrastructure, tooling, or technical debt (not user-visible)\n  business-operation  — internal process, workflow, marketing, sales, ops, or org change\n\nEach specialist returns ideas in this format:\n[\n  {\n    \"title\": \"...\",\n    \"description\": \"...\",\n    \"category\": \"feature | technical-baseline | business-operation\"\n  }\n]\n\nSTEP 3 — DEDUPLICATE\nCollect all ideas from all specialists. Drop any idea whose title is more than 80% similar\nto an already-kept idea (fuzzy match). Keep the richer description when deduplicating.\n\nSTEP 4 — CREATE CARDS AND RETURN\nFor each unique idea, create one card in the New column (COL_NEW = ${COL_NEW}):\n\n  result=$(monotask card create \"${BOARD_ID}\" \"${COL_NEW}\" \"\u003Cidea title ≤80 chars>\" --json)\n  CARD_ID=$(echo \"$result\" | jq -r '.id \u002F\u002F empty')\n  [ -z \"$CARD_ID\" ] && { echo \"WARN: card creation failed for '\u003Cidea title>', skipping\"; continue; }\n  monotask card set-description \"${BOARD_ID}\" \"$CARD_ID\" \"\u003C2-3 sentence description>\"\n  monotask card comment add \"${BOARD_ID}\" \"$CARD_ID\" \"CATEGORY: \u003Cfeature | technical-baseline | business-operation>\nSOURCE: \u003Cwhich specialist angle produced this>\"\n  monotask card label add \"${BOARD_ID}\" \"$CARD_ID\" \"mastermind-idea\"\n  monotask card label add \"${BOARD_ID}\" \"$CARD_ID\" \"category:\u003Ccategory>\"\n\nThen output a JSON block labelled IDEAS_OUTPUT with one entry per unique idea:\n\nIDEAS_OUTPUT\n[\n  {\n    \"card_id\": \"\u003Cmonotask card ID just created>\",\n    \"title\": \"\u003Cidea title>\",\n    \"description\": \"\u003C2-3 sentence description>\",\n    \"category\": \"feature | technical-baseline | business-operation\",\n    \"source_angle\": \"\u003Cwhich specialist produced this>\"\n  }\n]\nEND_IDEAS_OUTPUT`\n})\n```\n\nParse the `IDEAS_OUTPUT` JSON block from the agent's response and assign it:\n```bash\nideas_output_json='\u003Cpaste the JSON array from IDEAS_OUTPUT here>'\n```\nIf the `IDEAS_OUTPUT` block is absent from the agent's response (agent error, timeout, or unrecoverable failure), set `ideas_output_json='[]'` and treat as zero ideas.\nIf zero ideas were returned, report \"Idea Manager produced no ideas.\" — skip Steps 5–6 and proceed to Step 7 (Brain Write).\n\n---\n\n### Step 5 — Validation (Product Manager Evaluation)\n\n**Build `ideas_list` before constructing the Step 5 Task prompt:**\n```bash\n# Format the full IDEAS_OUTPUT array (from Step 4) as the literal string to embed in the Task prompt.\n# Each line: card_id | title | description | category | source_angle\nideas_list=$(echo \"$ideas_output_json\" | jq -r \\\n  '.[] | \"- card_id: \\(.card_id)\\n  title: \\(.title)\\n  description: \\(.description)\\n  category: \\(.category)\\n  source: \\(.source_angle)\\n\"')\n```\n\n**CRITICAL — Variable substitution required for Step 5 Task call:**\nBefore constructing the Task prompt below, read the literal UUID values from the `=== IDEA BOARD LITERAL VALUES ===` echo block (Step 3) and embed them as hard-coded strings. Also embed the full `brain_context`, `prompt`, and `ideas_list` (built above) as literal text. Replace every `${BOARD_ID}`, `${COL_EVALUATED}`, `${COL_ICED}`, `${COL_REJECTED}`, `${brain_context}`, `${prompt}`, `${project_name}`, `${date}`, and `${ideas_list}` with its actual value before calling Task — the agent receives unsubstituted `${...}` strings verbatim and silently skips every board update.\n\nSpawn a single `general-purpose` agent via the Task tool. Do NOT substitute a specialist whose definition restricts `tools:` without Bash — it cannot execute `monotask` CLI commands. The evaluator agent produces verdicts and executes all board updates directly via Bash.\n\n```javascript\nTask({\n  subagent_type: \"general-purpose\",\n  description: \"PM validation for project \" + project_name,\n  run_in_background: false,\n  prompt: `SAFETY CHECK: Verify that the BOARD_ID you received matches UUID format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12 hex chars). If it does not, STOP and report \"ERROR: BOARD_ID not substituted — received: \u003Cvalue>\". Do NOT call monotask board create, space create, or column create. Your only job is evaluating cards and running impact\u002Feffort updates on existing cards.\n\nYou are the Product Manager evaluator for project \"${project_name}\".\n\nCONTEXT: ${date} | Project: ${project_name}\nORIGINAL GOAL: ${prompt}\n\nBRAIN CONTEXT:\n${brain_context}\n\nYOUR BOARD: ${BOARD_ID}\nCOL_EVALUATED: ${COL_EVALUATED}\nCOL_ICED:      ${COL_ICED}\nCOL_REJECTED:  ${COL_REJECTED}\n\nIDEAS TO EVALUATE (formatted from IDEAS_OUTPUT parsed in Step 4 — paste the full JSON array here as literal text):\n${ideas_list}\n\nFor EVERY idea above, determine:\n- verdict: evaluated | iced | rejected\n- impact: 0–10 (business value \u002F strategic importance)\n- effort: 0–10 (implementation cost \u002F complexity)\n- skipElaboration: true (simple, no deep research needed) | false (edge cases should be explored) — only for evaluated\n- rationale: 1-2 sentence value statement (evaluated), blocking question (iced), or rejection reason (rejected)\n\nMANDATORY BOARD UPDATES — after determining all verdicts, build your verdicts as a JSON array and iterate over it:\n\n  # Paste your full VERDICTS_OUTPUT array here as verdicts_json (before outputting the block)\n  verdicts_json='[ ... your verdict objects ... ]'\n  while IFS= read -r row; do\n    CARD_ID=$(echo \"$row\" | jq -r '.card_id')\n    verdict=$(echo \"$row\"   | jq -r '.verdict')\n    impact=$(echo \"$row\"    | jq -r '.impact')\n    effort=$(echo \"$row\"    | jq -r '.effort')\n    rationale=$(echo \"$row\" | jq -r '.rationale')\n    if [ \"$verdict\" = \"evaluated\" ]; then\n      monotask card move \"${BOARD_ID}\" \"$CARD_ID\" \"${COL_EVALUATED}\" --json\n      monotask card set-impact \"${BOARD_ID}\" \"$CARD_ID\" \"$impact\"\n      monotask card set-effort \"${BOARD_ID}\" \"$CARD_ID\" \"$effort\"\n      monotask card comment add \"${BOARD_ID}\" \"$CARD_ID\" \"Value: $rationale\"\n    elif [ \"$verdict\" = \"iced\" ]; then\n      monotask card move \"${BOARD_ID}\" \"$CARD_ID\" \"${COL_ICED}\" --json\n      monotask card set-impact \"${BOARD_ID}\" \"$CARD_ID\" \"$impact\"\n      monotask card set-effort \"${BOARD_ID}\" \"$CARD_ID\" \"$effort\"\n      monotask card comment add \"${BOARD_ID}\" \"$CARD_ID\" \"Blocked: $rationale\"\n    elif [ \"$verdict\" = \"rejected\" ]; then\n      monotask card move \"${BOARD_ID}\" \"$CARD_ID\" \"${COL_REJECTED}\" --json\n      monotask card comment add \"${BOARD_ID}\" \"$CARD_ID\" \"Rejected: $rationale\"\n    fi\n  done \u003C \u003C(echo \"$verdicts_json\" | jq -c '.[]')\n\nIMPORTANT: set-impact and set-effort MUST be called for every evaluated and iced idea. Do not skip them.\n\nAfter completing all board updates, output this structured block:\n\nVERDICTS_OUTPUT\n[\n  {\n    \"card_id\": \"\u003Ccard ID>\",\n    \"title\": \"\u003Cidea title>\",\n    \"category\": \"feature | technical-baseline | business-operation\",\n    \"verdict\": \"evaluated | iced | rejected\",\n    \"skipElaboration\": true | false,\n    \"rationale\": \"\u003Cvalue statement | blocking question | rejection reason>\",\n    \"impact\": \u003C0-10>,\n    \"effort\": \u003C0-10>\n  }\n]\nEND_VERDICTS_OUTPUT`\n})\n```\n\nAfter the PM agent completes, parse the `VERDICTS_OUTPUT` block from the agent's response and assign it:\n```bash\nverdicts_output_json='\u003Cpaste the JSON array from VERDICTS_OUTPUT here>'\n```\nIf the `VERDICTS_OUTPUT` block is absent (agent error or malformed output), set `verdicts_output_json='[]'` — all ideas will be treated as iced and Step 6 will be skipped.\nThis variable is used throughout Steps 6a and 6c to build idea lists, registry keywords, and inherit impact\u002Feffort scores — it must be set before proceeding. If **all** ideas are iced or rejected, output a summary table — skip Step 6 and proceed to Step 7 (Brain Write).\n\n---\n\n### Step 6 — Elaboration + Task Decomposition\n\n#### 6a. Elaboration (conditional)\n\nFor any evaluated idea with `skipElaboration: true`, move it directly to `Elaborated`, set a description, and write a rationale comment so future readers understand why no deep elaboration was needed:\n```bash\nwhile IFS= read -r skip_idea; do\n  CARD_ID=$(echo \"$skip_idea\"  | jq -r '.card_id')\n  skip_title=$(echo \"$skip_idea\"   | jq -r '.title')\n  skip_rationale=$(echo \"$skip_idea\" | jq -r '.rationale \u002F\u002F \"No rationale provided\"')\n  skip_impact=$(echo \"$skip_idea\"  | jq -r '.impact \u002F\u002F 5')\n  skip_effort=$(echo \"$skip_idea\"  | jq -r '.effort \u002F\u002F 5')\n  monotask card set-description \"$BOARD_ID\" \"$CARD_ID\" \"Elaboration skipped — PM assessed this as straightforward.\n\nRationale: $skip_rationale\n\nImpact: $skip_impact\u002F10 | Effort: $skip_effort\u002F10\"\n  monotask card move \"$BOARD_ID\" \"$CARD_ID\" \"$COL_ELABORATED\" --json\n  monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Elaboration skipped: PM assessed this idea as straightforward with no significant unknowns. Rationale: $skip_rationale\"\ndone \u003C \u003C(echo \"$verdicts_output_json\" | jq -c '[.[] | select(.verdict == \"evaluated\") | select(.skipElaboration == true)] | .[]')\n```\n\nFor ideas with `skipElaboration: false`, **split by category** before spawning agents:\n\n**Build `dev_ideas_list` and `ops_ideas_list` before constructing the Step 6a Task prompts:**\n```bash\n# Filter VERDICTS_OUTPUT (parsed in Step 5) by category and format as literal text.\n# IMPORTANT: exclude skipElaboration:true ideas — they were already moved to Elaborated above\n# and must not be sent to elaboration agents again.\ndev_ideas_list=$(echo \"$verdicts_output_json\" | jq -r \\\n  '.[] | select(.verdict == \"evaluated\") | select(.skipElaboration != true)\n       | select(.category == \"feature\" or .category == \"technical-baseline\") |\n   \"- card_id: \\(.card_id)\\n  title: \\(.title)\\n  category: \\(.category)\\n  rationale: \\(.rationale)\\n\"')\n\nops_ideas_list=$(echo \"$verdicts_output_json\" | jq -r \\\n  '.[] | select(.verdict == \"evaluated\") | select(.skipElaboration != true)\n       | select(.category == \"business-operation\") |\n   \"- card_id: \\(.card_id)\\n  title: \\(.title)\\n  category: \\(.category)\\n  rationale: \\(.rationale)\\n\"')\n```\n\n**CRITICAL — Variable substitution required for Step 6a Task calls:**\nElaboration agents run in isolated Task contexts. Before constructing each Task prompt, replace every `${brain_context}`, `${dev_ideas_list}`, and `${ops_ideas_list}` with the actual literal text — `brain_context` from the brain load, `dev_ideas_list` and `ops_ideas_list` built above. Do NOT leave any `${...}` placeholders in the prompt — the agent receives them as literal dollar-sign strings and produces empty ELABORATION_OUTPUT blocks.\n\n**Dev ideas** (`feature` or `technical-baseline`) — **skip if `dev_ideas_list` is empty** (no evaluated feature\u002Ftechnical-baseline ideas without skipElaboration; set `dev_researcher_json='[]'` and `dev_codebase_json='[]'` instead and do not spawn these agents):\nSpawn two agents in parallel via Task tool:\n\n```javascript\n\u002F\u002F Agent 1 — code explorer\nTask({\n  subagent_type: \"Explore\",\n  description: \"Elaboration: codebase constraints for dev ideas\",\n  run_in_background: true,\n  prompt: `SAFETY CHECK: You are an elaboration agent. Do NOT call monotask board create, space create, or column create. Your only job is producing an ELABORATION_OUTPUT block — the outer skill writes to the board.\n\nAnalyze the following dev ideas against the current codebase. For each idea, trace relevant execution paths, map dependencies, and surface constraints or implementation risks.\n\nBRAIN CONTEXT:\n${brain_context}\n\nIDEAS:\n${dev_ideas_list}\n\nOutput this block:\nELABORATION_OUTPUT\n[\n  {\n    \"card_id\": \"\u003Cidea card ID>\",\n    \"findings\": \"\u003Cdetailed codebase constraints, dependency risks, and implementation notes>\",\n    \"blocking_issue\": \"\u003Cblocking issue if any, or null>\"\n  }\n]\nEND_ELABORATION_OUTPUT`\n})\n\n\u002F\u002F Agent 2 — researcher\nTask({\n  subagent_type: \"researcher\",\n  description: \"Elaboration: prior art and edge cases for dev ideas\",\n  run_in_background: true,\n  prompt: `SAFETY CHECK: You are an elaboration agent. Do NOT call monotask board create, space create, or column create. Your only job is producing an ELABORATION_OUTPUT block — the outer skill writes to the board.\n\nResearch the following dev ideas. For each idea, find prior art, known edge cases, implementation pitfalls, and relevant open-source approaches.\n\nBRAIN CONTEXT:\n${brain_context}\n\nIDEAS:\n${dev_ideas_list}\n\nOutput this block:\nELABORATION_OUTPUT\n[\n  {\n    \"card_id\": \"\u003Cidea card ID>\",\n    \"findings\": \"\u003Cprior art, edge cases, pitfalls, and relevant examples>\",\n    \"blocking_issue\": \"\u003Cblocking issue if any, or null>\"\n  }\n]\nEND_ELABORATION_OUTPUT`\n})\n```\n\n**Business-operation ideas** (`business-operation`) — **skip if `ops_ideas_list` is empty** (no evaluated business-operation ideas without skipElaboration; set `ops_researcher_json='[]'` and `ops_pm_json='[]'` instead and do not spawn these agents):\nSpawn two agents in parallel via Task tool:\n\n```javascript\n\u002F\u002F Agent 1 — researcher\nTask({\n  subagent_type: \"researcher\",\n  description: \"Elaboration: industry benchmarks for ops ideas\",\n  run_in_background: true,\n  prompt: `SAFETY CHECK: You are an elaboration agent. Do NOT call monotask board create, space create, or column create. Your only job is producing an ELABORATION_OUTPUT block — the outer skill writes to the board.\n\nResearch the following business-operation ideas. For each idea, find industry benchmarks, comparable operational processes, known pitfalls, and market context.\n\nBRAIN CONTEXT:\n${brain_context}\n\nIDEAS:\n${ops_ideas_list}\n\nOutput this block:\nELABORATION_OUTPUT\n[\n  {\n    \"card_id\": \"\u003Cidea card ID>\",\n    \"findings\": \"\u003Cindustry benchmarks, comparable processes, pitfalls, and market context>\",\n    \"blocking_issue\": \"\u003Cblocking issue if any, or null>\"\n  }\n]\nEND_ELABORATION_OUTPUT`\n})\n\n\u002F\u002F Agent 2 — feasibility assessor: mcp__monomind__pick({task: \"feasibility assessment: \u003Cops ideas>\", kind: \"agents\", top: 1}) -> agents.ranked[0].name\n\u002F\u002F   (no MCP: mmpick -t \"feasibility assessment: \u003Cops ideas>\" --top 1 | jq -r '.agents.ranked[0].name'; fallback \"general-purpose\")\nTask({\n  subagent_type: \"\u003Cpicked agent>\",\n  description: \"Elaboration: feasibility assessment for ops ideas\",\n  run_in_background: true,\n  prompt: `SAFETY CHECK: You are an elaboration agent. Do NOT call monotask board create, space create, or column create. Your only job is producing an ELABORATION_OUTPUT block — the outer skill writes to the board.\n\nAssess the following business-operation ideas for process feasibility, stakeholder impact, alignment with existing workflows, and resource requirements.\n\nBRAIN CONTEXT:\n${brain_context}\n\nIDEAS:\n${ops_ideas_list}\n\nOutput this block:\nELABORATION_OUTPUT\n[\n  {\n    \"card_id\": \"\u003Cidea card ID>\",\n    \"findings\": \"\u003Cfeasibility assessment, stakeholder impact, workflow alignment, resource needs>\",\n    \"blocking_issue\": \"\u003Cblocking issue if any, or null>\"\n  }\n]\nEND_ELABORATION_OUTPUT`\n})\n```\n\nWait for all spawned background elaboration agents to complete before proceeding (0, 2, or 4 agents depending on which lists were non-empty — see guards above). Then build `merged_elaboration_json` by merging agent outputs per `card_id` and injecting `category` from `verdicts_output_json`:\n\n```bash\n# Assign each agent's ELABORATION_OUTPUT JSON array from its output block:\ndev_researcher_json='\u003CELABORATION_OUTPUT array from the dev researcher agent>'\ndev_codebase_json='\u003CELABORATION_OUTPUT array from the dev code-explorer agent>'\nops_researcher_json='\u003CELABORATION_OUTPUT array from the ops researcher agent>'\nops_pm_json='\u003CELABORATION_OUTPUT array from the ops PM agent>'\n# Use '[]' for any track that had no ideas (e.g. if all ideas were dev, set ops_* to '[]')\n# If an ELABORATION_OUTPUT block is absent from an agent's response (error\u002Ftimeout), set that variable to '[]'\n\n# Merge dev track: full outer join researcher + codebase by card_id, inject category from verdicts.\n# Use union of card_ids from both agents — if one agent skips a card the other covers, it's preserved.\n# blocking_issue: take from whichever agent found one (researcher OR codebase).\ndev_merged=$(jq -n \\\n  --argjson r \"$dev_researcher_json\" \\\n  --argjson c \"$dev_codebase_json\" \\\n  --argjson v \"$verdicts_output_json\" \\\n  '([$r[], $c[]] | map(.card_id) | unique) as $ids |\n   [$ids[] | . as $id |\n    { card_id: $id,\n      blocking_issue: (\n        ([$r[] | select(.card_id == $id)] | first | .blocking_issue \u002F\u002F null) \u002F\u002F\n        ([$c[] | select(.card_id == $id)] | first | .blocking_issue \u002F\u002F null)\n      ),\n      researcher_findings: ([$r[] | select(.card_id == $id)] | first | .findings \u002F\u002F \"\"),\n      codebase_findings:   ([$c[] | select(.card_id == $id)] | first | .findings \u002F\u002F \"\"),\n      category: ([$v[] | select(.card_id == $id)] | first | .category \u002F\u002F \"feature\") }]')\n\n# Merge ops track: full outer join researcher + PM findings by card_id, inject category.\n# blocking_issue: take from whichever agent found one (researcher OR PM).\nops_merged=$(jq -n \\\n  --argjson r \"$ops_researcher_json\" \\\n  --argjson p \"$ops_pm_json\" \\\n  --argjson v \"$verdicts_output_json\" \\\n  '([$r[], $p[]] | map(.card_id) | unique) as $ids |\n   [$ids[] | . as $id |\n    { card_id: $id,\n      blocking_issue: (\n        ([$r[] | select(.card_id == $id)] | first | .blocking_issue \u002F\u002F null) \u002F\u002F\n        ([$p[] | select(.card_id == $id)] | first | .blocking_issue \u002F\u002F null)\n      ),\n      researcher_findings: ([$r[] | select(.card_id == $id)] | first | .findings \u002F\u002F \"\"),\n      pm_findings:         ([$p[] | select(.card_id == $id)] | first | .findings \u002F\u002F \"\"),\n      category: ([$v[] | select(.card_id == $id)] | first | .category \u002F\u002F \"business-operation\") }]')\n\n# Combine both tracks\nmerged_elaboration_json=$(jq -s 'add \u002F\u002F []' \u003C(echo \"$dev_merged\") \u003C(echo \"$ops_merged\"))\n```\n\nUse process substitution (not a pipeline) so the while loop runs in the main shell and variables remain in scope after `done`:\n\n```bash\nwhile IFS= read -r idea; do\n  CARD_ID=$(echo \"$idea\"        | jq -r '.card_id')\n  category=$(echo \"$idea\"       | jq -r '.category')\n  blocking_issue=$(echo \"$idea\" | jq -r '.blocking_issue \u002F\u002F \"\"')\n  [ \"$blocking_issue\" = \"null\" ] && blocking_issue=\"\"  # guard against agents outputting the string \"null\"\n\n  if [ \"$category\" = \"business-operation\" ]; then\n    researcher_findings=$(echo \"$idea\" | jq -r '.researcher_findings')\n    pm_findings=$(echo \"$idea\"         | jq -r '.pm_findings')\n    monotask card set-description \"$BOARD_ID\" \"$CARD_ID\" \"## Elaboration Findings\n\n### Industry context & benchmarks:\n$researcher_findings\n\n### Feasibility & stakeholder impact:\n$pm_findings\"\n    monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Industry context & benchmarks: $researcher_findings\"\n    monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Feasibility & stakeholder impact: $pm_findings\"\n  else\n    researcher_findings=$(echo \"$idea\" | jq -r '.researcher_findings')\n    codebase_findings=$(echo \"$idea\"   | jq -r '.codebase_findings')\n    monotask card set-description \"$BOARD_ID\" \"$CARD_ID\" \"## Elaboration Findings\n\n### Edge cases & prior art:\n$researcher_findings\n\n### Codebase constraints:\n$codebase_findings\"\n    monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Edge cases & prior art: $researcher_findings\"\n    monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Codebase constraints: $codebase_findings\"\n  fi\n\n  if [ -n \"$blocking_issue\" ]; then\n    monotask card move \"$BOARD_ID\" \"$CARD_ID\" \"$COL_ICED\" --json\n    monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Blocked during elaboration: $blocking_issue\"\n  else\n    monotask card move \"$BOARD_ID\" \"$CARD_ID\" \"$COL_ELABORATED\" --json\n  fi\ndone \u003C \u003C(echo \"$merged_elaboration_json\" | jq -c '.[]')\n```\n\n#### 6b. User Confirmation Gate\n\n**Auto-mode bypass:** If `mode` is `auto` (set by mastermind:master or caller), skip this gate entirely and proceed directly to Step 6c with all elaborated ideas.\n\n**Confirm mode only:** If `mode` is `confirm` (default), present a review table of all elaborated ideas to the user.\n\nBuild the table from `verdicts_output_json` (filtered to `verdict == \"evaluated\"` AND `card_id` not in the set of ideas with a non-null `blocking_issue` in `merged_elaboration_json`). Exclude ideas iced during elaboration — they are already in the `Iced` column and must not appear in this review. For each row:\n- **Impact** and **Effort** come from `.impact` and `.effort` fields in `verdicts_output_json`\n- **Track**: `feature` or `technical-baseline` → `dev`; `business-operation` → `ops`\n\nPrint this exact format:\n\n```\n╔══════════════════════════════════════════════════════════════════════╗\n║  IDEA REVIEW — Please confirm before task generation                ║\n╚══════════════════════════════════════════════════════════════════════╝\n\n#  | Title                          | Category          | Impact | Effort | Track\n---|--------------------------------|-------------------|--------|--------|-------\n1  | \u003Ctitle>                        | \u003Ccategory>        | \u003CN>\u002F10 | \u003CN>\u002F10 | dev \u002F ops\n2  | \u003Ctitle>                        | \u003Ccategory>        | \u003CN>\u002F10 | \u003CN>\u002F10 | dev \u002F ops\n...\n\nTo proceed: reply with one of:\n  • \"go\" — generate tasks for all ideas above\n  • \"remove 2,4\" — drop ideas by number, generate tasks for the rest\n  • \"remove 3 | add detail to 1: \u003Cyour notes>\" — remove some, annotate others\n  • \"add detail to 2: \u003Cyour notes>\" — annotate an idea before decomposing\n  • \"stop\" — cancel task generation\n\nWaiting for your confirmation.\n```\n\nWait for the user's response before continuing. Do not spawn any agents until a reply is received.\n\n**Process the user's reply:**\n\n- **\"go\"**: proceed with all elaborated ideas.\n- **\"remove N[,N...]\"**: remove those ideas from the elaboration list. Move their ideation cards to `Iced`:\n  ```bash\n  monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Removed by user before task generation\"\n  monotask card move \"$BOARD_ID\" \"$CARD_ID\" \"$COL_ICED\" --json\n  ```\n- **\"add detail to N: \u003Cnotes>\"**: append the notes as a card comment before decomposing:\n  ```bash\n  monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"User notes: \u003Cnotes>\"\n  ```\n- **\"stop\"**: skip Step 6c. Proceed directly to Step 7 (Brain Write). Print a summary of ideas in Elaborated\u002FIced\u002FRejected and return `status: partial`.\n- Combined instructions (\"remove 2,4 | add detail to 1: ...\") are processed together.\n\nAfter applying all user instructions, proceed to Step 6c with the remaining ideas.\n\n---\n\n#### 6c. Task Decomposition\n\n**Select decomposition agents from the shared agent index** before spawning. With `mcp__monomind__pick`, call it once per track (`kind: \"agents\"`, `top: 1`, the categories below as an array) and use `agents.ranked[0].name`; otherwise run this selection once per track:\n\n```bash\n# The shared agent index picks the best decomposer for each track.\n# Local only — never npx. Accept a binary only when its pick output is the\n# unified index (skill entries carry `source`); see mastermind-agent-select.\nmmpick() { for c in monomind .\u002Fnode_modules\u002F.bin\u002Fmonomind; do\n    command -v \"$c\" >\u002Fdev\u002Fnull 2>&1 || continue\n    out=$(\"$c\" pick \"$@\" --json 2>\u002Fdev\u002Fnull) || continue\n    printf '%s' \"$out\" | jq -e '[.skills.ranked[]? | has(\"source\")] | (length > 0 and all)' \\\n      >\u002Fdev\u002Fnull 2>&1 && { printf '%s\\n' \"$out\"; return 0; }\n  done; return 127; }\npick_one() { mmpick -t \"$1\" --categories \"$2\" --top 1 \\\n    | jq -r '.agents.ranked[0].name \u002F\u002F empty' 2>\u002Fdev\u002Fnull; }\n\ndev_decomp_agent=$(pick_one \"decompose into engineering tasks: $dev_ideas_list\" \"engineering architecture\")\ndev_decomp_agent=\"${dev_decomp_agent:-Software Architect}\"\n\nops_decomp_agent=$(pick_one \"decompose into go-to-market and operations tasks: $ops_ideas_list\" \"marketing specialized\")\nops_decomp_agent=\"${ops_decomp_agent:-planner}\"\n\necho \"Dev decomp: $dev_decomp_agent | Ops decomp: $ops_decomp_agent\"\n```\n\n**CRITICAL — Variable substitution required for Step 6c Task calls:**\nBefore constructing each Task prompt, replace `${brain_context}`, `${prompt}`, `${project_name}`, `${dev_ideas_elaborated}`, and `${ops_ideas_elaborated}` with actual literal text. Also substitute the `subagent_type` values: replace `dev_decomp_agent` and `ops_decomp_agent` with the string values echoed by the selection above (e.g. `\"Software Architect\"`). Build those lists from the VERDICTS_OUTPUT and ELABORATION_OUTPUT results:\n\n```bash\n# Collect IDs of cards iced during elaboration (blocking_issue was set) — exclude from decomposition.\n# merged_elaboration_json covers agent-elaborated ideas only (not skipElaboration:true ones).\nelaboration_blocked=$(echo \"$merged_elaboration_json\" | jq \\\n  '[.[] | select(.blocking_issue != null and .blocking_issue != \"\" and .blocking_issue != \"null\") | .card_id]')\n# Safeguard: if jq failed (e.g. null input), default to empty array so decomp proceeds safely\n[ -z \"$elaboration_blocked\" ] && elaboration_blocked='[]'\n\n# Build elaborated idea lists for decomposition agents.\n# Include: evaluated ideas (PM verdict) that were NOT iced during elaboration.\n# This covers both skipElaboration:true ideas and agent-elaborated ideas in the Elaborated column.\n# Use `any(. == $id)` not `contains([$id])` — contains does substring matching on strings (wrong for UUIDs).\ndev_ideas_elaborated=$(echo \"$verdicts_output_json\" | jq -r \\\n  --argjson blocked \"$elaboration_blocked\" \\\n  '[.[] | select(.verdict==\"evaluated\")\n         | select(.card_id as $id | ($blocked | any(. == $id)) | not)\n         | select(.category==\"feature\" or .category==\"technical-baseline\") |\n   \"card_id: \\(.card_id)\\ntitle: \\(.title)\\ncategory: \\(.category)\\nrationale: \\(.rationale)\\nimpact: \\(.impact) effort: \\(.effort)\"] | join(\"\\n\\n\")')\n\nops_ideas_elaborated=$(echo \"$verdicts_output_json\" | jq -r \\\n  --argjson blocked \"$elaboration_blocked\" \\\n  '[.[] | select(.verdict==\"evaluated\")\n         | select(.card_id as $id | ($blocked | any(. == $id)) | not)\n         | select(.category==\"business-operation\") |\n   \"card_id: \\(.card_id)\\ntitle: \\(.title)\\ncategory: \\(.category)\\nrationale: \\(.rationale)\\nimpact: \\(.impact) effort: \\(.effort)\"] | join(\"\\n\\n\")')\n```\n\n**Spawn decomposition agents by track** — run both in parallel if both tracks have elaborated ideas:\n\n```javascript\n\u002F\u002F Dev decomposition agent (only if dev_ideas_elaborated is non-empty)\nTask({\n  subagent_type: dev_decomp_agent,  \u002F\u002F value from the selection above\n  description: \"Task decomposition: dev ideas for \" + project_name,\n  run_in_background: true,\n  prompt: `SAFETY CHECK: You are a decomposition agent. You must NOT call monotask board create, space create, or column create. Your only job is producing a TASKS_OUTPUT block — the outer skill creates the cards. If you are unsure of any card ID, list it as \"UNKNOWN\" rather than inventing a value.\n\nDecompose the following dev ideas into concrete subtasks (2–6 per idea). Each subtask should be independently implementable.\n\nPROJECT: ${project_name}\nGOAL: ${prompt}\n\nBRAIN CONTEXT:\n${brain_context}\n\nDEV IDEAS TO DECOMPOSE:\n${dev_ideas_elaborated}\n\nFor each idea, produce 2–6 subtasks. If an idea's scope is unclear, flag it in FLAGGED instead of decomposing.\n\nTASKS_OUTPUT\n[\n  {\n    \"parent_card_id\": \"\u003Cideation board card ID from the list above>\",\n    \"title\": \"\u003Csubtask title ≤80 chars>\",\n    \"description\": \"\u003Cwhat to build\u002Fdo — specific and actionable>\",\n    \"category\": \"feature | technical-baseline\",\n    \"agent\": \"\u003Crecommended subagent_type>\",\n    \"effort\": \u003C1-10>,\n    \"has_prerequisites\": \u003Ctrue | false>\n  }\n]\nFLAGGED\n[\n  { \"card_id\": \"\u003Cideation card ID>\", \"question\": \"\u003Cwhat needs clarifying>\" }\n]\nEND_TASKS_OUTPUT`\n})\n\n\u002F\u002F Ops decomposition agent (only if ops_ideas_elaborated is non-empty)\nTask({\n  subagent_type: ops_decomp_agent,  \u002F\u002F value from the selection above\n  description: \"Task decomposition: ops ideas for \" + project_name,\n  run_in_background: true,\n  prompt: `SAFETY CHECK: You are a decomposition agent. You must NOT call monotask board create, space create, or column create. Your only job is producing a TASKS_OUTPUT block — the outer skill creates the cards. If you are unsure of any card ID, list it as \"UNKNOWN\" rather than inventing a value.\n\nDecompose the following business-operation ideas into concrete subtasks (2–6 per idea). Each subtask should be independently actionable.\n\nPROJECT: ${project_name}\nGOAL: ${prompt}\n\nBRAIN CONTEXT:\n${brain_context}\n\nOPS IDEAS TO DECOMPOSE:\n${ops_ideas_elaborated}\n\nFor each idea, produce 2–6 subtasks. If an idea's scope is unclear, flag it in FLAGGED instead of decomposing.\n\nTASKS_OUTPUT\n[\n  {\n    \"parent_card_id\": \"\u003Cideation board card ID from the list above>\",\n    \"title\": \"\u003Csubtask title ≤80 chars>\",\n    \"description\": \"\u003Cwhat to build\u002Fdo — specific and actionable>\",\n    \"category\": \"business-operation\",\n    \"agent\": \"\u003Crecommended subagent_type>\",\n    \"effort\": \u003C1-10>,\n    \"has_prerequisites\": \u003Ctrue | false>\n  }\n]\nFLAGGED\n[\n  { \"card_id\": \"\u003Cideation card ID>\", \"question\": \"\u003Cwhat needs clarifying>\" }\n]\nEND_TASKS_OUTPUT`\n})\n```\n\n**After both decomposition agents return**, the outer skill creates task cards on the appropriate board for each task's category. Each task card inherits the parent idea's `impact` and `effort` scores from the VERDICTS_OUTPUT parsed in Step 5 — look up by `parent_card_id`.\n\n---\n\n**Dev task board** (`feature` \u002F `technical-baseline` → `Implementation Tasks`):\n\nCanonical board name: `${project_name}-tasks-dev`. Find-or-create:\n\n```bash\n# space_id from Step 3 is gone (each Bash tool call is a new shell).\n# Re-derive from project_name so board creation works correctly on first run.\nif [ -z \"$space_id\" ]; then\n  space_id=$(monotask space list 2>\u002Fdev\u002Fnull | awk -F'|' '{gsub(\u002F^ +| +$\u002F,\"\",$1);gsub(\u002F^ +| +$\u002F,\"\",$2);if($2==n)print $1}' n=\"$project_name\" | head -1)\n  [ -z \"$space_id\" ] && { echo \"ERROR: space '$project_name' not found — run Step 3 first\"; exit 1; }\nfi\ndev_task_canonical=\"${project_name}-tasks-dev\"\n# board list format is \"uuid: name\" (colon-space separator, NOT pipe)\nTASK_BOARD_ID=$(monotask board list 2>\u002Fdev\u002Fnull | awk -F': ' '{gsub(\u002F^ +| +$\u002F,\"\",$1);gsub(\u002F^ +| +$\u002F,\"\",$2);if($2==n)print $1}' n=\"$dev_task_canonical\" | head -1)\nif [ -n \"$TASK_BOARD_ID\" ]; then\n  echo \"Reusing dev task board: $TASK_BOARD_ID ($dev_task_canonical)\"\n  task_columns=$(monotask column list \"$TASK_BOARD_ID\" --json)\n  TASK_COL_TODO=$(echo \"$task_columns\"    | jq -r '.[] | select(.title==\"Todo\")           | .id' | head -1)\n  TASK_COL_BACKLOG=$(echo \"$task_columns\" | jq -r '.[] | select(.title==\"Backlog\")        | .id' | head -1)\nelse\n  echo \"Creating dev task board: $dev_task_canonical\"\n  TASK_BOARD_ID=$(monotask board create --space \"$space_id\" \"$dev_task_canonical\" --json 2>\u002Fdev\u002Fnull | jq -r '.id \u002F\u002F empty')\n  [ -z \"$TASK_BOARD_ID\" ] && { echo \"ERROR: Failed to create dev task board\"; exit 1; }\n  monotask space boards add \"$space_id\" \"$TASK_BOARD_ID\" >\u002Fdev\u002Fnull 2>&1 || true\n  TASK_COL_BACKLOG=$(monotask column create \"$TASK_BOARD_ID\" \"Backlog\"       --json | jq -r '.id \u002F\u002F empty')\n  TASK_COL_TODO=$(monotask column create \"$TASK_BOARD_ID\"    \"Todo\"          --json | jq -r '.id \u002F\u002F empty')\n  monotask column create \"$TASK_BOARD_ID\" \"In Progress\"   --json >\u002Fdev\u002Fnull\n  monotask column create \"$TASK_BOARD_ID\" \"Human in Loop\" --json >\u002Fdev\u002Fnull\n  monotask column create \"$TASK_BOARD_ID\" \"Review\"        --json >\u002Fdev\u002Fnull\n  monotask column create \"$TASK_BOARD_ID\" \"Done\"          --json >\u002Fdev\u002Fnull\n  monotask column create \"$TASK_BOARD_ID\" \"Cancelled\"     --json >\u002Fdev\u002Fnull\nfi\n[ -z \"$TASK_BOARD_ID\" ]    && { echo \"ERROR: TASK_BOARD_ID empty — aborting\"; exit 1; }\n[ -z \"$TASK_COL_TODO\" ]    && { echo \"ERROR: Could not find Todo column on dev task board\"; exit 1; }\n[ -z \"$TASK_COL_BACKLOG\" ] && { echo \"ERROR: Could not find Backlog column on dev task board\"; exit 1; }\n```\n\n---\n\n**Ops task board** (`business-operation` → `Operations Tasks`):\n\nCanonical board name: `${project_name}-tasks-ops`. Find-or-create:\n\n```bash\n# Restore space_id if not available (same pattern as dev task board block above).\nif [ -z \"$space_id\" ]; then\n  space_id=$(monotask space list 2>\u002Fdev\u002Fnull | awk -F'|' '{gsub(\u002F^ +| +$\u002F,\"\",$1);gsub(\u002F^ +| +$\u002F,\"\",$2);if($2==n)print $1}' n=\"$project_name\" | head -1)\n  [ -z \"$space_id\" ] && { echo \"ERROR: space '$project_name' not found\"; exit 1; }\nfi\nops_task_canonical=\"${project_name}-tasks-ops\"\n# board list format is \"uuid: name\" (colon-space separator, NOT pipe)\nOPS_BOARD_ID=$(monotask board list 2>\u002Fdev\u002Fnull | awk -F': ' '{gsub(\u002F^ +| +$\u002F,\"\",$1);gsub(\u002F^ +| +$\u002F,\"\",$2);if($2==n)print $1}' n=\"$ops_task_canonical\" | head -1)\nif [ -n \"$OPS_BOARD_ID\" ]; then\n  echo \"Reusing ops task board: $OPS_BOARD_ID ($ops_task_canonical)\"\n  ops_columns=$(monotask column list \"$OPS_BOARD_ID\" --json)\n  OPS_COL_TODO=$(echo \"$ops_columns\"    | jq -r '.[] | select(.title==\"Todo\")    | .id' | head -1)\n  OPS_COL_BACKLOG=$(echo \"$ops_columns\" | jq -r '.[] | select(.title==\"Backlog\") | .id' | head -1)\nelse\n  echo \"Creating ops task board: $ops_task_canonical\"\n  OPS_BOARD_ID=$(monotask board create --space \"$space_id\" \"$ops_task_canonical\" --json 2>\u002Fdev\u002Fnull | jq -r '.id \u002F\u002F empty')\n  [ -z \"$OPS_BOARD_ID\" ] && { echo \"ERROR: Failed to create ops task board\"; exit 1; }\n  monotask space boards add \"$space_id\" \"$OPS_BOARD_ID\" >\u002Fdev\u002Fnull 2>&1 || true\n  OPS_COL_BACKLOG=$(monotask column create \"$OPS_BOARD_ID\" \"Backlog\"       --json | jq -r '.id \u002F\u002F empty')\n  OPS_COL_TODO=$(monotask column create \"$OPS_BOARD_ID\"    \"Todo\"          --json | jq -r '.id \u002F\u002F empty')\n  monotask column create \"$OPS_BOARD_ID\" \"In Progress\"   --json >\u002Fdev\u002Fnull\n  monotask column create \"$OPS_BOARD_ID\" \"Human in Loop\" --json >\u002Fdev\u002Fnull\n  monotask column create \"$OPS_BOARD_ID\" \"Review\"        --json >\u002Fdev\u002Fnull\n  monotask column create \"$OPS_BOARD_ID\" \"Done\"          --json >\u002Fdev\u002Fnull\n  monotask column create \"$OPS_BOARD_ID\" \"Cancelled\"     --json >\u002Fdev\u002Fnull\nfi\n[ -z \"$OPS_BOARD_ID\" ]    && { echo \"ERROR: OPS_BOARD_ID empty — aborting\"; exit 1; }\n[ -z \"$OPS_COL_TODO\" ]    && { echo \"ERROR: Could not find Todo column on ops task board\"; exit 1; }\n[ -z \"$OPS_COL_BACKLOG\" ] && { echo \"ERROR: Could not find Backlog column on ops task board\"; exit 1; }\n```\n\n---\n\n**Assign TASKS_OUTPUT from each decomposition agent, then merge and iterate:**\n\n```bash\n# Parse the TASKS_OUTPUT block from the dev decomp agent's response and assign:\ndev_tasks_json='\u003CTASKS_OUTPUT JSON array from dev decomp agent, or [] if no dev ideas>'\n# Parse the TASKS_OUTPUT block from the ops decomp agent's response and assign:\nops_tasks_json='\u003CTASKS_OUTPUT JSON array from ops decomp agent, or [] if no ops ideas>'\n# If TASKS_OUTPUT block is absent from an agent's response (error\u002Ftimeout), set that variable to '[]'\n\nmerged_tasks_json=$(jq -s 'add \u002F\u002F []' \u003C(echo \"$dev_tasks_json\") \u003C(echo \"$ops_tasks_json\"))\n\n# Use a temp directory to accumulate per-parent subtask summaries (bash 3.2 compatible —\n# avoids declare -A associative arrays which require bash 4.3+)\nSUBTASK_TMPDIR=$(mktemp -d)\n\nwhile IFS= read -r task; do\n  parent_card_id=$(echo \"$task\"    | jq -r '.parent_card_id')\n  title=$(echo \"$task\"             | jq -r '.title')\n  description=$(echo \"$task\"       | jq -r '.description')\n  category=$(echo \"$task\"          | jq -r '.category')\n  agent=$(echo \"$task\"             | jq -r '.agent')\n  task_effort=$(echo \"$task\"       | jq -r '.effort')\n  has_prerequisites=$(echo \"$task\" | jq -r '.has_prerequisites')\n\n  if [ \"$category\" = \"business-operation\" ]; then\n    TARGET_BOARD=\"$OPS_BOARD_ID\"\n    COL_TARGET=$([ \"$has_prerequisites\" = \"true\" ] && echo \"$OPS_COL_BACKLOG\" || echo \"$OPS_COL_TODO\")\n    BOARD_LABEL=\"Operations Tasks\"\n  else\n    TARGET_BOARD=\"$TASK_BOARD_ID\"\n    COL_TARGET=$([ \"$has_prerequisites\" = \"true\" ] && echo \"$TASK_COL_BACKLOG\" || echo \"$TASK_COL_TODO\")\n    BOARD_LABEL=\"Implementation Tasks\"\n  fi\n\n  # Inherit impact and effort from parent idea — look up from verdicts_output_json by parent_card_id\n  parent_impact=$(echo \"$verdicts_output_json\" | jq -r --arg id \"$parent_card_id\" '.[] | select(.card_id == $id) | .impact \u002F\u002F 5')\n  parent_effort=$(echo \"$verdicts_output_json\" | jq -r --arg id \"$parent_card_id\" '.[] | select(.card_id == $id) | .effort \u002F\u002F 5')\n  # Default to 5 if lookup returned empty (e.g. parent_card_id was \"UNKNOWN\")\n  [ -z \"$parent_impact\" ] && parent_impact=5\n  [ -z \"$parent_effort\" ] && parent_effort=5\n\n  # Create task card as a proper subtask of the parent idea card (cross-board link)\n  # Signature: subtask add \u003CPARENT_BOARD_ID> \u003CPARENT_CARD_ID> \u003CCHILD_BOARD_ID> \u003CCOL_ID> \u003CTITLE>\n  TASK_CARD_ID=$(monotask card subtask add \"$BOARD_ID\" \"$parent_card_id\" \"$TARGET_BOARD\" \"$COL_TARGET\" \"$title\" --json | jq -r '.id \u002F\u002F empty')\n  [ -z \"$TASK_CARD_ID\" ] && { echo \"WARN: subtask creation failed for '$title' (parent: $parent_card_id), skipping\"; continue; }\n  # Set the task description as the primary content field\n  monotask card set-description \"$TARGET_BOARD\" \"$TASK_CARD_ID\" \"$description\"\n  monotask card set-impact \"$TARGET_BOARD\" \"$TASK_CARD_ID\" \"$parent_impact\"\n  monotask card set-effort \"$TARGET_BOARD\" \"$TASK_CARD_ID\" \"$parent_effort\"\n  # Derive parent idea title for the comment\n  parent_idea_title=$(echo \"$verdicts_output_json\" | jq -r --arg id \"$parent_card_id\" '.[] | select(.card_id == $id) | .title \u002F\u002F \"unknown\"')\n  prompt_prefix=$(echo \"$prompt\" | cut -c1-100)\n  monotask card comment add \"$TARGET_BOARD\" \"$TASK_CARD_ID\" \\\n    \"SOURCE: mastermind:idea | $prompt_prefix\nAGENT: $agent\nTASK EFFORT: $task_effort\u002F10\nPARENT IDEA IMPACT: $parent_impact\u002F10  PARENT IDEA EFFORT: $parent_effort\u002F10\nCATEGORY: $category\nPARENT IDEA: $parent_idea_title (card: $parent_card_id on ideation board)\"\n  monotask card label add \"$TARGET_BOARD\" \"$TASK_CARD_ID\" \"mastermind:idea\"\n  monotask card label add \"$TARGET_BOARD\" \"$TASK_CARD_ID\" \"category:$category\"\n\n  # Append subtask summary line to per-parent file (replaces declare -A accumulation)\n  printf '  - %s (agent: %s, effort: %s\u002F10, board: %s)\\n' \\\n    \"$title\" \"$agent\" \"$task_effort\" \"$BOARD_LABEL\" >> \"$SUBTASK_TMPDIR\u002F$parent_card_id\"\n\ndone \u003C \u003C(echo \"$merged_tasks_json\" | jq -c '.[]')\n```\n\nAfter the loop, annotate each parent idea card and move it to `Tasked`:\n```bash\nfor summary_file in \"$SUBTASK_TMPDIR\"\u002F*; do\n  [ -f \"$summary_file\" ] || continue\n  parent_card_id=$(basename \"$summary_file\")\n  subtask_list=$(cat \"$summary_file\")\n  monotask card comment add \"$BOARD_ID\" \"$parent_card_id\" \\\n    \"Subtasks created:\n${subtask_list}\"\n  monotask card move \"$BOARD_ID\" \"$parent_card_id\" \"$COL_TASKED\" --json\ndone\nrm -rf \"$SUBTASK_TMPDIR\"\n```\n\nFor each entry in FLAGGED, parse the flagged JSON from both decomp agents' FLAGGED blocks and iterate:\n```bash\n# Collect flagged entries from both decomp agents\ndev_flagged_json='\u003CFLAGGED array from dev decomp agent, or [] if none>'\nops_flagged_json='\u003CFLAGGED array from ops decomp agent, or [] if none>'\n# If FLAGGED block is absent from an agent's response, set that variable to '[]'\nmerged_flagged_json=$(jq -s 'add \u002F\u002F []' \u003C(echo \"$dev_flagged_json\") \u003C(echo \"$ops_flagged_json\"))\n\nwhile IFS= read -r flagged; do\n  flagged_card_id=$(echo \"$flagged\" | jq -r '.card_id')\n  flagged_question=$(echo \"$flagged\" | jq -r '.question \u002F\u002F \"Needs clarification before decomposition\"')\n  monotask card comment add \"$BOARD_ID\" \"$flagged_card_id\" \"Needs clarification: $flagged_question\"\n  monotask card move \"$BOARD_ID\" \"$flagged_card_id\" \"$COL_ICED\" --json\ndone \u003C \u003C(echo \"$merged_flagged_json\" | jq -c '.[]')\n```\n\n---\n\n### Step 7 — Brain Write + Return\n\nFollow mastermind-protocol\u002FSKILL.md Brain Write Procedure (namespace: `idea`).\n\n**Write domain output to session file** so master Step 9 aggregation can include this domain. Skip silently if running standalone (no SESSION_ID in current.json):\n\n```bash\nREPO_ROOT=$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull || pwd)\n_get_mono_dir() {\n  local w=\"${1:-$(pwd)}\"\n  if [ -d \"$w\u002F.git\" ]; then echo \"$w\u002F.git\u002Fmonomind\"; return; fi\n  if [ -f \"$w\u002F.git\" ]; then\n    local m; m=$(grep '^gitdir:' \"$w\u002F.git\" | sed 's\u002Fgitdir: *\u002F\u002F')\n    [ -z \"$m\" ] && { echo \"$w\u002F.monomind\"; return; }\n    [[ \"$m\" != \u002F* ]] && m=\"$w\u002F$m\"\n    echo \"$(dirname \"$(dirname \"$m\")\")\u002Fmonomind\"; return\n  fi\n  echo \"$w\u002F.monomind\"\n}\nMONO_DIR=$(_get_mono_dir \"$REPO_ROOT\")\nSESSION_ID=$(jq -r '.sessionId \u002F\u002F empty' \"$MONO_DIR\u002Fsessions\u002Fcurrent.json\" 2>\u002Fdev\u002Fnull)\nif [ -n \"$SESSION_ID\" ]; then\n  mkdir -p \"$MONO_DIR\u002Fsessions\u002F${SESSION_ID}\"\n  # LLM: substitute \u003Cstatus>: complete (all steps ran), partial (some skipped), blocked (critical error)\n  # LLM: substitute next_actions with actual suggestions derived from this run's top ideas\n  jq -n \\\n    --arg domain \"idea\" \\\n    --arg status \"\u003Cstatus>\" \\\n    --argjson artifacts '[]' \\\n    --argjson next_actions '[\"\u003Cnext_action_1>\",\"\u003Cnext_action_2>\"]' \\\n    '{domain:$domain,status:$status,artifacts:$artifacts,next_actions:$next_actions}' \\\n    > \"$MONO_DIR\u002Fsessions\u002F${SESSION_ID}\u002Fidea.json\"\nfi\n```\n\nReturn unified output schema to caller:\n\n```yaml\ndomain: idea\nstatus: complete | partial | blocked\nartifacts: []\ndecisions:\n  - what: \u003Ctop idea or direction>\n    why: \u003Creasoning from validation + elaboration>\n    confidence: \u003C0.0-1.0>\n    outcome: pending\nlessons:\n  - what_worked: \u003Cwhich angles produced the best insights>\n  - what_didnt: \u003Cwhich angles were less useful>\nnext_actions:\n  - \u003Ce.g. \"run mastermind:build to prototype chosen direction\">\n  - \u003Ce.g. \"run mastermind:research to validate top idea\">\nboard_url: \"monotask:\u002F\u002F\u003Cproject_name>\u002F${project_name}-idea\"\ntask_board_url: \"monotask:\u002F\u002F\u003Cproject_name>\u002F${project_name}-tasks-dev\"\nops_task_board_url: \"monotask:\u002F\u002F\u003Cproject_name>\u002F${project_name}-tasks-ops\"\nrun_id: \u003CISO8601-timestamp>\nsummary:\n  ideas_generated: N\n  ideas_dev: N\n  ideas_ops: N\n  ideas_evaluated: N\n  ideas_tasked: N\n  total_dev_subtasks: N\n  total_ops_subtasks: N\n  ideas_iced: N\n  ideas_rejected: N\n```\n\n---\n\n## Domain Swarm Defaults\n\n| Task Type | Agent | Swarm |\n|---|---|---|\n| Full product ideation | coordinator + mesh specialists | mesh 6 gossip balanced |\n| Feature brainstorm | researcher + trend-analyst | mesh 4 gossip balanced |\n| Pivot exploration | coordinator + researcher + growth | mesh 4 gossip balanced |\n| Competitive scan | researcher | hierarchical 3 raft specialized |\n| Single idea request | researcher or content-creator | single agent |\n","# Mastermind Idea Domain\n\nThis skill is invoked directly via `\u002Fmastermind:idea`, or by `\u002Fmastermind:master` (pack extras — `monomind packs add extras`).\n\n**Extract `--monotask` flag:** If present in `$ARGUMENTS`, set `USE_MONOTASK=true` and remove it from `$ARGUMENTS`. Default: `USE_MONOTASK=false`.\n\n**File mode (default, `USE_MONOTASK=false`):**\n\nInvoke `Skill(\"mastermind:ideate\", $ARGUMENTS)` immediately — it provides the same research, evaluation, elaboration, and task-decomposition pipeline with file-first storage (`docs\u002Fideas\u002F` and `docs\u002Ftasks\u002F`). The rest of this skill is skipped in file mode.\n\n**Board mode (`USE_MONOTASK=true`):**\n\nContinue with the full monotask board pipeline below (Steps 3-6).\n\n---\n\n## Inputs\n\n- `brain_context`: BRAIN CONTEXT block (injected by master, or loaded standalone via mastermind-protocol\u002FSKILL.md brain load)\n- `prompt`: the ideation goal for this run\n- `project_name`: monotask space name\n- `mode`: auto | confirm\n\nNote: the `board_id` that mastermind:master may pass is its own orchestration board. The idea domain always creates a dedicated **ideation board** with its own pipeline columns — do not reuse master's board_id.\n\n---\n\n## Complexity Assessment\n\nAssess the prompt to determine execution mode:\n\n**Simple (direct execution):** Single-answer ideation, one agent:\n- \"Give me 5 name ideas for this feature\"\n- \"Suggest one pivot angle for this product\"\n→ Use a single researcher or content-creator agent. Skip Steps 3–6. Go straight to Step 7 (Brain Write).\n\n**Complex (full pipeline):** Any of these:\n- Product strategy or pivot exploration (multiple angles needed)\n- Feature ideation requiring market and user context\n- Competitive landscape brainstorm\n- Full product vision document\n→ Run Steps 3–6 (Board Setup → Idea Manager → Validation → Elaboration + Tasks).\n\n---\n\n## Standalone Execution (when called without master)\n\nIf this skill is invoked directly (not by master):\n\n1. Load brain context following mastermind-protocol\u002FSKILL.md Brain Load Procedure (namespace: `idea`)\n2. Run intake from mastermind-intake\u002FSKILL.md if prompt is vague\n3. For complex prompts: run Steps 3–6 below\n4. At end: follow mastermind-protocol\u002FSKILL.md Brain Write Procedure (namespace: `idea`)\n\n---\n\n## Simple Execution\n\nFor simple prompts (single agent, single output):\n\n1. Spawn one Task agent with the ideation request as a self-contained briefing\n2. Collect output\n3. If called standalone (not from master): follow mastermind-protocol\u002FSKILL.md Brain Write Procedure (namespace: `idea`)\n4. Return unified output schema with `status: complete`\n\n---\n\n## Complex Execution\n\n### Step 3 — Monotask Board Setup\n\nSet up the space and ideation board. The ideation board has a dedicated pipeline with six columns (not master's board).\n\n```bash\n# Compatible with macOS bash 3.2\nproject_name=\"${project_name:-$(basename \"$PWD\")}\"\ndate=$(date -u +%Y-%m-%dT%H:%M:%SZ)\nidea_canonical=\"${project_name}-idea\"\n\n# Find or create space (by exact name)\nspace_id=$(monotask space list 2>\u002Fdev\u002Fnull | awk -F'|' '{gsub(\u002F^ +| +$\u002F,\"\",$1);gsub(\u002F^ +| +$\u002F,\"\",$2);if($2==n)print $1}' n=\"$project_name\" | head -1)\n[ -z \"$space_id\" ] && space_id=$(monotask space create \"$project_name\" 2>\u002Fdev\u002Fnull | grep -oE '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')\n[ -z \"$space_id\" ] && { echo \"ERROR: Could not find or create space '$project_name'\"; exit 1; }\n\n# Find existing idea board by canonical name — reuse across runs (same pattern as master Step 6)\n# board list format is \"uuid: name\" (colon-space separator, NOT pipe)\nBOARD_ID=$(monotask board list 2>\u002Fdev\u002Fnull | awk -F': ' '{gsub(\u002F^ +| +$\u002F,\"\",$1);gsub(\u002F^ +| +$\u002F,\"\",$2);if($2==n)print $1}' n=\"$idea_canonical\" | head -1)\n\nif [ -n \"$BOARD_ID\" ]; then\n  echo \"Reusing idea board: $BOARD_ID ($idea_canonical)\"\n  columns=$(monotask column list \"$BOARD_ID\" --json)\n  COL_NEW=$(echo \"$columns\"       | jq -r '.[] | select(.title == \"New\")        | .id' | head -1)\n  COL_EVALUATED=$(echo \"$columns\" | jq -r '.[] | select(.title == \"Evaluated\")  | .id' | head -1)\n  COL_ELABORATED=$(echo \"$columns\"| jq -r '.[] | select(.title == \"Elaborated\") | .id' | head -1)\n  COL_TASKED=$(echo \"$columns\"    | jq -r '.[] | select(.title == \"Tasked\")     | .id' | head -1)\n  COL_ICED=$(echo \"$columns\"      | jq -r '.[] | select(.title == \"Iced\")       | .id' | head -1)\n  COL_REJECTED=$(echo \"$columns\"  | jq -r '.[] | select(.title == \"Rejected\")   | .id' | head -1)\n  [ -z \"$COL_NEW\" ]        && { echo \"ERROR: 'New' column missing on board $BOARD_ID — was board created with wrong schema?\"; exit 1; }\n  [ -z \"$COL_EVALUATED\" ]  && { echo \"ERROR: 'Evaluated' column missing on board $BOARD_ID\"; exit 1; }\n  [ -z \"$COL_ELABORATED\" ] && { echo \"ERROR: 'Elaborated' column missing on board $BOARD_ID\"; exit 1; }\n  [ -z \"$COL_TASKED\" ]     && { echo \"ERROR: 'Tasked' column missing on board $BOARD_ID\"; exit 1; }\n  [ -z \"$COL_ICED\" ]       && { echo \"ERROR: 'Iced' column missing on board $BOARD_ID\"; exit 1; }\n  [ -z \"$COL_REJECTED\" ]   && { echo \"ERROR: 'Rejected' column missing on board $BOARD_ID\"; exit 1; }\nelse\n  echo \"Creating idea board: $idea_canonical\"\n  BOARD_ID=$(monotask board create --space \"$space_id\" \"$idea_canonical\" --json 2>\u002Fdev\u002Fnull | jq -r '.id \u002F\u002F empty')\n  [ -z \"$BOARD_ID\" ] && { echo \"ERROR: Failed to create idea board '$idea_canonical'\"; exit 1; }\n  monotask space boards add \"$space_id\" \"$BOARD_ID\" >\u002Fdev\u002Fnull 2>&1 || true\n  COL_NEW=$(monotask column create \"$BOARD_ID\"       \"New\"        --json | jq -r '.id \u002F\u002F empty')\n  COL_EVALUATED=$(monotask column create \"$BOARD_ID\" \"Evaluated\"  --json | jq -r '.id \u002F\u002F empty')\n  COL_ELABORATED=$(monotask column create \"$BOARD_ID\" \"Elaborated\" --json | jq -r '.id \u002F\u002F empty')\n  COL_TASKED=$(monotask column create \"$BOARD_ID\"    \"Tasked\"     --json | jq -r '.id \u002F\u002F empty')\n  COL_ICED=$(monotask column create \"$BOARD_ID\"      \"Iced\"       --json | jq -r '.id \u002F\u002F empty')\n  COL_REJECTED=$(monotask column create \"$BOARD_ID\"  \"Rejected\"   --json | jq -r '.id \u002F\u002F empty')\nfi\n```\n\n**After either branch above, validate and echo all values.** This is the canonical source for Step 4 Task construction.\n\n```bash\n# Guard all column IDs — catches silent jq failures in the create branch\n[ -z \"$COL_NEW\" ]        && { echo \"ERROR: COL_NEW empty after board setup\"; exit 1; }\n[ -z \"$COL_EVALUATED\" ]  && { echo \"ERROR: COL_EVALUATED empty after board setup\"; exit 1; }\n[ -z \"$COL_ELABORATED\" ] && { echo \"ERROR: COL_ELABORATED empty after board setup\"; exit 1; }\n[ -z \"$COL_TASKED\" ]     && { echo \"ERROR: COL_TASKED empty after board setup\"; exit 1; }\n[ -z \"$COL_ICED\" ]       && { echo \"ERROR: COL_ICED empty after board setup\"; exit 1; }\n[ -z \"$COL_REJECTED\" ]   && { echo \"ERROR: COL_REJECTED empty after board setup\"; exit 1; }\n\n# Validate BOARD_ID looks like a UUID before proceeding\n[[ ! \"$BOARD_ID\" =~ ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ ]] && \\\n  { echo \"ERROR: BOARD_ID '$BOARD_ID' is not a valid UUID — aborting to prevent board name corruption\"; exit 1; }\n\n# Echo literal values — READ THESE and embed them as string literals in the Step 4 Task prompt.\n# These are shell variables; they DO NOT survive into the Task agent's context.\necho \"=== IDEA BOARD LITERAL VALUES ===\"\necho \"BOARD_ID=$BOARD_ID\"\necho \"COL_NEW=$COL_NEW\"\necho \"COL_EVALUATED=$COL_EVALUATED\"\necho \"COL_ELABORATED=$COL_ELABORATED\"\necho \"COL_TASKED=$COL_TASKED\"\necho \"COL_ICED=$COL_ICED\"\necho \"COL_REJECTED=$COL_REJECTED\"\necho \"===================================\"\n```\n\n---\n\n### Step 4 — Idea Manager Agent (Divergent Thinking)\n\n**Before spawning the Idea Manager**, pick specialists from the shared agent index instead of hardcoded agent types (pick order in `mastermind-agent-select\u002FSKILL.md`).\n\n**If `mcp__monomind__pick` is available**, call it twice — `{ task: prompt, kind: \"agents\", categories: [\"marketing\",\"specialized\",\"design\",\"testing\"], top: 6 }` and `{ task: prompt, kind: \"agents\", categories: [\"engineering\",\"architecture\",\"core\",\"specialized\"], top: 2 }` — merge the `agents.ranked[].name` values (unique, max 8) into `specialist_list`, and skip the Bash block below unless fewer than 2 came back.\n\n```bash\nPROMPT=\"$prompt\"\n\n# The shared agent index: Jev when configured, keyword ranking otherwise. It\n# only returns agents that exist.\n# Local only — never npx. Accept a binary only when its pick output is the\n# unified index (skill entries carry `source`); see mastermind-agent-select.\nmmpick() { for c in monomind .\u002Fnode_modules\u002F.bin\u002Fmonomind; do\n    command -v \"$c\" >\u002Fdev\u002Fnull 2>&1 || continue\n    out=$(\"$c\" pick \"$@\" --json 2>\u002Fdev\u002Fnull) || continue\n    printf '%s' \"$out\" | jq -e '[.skills.ranked[]? | has(\"source\")] | (length > 0 and all)' \\\n      >\u002Fdev\u002Fnull 2>&1 && { printf '%s\\n' \"$out\"; return 0; }\n  done; return 127; }\npick_names() { mmpick -t \"$1\" --categories \"$2\" --top \"$3\" \\\n    | jq -c '[.agents.ranked[].name]' 2>\u002Fdev\u002Fnull; }\n\n# User\u002Fmarket\u002Fops angle specialists, then technical angle specialists\nuser_market_agents=$(pick_names \"$PROMPT\" \"marketing specialized design testing\" 6)\ntech_agents=$(pick_names \"$PROMPT\" \"engineering architecture core specialized\" 2)\n\n# Merge: top 6 market\u002Fops + top 2 tech (cap at 8 total)\nspecialist_list=$(jq -s 'add \u002F\u002F [] | unique | .[0:8]' \\\n  \u003C(printf '%s' \"${user_market_agents:-[]}\") \\\n  \u003C(printf '%s' \"${tech_agents:-[]}\") 2>\u002Fdev\u002Fnull)\n\n# Fallback if picking is unavailable or returned too few — need at least 2 specialists\nspecialist_count=$(echo \"$specialist_list\" | jq 'length \u002F\u002F 0' 2>\u002Fdev\u002Fnull || echo 0)\n[ \"${specialist_count:-0}\" -lt 2 ] && specialist_list='[\"researcher\",\"planner\",\"Software Architect\",\"Technical Writer\",\"Frontend Developer\",\"reviewer\"]'\n\necho \"Selected specialists: $specialist_list\"\n```\n\n**CRITICAL — Variable substitution required before constructing the Task call:**\nThe Task agent runs in an isolated context and cannot inherit shell variables. Before writing the Task prompt below, read the literal UUID values from the `=== IDEA BOARD LITERAL VALUES ===` echo block above and embed them as **hard-coded strings** in the prompt. Do NOT write `${BOARD_ID}`, `${COL_NEW}`, etc. in the prompt — the agent will receive those as literal dollar-sign strings and its `monotask card create` calls will fail, causing it to improvise with `monotask board create` and corrupt board names. Replace every `${BOARD_ID}`, `${COL_NEW}`, `${project_name}`, `${brain_context}`, `${prompt}`, `${date}`, and `${specialist_list}` with the actual value before calling Task. Leave `$result`, `$CARD_ID`, and other loop-internal variables as-is — they are bash variables the agent itself will set at runtime, not substitution targets.\n\nSpawn the Idea Manager with `run_in_background: false` so its output is available for Step 5.\n\n```javascript\nTask({\n  subagent_type: \"coordinator\",\n  description: \"Idea Manager for project \" + project_name,\n  run_in_background: false,\n  prompt: `SAFETY CHECK: Before doing anything else, verify that the BOARD_ID you received matches UUID format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12 hex chars). If it does not, STOP immediately and report \"ERROR: BOARD_ID was not substituted — received: \u003Cvalue>\". Do NOT call monotask board create, monotask space create, or any board\u002Fspace\u002Fcolumn creation commands. Your only job is creating CARDS on the board you were given.\n\nYou are the Idea Manager for project \"${project_name}\".\n\nCONTEXT: ${date} | Project: ${project_name} | Spawned by: mastermind:idea\n\nBRAIN CONTEXT:\n${brain_context}\n\nYOUR BOARD: ${BOARD_ID}\nCOL_NEW: ${COL_NEW}\nYOUR GOAL: ${prompt}\n\nSTEP 1 — PLAN\nDecompose the ideation goal into distinct exploration angles. For each angle, identify:\n- Perspective (market, user, technical, competitive, business operations)\n- Which specialist to assign\n- Expected output format\n\nSTEP 2 — SPAWN SPECIALISTS\nSpawn one Task agent per angle (all in parallel, mesh topology). Each agent receives the\nangle description, brain context, and project context, and must return a JSON array of ideas.\n\nThe following specialist agents have been pre-selected from the shared agent index as best-fit for this prompt.\nSpawn ALL of them in one message, assigning each a distinct angle:\n\nSPECIALISTS: ${specialist_list}\n\nAssign each specialist the angle that best matches their domain expertise.\nFor any specialist you don't recognize, assign them the closest research or analysis angle.\nAlways ensure at minimum these angles are covered even if the same agent covers multiple:\n- Market \u002F competitive landscape\n- User \u002F UX perspective\n- Growth \u002F acquisition\n- Business operations \u002F process\n- Technical feasibility (at least one engineering-category agent)\n\nEach specialist must classify every idea with one of these categories:\n  feature             — new product capability for end users\n  technical-baseline  — infrastructure, tooling, or technical debt (not user-visible)\n  business-operation  — internal process, workflow, marketing, sales, ops, or org change\n\nEach specialist returns ideas in this format:\n[\n  {\n    \"title\": \"...\",\n    \"description\": \"...\",\n    \"category\": \"feature | technical-baseline | business-operation\"\n  }\n]\n\nSTEP 3 — DEDUPLICATE\nCollect all ideas from all specialists. Drop any idea whose title is more than 80% similar\nto an already-kept idea (fuzzy match). Keep the richer description when deduplicating.\n\nSTEP 4 — CREATE CARDS AND RETURN\nFor each unique idea, create one card in the New column (COL_NEW = ${COL_NEW}):\n\n  result=$(monotask card create \"${BOARD_ID}\" \"${COL_NEW}\" \"\u003Cidea title ≤80 chars>\" --json)\n  CARD_ID=$(echo \"$result\" | jq -r '.id \u002F\u002F empty')\n  [ -z \"$CARD_ID\" ] && { echo \"WARN: card creation failed for '\u003Cidea title>', skipping\"; continue; }\n  monotask card set-description \"${BOARD_ID}\" \"$CARD_ID\" \"\u003C2-3 sentence description>\"\n  monotask card comment add \"${BOARD_ID}\" \"$CARD_ID\" \"CATEGORY: \u003Cfeature | technical-baseline | business-operation>\nSOURCE: \u003Cwhich specialist angle produced this>\"\n  monotask card label add \"${BOARD_ID}\" \"$CARD_ID\" \"mastermind-idea\"\n  monotask card label add \"${BOARD_ID}\" \"$CARD_ID\" \"category:\u003Ccategory>\"\n\nThen output a JSON block labelled IDEAS_OUTPUT with one entry per unique idea:\n\nIDEAS_OUTPUT\n[\n  {\n    \"card_id\": \"\u003Cmonotask card ID just created>\",\n    \"title\": \"\u003Cidea title>\",\n    \"description\": \"\u003C2-3 sentence description>\",\n    \"category\": \"feature | technical-baseline | business-operation\",\n    \"source_angle\": \"\u003Cwhich specialist produced this>\"\n  }\n]\nEND_IDEAS_OUTPUT`\n})\n```\n\nParse the `IDEAS_OUTPUT` JSON block from the agent's response and assign it:\n```bash\nideas_output_json='\u003Cpaste the JSON array from IDEAS_OUTPUT here>'\n```\nIf the `IDEAS_OUTPUT` block is absent from the agent's response (agent error, timeout, or unrecoverable failure), set `ideas_output_json='[]'` and treat as zero ideas.\nIf zero ideas were returned, report \"Idea Manager produced no ideas.\" — skip Steps 5–6 and proceed to Step 7 (Brain Write).\n\n---\n\n### Step 5 — Validation (Product Manager Evaluation)\n\n**Build `ideas_list` before constructing the Step 5 Task prompt:**\n```bash\n# Format the full IDEAS_OUTPUT array (from Step 4) as the literal string to embed in the Task prompt.\n# Each line: card_id | title | description | category | source_angle\nideas_list=$(echo \"$ideas_output_json\" | jq -r \\\n  '.[] | \"- card_id: \\(.card_id)\\n  title: \\(.title)\\n  description: \\(.description)\\n  category: \\(.category)\\n  source: \\(.source_angle)\\n\"')\n```\n\n**CRITICAL — Variable substitution required for Step 5 Task call:**\nBefore constructing the Task prompt below, read the literal UUID values from the `=== IDEA BOARD LITERAL VALUES ===` echo block (Step 3) and embed them as hard-coded strings. Also embed the full `brain_context`, `prompt`, and `ideas_list` (built above) as literal text. Replace every `${BOARD_ID}`, `${COL_EVALUATED}`, `${COL_ICED}`, `${COL_REJECTED}`, `${brain_context}`, `${prompt}`, `${project_name}`, `${date}`, and `${ideas_list}` with its actual value before calling Task — the agent receives unsubstituted `${...}` strings verbatim and silently skips every board update.\n\nSpawn a single `general-purpose` agent via the Task tool. Do NOT substitute a specialist whose definition restricts `tools:` without Bash — it cannot execute `monotask` CLI commands. The evaluator agent produces verdicts and executes all board updates directly via Bash.\n\n```javascript\nTask({\n  subagent_type: \"general-purpose\",\n  description: \"PM validation for project \" + project_name,\n  run_in_background: false,\n  prompt: `SAFETY CHECK: Verify that the BOARD_ID you received matches UUID format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12 hex chars). If it does not, STOP and report \"ERROR: BOARD_ID not substituted — received: \u003Cvalue>\". Do NOT call monotask board create, space create, or column create. Your only job is evaluating cards and running impact\u002Feffort updates on existing cards.\n\nYou are the Product Manager evaluator for project \"${project_name}\".\n\nCONTEXT: ${date} | Project: ${project_name}\nORIGINAL GOAL: ${prompt}\n\nBRAIN CONTEXT:\n${brain_context}\n\nYOUR BOARD: ${BOARD_ID}\nCOL_EVALUATED: ${COL_EVALUATED}\nCOL_ICED:      ${COL_ICED}\nCOL_REJECTED:  ${COL_REJECTED}\n\nIDEAS TO EVALUATE (formatted from IDEAS_OUTPUT parsed in Step 4 — paste the full JSON array here as literal text):\n${ideas_list}\n\nFor EVERY idea above, determine:\n- verdict: evaluated | iced | rejected\n- impact: 0–10 (business value \u002F strategic importance)\n- effort: 0–10 (implementation cost \u002F complexity)\n- skipElaboration: true (simple, no deep research needed) | false (edge cases should be explored) — only for evaluated\n- rationale: 1-2 sentence value statement (evaluated), blocking question (iced), or rejection reason (rejected)\n\nMANDATORY BOARD UPDATES — after determining all verdicts, build your verdicts as a JSON array and iterate over it:\n\n  # Paste your full VERDICTS_OUTPUT array here as verdicts_json (before outputting the block)\n  verdicts_json='[ ... your verdict objects ... ]'\n  while IFS= read -r row; do\n    CARD_ID=$(echo \"$row\" | jq -r '.card_id')\n    verdict=$(echo \"$row\"   | jq -r '.verdict')\n    impact=$(echo \"$row\"    | jq -r '.impact')\n    effort=$(echo \"$row\"    | jq -r '.effort')\n    rationale=$(echo \"$row\" | jq -r '.rationale')\n    if [ \"$verdict\" = \"evaluated\" ]; then\n      monotask card move \"${BOARD_ID}\" \"$CARD_ID\" \"${COL_EVALUATED}\" --json\n      monotask card set-impact \"${BOARD_ID}\" \"$CARD_ID\" \"$impact\"\n      monotask card set-effort \"${BOARD_ID}\" \"$CARD_ID\" \"$effort\"\n      monotask card comment add \"${BOARD_ID}\" \"$CARD_ID\" \"Value: $rationale\"\n    elif [ \"$verdict\" = \"iced\" ]; then\n      monotask card move \"${BOARD_ID}\" \"$CARD_ID\" \"${COL_ICED}\" --json\n      monotask card set-impact \"${BOARD_ID}\" \"$CARD_ID\" \"$impact\"\n      monotask card set-effort \"${BOARD_ID}\" \"$CARD_ID\" \"$effort\"\n      monotask card comment add \"${BOARD_ID}\" \"$CARD_ID\" \"Blocked: $rationale\"\n    elif [ \"$verdict\" = \"rejected\" ]; then\n      monotask card move \"${BOARD_ID}\" \"$CARD_ID\" \"${COL_REJECTED}\" --json\n      monotask card comment add \"${BOARD_ID}\" \"$CARD_ID\" \"Rejected: $rationale\"\n    fi\n  done \u003C \u003C(echo \"$verdicts_json\" | jq -c '.[]')\n\nIMPORTANT: set-impact and set-effort MUST be called for every evaluated and iced idea. Do not skip them.\n\nAfter completing all board updates, output this structured block:\n\nVERDICTS_OUTPUT\n[\n  {\n    \"card_id\": \"\u003Ccard ID>\",\n    \"title\": \"\u003Cidea title>\",\n    \"category\": \"feature | technical-baseline | business-operation\",\n    \"verdict\": \"evaluated | iced | rejected\",\n    \"skipElaboration\": true | false,\n    \"rationale\": \"\u003Cvalue statement | blocking question | rejection reason>\",\n    \"impact\": \u003C0-10>,\n    \"effort\": \u003C0-10>\n  }\n]\nEND_VERDICTS_OUTPUT`\n})\n```\n\nAfter the PM agent completes, parse the `VERDICTS_OUTPUT` block from the agent's response and assign it:\n```bash\nverdicts_output_json='\u003Cpaste the JSON array from VERDICTS_OUTPUT here>'\n```\nIf the `VERDICTS_OUTPUT` block is absent (agent error or malformed output), set `verdicts_output_json='[]'` — all ideas will be treated as iced and Step 6 will be skipped.\nThis variable is used throughout Steps 6a and 6c to build idea lists, registry keywords, and inherit impact\u002Feffort scores — it must be set before proceeding. If **all** ideas are iced or rejected, output a summary table — skip Step 6 and proceed to Step 7 (Brain Write).\n\n---\n\n### Step 6 — Elaboration + Task Decomposition\n\n#### 6a. Elaboration (conditional)\n\nFor any evaluated idea with `skipElaboration: true`, move it directly to `Elaborated`, set a description, and write a rationale comment so future readers understand why no deep elaboration was needed:\n```bash\nwhile IFS= read -r skip_idea; do\n  CARD_ID=$(echo \"$skip_idea\"  | jq -r '.card_id')\n  skip_title=$(echo \"$skip_idea\"   | jq -r '.title')\n  skip_rationale=$(echo \"$skip_idea\" | jq -r '.rationale \u002F\u002F \"No rationale provided\"')\n  skip_impact=$(echo \"$skip_idea\"  | jq -r '.impact \u002F\u002F 5')\n  skip_effort=$(echo \"$skip_idea\"  | jq -r '.effort \u002F\u002F 5')\n  monotask card set-description \"$BOARD_ID\" \"$CARD_ID\" \"Elaboration skipped — PM assessed this as straightforward.\n\nRationale: $skip_rationale\n\nImpact: $skip_impact\u002F10 | Effort: $skip_effort\u002F10\"\n  monotask card move \"$BOARD_ID\" \"$CARD_ID\" \"$COL_ELABORATED\" --json\n  monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Elaboration skipped: PM assessed this idea as straightforward with no significant unknowns. Rationale: $skip_rationale\"\ndone \u003C \u003C(echo \"$verdicts_output_json\" | jq -c '[.[] | select(.verdict == \"evaluated\") | select(.skipElaboration == true)] | .[]')\n```\n\nFor ideas with `skipElaboration: false`, **split by category** before spawning agents:\n\n**Build `dev_ideas_list` and `ops_ideas_list` before constructing the Step 6a Task prompts:**\n```bash\n# Filter VERDICTS_OUTPUT (parsed in Step 5) by category and format as literal text.\n# IMPORTANT: exclude skipElaboration:true ideas — they were already moved to Elaborated above\n# and must not be sent to elaboration agents again.\ndev_ideas_list=$(echo \"$verdicts_output_json\" | jq -r \\\n  '.[] | select(.verdict == \"evaluated\") | select(.skipElaboration != true)\n       | select(.category == \"feature\" or .category == \"technical-baseline\") |\n   \"- card_id: \\(.card_id)\\n  title: \\(.title)\\n  category: \\(.category)\\n  rationale: \\(.rationale)\\n\"')\n\nops_ideas_list=$(echo \"$verdicts_output_json\" | jq -r \\\n  '.[] | select(.verdict == \"evaluated\") | select(.skipElaboration != true)\n       | select(.category == \"business-operation\") |\n   \"- card_id: \\(.card_id)\\n  title: \\(.title)\\n  category: \\(.category)\\n  rationale: \\(.rationale)\\n\"')\n```\n\n**CRITICAL — Variable substitution required for Step 6a Task calls:**\nElaboration agents run in isolated Task contexts. Before constructing each Task prompt, replace every `${brain_context}`, `${dev_ideas_list}`, and `${ops_ideas_list}` with the actual literal text — `brain_context` from the brain load, `dev_ideas_list` and `ops_ideas_list` built above. Do NOT leave any `${...}` placeholders in the prompt — the agent receives them as literal dollar-sign strings and produces empty ELABORATION_OUTPUT blocks.\n\n**Dev ideas** (`feature` or `technical-baseline`) — **skip if `dev_ideas_list` is empty** (no evaluated feature\u002Ftechnical-baseline ideas without skipElaboration; set `dev_researcher_json='[]'` and `dev_codebase_json='[]'` instead and do not spawn these agents):\nSpawn two agents in parallel via Task tool:\n\n```javascript\n\u002F\u002F Agent 1 — code explorer\nTask({\n  subagent_type: \"Explore\",\n  description: \"Elaboration: codebase constraints for dev ideas\",\n  run_in_background: true,\n  prompt: `SAFETY CHECK: You are an elaboration agent. Do NOT call monotask board create, space create, or column create. Your only job is producing an ELABORATION_OUTPUT block — the outer skill writes to the board.\n\nAnalyze the following dev ideas against the current codebase. For each idea, trace relevant execution paths, map dependencies, and surface constraints or implementation risks.\n\nBRAIN CONTEXT:\n${brain_context}\n\nIDEAS:\n${dev_ideas_list}\n\nOutput this block:\nELABORATION_OUTPUT\n[\n  {\n    \"card_id\": \"\u003Cidea card ID>\",\n    \"findings\": \"\u003Cdetailed codebase constraints, dependency risks, and implementation notes>\",\n    \"blocking_issue\": \"\u003Cblocking issue if any, or null>\"\n  }\n]\nEND_ELABORATION_OUTPUT`\n})\n\n\u002F\u002F Agent 2 — researcher\nTask({\n  subagent_type: \"researcher\",\n  description: \"Elaboration: prior art and edge cases for dev ideas\",\n  run_in_background: true,\n  prompt: `SAFETY CHECK: You are an elaboration agent. Do NOT call monotask board create, space create, or column create. Your only job is producing an ELABORATION_OUTPUT block — the outer skill writes to the board.\n\nResearch the following dev ideas. For each idea, find prior art, known edge cases, implementation pitfalls, and relevant open-source approaches.\n\nBRAIN CONTEXT:\n${brain_context}\n\nIDEAS:\n${dev_ideas_list}\n\nOutput this block:\nELABORATION_OUTPUT\n[\n  {\n    \"card_id\": \"\u003Cidea card ID>\",\n    \"findings\": \"\u003Cprior art, edge cases, pitfalls, and relevant examples>\",\n    \"blocking_issue\": \"\u003Cblocking issue if any, or null>\"\n  }\n]\nEND_ELABORATION_OUTPUT`\n})\n```\n\n**Business-operation ideas** (`business-operation`) — **skip if `ops_ideas_list` is empty** (no evaluated business-operation ideas without skipElaboration; set `ops_researcher_json='[]'` and `ops_pm_json='[]'` instead and do not spawn these agents):\nSpawn two agents in parallel via Task tool:\n\n```javascript\n\u002F\u002F Agent 1 — researcher\nTask({\n  subagent_type: \"researcher\",\n  description: \"Elaboration: industry benchmarks for ops ideas\",\n  run_in_background: true,\n  prompt: `SAFETY CHECK: You are an elaboration agent. Do NOT call monotask board create, space create, or column create. Your only job is producing an ELABORATION_OUTPUT block — the outer skill writes to the board.\n\nResearch the following business-operation ideas. For each idea, find industry benchmarks, comparable operational processes, known pitfalls, and market context.\n\nBRAIN CONTEXT:\n${brain_context}\n\nIDEAS:\n${ops_ideas_list}\n\nOutput this block:\nELABORATION_OUTPUT\n[\n  {\n    \"card_id\": \"\u003Cidea card ID>\",\n    \"findings\": \"\u003Cindustry benchmarks, comparable processes, pitfalls, and market context>\",\n    \"blocking_issue\": \"\u003Cblocking issue if any, or null>\"\n  }\n]\nEND_ELABORATION_OUTPUT`\n})\n\n\u002F\u002F Agent 2 — feasibility assessor: mcp__monomind__pick({task: \"feasibility assessment: \u003Cops ideas>\", kind: \"agents\", top: 1}) -> agents.ranked[0].name\n\u002F\u002F   (no MCP: mmpick -t \"feasibility assessment: \u003Cops ideas>\" --top 1 | jq -r '.agents.ranked[0].name'; fallback \"general-purpose\")\nTask({\n  subagent_type: \"\u003Cpicked agent>\",\n  description: \"Elaboration: feasibility assessment for ops ideas\",\n  run_in_background: true,\n  prompt: `SAFETY CHECK: You are an elaboration agent. Do NOT call monotask board create, space create, or column create. Your only job is producing an ELABORATION_OUTPUT block — the outer skill writes to the board.\n\nAssess the following business-operation ideas for process feasibility, stakeholder impact, alignment with existing workflows, and resource requirements.\n\nBRAIN CONTEXT:\n${brain_context}\n\nIDEAS:\n${ops_ideas_list}\n\nOutput this block:\nELABORATION_OUTPUT\n[\n  {\n    \"card_id\": \"\u003Cidea card ID>\",\n    \"findings\": \"\u003Cfeasibility assessment, stakeholder impact, workflow alignment, resource needs>\",\n    \"blocking_issue\": \"\u003Cblocking issue if any, or null>\"\n  }\n]\nEND_ELABORATION_OUTPUT`\n})\n```\n\nWait for all spawned background elaboration agents to complete before proceeding (0, 2, or 4 agents depending on which lists were non-empty — see guards above). Then build `merged_elaboration_json` by merging agent outputs per `card_id` and injecting `category` from `verdicts_output_json`:\n\n```bash\n# Assign each agent's ELABORATION_OUTPUT JSON array from its output block:\ndev_researcher_json='\u003CELABORATION_OUTPUT array from the dev researcher agent>'\ndev_codebase_json='\u003CELABORATION_OUTPUT array from the dev code-explorer agent>'\nops_researcher_json='\u003CELABORATION_OUTPUT array from the ops researcher agent>'\nops_pm_json='\u003CELABORATION_OUTPUT array from the ops PM agent>'\n# Use '[]' for any track that had no ideas (e.g. if all ideas were dev, set ops_* to '[]')\n# If an ELABORATION_OUTPUT block is absent from an agent's response (error\u002Ftimeout), set that variable to '[]'\n\n# Merge dev track: full outer join researcher + codebase by card_id, inject category from verdicts.\n# Use union of card_ids from both agents — if one agent skips a card the other covers, it's preserved.\n# blocking_issue: take from whichever agent found one (researcher OR codebase).\ndev_merged=$(jq -n \\\n  --argjson r \"$dev_researcher_json\" \\\n  --argjson c \"$dev_codebase_json\" \\\n  --argjson v \"$verdicts_output_json\" \\\n  '([$r[], $c[]] | map(.card_id) | unique) as $ids |\n   [$ids[] | . as $id |\n    { card_id: $id,\n      blocking_issue: (\n        ([$r[] | select(.card_id == $id)] | first | .blocking_issue \u002F\u002F null) \u002F\u002F\n        ([$c[] | select(.card_id == $id)] | first | .blocking_issue \u002F\u002F null)\n      ),\n      researcher_findings: ([$r[] | select(.card_id == $id)] | first | .findings \u002F\u002F \"\"),\n      codebase_findings:   ([$c[] | select(.card_id == $id)] | first | .findings \u002F\u002F \"\"),\n      category: ([$v[] | select(.card_id == $id)] | first | .category \u002F\u002F \"feature\") }]')\n\n# Merge ops track: full outer join researcher + PM findings by card_id, inject category.\n# blocking_issue: take from whichever agent found one (researcher OR PM).\nops_merged=$(jq -n \\\n  --argjson r \"$ops_researcher_json\" \\\n  --argjson p \"$ops_pm_json\" \\\n  --argjson v \"$verdicts_output_json\" \\\n  '([$r[], $p[]] | map(.card_id) | unique) as $ids |\n   [$ids[] | . as $id |\n    { card_id: $id,\n      blocking_issue: (\n        ([$r[] | select(.card_id == $id)] | first | .blocking_issue \u002F\u002F null) \u002F\u002F\n        ([$p[] | select(.card_id == $id)] | first | .blocking_issue \u002F\u002F null)\n      ),\n      researcher_findings: ([$r[] | select(.card_id == $id)] | first | .findings \u002F\u002F \"\"),\n      pm_findings:         ([$p[] | select(.card_id == $id)] | first | .findings \u002F\u002F \"\"),\n      category: ([$v[] | select(.card_id == $id)] | first | .category \u002F\u002F \"business-operation\") }]')\n\n# Combine both tracks\nmerged_elaboration_json=$(jq -s 'add \u002F\u002F []' \u003C(echo \"$dev_merged\") \u003C(echo \"$ops_merged\"))\n```\n\nUse process substitution (not a pipeline) so the while loop runs in the main shell and variables remain in scope after `done`:\n\n```bash\nwhile IFS= read -r idea; do\n  CARD_ID=$(echo \"$idea\"        | jq -r '.card_id')\n  category=$(echo \"$idea\"       | jq -r '.category')\n  blocking_issue=$(echo \"$idea\" | jq -r '.blocking_issue \u002F\u002F \"\"')\n  [ \"$blocking_issue\" = \"null\" ] && blocking_issue=\"\"  # guard against agents outputting the string \"null\"\n\n  if [ \"$category\" = \"business-operation\" ]; then\n    researcher_findings=$(echo \"$idea\" | jq -r '.researcher_findings')\n    pm_findings=$(echo \"$idea\"         | jq -r '.pm_findings')\n    monotask card set-description \"$BOARD_ID\" \"$CARD_ID\" \"## Elaboration Findings\n\n### Industry context & benchmarks:\n$researcher_findings\n\n### Feasibility & stakeholder impact:\n$pm_findings\"\n    monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Industry context & benchmarks: $researcher_findings\"\n    monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Feasibility & stakeholder impact: $pm_findings\"\n  else\n    researcher_findings=$(echo \"$idea\" | jq -r '.researcher_findings')\n    codebase_findings=$(echo \"$idea\"   | jq -r '.codebase_findings')\n    monotask card set-description \"$BOARD_ID\" \"$CARD_ID\" \"## Elaboration Findings\n\n### Edge cases & prior art:\n$researcher_findings\n\n### Codebase constraints:\n$codebase_findings\"\n    monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Edge cases & prior art: $researcher_findings\"\n    monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Codebase constraints: $codebase_findings\"\n  fi\n\n  if [ -n \"$blocking_issue\" ]; then\n    monotask card move \"$BOARD_ID\" \"$CARD_ID\" \"$COL_ICED\" --json\n    monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Blocked during elaboration: $blocking_issue\"\n  else\n    monotask card move \"$BOARD_ID\" \"$CARD_ID\" \"$COL_ELABORATED\" --json\n  fi\ndone \u003C \u003C(echo \"$merged_elaboration_json\" | jq -c '.[]')\n```\n\n#### 6b. User Confirmation Gate\n\n**Auto-mode bypass:** If `mode` is `auto` (set by mastermind:master or caller), skip this gate entirely and proceed directly to Step 6c with all elaborated ideas.\n\n**Confirm mode only:** If `mode` is `confirm` (default), present a review table of all elaborated ideas to the user.\n\nBuild the table from `verdicts_output_json` (filtered to `verdict == \"evaluated\"` AND `card_id` not in the set of ideas with a non-null `blocking_issue` in `merged_elaboration_json`). Exclude ideas iced during elaboration — they are already in the `Iced` column and must not appear in this review. For each row:\n- **Impact** and **Effort** come from `.impact` and `.effort` fields in `verdicts_output_json`\n- **Track**: `feature` or `technical-baseline` → `dev`; `business-operation` → `ops`\n\nPrint this exact format:\n\n```\n╔══════════════════════════════════════════════════════════════════════╗\n║  IDEA REVIEW — Please confirm before task generation                ║\n╚══════════════════════════════════════════════════════════════════════╝\n\n#  | Title                          | Category          | Impact | Effort | Track\n---|--------------------------------|-------------------|--------|--------|-------\n1  | \u003Ctitle>                        | \u003Ccategory>        | \u003CN>\u002F10 | \u003CN>\u002F10 | dev \u002F ops\n2  | \u003Ctitle>                        | \u003Ccategory>        | \u003CN>\u002F10 | \u003CN>\u002F10 | dev \u002F ops\n...\n\nTo proceed: reply with one of:\n  • \"go\" — generate tasks for all ideas above\n  • \"remove 2,4\" — drop ideas by number, generate tasks for the rest\n  • \"remove 3 | add detail to 1: \u003Cyour notes>\" — remove some, annotate others\n  • \"add detail to 2: \u003Cyour notes>\" — annotate an idea before decomposing\n  • \"stop\" — cancel task generation\n\nWaiting for your confirmation.\n```\n\nWait for the user's response before continuing. Do not spawn any agents until a reply is received.\n\n**Process the user's reply:**\n\n- **\"go\"**: proceed with all elaborated ideas.\n- **\"remove N[,N...]\"**: remove those ideas from the elaboration list. Move their ideation cards to `Iced`:\n  ```bash\n  monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"Removed by user before task generation\"\n  monotask card move \"$BOARD_ID\" \"$CARD_ID\" \"$COL_ICED\" --json\n  ```\n- **\"add detail to N: \u003Cnotes>\"**: append the notes as a card comment before decomposing:\n  ```bash\n  monotask card comment add \"$BOARD_ID\" \"$CARD_ID\" \"User notes: \u003Cnotes>\"\n  ```\n- **\"stop\"**: skip Step 6c. Proceed directly to Step 7 (Brain Write). Print a summary of ideas in Elaborated\u002FIced\u002FRejected and return `status: partial`.\n- Combined instructions (\"remove 2,4 | add detail to 1: ...\") are processed together.\n\nAfter applying all user instructions, proceed to Step 6c with the remaining ideas.\n\n---\n\n#### 6c. Task Decomposition\n\n**Select decomposition agents from the shared agent index** before spawning. With `mcp__monomind__pick`, call it once per track (`kind: \"agents\"`, `top: 1`, the categories below as an array) and use `agents.ranked[0].name`; otherwise run this selection once per track:\n\n```bash\n# The shared agent index picks the best decomposer for each track.\n# Local only — never npx. Accept a binary only when its pick output is the\n# unified index (skill entries carry `source`); see mastermind-agent-select.\nmmpick() { for c in monomind .\u002Fnode_modules\u002F.bin\u002Fmonomind; do\n    command -v \"$c\" >\u002Fdev\u002Fnull 2>&1 || continue\n    out=$(\"$c\" pick \"$@\" --json 2>\u002Fdev\u002Fnull) || continue\n    printf '%s' \"$out\" | jq -e '[.skills.ranked[]? | has(\"source\")] | (length > 0 and all)' \\\n      >\u002Fdev\u002Fnull 2>&1 && { printf '%s\\n' \"$out\"; return 0; }\n  done; return 127; }\npick_one() { mmpick -t \"$1\" --categories \"$2\" --top 1 \\\n    | jq -r '.agents.ranked[0].name \u002F\u002F empty' 2>\u002Fdev\u002Fnull; }\n\ndev_decomp_agent=$(pick_one \"decompose into engineering tasks: $dev_ideas_list\" \"engineering architecture\")\ndev_decomp_agent=\"${dev_decomp_agent:-Software Architect}\"\n\nops_decomp_agent=$(pick_one \"decompose into go-to-market and operations tasks: $ops_ideas_list\" \"marketing specialized\")\nops_decomp_agent=\"${ops_decomp_agent:-planner}\"\n\necho \"Dev decomp: $dev_decomp_agent | Ops decomp: $ops_decomp_agent\"\n```\n\n**CRITICAL — Variable substitution required for Step 6c Task calls:**\nBefore constructing each Task prompt, replace `${brain_context}`, `${prompt}`, `${project_name}`, `${dev_ideas_elaborated}`, and `${ops_ideas_elaborated}` with actual literal text. Also substitute the `subagent_type` values: replace `dev_decomp_agent` and `ops_decomp_agent` with the string values echoed by the selection above (e.g. `\"Software Architect\"`). Build those lists from the VERDICTS_OUTPUT and ELABORATION_OUTPUT results:\n\n```bash\n# Collect IDs of cards iced during elaboration (blocking_issue was set) — exclude from decomposition.\n# merged_elaboration_json covers agent-elaborated ideas only (not skipElaboration:true ones).\nelaboration_blocked=$(echo \"$merged_elaboration_json\" | jq \\\n  '[.[] | select(.blocking_issue != null and .blocking_issue != \"\" and .blocking_issue != \"null\") | .card_id]')\n# Safeguard: if jq failed (e.g. null input), default to empty array so decomp proceeds safely\n[ -z \"$elaboration_blocked\" ] && elaboration_blocked='[]'\n\n# Build elaborated idea lists for decomposition agents.\n# Include: evaluated ideas (PM verdict) that were NOT iced during elaboration.\n# This covers both skipElaboration:true ideas and agent-elaborated ideas in the Elaborated column.\n# Use `any(. == $id)` not `contains([$id])` — contains does substring matching on strings (wrong for UUIDs).\ndev_ideas_elaborated=$(echo \"$verdicts_output_json\" | jq -r \\\n  --argjson blocked \"$elaboration_blocked\" \\\n  '[.[] | select(.verdict==\"evaluated\")\n         | select(.card_id as $id | ($blocked | any(. == $id)) | not)\n         | select(.category==\"feature\" or .category==\"technical-baseline\") |\n   \"card_id: \\(.card_id)\\ntitle: \\(.title)\\ncategory: \\(.category)\\nrationale: \\(.rationale)\\nimpact: \\(.impact) effort: \\(.effort)\"] | join(\"\\n\\n\")')\n\nops_ideas_elaborated=$(echo \"$verdicts_output_json\" | jq -r \\\n  --argjson blocked \"$elaboration_blocked\" \\\n  '[.[] | select(.verdict==\"evaluated\")\n         | select(.card_id as $id | ($blocked | any(. == $id)) | not)\n         | select(.category==\"business-operation\") |\n   \"card_id: \\(.card_id)\\ntitle: \\(.title)\\ncategory: \\(.category)\\nrationale: \\(.rationale)\\nimpact: \\(.impact) effort: \\(.effort)\"] | join(\"\\n\\n\")')\n```\n\n**Spawn decomposition agents by track** — run both in parallel if both tracks have elaborated ideas:\n\n```javascript\n\u002F\u002F Dev decomposition agent (only if dev_ideas_elaborated is non-empty)\nTask({\n  subagent_type: dev_decomp_agent,  \u002F\u002F value from the selection above\n  description: \"Task decomposition: dev ideas for \" + project_name,\n  run_in_background: true,\n  prompt: `SAFETY CHECK: You are a decomposition agent. You must NOT call monotask board create, space create, or column create. Your only job is producing a TASKS_OUTPUT block — the outer skill creates the cards. If you are unsure of any card ID, list it as \"UNKNOWN\" rather than inventing a value.\n\nDecompose the following dev ideas into concrete subtasks (2–6 per idea). Each subtask should be independently implementable.\n\nPROJECT: ${project_name}\nGOAL: ${prompt}\n\nBRAIN CONTEXT:\n${brain_context}\n\nDEV IDEAS TO DECOMPOSE:\n${dev_ideas_elaborated}\n\nFor each idea, produce 2–6 subtasks. If an idea's scope is unclear, flag it in FLAGGED instead of decomposing.\n\nTASKS_OUTPUT\n[\n  {\n    \"parent_card_id\": \"\u003Cideation board card ID from the list above>\",\n    \"title\": \"\u003Csubtask title ≤80 chars>\",\n    \"description\": \"\u003Cwhat to build\u002Fdo — specific and actionable>\",\n    \"category\": \"feature | technical-baseline\",\n    \"agent\": \"\u003Crecommended subagent_type>\",\n    \"effort\": \u003C1-10>,\n    \"has_prerequisites\": \u003Ctrue | false>\n  }\n]\nFLAGGED\n[\n  { \"card_id\": \"\u003Cideation card ID>\", \"question\": \"\u003Cwhat needs clarifying>\" }\n]\nEND_TASKS_OUTPUT`\n})\n\n\u002F\u002F Ops decomposition agent (only if ops_ideas_elaborated is non-empty)\nTask({\n  subagent_type: ops_decomp_agent,  \u002F\u002F value from the selection above\n  description: \"Task decomposition: ops ideas for \" + project_name,\n  run_in_background: true,\n  prompt: `SAFETY CHECK: You are a decomposition agent. You must NOT call monotask board create, space create, or column create. Your only job is producing a TASKS_OUTPUT block — the outer skill creates the cards. If you are unsure of any card ID, list it as \"UNKNOWN\" rather than inventing a value.\n\nDecompose the following business-operation ideas into concrete subtasks (2–6 per idea). Each subtask should be independently actionable.\n\nPROJECT: ${project_name}\nGOAL: ${prompt}\n\nBRAIN CONTEXT:\n${brain_context}\n\nOPS IDEAS TO DECOMPOSE:\n${ops_ideas_elaborated}\n\nFor each idea, produce 2–6 subtasks. If an idea's scope is unclear, flag it in FLAGGED instead of decomposing.\n\nTASKS_OUTPUT\n[\n  {\n    \"parent_card_id\": \"\u003Cideation board card ID from the list above>\",\n    \"title\": \"\u003Csubtask title ≤80 chars>\",\n    \"description\": \"\u003Cwhat to build\u002Fdo — specific and actionable>\",\n    \"category\": \"business-operation\",\n    \"agent\": \"\u003Crecommended subagent_type>\",\n    \"effort\": \u003C1-10>,\n    \"has_prerequisites\": \u003Ctrue | false>\n  }\n]\nFLAGGED\n[\n  { \"card_id\": \"\u003Cideation card ID>\", \"question\": \"\u003Cwhat needs clarifying>\" }\n]\nEND_TASKS_OUTPUT`\n})\n```\n\n**After both decomposition agents return**, the outer skill creates task cards on the appropriate board for each task's category. Each task card inherits the parent idea's `impact` and `effort` scores from the VERDICTS_OUTPUT parsed in Step 5 — look up by `parent_card_id`.\n\n---\n\n**Dev task board** (`feature` \u002F `technical-baseline` → `Implementation Tasks`):\n\nCanonical board name: `${project_name}-tasks-dev`. Find-or-create:\n\n```bash\n# space_id from Step 3 is gone (each Bash tool call is a new shell).\n# Re-derive from project_name so board creation works correctly on first run.\nif [ -z \"$space_id\" ]; then\n  space_id=$(monotask space list 2>\u002Fdev\u002Fnull | awk -F'|' '{gsub(\u002F^ +| +$\u002F,\"\",$1);gsub(\u002F^ +| +$\u002F,\"\",$2);if($2==n)print $1}' n=\"$project_name\" | head -1)\n  [ -z \"$space_id\" ] && { echo \"ERROR: space '$project_name' not found — run Step 3 first\"; exit 1; }\nfi\ndev_task_canonical=\"${project_name}-tasks-dev\"\n# board list format is \"uuid: name\" (colon-space separator, NOT pipe)\nTASK_BOARD_ID=$(monotask board list 2>\u002Fdev\u002Fnull | awk -F': ' '{gsub(\u002F^ +| +$\u002F,\"\",$1);gsub(\u002F^ +| +$\u002F,\"\",$2);if($2==n)print $1}' n=\"$dev_task_canonical\" | head -1)\nif [ -n \"$TASK_BOARD_ID\" ]; then\n  echo \"Reusing dev task board: $TASK_BOARD_ID ($dev_task_canonical)\"\n  task_columns=$(monotask column list \"$TASK_BOARD_ID\" --json)\n  TASK_COL_TODO=$(echo \"$task_columns\"    | jq -r '.[] | select(.title==\"Todo\")           | .id' | head -1)\n  TASK_COL_BACKLOG=$(echo \"$task_columns\" | jq -r '.[] | select(.title==\"Backlog\")        | .id' | head -1)\nelse\n  echo \"Creating dev task board: $dev_task_canonical\"\n  TASK_BOARD_ID=$(monotask board create --space \"$space_id\" \"$dev_task_canonical\" --json 2>\u002Fdev\u002Fnull | jq -r '.id \u002F\u002F empty')\n  [ -z \"$TASK_BOARD_ID\" ] && { echo \"ERROR: Failed to create dev task board\"; exit 1; }\n  monotask space boards add \"$space_id\" \"$TASK_BOARD_ID\" >\u002Fdev\u002Fnull 2>&1 || true\n  TASK_COL_BACKLOG=$(monotask column create \"$TASK_BOARD_ID\" \"Backlog\"       --json | jq -r '.id \u002F\u002F empty')\n  TASK_COL_TODO=$(monotask column create \"$TASK_BOARD_ID\"    \"Todo\"          --json | jq -r '.id \u002F\u002F empty')\n  monotask column create \"$TASK_BOARD_ID\" \"In Progress\"   --json >\u002Fdev\u002Fnull\n  monotask column create \"$TASK_BOARD_ID\" \"Human in Loop\" --json >\u002Fdev\u002Fnull\n  monotask column create \"$TASK_BOARD_ID\" \"Review\"        --json >\u002Fdev\u002Fnull\n  monotask column create \"$TASK_BOARD_ID\" \"Done\"          --json >\u002Fdev\u002Fnull\n  monotask column create \"$TASK_BOARD_ID\" \"Cancelled\"     --json >\u002Fdev\u002Fnull\nfi\n[ -z \"$TASK_BOARD_ID\" ]    && { echo \"ERROR: TASK_BOARD_ID empty — aborting\"; exit 1; }\n[ -z \"$TASK_COL_TODO\" ]    && { echo \"ERROR: Could not find Todo column on dev task board\"; exit 1; }\n[ -z \"$TASK_COL_BACKLOG\" ] && { echo \"ERROR: Could not find Backlog column on dev task board\"; exit 1; }\n```\n\n---\n\n**Ops task board** (`business-operation` → `Operations Tasks`):\n\nCanonical board name: `${project_name}-tasks-ops`. Find-or-create:\n\n```bash\n# Restore space_id if not available (same pattern as dev task board block above).\nif [ -z \"$space_id\" ]; then\n  space_id=$(monotask space list 2>\u002Fdev\u002Fnull | awk -F'|' '{gsub(\u002F^ +| +$\u002F,\"\",$1);gsub(\u002F^ +| +$\u002F,\"\",$2);if($2==n)print $1}' n=\"$project_name\" | head -1)\n  [ -z \"$space_id\" ] && { echo \"ERROR: space '$project_name' not found\"; exit 1; }\nfi\nops_task_canonical=\"${project_name}-tasks-ops\"\n# board list format is \"uuid: name\" (colon-space separator, NOT pipe)\nOPS_BOARD_ID=$(monotask board list 2>\u002Fdev\u002Fnull | awk -F': ' '{gsub(\u002F^ +| +$\u002F,\"\",$1);gsub(\u002F^ +| +$\u002F,\"\",$2);if($2==n)print $1}' n=\"$ops_task_canonical\" | head -1)\nif [ -n \"$OPS_BOARD_ID\" ]; then\n  echo \"Reusing ops task board: $OPS_BOARD_ID ($ops_task_canonical)\"\n  ops_columns=$(monotask column list \"$OPS_BOARD_ID\" --json)\n  OPS_COL_TODO=$(echo \"$ops_columns\"    | jq -r '.[] | select(.title==\"Todo\")    | .id' | head -1)\n  OPS_COL_BACKLOG=$(echo \"$ops_columns\" | jq -r '.[] | select(.title==\"Backlog\") | .id' | head -1)\nelse\n  echo \"Creating ops task board: $ops_task_canonical\"\n  OPS_BOARD_ID=$(monotask board create --space \"$space_id\" \"$ops_task_canonical\" --json 2>\u002Fdev\u002Fnull | jq -r '.id \u002F\u002F empty')\n  [ -z \"$OPS_BOARD_ID\" ] && { echo \"ERROR: Failed to create ops task board\"; exit 1; }\n  monotask space boards add \"$space_id\" \"$OPS_BOARD_ID\" >\u002Fdev\u002Fnull 2>&1 || true\n  OPS_COL_BACKLOG=$(monotask column create \"$OPS_BOARD_ID\" \"Backlog\"       --json | jq -r '.id \u002F\u002F empty')\n  OPS_COL_TODO=$(monotask column create \"$OPS_BOARD_ID\"    \"Todo\"          --json | jq -r '.id \u002F\u002F empty')\n  monotask column create \"$OPS_BOARD_ID\" \"In Progress\"   --json >\u002Fdev\u002Fnull\n  monotask column create \"$OPS_BOARD_ID\" \"Human in Loop\" --json >\u002Fdev\u002Fnull\n  monotask column create \"$OPS_BOARD_ID\" \"Review\"        --json >\u002Fdev\u002Fnull\n  monotask column create \"$OPS_BOARD_ID\" \"Done\"          --json >\u002Fdev\u002Fnull\n  monotask column create \"$OPS_BOARD_ID\" \"Cancelled\"     --json >\u002Fdev\u002Fnull\nfi\n[ -z \"$OPS_BOARD_ID\" ]    && { echo \"ERROR: OPS_BOARD_ID empty — aborting\"; exit 1; }\n[ -z \"$OPS_COL_TODO\" ]    && { echo \"ERROR: Could not find Todo column on ops task board\"; exit 1; }\n[ -z \"$OPS_COL_BACKLOG\" ] && { echo \"ERROR: Could not find Backlog column on ops task board\"; exit 1; }\n```\n\n---\n\n**Assign TASKS_OUTPUT from each decomposition agent, then merge and iterate:**\n\n```bash\n# Parse the TASKS_OUTPUT block from the dev decomp agent's response and assign:\ndev_tasks_json='\u003CTASKS_OUTPUT JSON array from dev decomp agent, or [] if no dev ideas>'\n# Parse the TASKS_OUTPUT block from the ops decomp agent's response and assign:\nops_tasks_json='\u003CTASKS_OUTPUT JSON array from ops decomp agent, or [] if no ops ideas>'\n# If TASKS_OUTPUT block is absent from an agent's response (error\u002Ftimeout), set that variable to '[]'\n\nmerged_tasks_json=$(jq -s 'add \u002F\u002F []' \u003C(echo \"$dev_tasks_json\") \u003C(echo \"$ops_tasks_json\"))\n\n# Use a temp directory to accumulate per-parent subtask summaries (bash 3.2 compatible —\n# avoids declare -A associative arrays which require bash 4.3+)\nSUBTASK_TMPDIR=$(mktemp -d)\n\nwhile IFS= read -r task; do\n  parent_card_id=$(echo \"$task\"    | jq -r '.parent_card_id')\n  title=$(echo \"$task\"             | jq -r '.title')\n  description=$(echo \"$task\"       | jq -r '.description')\n  category=$(echo \"$task\"          | jq -r '.category')\n  agent=$(echo \"$task\"             | jq -r '.agent')\n  task_effort=$(echo \"$task\"       | jq -r '.effort')\n  has_prerequisites=$(echo \"$task\" | jq -r '.has_prerequisites')\n\n  if [ \"$category\" = \"business-operation\" ]; then\n    TARGET_BOARD=\"$OPS_BOARD_ID\"\n    COL_TARGET=$([ \"$has_prerequisites\" = \"true\" ] && echo \"$OPS_COL_BACKLOG\" || echo \"$OPS_COL_TODO\")\n    BOARD_LABEL=\"Operations Tasks\"\n  else\n    TARGET_BOARD=\"$TASK_BOARD_ID\"\n    COL_TARGET=$([ \"$has_prerequisites\" = \"true\" ] && echo \"$TASK_COL_BACKLOG\" || echo \"$TASK_COL_TODO\")\n    BOARD_LABEL=\"Implementation Tasks\"\n  fi\n\n  # Inherit impact and effort from parent idea — look up from verdicts_output_json by parent_card_id\n  parent_impact=$(echo \"$verdicts_output_json\" | jq -r --arg id \"$parent_card_id\" '.[] | select(.card_id == $id) | .impact \u002F\u002F 5')\n  parent_effort=$(echo \"$verdicts_output_json\" | jq -r --arg id \"$parent_card_id\" '.[] | select(.card_id == $id) | .effort \u002F\u002F 5')\n  # Default to 5 if lookup returned empty (e.g. parent_card_id was \"UNKNOWN\")\n  [ -z \"$parent_impact\" ] && parent_impact=5\n  [ -z \"$parent_effort\" ] && parent_effort=5\n\n  # Create task card as a proper subtask of the parent idea card (cross-board link)\n  # Signature: subtask add \u003CPARENT_BOARD_ID> \u003CPARENT_CARD_ID> \u003CCHILD_BOARD_ID> \u003CCOL_ID> \u003CTITLE>\n  TASK_CARD_ID=$(monotask card subtask add \"$BOARD_ID\" \"$parent_card_id\" \"$TARGET_BOARD\" \"$COL_TARGET\" \"$title\" --json | jq -r '.id \u002F\u002F empty')\n  [ -z \"$TASK_CARD_ID\" ] && { echo \"WARN: subtask creation failed for '$title' (parent: $parent_card_id), skipping\"; continue; }\n  # Set the task description as the primary content field\n  monotask card set-description \"$TARGET_BOARD\" \"$TASK_CARD_ID\" \"$description\"\n  monotask card set-impact \"$TARGET_BOARD\" \"$TASK_CARD_ID\" \"$parent_impact\"\n  monotask card set-effort \"$TARGET_BOARD\" \"$TASK_CARD_ID\" \"$parent_effort\"\n  # Derive parent idea title for the comment\n  parent_idea_title=$(echo \"$verdicts_output_json\" | jq -r --arg id \"$parent_card_id\" '.[] | select(.card_id == $id) | .title \u002F\u002F \"unknown\"')\n  prompt_prefix=$(echo \"$prompt\" | cut -c1-100)\n  monotask card comment add \"$TARGET_BOARD\" \"$TASK_CARD_ID\" \\\n    \"SOURCE: mastermind:idea | $prompt_prefix\nAGENT: $agent\nTASK EFFORT: $task_effort\u002F10\nPARENT IDEA IMPACT: $parent_impact\u002F10  PARENT IDEA EFFORT: $parent_effort\u002F10\nCATEGORY: $category\nPARENT IDEA: $parent_idea_title (card: $parent_card_id on ideation board)\"\n  monotask card label add \"$TARGET_BOARD\" \"$TASK_CARD_ID\" \"mastermind:idea\"\n  monotask card label add \"$TARGET_BOARD\" \"$TASK_CARD_ID\" \"category:$category\"\n\n  # Append subtask summary line to per-parent file (replaces declare -A accumulation)\n  printf '  - %s (agent: %s, effort: %s\u002F10, board: %s)\\n' \\\n    \"$title\" \"$agent\" \"$task_effort\" \"$BOARD_LABEL\" >> \"$SUBTASK_TMPDIR\u002F$parent_card_id\"\n\ndone \u003C \u003C(echo \"$merged_tasks_json\" | jq -c '.[]')\n```\n\nAfter the loop, annotate each parent idea card and move it to `Tasked`:\n```bash\nfor summary_file in \"$SUBTASK_TMPDIR\"\u002F*; do\n  [ -f \"$summary_file\" ] || continue\n  parent_card_id=$(basename \"$summary_file\")\n  subtask_list=$(cat \"$summary_file\")\n  monotask card comment add \"$BOARD_ID\" \"$parent_card_id\" \\\n    \"Subtasks created:\n${subtask_list}\"\n  monotask card move \"$BOARD_ID\" \"$parent_card_id\" \"$COL_TASKED\" --json\ndone\nrm -rf \"$SUBTASK_TMPDIR\"\n```\n\nFor each entry in FLAGGED, parse the flagged JSON from both decomp agents' FLAGGED blocks and iterate:\n```bash\n# Collect flagged entries from both decomp agents\ndev_flagged_json='\u003CFLAGGED array from dev decomp agent, or [] if none>'\nops_flagged_json='\u003CFLAGGED array from ops decomp agent, or [] if none>'\n# If FLAGGED block is absent from an agent's response, set that variable to '[]'\nmerged_flagged_json=$(jq -s 'add \u002F\u002F []' \u003C(echo \"$dev_flagged_json\") \u003C(echo \"$ops_flagged_json\"))\n\nwhile IFS= read -r flagged; do\n  flagged_card_id=$(echo \"$flagged\" | jq -r '.card_id')\n  flagged_question=$(echo \"$flagged\" | jq -r '.question \u002F\u002F \"Needs clarification before decomposition\"')\n  monotask card comment add \"$BOARD_ID\" \"$flagged_card_id\" \"Needs clarification: $flagged_question\"\n  monotask card move \"$BOARD_ID\" \"$flagged_card_id\" \"$COL_ICED\" --json\ndone \u003C \u003C(echo \"$merged_flagged_json\" | jq -c '.[]')\n```\n\n---\n\n### Step 7 — Brain Write + Return\n\nFollow mastermind-protocol\u002FSKILL.md Brain Write Procedure (namespace: `idea`).\n\n**Write domain output to session file** so master Step 9 aggregation can include this domain. Skip silently if running standalone (no SESSION_ID in current.json):\n\n```bash\nREPO_ROOT=$(git rev-parse --show-toplevel 2>\u002Fdev\u002Fnull || pwd)\n_get_mono_dir() {\n  local w=\"${1:-$(pwd)}\"\n  if [ -d \"$w\u002F.git\" ]; then echo \"$w\u002F.git\u002Fmonomind\"; return; fi\n  if [ -f \"$w\u002F.git\" ]; then\n    local m; m=$(grep '^gitdir:' \"$w\u002F.git\" | sed 's\u002Fgitdir: *\u002F\u002F')\n    [ -z \"$m\" ] && { echo \"$w\u002F.monomind\"; return; }\n    [[ \"$m\" != \u002F* ]] && m=\"$w\u002F$m\"\n    echo \"$(dirname \"$(dirname \"$m\")\")\u002Fmonomind\"; return\n  fi\n  echo \"$w\u002F.monomind\"\n}\nMONO_DIR=$(_get_mono_dir \"$REPO_ROOT\")\nSESSION_ID=$(jq -r '.sessionId \u002F\u002F empty' \"$MONO_DIR\u002Fsessions\u002Fcurrent.json\" 2>\u002Fdev\u002Fnull)\nif [ -n \"$SESSION_ID\" ]; then\n  mkdir -p \"$MONO_DIR\u002Fsessions\u002F${SESSION_ID}\"\n  # LLM: substitute \u003Cstatus>: complete (all steps ran), partial (some skipped), blocked (critical error)\n  # LLM: substitute next_actions with actual suggestions derived from this run's top ideas\n  jq -n \\\n    --arg domain \"idea\" \\\n    --arg status \"\u003Cstatus>\" \\\n    --argjson artifacts '[]' \\\n    --argjson next_actions '[\"\u003Cnext_action_1>\",\"\u003Cnext_action_2>\"]' \\\n    '{domain:$domain,status:$status,artifacts:$artifacts,next_actions:$next_actions}' \\\n    > \"$MONO_DIR\u002Fsessions\u002F${SESSION_ID}\u002Fidea.json\"\nfi\n```\n\nReturn unified output schema to caller:\n\n```yaml\ndomain: idea\nstatus: complete | partial | blocked\nartifacts: []\ndecisions:\n  - what: \u003Ctop idea or direction>\n    why: \u003Creasoning from validation + elaboration>\n    confidence: \u003C0.0-1.0>\n    outcome: pending\nlessons:\n  - what_worked: \u003Cwhich angles produced the best insights>\n  - what_didnt: \u003Cwhich angles were less useful>\nnext_actions:\n  - \u003Ce.g. \"run mastermind:build to prototype chosen direction\">\n  - \u003Ce.g. \"run mastermind:research to validate top idea\">\nboard_url: \"monotask:\u002F\u002F\u003Cproject_name>\u002F${project_name}-idea\"\ntask_board_url: \"monotask:\u002F\u002F\u003Cproject_name>\u002F${project_name}-tasks-dev\"\nops_task_board_url: \"monotask:\u002F\u002F\u003Cproject_name>\u002F${project_name}-tasks-ops\"\nrun_id: \u003CISO8601-timestamp>\nsummary:\n  ideas_generated: N\n  ideas_dev: N\n  ideas_ops: N\n  ideas_evaluated: N\n  ideas_tasked: N\n  total_dev_subtasks: N\n  total_ops_subtasks: N\n  ideas_iced: N\n  ideas_rejected: N\n```\n\n---\n\n## Domain Swarm Defaults\n\n| Task Type | Agent | Swarm |\n|---|---|---|\n| Full product ideation | coordinator + mesh specialists | mesh 6 gossip balanced |\n| Feature brainstorm | researcher + trend-analyst | mesh 4 gossip balanced |\n| Pivot exploration | coordinator + researcher + growth | mesh 4 gossip balanced |\n| Competitive scan | researcher | hierarchical 3 raft specialized |\n| Single idea request | researcher or content-creator | single agent |\n",{"name":5,"type":42,"description":7,"default_mode":43},"domain-skill","confirm","main","f7cd4595d0f8959822163e14f9787117765c931a",".claude\u002Fskills\u002Fmastermind-idea",2,"https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind","https:\u002F\u002Fmonoes.github.io\u002Fmonomind\u002F","https:\u002F\u002Fgithub.com\u002Fmonoes","https:\u002F\u002Fmonoes.me","2026-11-10 01:53:48",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add monoes\u002Fmonomind --skill mastermind-idea",{"tool":59,"command":60},"bunx","bunx skills add monoes\u002Fmonomind --skill mastermind-idea",{"tool":62,"command":63},"pnpm","pnpm dlx skills add monoes\u002Fmonomind --skill mastermind-idea","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fmastermind-idea\u002FSKILL.md",true,[],[68,96,129,154,179,204],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":95},"01M71PB3SHWKMNJM6MD65VX8D6","zk-steward","Org role guidance for a ZK steward: engineer zero-knowledge proof systems with circuit design, SNARK vs STARK choice and security review. This is zero-knowledge cryptography, not Zettelkasten note-taking.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fzk-steward\u002FSKILL.md",[],[75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94],"zk","zk steward","steward","zero-knowledge","engineer","choice","design","knowledge","impact","query","snark","review","monomind","security review","stark","zettelkasten","cryptography","security","org","blockchain","2026-11-10 13:02:02",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":100,"licenseFileUrl":101,"sourceHtmlUrl":102,"categories":103,"keywords":112,"publishedAt":95},"01M71PB18SDG28WBKPKJNB814K","writing-plans","Use when you have a spec or requirements for a multi-step coding task and must write an implementation plan before touching code. Produces bite-sized TDD tasks with exact file paths, code and commands for an engineer with zero context.","MIT","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwriting-plans\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwriting-plans\u002FSKILL.md",[104,107],{"categoryNo":105,"categoryName":106,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":108,"categoryName":109,"taxonomyType":110,"taxonomyTypeDesc":111},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[113,114,115,79,116,117,118,119,84,120,31,121,34,122,123,124,125,126,127,128],"writing","writing plans","plans","superpowers","implementation plan","when","you","code","plan","write","commands","paths","suggest","coding","context","ZeRO",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":133,"sourceHtmlUrl":134,"categories":135,"keywords":139,"publishedAt":95},"01M71PAXFM488X9ARXK0T04TF5","write-spec","Write a feature spec or PRD from a problem statement or feature idea. Use when turning a vague idea or user request into a structured document, scoping a feature with goals and non-goals, defining success metrics and acceptance criteria, or breaking a big ask into a phased spec.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwrite-spec\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwrite-spec\u002FSKILL.md",[136],{"categoryNo":137,"categoryName":138,"taxonomyType":110,"taxonomyTypeDesc":111},"01JBSEEDCAT000000000000031","产品经理",[122,140,141,142,143,82,144,118,145,146,147,34,148,149,24,150,26,151,152,153],"write spec","spec","user request","problem","acceptance","ask","vague","work","request","scoping","metrics","problem statement","use","document",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":158,"sourceHtmlUrl":159,"categories":160,"keywords":164,"publishedAt":95},"01M71PASSZY800C0RPEARBS918","write-query","Write optimized SQL for your dialect with best practices. Use when translating a natural-language data need into SQL, building a multi-CTE query with joins and aggregations, optimizing a query against a large partitioned table, or getting dialect-specific syntax for Snowflake, BigQuery, Postgres, etc.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwrite-query\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwrite-query\u002FSKILL.md",[161],{"categoryNo":162,"categoryName":163,"taxonomyType":110,"taxonomyTypeDesc":111},"01JBSEEDCAT000000000000033","数据分析师",[84,122,165,166,167,168,82,152,118,169,170,171,172,147,173,174,175,176,177,178],"write query","postgres","for","snowflake","best practices","natural-language","with","multi","github","sql","https","syntax","plugins","data",{"skillNo":180,"name":181,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":189,"publishedAt":95},"01M71PAPTX0T3PF6ETFVR96SJJ","workflow-automation","Org role guidance for workflow automation: build and maintain CI\u002FCD definitions in GitHub Actions or equivalent: triggers, jobs, matrices, caching. Covers path filters, dependency caching, parallel jobs, timeouts and fail-fast ordering.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fworkflow-automation\u002FSKILL.md",[185,188],{"categoryNo":186,"categoryName":187,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[190,191,192,193,167,194,195,196,197,83,198,199,200,84,87,173,201,202,203,175],"Workflow Automation","automation","workflow","parallel","actions","ci","triggers","github actions","maintain","filters","caching","build","dependency","devops",{"skillNo":205,"name":206,"nameZh":6,"description":207,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":208,"categories":209,"keywords":211,"publishedAt":95},"01M71PAM19Z1XTV9NPCFSE2MY8","workflow-architect","Org role guidance for a workflow architect: map full workflow trees for systems, user journeys and agents, covering every branch and failure. Covers discovering workflows from code, handoff contracts, timeouts, recovery paths and observable state.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fworkflow-architect\u002FSKILL.md",[210],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[192,212,213,214,215,216,217,167,218,219,120,220,221,222,87,173,223,224,175,225],"workflow architect","architect","trees","user journeys","branch","planning","map","workflows","architecture","state","leadership","recovery","operations","systems"]