@monoes/monomindcli 2.9.7 → 2.9.8
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.
- package/.claude/agents/design/design-monodesign.md +1 -2
- package/.claude/agents/engineering/engineering-ai-data-remediation-engineer.md +1 -2
- package/.claude/agents/engineering/engineering-ai-engineer.md +1 -2
- package/.claude/agents/engineering/engineering-autonomous-optimization-architect.md +0 -1
- package/.claude/agents/engineering/engineering-backend-architect.md +1 -2
- package/.claude/agents/engineering/engineering-code-reviewer.md +1 -2
- package/.claude/agents/engineering/engineering-data-engineer.md +1 -2
- package/.claude/agents/engineering/engineering-database-optimizer.md +1 -2
- package/.claude/agents/engineering/engineering-devops-automator.md +1 -2
- package/.claude/agents/engineering/engineering-embedded-firmware-engineer.md +1 -2
- package/.claude/agents/engineering/engineering-feishu-integration-developer.md +1 -2
- package/.claude/agents/engineering/engineering-frontend-developer.md +1 -2
- package/.claude/agents/engineering/engineering-git-workflow-master.md +1 -2
- package/.claude/agents/engineering/engineering-incident-response-commander.md +0 -1
- package/.claude/agents/engineering/engineering-mobile-app-builder.md +1 -2
- package/.claude/agents/engineering/engineering-rapid-prototyper.md +1 -2
- package/.claude/agents/engineering/engineering-security-engineer.md +1 -2
- package/.claude/agents/engineering/engineering-senior-developer.md +1 -2
- package/.claude/agents/engineering/engineering-software-architect.md +1 -2
- package/.claude/agents/engineering/engineering-solidity-smart-contract-engineer.md +1 -2
- package/.claude/agents/engineering/engineering-sre.md +0 -1
- package/.claude/agents/engineering/engineering-technical-writer.md +1 -2
- package/.claude/agents/engineering/engineering-threat-detection-engineer.md +0 -1
- package/.claude/agents/engineering/engineering-wechat-mini-program-developer.md +1 -2
- package/.claude/agents/github/code-review-swarm.md +0 -1
- package/.claude/agents/github/github-modes.md +0 -1
- package/.claude/agents/github/issue-tracker.md +0 -1
- package/.claude/agents/github/multi-repo-swarm.md +0 -1
- package/.claude/agents/github/pr-manager.md +0 -1
- package/.claude/agents/github/project-board-sync.md +0 -1
- package/.claude/agents/github/release-manager.md +0 -1
- package/.claude/agents/github/repo-architect.md +0 -1
- package/.claude/agents/github/swarm-issue.md +0 -1
- package/.claude/agents/github/swarm-pr.md +0 -1
- package/.claude/agents/github/sync-coordinator.md +0 -1
- package/.claude/agents/github/workflow-automation.md +0 -1
- package/.claude/agents/marketing/marketing-competitive-content.md +1 -2
- package/.claude/agents/marketing/marketing-cro-specialist.md +1 -2
- package/.claude/agents/marketing/marketing-email-specialist.md +1 -2
- package/.claude/agents/marketing/marketing-launch-strategist.md +1 -2
- package/.claude/agents/marketing/marketing-pricing-strategist.md +1 -2
- package/.claude/agents/specialized/agentic-identity-trust.md +0 -1
- package/.claude/agents/specialized/agents-orchestrator.md +1 -2
- package/.claude/agents/specialized/automation-governance-architect.md +1 -2
- package/.claude/agents/specialized/blockchain-security-auditor.md +1 -2
- package/.claude/agents/specialized/compliance-auditor.md +1 -2
- package/.claude/agents/specialized/identity-graph-operator.md +0 -1
- package/.claude/agents/specialized/lsp-index-engineer.md +1 -2
- package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +0 -1
- package/.claude/agents/specialized/specialized-cultural-intelligence-strategist.md +0 -1
- package/.claude/agents/specialized/specialized-developer-advocate.md +1 -2
- package/.claude/agents/specialized/specialized-document-generator.md +1 -2
- package/.claude/agents/specialized/specialized-mcp-builder.md +1 -2
- package/.claude/agents/specialized/specialized-model-qa.md +0 -1
- package/.claude/agents/specialized/specialized-workflow-architect.md +1 -2
- package/.claude/agents/specialized/zk-steward.md +1 -2
- package/.claude/agents/testing/production-validator.md +0 -1
- package/.claude/agents/testing/tdd-london-swarm.md +0 -1
- package/.claude/agents/testing/testing-accessibility-auditor.md +0 -1
- package/.claude/agents/testing/testing-api-tester.md +1 -2
- package/.claude/agents/testing/testing-evidence-collector.md +1 -2
- package/.claude/agents/testing/testing-performance-benchmarker.md +1 -2
- package/.claude/agents/testing/testing-test-results-analyzer.md +1 -2
- package/.claude/agents/testing/testing-tool-evaluator.md +1 -2
- package/.claude/agents/testing/testing-workflow-optimizer.md +1 -2
- package/.claude/commands/hooks/README.md +1 -1
- package/.claude/commands/memory/README.md +6 -7
- package/.claude/commands/monitoring/README.md +1 -1
- package/.claude/helpers/control-start.cjs +27 -7
- package/.claude/helpers/handlers/route-handler.cjs +22 -3
- package/.claude/helpers/handlers/session-handler.cjs +43 -0
- package/.claude/helpers/intelligence.cjs +27 -6
- package/.claude/helpers/statusline.cjs +45 -11
- package/.claude/skills/agentic-jujutsu/SKILL.md +17 -15
- package/.claude/skills/hive-mind-advanced/SKILL.md +212 -559
- package/.claude/skills/hooks-automation/SKILL.md +1 -1
- package/.claude/skills/mastermind-adapters/SKILL.md +0 -11
- package/.claude/skills/mastermind-agents/SKILL.md +0 -11
- package/.claude/skills/mastermind-backup/SKILL.md +0 -11
- package/.claude/skills/mastermind-bootstrap/SKILL.md +0 -11
- package/.claude/skills/mastermind-delegation/SKILL.md +14 -12
- package/.claude/skills/mastermind-idea/SKILL.md +0 -5
- package/.claude/skills/mastermind-monitor/SKILL.md +0 -15
- package/.claude/skills/mastermind-org-settings/SKILL.md +0 -11
- package/.claude/skills/mastermind-plugins/SKILL.md +0 -11
- package/.claude/skills/mastermind-protocol/SKILL.md +6 -124
- package/.claude/skills/mastermind-repeat/SKILL.md +0 -25
- package/.claude/skills/mastermind-review/SKILL.md +1 -1
- package/.claude/skills/mastermind-stoporg/SKILL.md +0 -19
- package/.claude/skills/memory-toolkit/SKILL.md +12 -11
- package/.claude/skills/monodesign/scripts/detector/engines/browser/drivers.mjs +8 -1
- package/.claude/skills/pair-programming/SKILL.md +1 -1
- package/.claude/skills/performance-analysis/SKILL.md +228 -484
- package/.claude/skills/specialagent/SKILL.md +31 -133
- package/.claude/skills/swarm-advanced/SKILL.md +2 -2
- package/.claude/skills/swarm-orchestration/SKILL.md +220 -150
- package/.claude/skills/verification-quality/SKILL.md +247 -571
- package/README.md +3 -3
- package/dist/src/commands/agent-lifecycle.js +3 -3
- package/dist/src/commands/agent-lifecycle.js.map +1 -1
- package/dist/src/commands/autopilot.d.ts.map +1 -1
- package/dist/src/commands/autopilot.js +7 -1
- package/dist/src/commands/autopilot.js.map +1 -1
- package/dist/src/commands/doc.d.ts.map +1 -1
- package/dist/src/commands/doc.js +14 -3
- package/dist/src/commands/doc.js.map +1 -1
- package/dist/src/commands/doctor-env-checks.d.ts +1 -1
- package/dist/src/commands/doctor-env-checks.d.ts.map +1 -1
- package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
- package/dist/src/commands/doctor-project-checks.js +3 -37
- package/dist/src/commands/doctor-project-checks.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +30 -1
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/hooks-coverage-commands.d.ts.map +1 -1
- package/dist/src/commands/hooks-coverage-commands.js +75 -67
- package/dist/src/commands/hooks-coverage-commands.js.map +1 -1
- package/dist/src/commands/hooks-workers.d.ts.map +1 -1
- package/dist/src/commands/hooks-workers.js +41 -10
- package/dist/src/commands/hooks-workers.js.map +1 -1
- package/dist/src/commands/hooks.js +1 -1
- package/dist/src/commands/index.d.ts +1 -1
- package/dist/src/commands/index.d.ts.map +1 -1
- package/dist/src/commands/index.js +20 -4
- package/dist/src/commands/index.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +80 -7
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/mcp.d.ts.map +1 -1
- package/dist/src/commands/mcp.js +78 -2
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/neural-optimize.d.ts.map +1 -1
- package/dist/src/commands/neural-optimize.js +27 -5
- package/dist/src/commands/neural-optimize.js.map +1 -1
- package/dist/src/commands/org-observe.d.ts.map +1 -1
- package/dist/src/commands/org-observe.js +37 -30
- package/dist/src/commands/org-observe.js.map +1 -1
- package/dist/src/commands/org.d.ts.map +1 -1
- package/dist/src/commands/org.js +129 -2
- package/dist/src/commands/org.js.map +1 -1
- package/dist/src/commands/performance.js +1 -1
- package/dist/src/commands/performance.js.map +1 -1
- package/dist/src/commands/security-cve.d.ts.map +1 -1
- package/dist/src/commands/security-cve.js +1 -11
- package/dist/src/commands/security-cve.js.map +1 -1
- package/dist/src/commands/security-misc.d.ts +0 -9
- package/dist/src/commands/security-misc.d.ts.map +1 -1
- package/dist/src/commands/security-misc.js +33 -54
- package/dist/src/commands/security-misc.js.map +1 -1
- package/dist/src/commands/security-scan.d.ts.map +1 -1
- package/dist/src/commands/security-scan.js +3 -11
- package/dist/src/commands/security-scan.js.map +1 -1
- package/dist/src/commands/swarm.d.ts.map +1 -1
- package/dist/src/commands/swarm.js +7 -2
- package/dist/src/commands/swarm.js.map +1 -1
- package/dist/src/commands/ui.d.ts +8 -0
- package/dist/src/commands/ui.d.ts.map +1 -0
- package/dist/src/commands/ui.js +94 -0
- package/dist/src/commands/ui.js.map +1 -0
- package/dist/src/init/claudemd-generator.d.ts.map +1 -1
- package/dist/src/init/claudemd-generator.js +7 -9
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +13 -3
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/kimi-generator.d.ts +3 -2
- package/dist/src/init/kimi-generator.d.ts.map +1 -1
- package/dist/src/init/kimi-generator.js +45 -13
- package/dist/src/init/kimi-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.d.ts +1 -1
- package/dist/src/init/statusline-generator.js +1 -1
- package/dist/src/init/write-capabilities.js +7 -7
- package/dist/src/init/write-capabilities.js.map +1 -1
- package/dist/src/knowledge/document-pipeline.d.ts.map +1 -1
- package/dist/src/knowledge/document-pipeline.js +1 -0
- package/dist/src/knowledge/document-pipeline.js.map +1 -1
- package/dist/src/knowledge/eval/golden-set.d.ts.map +1 -1
- package/dist/src/knowledge/eval/golden-set.js +21 -32
- package/dist/src/knowledge/eval/golden-set.js.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +2 -2
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-intelligence.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-intelligence.js +29 -3
- package/dist/src/mcp-tools/hooks-intelligence.js.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.js +32 -19
- package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
- package/dist/src/mcp-tools/monograph/query-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/query-tools.js +48 -18
- package/dist/src/mcp-tools/monograph/query-tools.js.map +1 -1
- package/dist/src/mcp-tools/performance-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/performance-tools.js +15 -10
- package/dist/src/mcp-tools/performance-tools.js.map +1 -1
- package/dist/src/memory/embedding-operations.d.ts +4 -0
- package/dist/src/memory/embedding-operations.d.ts.map +1 -1
- package/dist/src/memory/embedding-operations.js +125 -32
- package/dist/src/memory/embedding-operations.js.map +1 -1
- package/dist/src/memory/hnsw-operations.d.ts +1 -1
- package/dist/src/memory/hnsw-operations.js +1 -1
- package/dist/src/memory/memory-bridge.d.ts +8 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +37 -8
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-read.d.ts +1 -1
- package/dist/src/memory/memory-read.js +2 -2
- package/dist/src/memory/memory-read.js.map +1 -1
- package/dist/src/orgrt/antigravity-runner.d.ts.map +1 -1
- package/dist/src/orgrt/antigravity-runner.js +6 -6
- package/dist/src/orgrt/antigravity-runner.js.map +1 -1
- package/dist/src/orgrt/checkpoint-ops.d.ts +11 -1
- package/dist/src/orgrt/checkpoint-ops.d.ts.map +1 -1
- package/dist/src/orgrt/checkpoint-ops.js +18 -86
- package/dist/src/orgrt/checkpoint-ops.js.map +1 -1
- package/dist/src/orgrt/checkpoint.d.ts +1 -1
- package/dist/src/orgrt/checkpoint.d.ts.map +1 -1
- package/dist/src/orgrt/checkpoint.js +3 -3
- package/dist/src/orgrt/checkpoint.js.map +1 -1
- package/dist/src/orgrt/daemon.d.ts +9 -1
- package/dist/src/orgrt/daemon.d.ts.map +1 -1
- package/dist/src/orgrt/daemon.js +267 -139
- package/dist/src/orgrt/daemon.js.map +1 -1
- package/dist/src/orgrt/decisions.d.ts +13 -0
- package/dist/src/orgrt/decisions.d.ts.map +1 -1
- package/dist/src/orgrt/decisions.js +95 -0
- package/dist/src/orgrt/decisions.js.map +1 -1
- package/dist/src/orgrt/forwarder.d.ts.map +1 -1
- package/dist/src/orgrt/forwarder.js +148 -15
- package/dist/src/orgrt/forwarder.js.map +1 -1
- package/dist/src/orgrt/kimicode-runner.js +1 -1
- package/dist/src/orgrt/kimicode-runner.js.map +1 -1
- package/dist/src/orgrt/opencode-runner.js +1 -1
- package/dist/src/orgrt/opencode-runner.js.map +1 -1
- package/dist/src/orgrt/session.d.ts +27 -1
- package/dist/src/orgrt/session.d.ts.map +1 -1
- package/dist/src/orgrt/session.js +67 -6
- package/dist/src/orgrt/session.js.map +1 -1
- package/dist/src/orgrt/task-dag.d.ts +11 -1
- package/dist/src/orgrt/task-dag.d.ts.map +1 -1
- package/dist/src/orgrt/task-dag.js +93 -2
- package/dist/src/orgrt/task-dag.js.map +1 -1
- package/dist/src/orgrt/templates.d.ts.map +1 -1
- package/dist/src/orgrt/templates.js +26 -2
- package/dist/src/orgrt/templates.js.map +1 -1
- package/dist/src/orgrt/types.d.ts +77 -1
- package/dist/src/orgrt/types.d.ts.map +1 -1
- package/dist/src/orgrt/types.js +28 -2
- package/dist/src/orgrt/types.js.map +1 -1
- package/dist/src/orgrt/vercel-providers.d.ts.map +1 -1
- package/dist/src/orgrt/vercel-providers.js +9 -4
- package/dist/src/orgrt/vercel-providers.js.map +1 -1
- package/dist/src/orgrt/vercel-runner.d.ts +0 -23
- package/dist/src/orgrt/vercel-runner.d.ts.map +1 -1
- package/dist/src/orgrt/vercel-runner.js +38 -7
- package/dist/src/orgrt/vercel-runner.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/.claude/commands/mastermind/approvev1.md +0 -94
- package/.claude/commands/mastermind/architect.md +0 -52
- package/.claude/commands/mastermind/autodev.md +0 -28
- package/.claude/commands/mastermind/build.md +0 -23
- package/.claude/commands/mastermind/finish.md +0 -17
- package/.claude/commands/mastermind/runorgv1.md +0 -159
- package/.claude/commands/mastermind/taskdev.md +0 -23
- package/.claude/commands/mastermind/tdd.md +0 -19
- package/.claude/commands/mastermind/verify.md +0 -19
- package/.claude/skills/mastermind-approvev1/SKILL.md +0 -191
- package/.claude/skills/mastermind-architect/SKILL.md +0 -862
- package/.claude/skills/mastermind-autodev/SKILL.md +0 -360
- package/.claude/skills/mastermind-build/SKILL.md +0 -169
- package/.claude/skills/mastermind-companies/SKILL.md +0 -256
- package/.claude/skills/mastermind-content/SKILL.md +0 -197
- package/.claude/skills/mastermind-costs/SKILL.md +0 -151
- package/.claude/skills/mastermind-finance/SKILL.md +0 -166
- package/.claude/skills/mastermind-finish/SKILL.md +0 -251
- package/.claude/skills/mastermind-heartbeatv1/SKILL.md +0 -167
- package/.claude/skills/mastermind-instance-settings/SKILL.md +0 -315
- package/.claude/skills/mastermind-marketing/SKILL.md +0 -228
- package/.claude/skills/mastermind-marketing/references/copywriting-frameworks.md +0 -181
- package/.claude/skills/mastermind-marketing/references/persuasion-psychology.md +0 -158
- package/.claude/skills/mastermind-ops/SKILL.md +0 -168
- package/.claude/skills/mastermind-org-chart/SKILL.md +0 -209
- package/.claude/skills/mastermind-project-detail/SKILL.md +0 -249
- package/.claude/skills/mastermind-project-workspace/SKILL.md +0 -244
- package/.claude/skills/mastermind-projects/SKILL.md +0 -167
- package/.claude/skills/mastermind-runorgv1/SKILL.md +0 -731
- package/.claude/skills/mastermind-sales/SKILL.md +0 -170
- package/.claude/skills/mastermind-taskdev/SKILL.md +0 -377
- package/.claude/skills/mastermind-taskdev/code-quality-reviewer-prompt.md +0 -60
- package/.claude/skills/mastermind-taskdev/final-reviewer-prompt.md +0 -144
- package/.claude/skills/mastermind-taskdev/implementer-prompt.md +0 -114
- package/.claude/skills/mastermind-taskdev/spec-reviewer-prompt.md +0 -80
- package/.claude/skills/mastermind-tdd/SKILL.md +0 -424
- package/.claude/skills/mastermind-verify/SKILL.md +0 -196
- package/.claude/skills/mastermind-wiki/SKILL.md +0 -314
- package/.claude/skills/monolean-review/SKILL.md +0 -57
|
@@ -1,256 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: mastermind-companies
|
|
3
|
-
description: Mastermind companies — multi-org management. List all orgs with agent/issue stats, switch the active org, rename an org, delete an org (with confirmation), and view per-org summary. Mirrors Companies.tsx.
|
|
4
|
-
type: domain-skill
|
|
5
|
-
default_mode: confirm
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Mastermind Companies
|
|
9
|
-
|
|
10
|
-
This skill is invoked by `mastermind:companies` or directly via `/mastermind:companies`.
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Inputs
|
|
15
|
-
|
|
16
|
-
- `brain_context`: BRAIN CONTEXT block (injected by command, or loaded below if standalone)
|
|
17
|
-
- `action`: list | select | rename | delete | stats | create
|
|
18
|
-
- `org_name`: org name to target (required for select/rename/delete/stats)
|
|
19
|
-
- `new_name`: new org name (required for rename)
|
|
20
|
-
- `confirm`: yes (required second step for delete)
|
|
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 mastermind-protocol/SKILL.md Brain Load Procedure with namespace: `ops`.
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## Step 1 — Locate All Orgs
|
|
32
|
-
|
|
33
|
-
```bash
|
|
34
|
-
orgsDir=".monomind/orgs"
|
|
35
|
-
[ ! -d "$orgsDir" ] && { echo "No orgs directory found. Run /mastermind:createorg to create your first org."; exit 0; }
|
|
36
|
-
|
|
37
|
-
# Collect all org names from .json files (not -members, -issues, etc.)
|
|
38
|
-
orgNames=$(ls "$orgsDir"/*.json 2>/dev/null | grep -vE -- '-approvals|-state|-activity|-goals|-routines|-projects|-members|-issues|-workspaces|-worktrees|-environments|-plugins|-adapters|-bootstrap|-threads|-budgets|-project-workspaces|-approval-comments' | xargs -I{} basename {} .json | sort)
|
|
39
|
-
|
|
40
|
-
# Track active org
|
|
41
|
-
activeFile=".monomind/active-org"
|
|
42
|
-
activeOrg=$([ -f "$activeFile" ] && cat "$activeFile" || echo "")
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## Step 2 — Execute Action
|
|
48
|
-
|
|
49
|
-
### list (default)
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
echo "ORGS"
|
|
53
|
-
echo "────────────────────────────────────────────────────────"
|
|
54
|
-
printf "%-22s %-8s %-8s %-8s %s\n" "NAME" "AGENTS" "ISSUES" "MEMBERS" "STATUS"
|
|
55
|
-
echo "────────────────────────────────────────────────────────"
|
|
56
|
-
|
|
57
|
-
[ -z "$orgNames" ] && { echo " No orgs found. Create one: /mastermind:createorg"; exit 0; }
|
|
58
|
-
|
|
59
|
-
echo "$orgNames" | while read -r name; do
|
|
60
|
-
orgFile="$orgsDir/${name}.json"
|
|
61
|
-
[ ! -f "$orgFile" ] && continue
|
|
62
|
-
|
|
63
|
-
agents=$(jq -r '(.roles // []) | length' "$orgFile" 2>/dev/null || echo 0)
|
|
64
|
-
issues=$([ -f "$orgsDir/${name}-issues.json" ] && jq '[(.issues // [])[] | select(.status == "open" or .status == "in_progress")] | length' "$orgsDir/${name}-issues.json" 2>/dev/null || echo 0)
|
|
65
|
-
members=$([ -f "$orgsDir/${name}-members.json" ] && jq '.members | length' "$orgsDir/${name}-members.json" 2>/dev/null || echo 0)
|
|
66
|
-
status=$([ "$name" = "$activeOrg" ] && echo "● ACTIVE" || echo "")
|
|
67
|
-
|
|
68
|
-
printf "%-22s %-8s %-8s %-8s %s\n" "$name" "$agents" "$issues" "$members" "$status"
|
|
69
|
-
done
|
|
70
|
-
|
|
71
|
-
echo ""
|
|
72
|
-
total=$(echo "$orgNames" | wc -w | tr -d ' ')
|
|
73
|
-
echo " Total orgs: $total"
|
|
74
|
-
[ -n "$activeOrg" ] && echo " Active org: $activeOrg"
|
|
75
|
-
echo ""
|
|
76
|
-
echo " Select: --action select --org-name <name>"
|
|
77
|
-
echo " Rename: --action rename --org-name <name> --new-name <new>"
|
|
78
|
-
echo " Delete: --action delete --org-name <name>"
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
### select
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
[ -z "$org_name" ] && { echo "ERROR: --org-name required."; exit 1; }
|
|
85
|
-
|
|
86
|
-
orgFile="$orgsDir/${org_name}.json"
|
|
87
|
-
[ ! -f "$orgFile" ] && { echo "ERROR: Org '$org_name' not found."; exit 1; }
|
|
88
|
-
|
|
89
|
-
echo "$org_name" > "$activeFile"
|
|
90
|
-
echo "Active org set to: $org_name"
|
|
91
|
-
echo " All mastermind commands will default to this org."
|
|
92
|
-
echo " To use a different org, pass --org-name explicitly."
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
### rename
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
[ -z "$org_name" ] && { echo "ERROR: --org-name required."; exit 1; }
|
|
99
|
-
[ -z "$new_name" ] && { echo "ERROR: --new-name required."; exit 1; }
|
|
100
|
-
|
|
101
|
-
# Validate new name
|
|
102
|
-
echo "$new_name" | grep -qE '^[a-z0-9][a-z0-9_-]*$' || {
|
|
103
|
-
echo "ERROR: --new-name must be lowercase alphanumeric with hyphens/underscores (e.g. my-org)."
|
|
104
|
-
exit 1
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
orgFile="$orgsDir/${org_name}.json"
|
|
108
|
-
[ ! -f "$orgFile" ] && { echo "ERROR: Org '$org_name' not found."; exit 1; }
|
|
109
|
-
|
|
110
|
-
[ -f "$orgsDir/${new_name}.json" ] && { echo "ERROR: Org '$new_name' already exists."; exit 1; }
|
|
111
|
-
|
|
112
|
-
# Rename main config file
|
|
113
|
-
mv "$orgFile" "$orgsDir/${new_name}.json"
|
|
114
|
-
|
|
115
|
-
# Rename all associated files
|
|
116
|
-
for suffix in state members issues goals projects routines approvals adapters plugins environments workspaces worktrees activity threads budgets project-workspaces approval-comments bootstrap secrets; do
|
|
117
|
-
f="$orgsDir/${org_name}-${suffix}.json"
|
|
118
|
-
[ -f "$f" ] && mv "$f" "$orgsDir/${new_name}-${suffix}.json"
|
|
119
|
-
f2="$orgsDir/${org_name}-${suffix}.jsonl"
|
|
120
|
-
[ -f "$f2" ] && mv "$f2" "$orgsDir/${new_name}-${suffix}.jsonl"
|
|
121
|
-
done
|
|
122
|
-
|
|
123
|
-
# Update name field inside config
|
|
124
|
-
tmp="$orgsDir/${new_name}.json.tmp"
|
|
125
|
-
jq --arg n "$new_name" '.name = $n' "$orgsDir/${new_name}.json" > "$tmp" && mv "$tmp" "$orgsDir/${new_name}.json"
|
|
126
|
-
|
|
127
|
-
# Update active org pointer if needed
|
|
128
|
-
[ "$(cat "$activeFile" 2>/dev/null)" = "$org_name" ] && echo "$new_name" > "$activeFile"
|
|
129
|
-
|
|
130
|
-
echo "Org renamed: $org_name → $new_name"
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
### delete
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
[ -z "$org_name" ] && { echo "ERROR: --org-name required."; exit 1; }
|
|
137
|
-
|
|
138
|
-
orgFile="$orgsDir/${org_name}.json"
|
|
139
|
-
[ ! -f "$orgFile" ] && { echo "ERROR: Org '$org_name' not found."; exit 1; }
|
|
140
|
-
|
|
141
|
-
if [ "${confirm:-}" != "yes" ]; then
|
|
142
|
-
agentCount=$(jq '(.roles // []) | length' "$orgFile" 2>/dev/null || echo "?")
|
|
143
|
-
echo "DELETE CONFIRMATION REQUIRED"
|
|
144
|
-
echo "────────────────────────────────────────────────────────"
|
|
145
|
-
echo " Org: $org_name"
|
|
146
|
-
echo " Agents: $agentCount"
|
|
147
|
-
echo ""
|
|
148
|
-
echo " This will permanently delete the org and ALL associated data."
|
|
149
|
-
echo " To confirm: --action delete --org-name $org_name --confirm yes"
|
|
150
|
-
exit 0
|
|
151
|
-
fi
|
|
152
|
-
|
|
153
|
-
# Delete all org files
|
|
154
|
-
rm -f "$orgsDir/${org_name}.json"
|
|
155
|
-
for suffix in state members issues goals projects routines approvals adapters plugins environments workspaces worktrees activity threads budgets project-workspaces approval-comments bootstrap secrets; do
|
|
156
|
-
rm -f "$orgsDir/${org_name}-${suffix}.json"
|
|
157
|
-
rm -f "$orgsDir/${org_name}-${suffix}.jsonl"
|
|
158
|
-
done
|
|
159
|
-
|
|
160
|
-
# Clear active org if it was this org
|
|
161
|
-
[ "$(cat "$activeFile" 2>/dev/null)" = "$org_name" ] && rm -f "$activeFile"
|
|
162
|
-
|
|
163
|
-
echo "Org '$org_name' deleted permanently."
|
|
164
|
-
echo " All associated data removed."
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### stats
|
|
168
|
-
|
|
169
|
-
```bash
|
|
170
|
-
[ -z "$org_name" ] && { echo "ERROR: --org-name required."; exit 1; }
|
|
171
|
-
|
|
172
|
-
orgFile="$orgsDir/${org_name}.json"
|
|
173
|
-
[ ! -f "$orgFile" ] && { echo "ERROR: Org '$org_name' not found."; exit 1; }
|
|
174
|
-
|
|
175
|
-
echo "ORG STATS — $org_name"
|
|
176
|
-
echo "────────────────────────────────────────────────────────"
|
|
177
|
-
|
|
178
|
-
# Agent stats
|
|
179
|
-
agents=$(jq '(.roles // []) | length' "$orgFile")
|
|
180
|
-
gov=$(jq -r '.governance // "(not set)"' "$orgFile")
|
|
181
|
-
echo " Agents: $agents"
|
|
182
|
-
echo " Governance: $gov"
|
|
183
|
-
|
|
184
|
-
# Issues
|
|
185
|
-
if [ -f "$orgsDir/${org_name}-issues.json" ]; then
|
|
186
|
-
total=$(jq '.issues | length' "$orgsDir/${org_name}-issues.json")
|
|
187
|
-
open=$(jq '[(.issues // [])[] | select(.status == "open" or .status == "in_progress")] | length' "$orgsDir/${org_name}-issues.json")
|
|
188
|
-
done=$(jq '[(.issues // [])[] | select(.status == "done")] | length' "$orgsDir/${org_name}-issues.json")
|
|
189
|
-
echo " Issues: $total total ($open open, $done done)"
|
|
190
|
-
fi
|
|
191
|
-
|
|
192
|
-
# Goals
|
|
193
|
-
[ -f "$orgsDir/${org_name}-goals.json" ] && echo " Goals: $(jq '.goals | length' "$orgsDir/${org_name}-goals.json")"
|
|
194
|
-
|
|
195
|
-
# Projects
|
|
196
|
-
[ -f "$orgsDir/${org_name}-projects.json" ] && echo " Projects: $(jq '.projects | length' "$orgsDir/${org_name}-projects.json")"
|
|
197
|
-
|
|
198
|
-
# Members
|
|
199
|
-
[ -f "$orgsDir/${org_name}-members.json" ] && echo " Members: $(jq '.members | length' "$orgsDir/${org_name}-members.json")"
|
|
200
|
-
|
|
201
|
-
# Routines
|
|
202
|
-
[ -f "$orgsDir/${org_name}-routines.json" ] && echo " Routines: $(jq '.routines | length' "$orgsDir/${org_name}-routines.json")"
|
|
203
|
-
|
|
204
|
-
# Pending approvals
|
|
205
|
-
if [ -f "$orgsDir/${org_name}-approvals.json" ]; then
|
|
206
|
-
pending=$(jq '[(.approvals // [])[] | select(.status == "pending")] | length' "$orgsDir/${org_name}-approvals.json")
|
|
207
|
-
echo " Pending approvals: $pending"
|
|
208
|
-
fi
|
|
209
|
-
```
|
|
210
|
-
|
|
211
|
-
### create
|
|
212
|
-
|
|
213
|
-
```bash
|
|
214
|
-
[ -z "$org_name" ] && { echo "ERROR: --org-name required."; exit 1; }
|
|
215
|
-
|
|
216
|
-
echo "$org_name" | grep -qE '^[a-z0-9][a-z0-9_-]*$' || {
|
|
217
|
-
echo "ERROR: --org-name must be lowercase alphanumeric with hyphens/underscores."
|
|
218
|
-
exit 1
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
orgFile="$orgsDir/${org_name}.json"
|
|
222
|
-
[ -f "$orgFile" ] && { echo "ERROR: Org '$org_name' already exists."; exit 1; }
|
|
223
|
-
|
|
224
|
-
mkdir -p "$orgsDir"
|
|
225
|
-
ts=$(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
226
|
-
cat > "$orgFile" <<EOF
|
|
227
|
-
{
|
|
228
|
-
"name": "$org_name",
|
|
229
|
-
"governance": "auto",
|
|
230
|
-
"roles": [],
|
|
231
|
-
"created_at": "$ts"
|
|
232
|
-
}
|
|
233
|
-
EOF
|
|
234
|
-
|
|
235
|
-
echo "Org '$org_name' created."
|
|
236
|
-
echo " Add agents: /mastermind:new-agent --org $org_name --title 'My Agent'"
|
|
237
|
-
echo " Run: /mastermind:runorg --org $org_name"
|
|
238
|
-
```
|
|
239
|
-
|
|
240
|
-
---
|
|
241
|
-
|
|
242
|
-
## Step 3 — Return Output
|
|
243
|
-
|
|
244
|
-
```yaml
|
|
245
|
-
domain: ops
|
|
246
|
-
status: complete
|
|
247
|
-
action: <action>
|
|
248
|
-
org_name: <org_name>
|
|
249
|
-
active_org: <active_org>
|
|
250
|
-
```
|
|
251
|
-
|
|
252
|
-
---
|
|
253
|
-
|
|
254
|
-
## Step 4 — Brain Write (standalone only)
|
|
255
|
-
|
|
256
|
-
If `caller` is not "command", follow mastermind-protocol/SKILL.md Brain Write Procedure for domain `ops`.
|
|
@@ -1,197 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: mastermind-content
|
|
3
|
-
description: Mastermind content domain — blog posts, threads, docs, newsletters. Spawns a Content Manager who runs a ring pipeline (research→draft→edit→publish) for polished output.
|
|
4
|
-
type: domain-skill
|
|
5
|
-
default_mode: confirm
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Mastermind Content Domain
|
|
9
|
-
|
|
10
|
-
This skill is invoked by `mastermind:master` or directly via `/mastermind:content`.
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Inputs
|
|
15
|
-
|
|
16
|
-
- `brain_context`: BRAIN CONTEXT block (injected by master, or loaded standalone via mastermind-protocol/SKILL.md brain load)
|
|
17
|
-
- `prompt`: the content goal for this run
|
|
18
|
-
- `project_name`: monotask space name
|
|
19
|
-
- `board_id`: monotask board ID (set by master, or created standalone)
|
|
20
|
-
- `mode`: auto | confirm
|
|
21
|
-
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
## Reference Library
|
|
25
|
-
|
|
26
|
-
Before generating or editing any prose, identify which reference files apply and inject them into the agent briefing.
|
|
27
|
-
|
|
28
|
-
| Reference | When to include |
|
|
29
|
-
|---|---|
|
|
30
|
-
| `.claude/skills/stop-slop/SKILL.md` | Stage 3 (Edit) and Stage 4 (Review) — not Draft |
|
|
31
|
-
| `.claude/skills/stop-slop/references/phrases.md` | Full edit pass — check for banned phrases |
|
|
32
|
-
| `.claude/skills/stop-slop/references/structures.md` | Full edit pass — check structural patterns |
|
|
33
|
-
| `.claude/skills/stop-slop/references/examples.md` | When the agent needs before/after context |
|
|
34
|
-
|
|
35
|
-
In each Edit/Review stage briefing (Stage 3), add:
|
|
36
|
-
```
|
|
37
|
-
REFERENCE FILES: Read these before editing:
|
|
38
|
-
- .claude/skills/stop-slop/SKILL.md
|
|
39
|
-
- .claude/skills/stop-slop/references/phrases.md
|
|
40
|
-
- .claude/skills/stop-slop/references/structures.md
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## Complexity Assessment
|
|
46
|
-
|
|
47
|
-
Assess the prompt to determine execution mode:
|
|
48
|
-
|
|
49
|
-
**Simple (direct execution):** Single short piece, one agent:
|
|
50
|
-
- "Write a one-paragraph product description"
|
|
51
|
-
- "Draft a 280-character tweet about the release"
|
|
52
|
-
→ Use a single Content Creator agent. Skip manager delegation.
|
|
53
|
-
|
|
54
|
-
**Complex (spawn Content Manager agent):** Any of these:
|
|
55
|
-
- Blog post or article (research + draft + edit)
|
|
56
|
-
- Newsletter issue requiring multiple sections
|
|
57
|
-
- Documentation rewrite or new doc set
|
|
58
|
-
- Thread series across multiple posts
|
|
59
|
-
- Content requiring subject matter research before writing
|
|
60
|
-
→ Spawn Content Manager agent with ring pipeline.
|
|
61
|
-
|
|
62
|
-
---
|
|
63
|
-
|
|
64
|
-
## Standalone Execution (when called without master)
|
|
65
|
-
|
|
66
|
-
If this skill is invoked directly (not by master):
|
|
67
|
-
|
|
68
|
-
1. Load brain context following mastermind-protocol/SKILL.md Brain Load Procedure (namespace: `content`)
|
|
69
|
-
2. Run intake from mastermind-intake/SKILL.md if prompt is vague
|
|
70
|
-
3. Follow mastermind-protocol/SKILL.md Monotask Space+Board Setup Procedure:
|
|
71
|
-
```bash
|
|
72
|
-
project_name="${project_name:-$(basename "$PWD")}"
|
|
73
|
-
space_id=$(monotask space list 2>/dev/null | awk -F' \| ' -v n="$project_name" '$2==n{print $1}' | head -1)
|
|
74
|
-
[ -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}')
|
|
75
|
-
[ -z "$space_id" ] && { echo "ERROR: Could not find or create space '$project_name'"; exit 1; }
|
|
76
|
-
board_id=$(monotask board create "content" --json | jq -r '.id // empty')
|
|
77
|
-
[ -z "$board_id" ] && { echo "ERROR: Failed to create content board"; exit 1; }
|
|
78
|
-
monotask space boards add "$space_id" "$board_id" >/dev/null 2>&1 || true
|
|
79
|
-
todo_col=$(monotask column create "$board_id" "Todo" --json | jq -r '.id')
|
|
80
|
-
doing_col=$(monotask column create "$board_id" "Doing" --json | jq -r '.id')
|
|
81
|
-
done_col=$(monotask column create "$board_id" "Done" --json | jq -r '.id')
|
|
82
|
-
```
|
|
83
|
-
4. Proceed with complexity assessment below
|
|
84
|
-
5. At end: follow mastermind-protocol/SKILL.md Brain Write Procedure (namespace: `content`)
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
## Complex Execution — Content Manager Agent
|
|
89
|
-
|
|
90
|
-
Spawn a Content Manager agent via Task tool:
|
|
91
|
-
|
|
92
|
-
```javascript
|
|
93
|
-
Task({
|
|
94
|
-
subagent_type: "coordinator",
|
|
95
|
-
description: `You are the Content Manager for project <project_name>.
|
|
96
|
-
|
|
97
|
-
CONTEXT: <date> | Project: <project_name> | Spawned by: mastermind:content
|
|
98
|
-
|
|
99
|
-
BRAIN CONTEXT:
|
|
100
|
-
<brain_context>
|
|
101
|
-
|
|
102
|
-
YOUR BOARD: <board_id>
|
|
103
|
-
YOUR GOAL: <prompt>
|
|
104
|
-
|
|
105
|
-
STEP 1 — PLAN
|
|
106
|
-
Decompose content production into sequential pipeline stages. The ring topology means output from each stage feeds the next:
|
|
107
|
-
Stage 1: Research — gather facts, sources, angles
|
|
108
|
-
Stage 2: Draft — produce first draft from research
|
|
109
|
-
Stage 3: Edit — refine, fact-check, tone-align
|
|
110
|
-
Stage 4: Format — structure for target platform
|
|
111
|
-
|
|
112
|
-
Identify for each stage:
|
|
113
|
-
- What input it receives from the prior stage
|
|
114
|
-
- What deliverable it produces
|
|
115
|
-
- Which specialist handles it
|
|
116
|
-
|
|
117
|
-
STEP 2 — CREATE TASKS
|
|
118
|
-
For each pipeline stage, create a monotask card on the project board.
|
|
119
|
-
First look up column IDs and assign shell variables:
|
|
120
|
-
```bash
|
|
121
|
-
columns=$(monotask column list "$BOARD_ID" --json)
|
|
122
|
-
COL_TODO_ID=$(echo "$columns" | jq -r '.[] | select(.title == "Todo" or .title == "Backlog") | .id' | head -1)
|
|
123
|
-
COL_DONE_ID=$(echo "$columns" | jq -r '.[] | select(.title == "Done") | .id' | head -1)
|
|
124
|
-
```
|
|
125
|
-
Then create the card:
|
|
126
|
-
```bash
|
|
127
|
-
result=$(monotask card create "$BOARD_ID" "$COL_TODO_ID" "<short summary of pipeline stage goal, ≤80 chars>" --json)
|
|
128
|
-
CARD_ID=$(echo "$result" | jq -r '.id // empty')
|
|
129
|
-
monotask card set-description "$BOARD_ID" "$CARD_ID" "[this stage's specific production goal]"
|
|
130
|
-
monotask card comment add "$BOARD_ID" "$CARD_ID" "CONTEXT: <date> | Project: <project_name> | Created by: Content Manager
|
|
131
|
-
BRAIN MEMORY: [paste most relevant 3-5 brain context excerpts]
|
|
132
|
-
SCOPE: [content type, target audience, platform, word count, tone]
|
|
133
|
-
CONSTRAINTS: [brand voice, SEO requirements, factual accuracy standards, style guide]
|
|
134
|
-
REFERENCE FILES: [for Stage 3 edit only: .claude/skills/stop-slop/SKILL.md, .claude/skills/stop-slop/references/phrases.md, .claude/skills/stop-slop/references/structures.md]
|
|
135
|
-
SUCCESS CRITERIA:
|
|
136
|
-
- [ ] [checkable item]
|
|
137
|
-
AGENT: [researcher | Content Creator | Technical Writer | Code Reviewer (as editor)]
|
|
138
|
-
SWARM: ring 4 raft pipeline
|
|
139
|
-
DEPENDENCIES: [prior stage task ID — pipeline is sequential]
|
|
140
|
-
OUTPUT FORMAT: unified output schema"
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
STEP 3 — EXECUTE
|
|
144
|
-
Spawn Task agents in pipeline order (ring topology — each must complete before next starts):
|
|
145
|
-
Stage 1 research: subagent_type "researcher"
|
|
146
|
-
Stage 2 draft: subagent_type "Content Creator"
|
|
147
|
-
Stage 3 edit: subagent_type "Technical Writer"
|
|
148
|
-
Stage 4 format/publish: subagent_type "Content Creator"
|
|
149
|
-
|
|
150
|
-
Also run /mastermind:do --board <board_id> to track execution.
|
|
151
|
-
|
|
152
|
-
STEP 4 — COLLECT AND RETURN
|
|
153
|
-
Collect the final formatted content. Return to caller:
|
|
154
|
-
|
|
155
|
-
domain: content
|
|
156
|
-
status: complete | partial | blocked
|
|
157
|
-
artifacts:
|
|
158
|
-
- path: [path to final content file]
|
|
159
|
-
type: copy
|
|
160
|
-
decisions:
|
|
161
|
-
- what: [angle, tone, or structure decisions made]
|
|
162
|
-
why: [reasoning]
|
|
163
|
-
confidence: [0.0-1.0]
|
|
164
|
-
outcome: shipped | pending
|
|
165
|
-
lessons:
|
|
166
|
-
- what_worked: [what produced the strongest draft]
|
|
167
|
-
- what_didnt: [what required multiple iterations]
|
|
168
|
-
next_actions:
|
|
169
|
-
- [e.g. "run mastermind:marketing to distribute the content"]
|
|
170
|
-
- [e.g. "run mastermind:review for final quality check"]
|
|
171
|
-
board_url: monotask://<project_name>/content
|
|
172
|
-
run_id: <ISO8601-timestamp>`,
|
|
173
|
-
run_in_background: true
|
|
174
|
-
})
|
|
175
|
-
```
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## Simple Execution
|
|
180
|
-
|
|
181
|
-
For simple tasks (single agent, short-form content):
|
|
182
|
-
|
|
183
|
-
1. Spawn one Task agent with the content request as a self-contained briefing
|
|
184
|
-
2. Collect output
|
|
185
|
-
3. Return unified output schema with `status: complete`
|
|
186
|
-
|
|
187
|
-
---
|
|
188
|
-
|
|
189
|
-
## Domain Swarm Defaults
|
|
190
|
-
|
|
191
|
-
| Task Type | Agent | Swarm |
|
|
192
|
-
|---|---|---|
|
|
193
|
-
| Full article / blog post | researcher → writer → editor | ring 4 raft pipeline |
|
|
194
|
-
| Newsletter | coordinator + writers | ring 4 raft pipeline |
|
|
195
|
-
| Documentation rewrite | Technical Writer + researcher | ring 4 raft pipeline |
|
|
196
|
-
| Social thread | Content Creator | hierarchical 3 raft specialized |
|
|
197
|
-
| Short-form copy | Content Creator | single agent |
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: mastermind-costs
|
|
3
|
-
description: Mastermind costs — track token spend and budget burn rate per agent in a running org. Shows current window spend, budget policy, and alerts when approaching limits.
|
|
4
|
-
type: domain-skill
|
|
5
|
-
default_mode: auto
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# Mastermind Costs
|
|
9
|
-
|
|
10
|
-
This skill is invoked by `mastermind:costs` or directly via `/mastermind:costs`.
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Inputs
|
|
15
|
-
|
|
16
|
-
- `brain_context`: BRAIN CONTEXT block
|
|
17
|
-
- `org_name`: org to inspect costs for
|
|
18
|
-
- `action`: report | set-budget | alert
|
|
19
|
-
- `budget_tokens`: max token budget for the org run (for set-budget)
|
|
20
|
-
- `alert_threshold`: fraction of budget that triggers alert (default 0.8)
|
|
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 mastermind-protocol/SKILL.md Brain Load Procedure with namespace: `ops`.
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
## Step 1 — Load Cost Data
|
|
32
|
-
|
|
33
|
-
Cost data is pulled from monomind's token summary and the org state file:
|
|
34
|
-
|
|
35
|
-
```bash
|
|
36
|
-
orgFile=".monomind/orgs/${org_name}.json"
|
|
37
|
-
stateFile=".monomind/orgs/${org_name}-state.json"
|
|
38
|
-
tokenSummary=".monomind/metrics/token-summary.json"
|
|
39
|
-
|
|
40
|
-
memNs="org:${org_name}"
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
---
|
|
44
|
-
|
|
45
|
-
## Step 2 — Execute Action
|
|
46
|
-
|
|
47
|
-
### report (default)
|
|
48
|
-
|
|
49
|
-
Aggregate token usage per agent from state file and token summary:
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
# Get total token usage from the global summary for context
|
|
53
|
-
if [ -f "$tokenSummary" ]; then
|
|
54
|
-
echo "=== GLOBAL TOKEN SUMMARY ==="
|
|
55
|
-
jq -r '"Today: $\(.today.cost | tostring) calls: \(.today.calls)"' "$tokenSummary" 2>/dev/null || true
|
|
56
|
-
fi
|
|
57
|
-
|
|
58
|
-
echo ""
|
|
59
|
-
echo "=== ORG SPEND — ${org_name} ==="
|
|
60
|
-
|
|
61
|
-
# Per-agent spend from state file
|
|
62
|
-
if [ -f "$stateFile" ]; then
|
|
63
|
-
jq -r '.agents // {} | to_entries[] | " \(.key): tokens_in=\(.value.tokens_in // 0) tokens_out=\(.value.tokens_out // 0) status=\(.value.status // "unknown")"' "$stateFile" 2>/dev/null
|
|
64
|
-
else
|
|
65
|
-
echo " (no state file — org has not run yet)"
|
|
66
|
-
fi
|
|
67
|
-
|
|
68
|
-
# Budget check
|
|
69
|
-
budget=$(jq -r '.run_config.budget_tokens // "unlimited"' "$orgFile" 2>/dev/null)
|
|
70
|
-
echo ""
|
|
71
|
-
echo "Budget: $budget tokens"
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
Render as:
|
|
75
|
-
```
|
|
76
|
-
COSTS — org: <org_name>
|
|
77
|
-
──────────────────────────────────────────────
|
|
78
|
-
AGENT STATUS TOKENS IN TOKENS OUT EST. COST
|
|
79
|
-
boss running 48,230 12,100 ~$0.42
|
|
80
|
-
content-writer idle 21,400 8,900 ~$0.18
|
|
81
|
-
reviewer waiting 5,100 2,300 ~$0.05
|
|
82
|
-
──────────────────────────────────────────────
|
|
83
|
-
TOTAL 74,730 23,300 ~$0.65
|
|
84
|
-
BUDGET: 500,000 tokens | USED: 14.8% | REMAINING: 85.2%
|
|
85
|
-
|
|
86
|
-
BURN RATE: ~4,900 tokens/hour | EST. RUNWAY: ~87 hours
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
Calculate costs using approximate rates: input ~$3/1M tokens, output ~$15/1M tokens (Sonnet-class).
|
|
90
|
-
|
|
91
|
-
### set-budget
|
|
92
|
-
|
|
93
|
-
Write budget to org config:
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
tmp="${orgFile}.tmp"
|
|
97
|
-
jq --argjson budget "$budget_tokens" \
|
|
98
|
-
--argjson threshold "${alert_threshold:-0.8}" \
|
|
99
|
-
'.run_config.budget_tokens = $budget | .run_config.alert_threshold = $threshold' \
|
|
100
|
-
"$orgFile" > "$tmp" && mv "$tmp" "$orgFile"
|
|
101
|
-
echo "Budget set: $budget_tokens tokens (alert at $(echo "$alert_threshold * 100" | bc)%)"
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
### alert
|
|
105
|
-
|
|
106
|
-
Check current usage against budget and emit alert if over threshold:
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
budget=$(jq -r '.run_config.budget_tokens // 0' "$orgFile")
|
|
110
|
-
threshold=$(jq -r '.run_config.alert_threshold // 0.8' "$orgFile")
|
|
111
|
-
|
|
112
|
-
if [ "$budget" -gt 0 ] && [ -f "$stateFile" ]; then
|
|
113
|
-
total_in=$(jq '[.agents // {} | to_entries[] | .value.tokens_in // 0] | add // 0' "$stateFile")
|
|
114
|
-
total_out=$(jq '[.agents // {} | to_entries[] | .value.tokens_out // 0] | add // 0' "$stateFile")
|
|
115
|
-
total=$((total_in + total_out))
|
|
116
|
-
|
|
117
|
-
# Use awk for float comparison
|
|
118
|
-
over=$(awk -v total="$total" -v budget="$budget" -v threshold="$threshold" \
|
|
119
|
-
'BEGIN { print (total/budget >= threshold) ? "yes" : "no" }')
|
|
120
|
-
|
|
121
|
-
if [ "$over" = "yes" ]; then
|
|
122
|
-
echo "ALERT: Org $org_name has used $(awk -v t=$total -v b=$budget 'BEGIN{printf "%.1f", t/b*100}')% of budget"
|
|
123
|
-
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
|
|
124
|
-
CTRL_URL=$(jq -r '.url // "http://localhost:4242"' "$REPO_ROOT/.monomind/control.json" 2>/dev/null || echo "http://localhost:4242")
|
|
125
|
-
curl -s -X POST "${CTRL_URL}/api/mastermind/event" -H "x-monomind-token: $(cat "${REPO_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/.monomind/dashboard-token" 2>/dev/null || true)" \
|
|
126
|
-
-H "Content-Type: application/json" \
|
|
127
|
-
-d "$(jq -cn --arg org "$org_name" --argjson total $total --argjson budget $budget \
|
|
128
|
-
'{type:"org:budget:alert",org:$org,tokens_used:$total,budget:$budget,ts:(now*1000|floor)}')" || true
|
|
129
|
-
fi
|
|
130
|
-
fi
|
|
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
|
-
total_tokens: <N>
|
|
143
|
-
budget_tokens: <N>
|
|
144
|
-
usage_pct: <N>%
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
---
|
|
148
|
-
|
|
149
|
-
## Step 4 — Brain Write (standalone only)
|
|
150
|
-
|
|
151
|
-
If `caller` is not "command", follow mastermind-protocol/SKILL.md Brain Write Procedure for domain `ops`.
|