@monoes/monomindcli 1.9.16 → 1.10.0

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.
Files changed (118) hide show
  1. package/.claude/commands/mastermind/_repeat.md +182 -39
  2. package/.claude/commands/mastermind/architect.md +17 -11
  3. package/.claude/commands/mastermind/brain.md +4 -0
  4. package/.claude/commands/mastermind/build.md +4 -0
  5. package/.claude/commands/mastermind/content.md +4 -0
  6. package/.claude/commands/mastermind/createorg.md +5 -3
  7. package/.claude/commands/mastermind/finance.md +4 -0
  8. package/.claude/commands/mastermind/idea.md +4 -0
  9. package/.claude/commands/mastermind/marketing.md +4 -0
  10. package/.claude/commands/mastermind/master.md +100 -46
  11. package/.claude/commands/mastermind/ops.md +4 -0
  12. package/.claude/commands/mastermind/release.md +4 -0
  13. package/.claude/commands/mastermind/research.md +4 -0
  14. package/.claude/commands/mastermind/review.md +4 -0
  15. package/.claude/commands/mastermind/runorg.md +5 -3
  16. package/.claude/commands/mastermind/sales.md +4 -0
  17. package/.claude/commands/mastermind/techport.md +9 -0
  18. package/.claude/commands/monomind/do.md +5 -1
  19. package/.claude/commands/monomind/idea.md +5 -1
  20. package/.claude/commands/monomind/improve.md +5 -1
  21. package/.claude/commands/monomind/repeat.md +85 -29
  22. package/.claude/commands/monomind/review.md +6 -2
  23. package/.claude/commands/monomind/understand.md +10 -8
  24. package/.claude/helpers/extras-registry.json +235 -235
  25. package/.claude/helpers/graphify-freshen.cjs +13 -1
  26. package/.claude/helpers/hook-handler.cjs +1 -1
  27. package/.claude/helpers/router.cjs +4 -1
  28. package/.claude/skills/mastermind/_protocol.md +37 -21
  29. package/.claude/skills/mastermind/access.md +236 -0
  30. package/.claude/skills/mastermind/activity.md +191 -0
  31. package/.claude/skills/mastermind/adapter-manager.md +259 -0
  32. package/.claude/skills/mastermind/adapters.md +204 -0
  33. package/.claude/skills/mastermind/agent-detail.md +242 -0
  34. package/.claude/skills/mastermind/agents.md +178 -0
  35. package/.claude/skills/mastermind/approval-detail.md +259 -0
  36. package/.claude/skills/mastermind/approve.md +181 -0
  37. package/.claude/skills/mastermind/architect.md +24 -8
  38. package/.claude/skills/mastermind/backup.md +197 -0
  39. package/.claude/skills/mastermind/bootstrap.md +190 -0
  40. package/.claude/skills/mastermind/budgets.md +237 -0
  41. package/.claude/skills/mastermind/companies.md +256 -0
  42. package/.claude/skills/mastermind/costs.md +151 -0
  43. package/.claude/skills/mastermind/createorg.md +23 -5
  44. package/.claude/skills/mastermind/diagnose.md +249 -0
  45. package/.claude/skills/mastermind/env.md +198 -0
  46. package/.claude/skills/mastermind/environments.md +250 -0
  47. package/.claude/skills/mastermind/export.md +324 -0
  48. package/.claude/skills/mastermind/goal-detail.md +255 -0
  49. package/.claude/skills/mastermind/goals.md +149 -0
  50. package/.claude/skills/mastermind/heartbeat.md +164 -0
  51. package/.claude/skills/mastermind/idea.md +318 -186
  52. package/.claude/skills/mastermind/import.md +281 -0
  53. package/.claude/skills/mastermind/inbox.md +214 -0
  54. package/.claude/skills/mastermind/instance-settings.md +315 -0
  55. package/.claude/skills/mastermind/instance.md +231 -0
  56. package/.claude/skills/mastermind/invite-landing.md +227 -0
  57. package/.claude/skills/mastermind/invites.md +254 -0
  58. package/.claude/skills/mastermind/issue-detail.md +291 -0
  59. package/.claude/skills/mastermind/issues.md +235 -0
  60. package/.claude/skills/mastermind/join-queue.md +170 -0
  61. package/.claude/skills/mastermind/liveness.md +392 -0
  62. package/.claude/skills/mastermind/memory.md +321 -0
  63. package/.claude/skills/mastermind/my-issues.md +146 -0
  64. package/.claude/skills/mastermind/new-agent.md +241 -0
  65. package/.claude/skills/mastermind/org-chart.md +207 -0
  66. package/.claude/skills/mastermind/org-settings.md +217 -0
  67. package/.claude/skills/mastermind/plan-to-tasks.md +136 -0
  68. package/.claude/skills/mastermind/plugin-manager.md +241 -0
  69. package/.claude/skills/mastermind/plugin-settings.md +273 -0
  70. package/.claude/skills/mastermind/plugins.md +190 -0
  71. package/.claude/skills/mastermind/profile.md +187 -0
  72. package/.claude/skills/mastermind/project-detail.md +249 -0
  73. package/.claude/skills/mastermind/project-workspace.md +244 -0
  74. package/.claude/skills/mastermind/projects.md +164 -0
  75. package/.claude/skills/mastermind/routine-detail.md +253 -0
  76. package/.claude/skills/mastermind/routines.md +202 -0
  77. package/.claude/skills/mastermind/runorg.md +74 -9
  78. package/.claude/skills/mastermind/search.md +186 -0
  79. package/.claude/skills/mastermind/secrets.md +199 -0
  80. package/.claude/skills/mastermind/skills.md +156 -0
  81. package/.claude/skills/mastermind/tasks.md +149 -0
  82. package/.claude/skills/mastermind/techport.md +5 -5
  83. package/.claude/skills/mastermind/threads.md +259 -0
  84. package/.claude/skills/mastermind/tree-control.md +250 -0
  85. package/.claude/skills/mastermind/wiki.md +314 -0
  86. package/.claude/skills/mastermind/workspace-detail.md +317 -0
  87. package/.claude/skills/mastermind/workspaces.md +261 -0
  88. package/.claude/skills/mastermind/worktree.md +187 -0
  89. package/dist/src/init/executor.js +8 -8
  90. package/dist/src/init/executor.js.map +1 -1
  91. package/dist/src/init/statusline-generator.d.ts.map +1 -1
  92. package/dist/src/init/statusline-generator.js +12 -0
  93. package/dist/src/init/statusline-generator.js.map +1 -1
  94. package/dist/src/ui/.monomind/data/ranked-context.json +1 -1
  95. package/dist/src/ui/.monomind/loops/mastermind-review-1778664132789.json +16 -0
  96. package/dist/src/ui/.monomind/sessions/current.json +5 -5
  97. package/dist/src/ui/.monomind/sessions/session-1776778451399.json +15 -0
  98. package/dist/src/ui/dashboard.html +3030 -181
  99. package/dist/src/ui/data/mastermind-events.jsonl +8 -0
  100. package/dist/src/ui/data/mastermind-sessions.json +1 -0
  101. package/dist/src/ui/server.mjs +738 -0
  102. package/dist/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +1 -1
  104. package/.claude/skills/.monomind/data/ranked-context.json +0 -5
  105. package/.claude/skills/.monomind/sessions/current.json +0 -13
  106. package/.claude/skills/.monomind/sessions/session-1777829336455.json +0 -15
  107. package/.claude/skills/.monomind/sessions/session-1777831614725.json +0 -15
  108. package/.claude/skills/.monomind/sessions/session-1777832095857.json +0 -15
  109. package/.claude/skills/.monomind/sessions/session-1777839814183.json +0 -15
  110. package/.claude/skills/.monomind/sessions/session-1777841847131.json +0 -15
  111. package/.claude/skills/.monomind/sessions/session-1777843309463.json +0 -15
  112. package/.claude/skills/.monomind/sessions/session-1777880867159.json +0 -15
  113. package/.claude/skills/.monomind/sessions/session-1777881884593.json +0 -15
  114. package/.claude/skills/.monomind/sessions/session-1777884090471.json +0 -15
  115. package/.claude/skills/.monomind/sessions/session-1777884808221.json +0 -15
  116. package/.claude/skills/.monomind/sessions/session-1777885672155.json +0 -15
  117. package/.claude/skills/.monomind/sessions/session-1777886852818.json +0 -15
  118. package/.claude/skills/.monomind/sessions/session-1777896532690.json +0 -15
