@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
|
|
207
|
-
doing_col=$(echo "$cols_json" | jq -r '[.[] | select(.title=="
|
|
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
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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'
|
|
77
|
-
[ -z "$space_id" ] && space_id=$(monotask space create "$project_name" 2
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
[ -z "$
|
|
111
|
-
[ -z "$
|
|
112
|
-
[ -z "$
|
|
113
|
-
[ -z "$
|
|
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
|
-
|
|
803
|
+
Canonical board name: `${project_name}-tasks-dev`. Find-or-create:
|
|
806
804
|
|
|
807
805
|
```bash
|
|
808
|
-
|
|
809
|
-
monotask
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
monotask column
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
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
|
-
|
|
834
|
+
Canonical board name: `${project_name}-tasks-ops`. Find-or-create:
|
|
834
835
|
|
|
835
836
|
```bash
|
|
836
|
-
|
|
837
|
-
monotask
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
monotask column
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
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.
|
|
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",
|