@monoes/monomindcli 1.9.16 → 1.9.17

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -199,24 +199,42 @@ for domain in $domains_needed; do
199
199
  # Find existing board by canonical name — reuse across runs
200
200
  board_id=$(monotask board list 2>/dev/null | awk -F'|' '{gsub(/^ +| +$/,"",$1);gsub(/^ +| +$/,"",$2);if($2==n)print $1}' n="$canonical" | head -1)
201
201
 
202
+ # Domain-specific column schema:
203
+ # idea → New | Evaluated | Elaborated | Tasked | Iced | Rejected (intake = "New")
204
+ # all others → Todo | In Progress | Human in Loop | Review | Done | Cancelled (intake = "Todo")
205
+ if [ "$domain" = "idea" ]; then
206
+ intake_col_name="New"
207
+ else
208
+ intake_col_name="Todo"
209
+ fi
210
+
202
211
  if [ -n "$board_id" ]; then
203
212
  echo "Reusing board: $board_id ($canonical)"
204
- # Fetch existing column IDs
205
213
  cols_json=$(monotask column list "$board_id" --json 2>/dev/null || echo '[]')
206
- todo_col=$(echo "$cols_json" | jq -r '[.[] | select(.title=="Todo" or .title=="Backlog")] | .[0].id // empty')
207
- doing_col=$(echo "$cols_json" | jq -r '[.[] | select(.title=="Doing" or .title=="In Progress")] | .[0].id // empty')
214
+ todo_col=$(echo "$cols_json" | jq -r --arg n "$intake_col_name" '[.[] | select(.title==$n)] | .[0].id // empty')
215
+ doing_col=$(echo "$cols_json" | jq -r '[.[] | select(.title=="In Progress" or .title=="Doing")] | .[0].id // empty')
208
216
  done_col=$(echo "$cols_json" | jq -r '[.[] | select(.title=="Done")] | .[0].id // empty')
209
217
  else
210
218
  echo "Creating board: $canonical"
211
219
  board_id=$(monotask board create --space "$space_id" "$canonical" --json 2>/dev/null | jq -r '.id // empty')
212
220
  [ -z "$board_id" ] && { echo "ERROR: Failed to create board '$canonical'"; exit 1; }
213
221
  monotask space boards add "$space_id" "$board_id" >/dev/null 2>&1 || true
214
- todo_col=$(monotask column create "$board_id" "Todo" --json | jq -r '.id // empty')
215
- [ -z "$todo_col" ] && { echo "ERROR: Failed to create Todo column for $domain"; exit 1; }
216
- doing_col=$(monotask column create "$board_id" "Doing" --json | jq -r '.id // empty')
217
- [ -z "$doing_col" ] && { echo "ERROR: Failed to create Doing column for $domain"; exit 1; }
218
- done_col=$(monotask column create "$board_id" "Done" --json | jq -r '.id // empty')
219
- [ -z "$done_col" ] && { echo "ERROR: Failed to create Done column for $domain"; exit 1; }
222
+ if [ "$domain" = "idea" ]; then
223
+ todo_col=$(monotask column create "$board_id" "New" --json | jq -r '.id // empty')
224
+ doing_col=$(monotask column create "$board_id" "Evaluated" --json | jq -r '.id // empty')
225
+ monotask column create "$board_id" "Elaborated" --json >/dev/null
226
+ monotask column create "$board_id" "Tasked" --json >/dev/null
227
+ monotask column create "$board_id" "Iced" --json >/dev/null
228
+ done_col=$(monotask column create "$board_id" "Rejected" --json | jq -r '.id // empty')
229
+ else
230
+ todo_col=$(monotask column create "$board_id" "Todo" --json | jq -r '.id // empty')
231
+ doing_col=$(monotask column create "$board_id" "In Progress" --json | jq -r '.id // empty')
232
+ monotask column create "$board_id" "Human in Loop" --json >/dev/null
233
+ monotask column create "$board_id" "Review" --json >/dev/null
234
+ done_col=$(monotask column create "$board_id" "Done" --json | jq -r '.id // empty')
235
+ monotask column create "$board_id" "Cancelled" --json >/dev/null
236
+ fi
237
+ [ -z "$todo_col" ] && { echo "ERROR: Failed to create intake column for $domain"; exit 1; }
220
238
  fi
221
239
 
222
240
  domain_goal=$(jq -r --arg d "$domain" '.domain_goals[$d] // empty' "$SESSION_STATE")