@@ -0,0 +1,199 @@
1
+ ---
2
+ name: mastermind-secrets
3
+ description: Mastermind secrets — manage org-scoped API keys and secrets consumed by agents. Store, rotate, list, and audit secrets without exposing values in logs or state files.
4
+ type: domain-skill
5
+ default_mode: confirm
6
+ ---
7
+
8
+ # Mastermind Secrets
9
+
10
+ This skill is invoked by `mastermind:secrets` or directly via `/mastermind:secrets`.
11
+
12
+ ---
13
+
14
+ ## Inputs
15
+
16
+ - `brain_context`: BRAIN CONTEXT block
17
+ - `org_name`: org to manage secrets for
18
+ - `action`: list | set | rotate | revoke | audit
19
+ - `secret_name`: name/key of the secret (e.g. `OPENAI_API_KEY`, `SLACK_WEBHOOK`)
20
+ - `secret_value`: value to store (only ever passed as env var reference, NEVER hardcoded)
21
+ - `provider`: local | env | vault (default: local)
22
+ - `caller`: command | master
23
+
24
+ ---
25
+
26
+ ## Step 0 — Brain Load (standalone only)
27
+
28
+ If `caller` is not "command", load brain context following _protocol.md Brain Load Procedure with namespace: `ops`.
29
+
30
+ ---
31
+
32
+ ## SECURITY RULES (always enforced)
33
+
34
+ - NEVER print secret values to stdout
35
+ - NEVER store secret values in state files (store only masked references: `sk-ant-***...***`)
36
+ - NEVER commit secrets to git
37
+ - Secrets passed as `secret_value` MUST come from env vars (`$MY_KEY`), NOT inline strings
38
+
39
+ ---
40
+
41
+ ## Step 1 — Load Secrets Registry
42
+
43
+ The secrets registry stores **metadata only** (name, provider, masked hint, rotation date):
44
+
45
+ ```bash
46
+ secretsFile=".monomind/orgs/${org_name}-secrets.json"
47
+ [ ! -f "$secretsFile" ] && echo '{"secrets":[]}' > "$secretsFile"
48
+ ```
49
+
50
+ Actual secret values live in:
51
+ - `local`: `.monomind/orgs/.secrets/<org_name>/<name>` (chmod 600, gitignored)
52
+ - `env`: environment variable `ORG_<ORG_NAME_UPPER>_<SECRET_NAME_UPPER>`
53
+
54
+ ---
55
+
56
+ ## Step 2 — Execute Action
57
+
58
+ ### list (default)
59
+
60
+ Show all registered secrets for this org (metadata only, masked values):
61
+
62
+ ```bash
63
+ jq -r '
64
+ .secrets[] |
65
+ "[\(.name)] provider=\(.provider) hint=\(.masked_hint // "***") set=\(.set_at // "unknown") rotated=\(.rotated_at // "never")"
66
+ ' "$secretsFile" 2>/dev/null || echo "No secrets registered."
67
+ ```
68
+
69
+ Render as:
70
+ ```
71
+ SECRETS — org: <org_name>
72
+ ──────────────────────────────────────────────
73
+ NAME PROVIDER VALUE HINT SET ROTATED
74
+ ANTHROPIC_API_KEY local sk-ant-***... 2 days ago —
75
+ SLACK_WEBHOOK env https://hooks 1 week ago —
76
+ GITHUB_TOKEN local ghp_***... 3 days ago 1 day ago
77
+ ```
78
+
79
+ ### set
80
+
81
+ Store a secret value. Always source from env var:
82
+
83
+ ```bash
84
+ # Validate secret_name (alphanumeric + underscore only)
85
+ echo "$secret_name" | grep -qE '^[A-Z][A-Z0-9_]{0,63}$' || { echo "ERROR: secret_name must be uppercase letters, digits, underscores only."; exit 1; }
86
+
87
+ # Create secure storage dir
88
+ secretDir=".monomind/orgs/.secrets/${org_name}"
89
+ mkdir -p "$secretDir"
90
+ chmod 700 "$secretDir"
91
+
92
+ # Write value from env var reference — NEVER inline
93
+ if [ -z "${secret_value}" ]; then
94
+ echo "ERROR: Pass the secret value as an env var: secret_value=\$MY_VAR /mastermind:secrets --action set"
95
+ exit 1
96
+ fi
97
+
98
+ secretFile="${secretDir}/${secret_name}"
99
+ printf '%s' "$secret_value" > "$secretFile"
100
+ chmod 600 "$secretFile"
101
+
102
+ # Store masked hint (first 6 chars + ***)
103
+ hint="${secret_value:0:6}***...${secret_value: -3}"
104
+
105
+ # Register in secrets metadata
106
+ tmp="${secretsFile}.tmp"
107
+ jq --arg name "$secret_name" \
108
+ --arg provider "${provider:-local}" \
109
+ --arg hint "$hint" \
110
+ --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
111
+ '.secrets = [.secrets[] | select(.name != $name)] +
112
+ [{"name":$name,"provider":$provider,"masked_hint":$hint,"set_at":$ts}]' \
113
+ "$secretsFile" > "$tmp" && mv "$tmp" "$secretsFile"
114
+
115
+ echo "Secret $secret_name stored (provider: ${provider:-local})"
116
+ ```
117
+
118
+ Ensure `.monomind/orgs/.secrets/` is in `.gitignore`:
119
+ ```bash
120
+ grep -q '.monomind/orgs/.secrets' .gitignore 2>/dev/null || echo '.monomind/orgs/.secrets/' >> .gitignore
121
+ ```
122
+
123
+ ### rotate
124
+
125
+ Generate a new value from env var and update:
126
+
127
+ ```bash
128
+ # Same as set but also records rotated_at
129
+ tmp="${secretsFile}.tmp"
130
+ jq --arg name "$secret_name" --arg ts "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
131
+ '.secrets = [.secrets[] | if .name == $name then .rotated_at = $ts | .set_at = $ts else . end]' \
132
+ "$secretsFile" > "$tmp" && mv "$tmp" "$secretsFile"
133
+ # Then re-run the set logic above with new value
134
+ ```
135
+
136
+ ### revoke
137
+
138
+ Remove secret value and registry entry:
139
+
140
+ ```bash
141
+ rm -f ".monomind/orgs/.secrets/${org_name}/${secret_name}"
142
+ tmp="${secretsFile}.tmp"
143
+ jq --arg name "$secret_name" '.secrets = [.secrets[] | select(.name != $name)]' \
144
+ "$secretsFile" > "$tmp" && mv "$tmp" "$secretsFile"
145
+ echo "Secret $secret_name revoked."
146
+ ```
147
+
148
+ ### audit
149
+
150
+ Show which agents reference each secret in their adapter_config or responsibilities:
151
+
152
+ ```bash
153
+ orgFile=".monomind/orgs/${org_name}.json"
154
+ echo "=== SECRET USAGE AUDIT — org: $org_name ==="
155
+ jq -r '.roles[] | "\(.id): \(.responsibilities | join(", "))"' "$orgFile" | \
156
+ while IFS=: read -r role resp; do
157
+ refs=$(jq -r '.secrets[].name' "$secretsFile" | while read -r sname; do
158
+ echo "$resp" | grep -q "$sname" && echo " → $sname"
159
+ done)
160
+ [ -n "$refs" ] && echo "$role$refs"
161
+ done
162
+ echo "(Audit checks responsibilities text only — review agent prompts manually for additional references)"
163
+ ```
164
+
165
+ ---
166
+
167
+ ## How Agents Access Secrets
168
+
169
+ Agents spawned by the boss should read secrets via:
170
+
171
+ ```bash
172
+ # Read from local storage (not env):
173
+ secret=$(cat ".monomind/orgs/.secrets/${orgName}/${SECRET_NAME}" 2>/dev/null)
174
+ [ -z "$secret" ] && secret="${!SECRET_NAME}" # Fallback to env var
175
+
176
+ # Use in API calls:
177
+ curl -H "Authorization: Bearer $secret" ...
178
+ ```
179
+
180
+ Never store secret values in memory namespace or state files.
181
+
182
+ ---
183
+
184
+ ## Step 3 — Return Output
185
+
186
+ ```yaml
187
+ domain: ops
188
+ status: complete
189
+ action: <action>
190
+ org: <org_name>
191
+ secret_name: <name if applicable>
192
+ secrets_count: <N>
193
+ ```
194
+
195
+ ---
196
+
197
+ ## Step 4 — Brain Write (standalone only)
198
+
199
+ If `caller` is not "command", follow _protocol.md Brain Write Procedure for domain `ops`.
@@ -0,0 +1,156 @@
1
+ ---
2
+ name: mastermind-skills
3
+ description: Mastermind skills — list, sync, and map skills available to org agents. Scans .claude/skills/ directory and shows which roles have access to which skill domains.
4
+ type: domain-skill
5
+ default_mode: auto
6
+ ---
7
+
8
+ # Mastermind Skills
9
+
10
+ This skill is invoked by `mastermind:skills` or directly via `/mastermind:skills`.
11
+
12
+ ---
13
+
14
+ ## Inputs
15
+
16
+ - `brain_context`: BRAIN CONTEXT block (injected by command, or loaded below if standalone)
17
+ - `org_name`: org to inspect skills for (optional — shows all skills if omitted)
18
+ - `action`: list | sync | map | enable | disable
19
+ - `skill_name`: skill slug (required for enable/disable)
20
+ - `role_id`: role to map skill to (optional)
21
+ - `caller`: command | master
22
+
23
+ ---
24
+
25
+ ## Step 0 — Brain Load (standalone only)
26
+
27
+ If `caller` is not "command", load brain context following _protocol.md Brain Load Procedure with namespace: `ops`.
28
+
29
+ ---
30
+
31
+ ## Step 1 — Scan Skills Directory
32
+
33
+ ```bash
34
+ skillsDir=".claude/skills"
35
+ [ ! -d "$skillsDir" ] && { echo "ERROR: No .claude/skills/ directory found."; exit 1; }
36
+
37
+ # List all skill files recursively
38
+ allSkills=$(find "$skillsDir" -name "*.md" ! -name "_*" | sort)
39
+ ```
40
+
41
+ ---
42
+
43
+ ## Step 2 — Execute Action
44
+
45
+ ### list (default)
46
+
47
+ Display all available skills with metadata:
48
+
49
+ ```bash
50
+ echo "AVAILABLE SKILLS"
51
+ echo "────────────────────────────────────────────────────────"
52
+ printf "%-30s %-15s %-10s %s\n" "NAME" "TYPE" "MODE" "DESCRIPTION"
53
+ echo "────────────────────────────────────────────────────────"
54
+
55
+ for f in $allSkills; do
56
+ skillSlug=$(basename "$f" .md)
57
+ domain=$(dirname "$f" | sed "s|$skillsDir/||")
58
+ skillType=$(grep -m1 "^type:" "$f" 2>/dev/null | awk '{print $2}')
59
+ skillMode=$(grep -m1 "^default_mode:" "$f" 2>/dev/null | awk '{print $2}')
60
+ skillDesc=$(grep -m1 "^description:" "$f" 2>/dev/null | sed 's/^description: //' | cut -c1-60)
61
+ printf "%-30s %-15s %-10s %s\n" "${domain}:${skillSlug}" "${skillType:-skill}" "${skillMode:-auto}" "$skillDesc"
62
+ done
63
+
64
+ echo ""
65
+ echo "Total: $(echo "$allSkills" | wc -l | tr -d ' ') skills"
66
+ ```
67
+
68
+ ### map
69
+
70
+ Show which skills are mapped to each role in the org:
71
+
72
+ ```bash
73
+ orgFile=".monomind/orgs/${org_name}.json"
74
+ [ ! -f "$orgFile" ] && { echo "ERROR: Org '$org_name' not found."; exit 1; }
75
+
76
+ echo "SKILL MAP — org: $org_name"
77
+ echo "────────────────────────────────────────────────────────"
78
+
79
+ jq -r '.roles[] | "[\(.id)] \(.title) agent_type=\(.agent_type)"' "$orgFile" | while IFS= read -r line; do
80
+ echo "$line"
81
+ roleId=$(echo "$line" | grep -o '^\[[^]]*\]' | tr -d '[]')
82
+ # Show skills configured for this role
83
+ mappedSkills=$(jq -r --arg id "$roleId" \
84
+ '.roles[] | select(.id == $id) | .skills // [] | join(", ")' \
85
+ "$orgFile" 2>/dev/null)
86
+ if [ -n "$mappedSkills" ] && [ "$mappedSkills" != "null" ]; then
87
+ echo " Skills: $mappedSkills"
88
+ else
89
+ echo " Skills: (inherited from agent_type)"
90
+ fi
91
+ echo ""
92
+ done
93
+ ```
94
+
95
+ ### sync
96
+
97
+ Refresh the skill registry by re-scanning `.claude/skills/` and updating org config with available skill slugs:
98
+
99
+ ```bash
100
+ skillsDir=".claude/skills"
101
+ skillList=$(find "$skillsDir" -name "*.md" ! -name "_*" -exec basename {} .md \; | sort | jq -Rsc 'split("\n") | map(select(. != ""))')
102
+
103
+ if [ -n "$org_name" ]; then
104
+ orgFile=".monomind/orgs/${org_name}.json"
105
+ tmp="${orgFile}.tmp"
106
+ jq --argjson skills "$skillList" '.available_skills = $skills' "$orgFile" > "$tmp" && mv "$tmp" "$orgFile"
107
+ echo "Synced $(echo "$skillList" | jq 'length') skills → org: $org_name"
108
+ else
109
+ echo "Available skills:"
110
+ echo "$skillList" | jq -r '.[]'
111
+ echo ""
112
+ echo "Pass --org <name> to sync skills into a specific org config."
113
+ fi
114
+ ```
115
+
116
+ ### enable / disable
117
+
118
+ Add or remove a skill from a role's allowed list:
119
+
120
+ ```bash
121
+ orgFile=".monomind/orgs/${org_name}.json"
122
+ [ ! -f "$orgFile" ] && { echo "ERROR: Org '$org_name' not found."; exit 1; }
123
+ [ -z "$skill_name" ] && { echo "ERROR: --skill-name required."; exit 1; }
124
+ [ -z "$role_id" ] && { echo "ERROR: --role-id required for enable/disable."; exit 1; }
125
+
126
+ tmp="${orgFile}.tmp"
127
+ if [ "$action" = "enable" ]; then
128
+ jq --arg id "$role_id" --arg skill "$skill_name" \
129
+ '.roles = [.roles[] | if .id == $id then .skills = ((.skills // []) + [$skill] | unique) else . end]' \
130
+ "$orgFile" > "$tmp" && mv "$tmp" "$orgFile"
131
+ echo "Enabled skill '$skill_name' for role '$role_id'"
132
+ else
133
+ jq --arg id "$role_id" --arg skill "$skill_name" \
134
+ '.roles = [.roles[] | if .id == $id then .skills = ((.skills // []) | map(select(. != $skill))) else . end]' \
135
+ "$orgFile" > "$tmp" && mv "$tmp" "$orgFile"
136
+ echo "Disabled skill '$skill_name' for role '$role_id'"
137
+ fi
138
+ ```
139
+
140
+ ---
141
+
142
+ ## Step 3 — Return Output
143
+
144
+ ```yaml
145
+ domain: ops
146
+ status: complete
147
+ action: <action>
148
+ org: <org_name if provided>
149
+ skills_found: <N>
150
+ ```
151
+
152
+ ---
153
+
154
+ ## Step 4 — Brain Write (standalone only)
155
+
156
+ If `caller` is not "command", follow _protocol.md Brain Write Procedure for domain `ops`.
@@ -0,0 +1,149 @@
1
+ ---
2
+ name: mastermind-tasks
3
+ description: Mastermind tasks — view, create, assign, and move tasks on an org's task board. Supports parent-child chains, goal linkage, and status filtering.
4
+ type: domain-skill
5
+ default_mode: auto
6
+ ---
7
+
8
+ # Mastermind Tasks
9
+
10
+ This skill is invoked by `mastermind:tasks` or directly via `/mastermind:tasks`.
11
+
12
+ ---
13
+
14
+ ## Inputs
15
+
16
+ - `brain_context`: BRAIN CONTEXT block
17
+ - `org_name`: org whose board to manage
18
+ - `action`: list | create | assign | move | close | chain
19
+ - `task_title`: title for create
20
+ - `task_id`: card id for assign/move/close
21
+ - `role_id`: role to assign the task to
22
+ - `parent_id`: parent task id (for hierarchical task chains)
23
+ - `goal_ref`: goal slug this task contributes to (links task to goal)
24
+ - `status`: todo | doing | done (for move)
25
+ - `caller`: command | master
26
+
27
+ ---
28
+
29
+ ## Step 0 — Brain Load (standalone only)
30
+
31
+ If `caller` is not "command", load brain context following _protocol.md Brain Load Procedure with namespace: `ops`.
32
+
33
+ ---
34
+
35
+ ## Step 1 — Load Org Config
36
+
37
+ ```bash
38
+ orgFile=".monomind/orgs/${org_name}.json"
39
+ board_id=$(jq -r '.board_id // empty' "$orgFile")
40
+ todo_col=$(jq -r '.todo_col_id // empty' "$orgFile")
41
+ doing_col=$(jq -r '.doing_col_id // empty' "$orgFile")
42
+ done_col=$(jq -r '.done_col_id // empty' "$orgFile")
43
+
44
+ [ -z "$board_id" ] && { echo "ERROR: org config missing board_id — run /mastermind:createorg to rebuild."; exit 1; }
45
+ ```
46
+
47
+ ---
48
+
49
+ ## Step 2 — Execute Action
50
+
51
+ ### list (default)
52
+
53
+ Show all tasks grouped by column with role labels and parent chains:
54
+
55
+ ```bash
56
+ echo "=== TODO ==="
57
+ monotask card list $board_id --col $todo_col --json | jq -r '.[] | "[\(.id)] \(.title) role=\(.labels // [] | map(select(startswith("role:"))) | .[0] // "unassigned")"'
58
+
59
+ echo "=== DOING ==="
60
+ monotask card list $board_id --col $doing_col --json | jq -r '.[] | "[\(.id)] \(.title) role=\(.labels // [] | map(select(startswith("role:"))) | .[0] // "unassigned")"'
61
+
62
+ echo "=== DONE ==="
63
+ monotask card list $board_id --col $done_col --json | jq -r '.[] | "[\(.id)] \(.title)"'
64
+ ```
65
+
66
+ Render as:
67
+ ```
68
+ TASKS — org: <org_name>
69
+ ──────────────────────────────────────────────
70
+ TODO (N)
71
+ [abc123] Write homepage copy → role:content-writer
72
+ [def456] └─ Draft hero section → role:content-writer (child of abc123)
73
+
74
+ DOING (N)
75
+ [ghi789] Review brand guidelines → role:reviewer
76
+
77
+ DONE (N)
78
+ [jkl012] Research competitor sites
79
+ ```
80
+
81
+ ### create
82
+
83
+ Create a task card and optionally link it to a parent or goal:
84
+
85
+ ```bash
86
+ CARD_ID=$(monotask card create $board_id $todo_col "$task_title" --json | jq -r .id)
87
+ [ -n "$role_id" ] && monotask card label add $board_id $CARD_ID "role:${role_id}"
88
+ [ -n "$parent_id" ] && monotask card subtask add $board_id $CARD_ID $board_id $todo_col "$task_title" --json
89
+ [ -n "$goal_ref" ] && monotask card label add $board_id $CARD_ID "goal:${goal_ref}"
90
+ echo "Created task: $CARD_ID"
91
+ ```
92
+
93
+ Emit `org:task:created` event to dashboard.
94
+
95
+ ### assign
96
+
97
+ ```bash
98
+ [ -n "$role_id" ] && monotask card label add $board_id $task_id "role:${role_id}"
99
+ echo "Assigned task $task_id to role $role_id"
100
+ ```
101
+
102
+ ### move
103
+
104
+ ```bash
105
+ case "$status" in
106
+ todo) col_target=$todo_col ;;
107
+ doing) col_target=$doing_col ;;
108
+ done) col_target=$done_col ;;
109
+ esac
110
+ monotask card move $board_id $task_id $col_target
111
+ echo "Moved task $task_id to $status"
112
+ ```
113
+
114
+ Emit `org:task:moved` event.
115
+
116
+ ### chain
117
+
118
+ Build a task chain (parent → child sequence) from a list of task titles:
119
+
120
+ Parse `task_title` as newline-separated titles. Create each card in order, linking each as a prerequisite of the next:
121
+
122
+ ```bash
123
+ prev_id=""
124
+ while IFS= read -r title; do
125
+ CARD_ID=$(monotask card create $board_id $todo_col "$title" --json | jq -r .id)
126
+ [ -n "$role_id" ] && monotask card label add $board_id $CARD_ID "role:${role_id}"
127
+ [ -n "$prev_id" ] && monotask card prerequisite add $board_id $CARD_ID $board_id $prev_id
128
+ prev_id=$CARD_ID
129
+ echo " Created: [$CARD_ID] $title"
130
+ done <<< "$task_title"
131
+ ```
132
+
133
+ ---
134
+
135
+ ## Step 3 — Return Output
136
+
137
+ ```yaml
138
+ domain: ops
139
+ status: complete
140
+ action: <action>
141
+ org: <org_name>
142
+ task_id: <task_id if applicable>
143
+ ```
144
+
145
+ ---
146
+
147
+ ## Step 4 — Brain Write (standalone only)
148
+
149
+ If `caller` is not "command", follow _protocol.md Brain Write Procedure for domain `ops`.
@@ -67,7 +67,7 @@ HINT_TERMS="{focus_hint}"
67
67
  # If HINT_TERMS is empty or unset (no focus_hint provided), default to: core architecture skills commands hooks agents
68
68
  [ -z "$HINT_TERMS" ] && HINT_TERMS="core architecture skills commands hooks agents"
69
69
  HINT_PATTERN=$(echo "$HINT_TERMS" | tr ' ' '|')
70
- find /Users/morteza/Desktop/tools/monobrain/.claude -name "*.md" \
70
+ find .claude -name "*.md" \
71
71
  | xargs grep -liE "$HINT_PATTERN" 2>/dev/null | head -20
72
72
  ```
73
73
 
@@ -78,7 +78,7 @@ find /Users/morteza/Desktop/tools/monobrain/.claude -name "*.md" \
78
78
  Extract the real conventions — not the stated ones — from the codebase itself:
79
79
 
80
80
  ```bash
81
- BASE=/Users/morteza/Desktop/tools/monobrain/packages/@monomind/cli/src
81
+ BASE=packages/@monomind/cli/src
82
82
 
83
83
  # File name convention
84
84
  find "$BASE" -name "*.ts" | grep -v dist | sed 's|.*/||' | \
@@ -144,7 +144,7 @@ Domain vocab: Agent, Memory, Swarm, Config, Node, Graph, Session, Task, Wo
144
144
  ### 0C — Dependency Direction Constraints
145
145
 
146
146
  ```bash
147
- BASE=/Users/morteza/Desktop/tools/monobrain/packages/@monomind/cli/src
147
+ BASE=packages/@monomind/cli/src
148
148
 
149
149
  # Map import directions by directory layer
150
150
  for dir in types utils core commands services; do
@@ -161,7 +161,7 @@ Extract the implied layering from the import ratio. High `imported_by` → leaf/
161
161
  ### 0D — Build Monomind Vocabulary Name Set (for collision detection)
162
162
 
163
163
  ```bash
164
- grep -rhn "^export" /Users/morteza/Desktop/tools/monobrain/packages/@monomind/cli/src \
164
+ grep -rhn "^export" packages/@monomind/cli/src \
165
165
  --include="*.ts" | grep -v dist | \
166
166
  grep -oE "(class|interface|function|const|type|enum) [A-Z][A-Za-z0-9]+" | awk '{print $2}' | sort -u \
167
167
  > /tmp/monomind_names.txt
@@ -655,7 +655,7 @@ else
655
655
  fi
656
656
 
657
657
  # 2. TypeScript validity
658
- cd /Users/morteza/Desktop/tools/monobrain && npx tsc --noEmit --project packages/@monomind/cli/tsconfig.json 2>&1 | tail -10
658
+ npx tsc --noEmit --project packages/@monomind/cli/tsconfig.json 2>&1 | tail -10
659
659
 
660
660
  # 3. Convention spot check
661
661
  cat {written_file} | grep -E "^export class|^export interface|^export function" | head -20