@@ -243,6 +261,16 @@ echo "Session state saved to current.json"
243
261
 
244
262
  **BEFORE THIS STEP:** If `idea` is in `domains_needed`, invoke `Skill("mastermind:idea")` directly now (master context has Skill tool access). Pass the resolved prompt, project path, and mode. Write the result to `.monomind/sessions/<SESSION_ID>/idea.json` and mark the `idea` domain as handled. Do NOT include `idea` in the Task spawning below.
245
263
 
264
+ **IDEA PIPELINE REQUIREMENT:** `mastermind:idea` runs a multi-step pipeline (Steps 3–6 inside idea.md). You MUST follow all of those steps — do NOT shortcut to manually creating cards. The full pipeline is:
265
+ - Step 3: Board setup — find-or-create `<project_name>-idea` board (master's Step 6 already created it with correct columns: New → Evaluated → Elaborated → Tasked → Iced → Rejected). Load column IDs from existing board.
266
+ - Step 4: Spawn Idea Manager agent (coordinator) with specialist sub-agents per angle — generates ideas as cards in the `New` column.
267
+ - Step 5: Spawn PM agent for validation — moves each card to `Evaluated`, `Iced`, or `Rejected`, sets impact/effort.
268
+ - Step 6a: Elaboration agents enrich each `Evaluated` card and move it to `Elaborated`.
269
+ - Step 6b: User gate (skip in auto mode).
270
+ - Step 6c: Task decomposition — creates subtask cards on `<project_name>-tasks-dev` and `<project_name>-tasks-ops` boards, linked as subtasks of their parent idea card. Moves parent idea cards to `Tasked`.
271
+
272
+ Skipping any of these steps produces an incomplete pipeline run — card content is generated but no evaluation, elaboration, or task breakdown occurs.
273
+
246
274
  **Before spawning**, select the best domain manager agent type from the registry for each active domain. Do not hardcode `coordinator` — pick the agent whose expertise best fits the domain goal.
247
275
 
248
276
  **BASH TOOL REQUIREMENT:** Domain managers must run `monotask` CLI commands. Only use subagent_types that include Bash in their tool list. If the registry returns an agent without Bash (e.g. `Product Manager`, `Backend Architect`), override it with `general-purpose` (which has all tools). Agents without Bash cannot create cards, emit curl events, or write session files — they will silently produce degraded output.
@@ -249,6 +249,15 @@ curl -s -o /dev/null -X POST "http://localhost:4242/api/mastermind/event" \
249
249
 
250
250
  **Board naming convention:** Boards are named `<project_name>-<domain>` (e.g. `factory-idea`, `factory-build`). This canonical name is stable across runs — find the existing board first, create only if it does not exist.
251
251
 
252
+ **Column schemas by domain — use these exact column names, in this order:**
253
+
254
+ | Domain | Columns (left → right) | Intake column |
255
+ |---|---|---|
256
+ | `idea` | New → Evaluated → Elaborated → Tasked → Iced → Rejected | New |
257
+ | `build`, `release`, `architect`, `review` | Todo → In Progress → Human in Loop → Review → Done → Cancelled | Todo |
258
+ | `marketing`, `content`, `sales`, `ops`, `finance`, `research` | Todo → In Progress → Human in Loop → Review → Done → Cancelled | Todo |
259
+ | Task boards (`<proj>-tasks-dev`, `<proj>-tasks-ops`) | Backlog → Todo → In Progress → Human in Loop → Review → Done → Cancelled | Todo |
260
+
252
261
  Every mastermind run that needs a task board MUST:
253
262
  1. Resolve the space (find existing or create new) — space name = `project_name`
254
263
  2. Find existing board by canonical name `<project_name>-<domain>` or create it with `--space`
@@ -69,48 +69,46 @@ For simple prompts (single agent, single output):
69
69
  Set up the space and ideation board. The ideation board has a dedicated pipeline with six columns (not master's board).
70
70
 
71
71
  ```bash
72
+ # Compatible with macOS bash 3.2
72
73
  project_name="${project_name:-$(basename "$PWD")}"
73
74
  date=$(date -u +%Y-%m-%dT%H:%M:%SZ)
75
+ idea_canonical="${project_name}-idea"
74
76
 
75
- # Find or create space
76
- space_id=$(monotask space list 2>/dev/null | awk -F' \| ' -v n="$project_name" '$2==n{print $1}' | head -1)
77
- [ -z "$space_id" ] && space_id=$(monotask space create "$project_name" 2>&1 | grep -oE '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')
77
+ # Find or create space (by exact name)
78
+ space_id=$(monotask space list 2>/dev/null | awk -F'|' '{gsub(/^ +| +$/,"",$1);gsub(/^ +| +$/,"",$2);if($2==n)print $1}' n="$project_name" | head -1)
79
+ [ -z "$space_id" ] && space_id=$(monotask space create "$project_name" 2>/dev/null | grep -oE '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')
78
80
  [ -z "$space_id" ] && { echo "ERROR: Could not find or create space '$project_name'"; exit 1; }
79
- ```
80
-
81
- **Memory-first board lookup:** Check memory for `"mastermind-idea board_id"` in namespace `monomind`. If a board ID is returned, use it as `BOARD_ID` and look up the existing column IDs. Otherwise, create the board:
82
-
83
- ```bash
84
- BOARD_ID=$(monotask board create "Ideas & Innovation" --json | jq -r '.id // empty')
85
- [ -z "$BOARD_ID" ] && { echo "ERROR: Failed to create Ideas & Innovation board"; exit 1; }
86
- monotask space boards add "$space_id" "$BOARD_ID" >/dev/null 2>&1 || true
87
- npx monomind@latest memory store --key "mastermind-idea board_id" --value "$BOARD_ID" --namespace monomind
88
-
89
- # Create columns in pipeline order
90
- COL_NEW=$(monotask column create "$BOARD_ID" "New" --json | jq -r '.id')
91
- COL_EVALUATED=$(monotask column create "$BOARD_ID" "Evaluated" --json | jq -r '.id')
92
- COL_ELABORATED=$(monotask column create "$BOARD_ID" "Elaborated" --json | jq -r '.id')
93
- COL_TASKED=$(monotask column create "$BOARD_ID" "Tasked" --json | jq -r '.id')
94
- COL_ICED=$(monotask column create "$BOARD_ID" "Iced" --json | jq -r '.id')
95
- COL_REJECTED=$(monotask column create "$BOARD_ID" "Rejected" --json | jq -r '.id')
96
- ```
97
81
 
98
- If the board already existed, look up column IDs:
99
-
100
- ```bash
101
- columns=$(monotask column list "$BOARD_ID" --json)
102
- COL_NEW=$(echo "$columns" | jq -r '.[] | select(.title == "New") | .id' | head -1)
103
- COL_EVALUATED=$(echo "$columns" | jq -r '.[] | select(.title == "Evaluated") | .id' | head -1)
104
- COL_ELABORATED=$(echo "$columns"| jq -r '.[] | select(.title == "Elaborated") | .id' | head -1)
105
- COL_TASKED=$(echo "$columns" | jq -r '.[] | select(.title == "Tasked") | .id' | head -1)
106
- COL_ICED=$(echo "$columns" | jq -r '.[] | select(.title == "Iced") | .id' | head -1)
107
- COL_REJECTED=$(echo "$columns" | jq -r '.[] | select(.title == "Rejected") | .id' | head -1)
108
- [ -z "$COL_NEW" ] && { echo "ERROR: Could not find 'New' column on BOARD_ID=$BOARD_ID"; exit 1; }
109
- [ -z "$COL_EVALUATED" ] && { echo "ERROR: Could not find 'Evaluated' column on BOARD_ID=$BOARD_ID"; exit 1; }
110
- [ -z "$COL_ELABORATED" ] && { echo "ERROR: Could not find 'Elaborated' column on BOARD_ID=$BOARD_ID"; exit 1; }
111
- [ -z "$COL_TASKED" ] && { echo "ERROR: Could not find 'Tasked' column on BOARD_ID=$BOARD_ID"; exit 1; }
112
- [ -z "$COL_ICED" ] && { echo "ERROR: Could not find 'Iced' column on BOARD_ID=$BOARD_ID"; exit 1; }
113
- [ -z "$COL_REJECTED" ] && { echo "ERROR: Could not find 'Rejected' column on BOARD_ID=$BOARD_ID"; exit 1; }
82
+ # Find existing idea board by canonical name reuse across runs (same pattern as master Step 6)
83
+ BOARD_ID=$(monotask board list 2>/dev/null | awk -F'|' '{gsub(/^ +| +$/,"",$1);gsub(/^ +| +$/,"",$2);if($2==n)print $1}' n="$idea_canonical" | head -1)
84
+
85
+ if [ -n "$BOARD_ID" ]; then
86
+ echo "Reusing idea board: $BOARD_ID ($idea_canonical)"
87
+ columns=$(monotask column list "$BOARD_ID" --json)
88
+ COL_NEW=$(echo "$columns" | jq -r '.[] | select(.title == "New") | .id' | head -1)
89
+ COL_EVALUATED=$(echo "$columns" | jq -r '.[] | select(.title == "Evaluated") | .id' | head -1)
90
+ COL_ELABORATED=$(echo "$columns"| jq -r '.[] | select(.title == "Elaborated") | .id' | head -1)
91
+ COL_TASKED=$(echo "$columns" | jq -r '.[] | select(.title == "Tasked") | .id' | head -1)
92
+ COL_ICED=$(echo "$columns" | jq -r '.[] | select(.title == "Iced") | .id' | head -1)
93
+ COL_REJECTED=$(echo "$columns" | jq -r '.[] | select(.title == "Rejected") | .id' | head -1)
94
+ [ -z "$COL_NEW" ] && { echo "ERROR: 'New' column missing on board $BOARD_ID — was board created with wrong schema?"; exit 1; }
95
+ [ -z "$COL_EVALUATED" ] && { echo "ERROR: 'Evaluated' column missing on board $BOARD_ID"; exit 1; }
96
+ [ -z "$COL_ELABORATED" ] && { echo "ERROR: 'Elaborated' column missing on board $BOARD_ID"; exit 1; }
97
+ [ -z "$COL_TASKED" ] && { echo "ERROR: 'Tasked' column missing on board $BOARD_ID"; exit 1; }
98
+ [ -z "$COL_ICED" ] && { echo "ERROR: 'Iced' column missing on board $BOARD_ID"; exit 1; }
99
+ [ -z "$COL_REJECTED" ] && { echo "ERROR: 'Rejected' column missing on board $BOARD_ID"; exit 1; }
100
+ else
101
+ echo "Creating idea board: $idea_canonical"
102
+ BOARD_ID=$(monotask board create --space "$space_id" "$idea_canonical" --json 2>/dev/null | jq -r '.id // empty')
103
+ [ -z "$BOARD_ID" ] && { echo "ERROR: Failed to create idea board '$idea_canonical'"; exit 1; }
104
+ monotask space boards add "$space_id" "$BOARD_ID" >/dev/null 2>&1 || true
105
+ COL_NEW=$(monotask column create "$BOARD_ID" "New" --json | jq -r '.id')
106
+ COL_EVALUATED=$(monotask column create "$BOARD_ID" "Evaluated" --json | jq -r '.id')
107
+ COL_ELABORATED=$(monotask column create "$BOARD_ID" "Elaborated" --json | jq -r '.id')
108
+ COL_TASKED=$(monotask column create "$BOARD_ID" "Tasked" --json | jq -r '.id')
109
+ COL_ICED=$(monotask column create "$BOARD_ID" "Iced" --json | jq -r '.id')
110
+ COL_REJECTED=$(monotask column create "$BOARD_ID" "Rejected" --json | jq -r '.id')
111
+ fi
114
112
  ```
115
113
 
116
114
  **After either branch above, validate and echo all values.** This is the canonical source for Step 4 Task construction.
@@ -802,56 +800,62 @@ END_TASKS_OUTPUT`
802
800
 
803
801
  **Dev task board** (`feature` / `technical-baseline` → `Implementation Tasks`):
804
802
 
805
- Check memory for `"implementation-tasks board_id"` in namespace `monomind`. If found, use it as `TASK_BOARD_ID`. Otherwise create it:
803
+ Canonical board name: `${project_name}-tasks-dev`. Find-or-create:
806
804
 
807
805
  ```bash
808
- TASK_BOARD_ID=$(monotask board create "Implementation Tasks" --json | jq -r '.id // empty')
809
- monotask space boards add "$space_id" "$TASK_BOARD_ID" >/dev/null 2>&1 || true
810
- npx monomind@latest memory store --key "implementation-tasks board_id" --value "$TASK_BOARD_ID" --namespace monomind
811
- monotask column create "$TASK_BOARD_ID" "Backlog" --json >/dev/null
812
- monotask column create "$TASK_BOARD_ID" "Todo" --json >/dev/null
813
- monotask column create "$TASK_BOARD_ID" "In Progress" --json >/dev/null
814
- monotask column create "$TASK_BOARD_ID" "Review" --json >/dev/null
815
- monotask column create "$TASK_BOARD_ID" "Human in Loop" --json >/dev/null
816
- monotask column create "$TASK_BOARD_ID" "Done" --json >/dev/null
817
- ```
818
-
819
- Look up and validate column IDs:
820
- ```bash
821
- [ -z "$TASK_BOARD_ID" ] && { echo "ERROR: TASK_BOARD_ID is empty — aborting to prevent card creation on null board"; exit 1; }
822
- task_columns=$(monotask column list "$TASK_BOARD_ID" --json)
823
- TASK_COL_TODO=$(echo "$task_columns" | jq -r '.[] | select(.title == "Todo") | .id' | head -1)
824
- TASK_COL_BACKLOG=$(echo "$task_columns" | jq -r '.[] | select(.title == "Backlog") | .id' | head -1)
825
- [ -z "$TASK_COL_TODO" ] && { echo "ERROR: Could not find 'Todo' column on TASK_BOARD_ID=$TASK_BOARD_ID"; exit 1; }
826
- [ -z "$TASK_COL_BACKLOG" ] && { echo "ERROR: Could not find 'Backlog' column on TASK_BOARD_ID=$TASK_BOARD_ID"; exit 1; }
806
+ dev_task_canonical="${project_name}-tasks-dev"
807
+ TASK_BOARD_ID=$(monotask board list 2>/dev/null | awk -F'|' '{gsub(/^ +| +$/,"",$1);gsub(/^ +| +$/,"",$2);if($2==n)print $1}' n="$dev_task_canonical" | head -1)
808
+ if [ -n "$TASK_BOARD_ID" ]; then
809
+ echo "Reusing dev task board: $TASK_BOARD_ID ($dev_task_canonical)"
810
+ task_columns=$(monotask column list "$TASK_BOARD_ID" --json)
811
+ TASK_COL_TODO=$(echo "$task_columns" | jq -r '.[] | select(.title=="Todo") | .id' | head -1)
812
+ TASK_COL_BACKLOG=$(echo "$task_columns" | jq -r '.[] | select(.title=="Backlog") | .id' | head -1)
813
+ else
814
+ echo "Creating dev task board: $dev_task_canonical"
815
+ TASK_BOARD_ID=$(monotask board create --space "$space_id" "$dev_task_canonical" --json 2>/dev/null | jq -r '.id // empty')
816
+ [ -z "$TASK_BOARD_ID" ] && { echo "ERROR: Failed to create dev task board"; exit 1; }
817
+ monotask space boards add "$space_id" "$TASK_BOARD_ID" >/dev/null 2>&1 || true
818
+ TASK_COL_BACKLOG=$(monotask column create "$TASK_BOARD_ID" "Backlog" --json | jq -r '.id')
819
+ TASK_COL_TODO=$(monotask column create "$TASK_BOARD_ID" "Todo" --json | jq -r '.id')
820
+ monotask column create "$TASK_BOARD_ID" "In Progress" --json >/dev/null
821
+ monotask column create "$TASK_BOARD_ID" "Human in Loop" --json >/dev/null
822
+ monotask column create "$TASK_BOARD_ID" "Review" --json >/dev/null
823
+ monotask column create "$TASK_BOARD_ID" "Done" --json >/dev/null
824
+ monotask column create "$TASK_BOARD_ID" "Cancelled" --json >/dev/null
825
+ fi
826
+ [ -z "$TASK_BOARD_ID" ] && { echo "ERROR: TASK_BOARD_ID empty — aborting"; exit 1; }
827
+ [ -z "$TASK_COL_TODO" ] && { echo "ERROR: Could not find Todo column on dev task board"; exit 1; }
827
828
  ```
828
829
 
829
830
  ---
830
831
 
831
832
  **Ops task board** (`business-operation` → `Operations Tasks`):
832
833
 
833
- Check memory for `"operations-tasks board_id"` in namespace `monomind`. If found, use it as `OPS_BOARD_ID`. Otherwise create it:
834
+ Canonical board name: `${project_name}-tasks-ops`. Find-or-create:
834
835
 
835
836
  ```bash
836
- OPS_BOARD_ID=$(monotask board create "Operations Tasks" --json | jq -r '.id // empty')
837
- monotask space boards add "$space_id" "$OPS_BOARD_ID" >/dev/null 2>&1 || true
838
- npx monomind@latest memory store --key "operations-tasks board_id" --value "$OPS_BOARD_ID" --namespace monomind
839
- monotask column create "$OPS_BOARD_ID" "Backlog" --json >/dev/null
840
- monotask column create "$OPS_BOARD_ID" "Todo" --json >/dev/null
841
- monotask column create "$OPS_BOARD_ID" "In Progress" --json >/dev/null
842
- monotask column create "$OPS_BOARD_ID" "Review" --json >/dev/null
843
- monotask column create "$OPS_BOARD_ID" "Human in Loop" --json >/dev/null
844
- monotask column create "$OPS_BOARD_ID" "Done" --json >/dev/null
845
- ```
846
-
847
- Look up and validate column IDs:
848
- ```bash
849
- [ -z "$OPS_BOARD_ID" ] && { echo "ERROR: OPS_BOARD_ID is empty — aborting to prevent card creation on null board"; exit 1; }
850
- ops_columns=$(monotask column list "$OPS_BOARD_ID" --json)
851
- OPS_COL_TODO=$(echo "$ops_columns" | jq -r '.[] | select(.title == "Todo") | .id' | head -1)
852
- OPS_COL_BACKLOG=$(echo "$ops_columns" | jq -r '.[] | select(.title == "Backlog") | .id' | head -1)
853
- [ -z "$OPS_COL_TODO" ] && { echo "ERROR: Could not find 'Todo' column on OPS_BOARD_ID=$OPS_BOARD_ID"; exit 1; }
854
- [ -z "$OPS_COL_BACKLOG" ] && { echo "ERROR: Could not find 'Backlog' column on OPS_BOARD_ID=$OPS_BOARD_ID"; exit 1; }
837
+ ops_task_canonical="${project_name}-tasks-ops"
838
+ OPS_BOARD_ID=$(monotask board list 2>/dev/null | awk -F'|' '{gsub(/^ +| +$/,"",$1);gsub(/^ +| +$/,"",$2);if($2==n)print $1}' n="$ops_task_canonical" | head -1)
839
+ if [ -n "$OPS_BOARD_ID" ]; then
840
+ echo "Reusing ops task board: $OPS_BOARD_ID ($ops_task_canonical)"
841
+ ops_columns=$(monotask column list "$OPS_BOARD_ID" --json)
842
+ OPS_COL_TODO=$(echo "$ops_columns" | jq -r '.[] | select(.title=="Todo") | .id' | head -1)
843
+ OPS_COL_BACKLOG=$(echo "$ops_columns" | jq -r '.[] | select(.title=="Backlog") | .id' | head -1)
844
+ else
845
+ echo "Creating ops task board: $ops_task_canonical"
846
+ OPS_BOARD_ID=$(monotask board create --space "$space_id" "$ops_task_canonical" --json 2>/dev/null | jq -r '.id // empty')
847
+ [ -z "$OPS_BOARD_ID" ] && { echo "ERROR: Failed to create ops task board"; exit 1; }
848
+ monotask space boards add "$space_id" "$OPS_BOARD_ID" >/dev/null 2>&1 || true
849
+ OPS_COL_BACKLOG=$(monotask column create "$OPS_BOARD_ID" "Backlog" --json | jq -r '.id')
850
+ OPS_COL_TODO=$(monotask column create "$OPS_BOARD_ID" "Todo" --json | jq -r '.id')
851
+ monotask column create "$OPS_BOARD_ID" "In Progress" --json >/dev/null
852
+ monotask column create "$OPS_BOARD_ID" "Human in Loop" --json >/dev/null
853
+ monotask column create "$OPS_BOARD_ID" "Review" --json >/dev/null
854
+ monotask column create "$OPS_BOARD_ID" "Done" --json >/dev/null
855
+ monotask column create "$OPS_BOARD_ID" "Cancelled" --json >/dev/null
856
+ fi
857
+ [ -z "$OPS_BOARD_ID" ] && { echo "ERROR: OPS_BOARD_ID empty — aborting"; exit 1; }
858
+ [ -z "$OPS_COL_TODO" ] && { echo "ERROR: Could not find Todo column on ops task board"; exit 1; }
855
859
  ```
856
860
 
857
861
  ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monoes/monomindcli",
3
- "version": "1.9.16",
3
+ "version": "1.9.17",
4
4
  "type": "module",
5
5
  "description": "Monomind CLI - Enterprise AI agent orchestration with 60+ specialized agents, swarm coordination, MCP server, self-learning hooks, and vector memory for Claude Code",
6
6
  "main": "dist/src/index.js",