Our review
This skill stops a scheduled org loop by setting its status to 'stopped' and ensuring it does not reschedule.
Strengths
- Handles both v1 and v2 orgs with separate execution paths.
- Prevents orphaned wakeups by killing the loop on its next cycle.
- Validates the org exists and lists available ones if not.
- Uses the monomind CLI, a stop file, and an API call for maximum coverage.
Limitations
- Specific to the Mastermind/monomind system, not portable.
- Requires external tools like jq, npx, curl, and git.
- Takes effect on the next loop interval, not immediately for v1 orgs.
When you need to cleanly terminate a scheduled org loop without leaving residual tasks.
If you only want to pause a loop temporarily and resume later, as this skill permanently stops the cycle.
Security analysis
CautionThe skill performs a legitimate operational stop of a scheduled loop using bash, network calls, and file modifications. It does not instruct destructive or clearly exfiltrating actions, but the token transmission and external package execution warrant caution.
- •Sends dashboard token via curl to a control server URL defined in control.json; if that URL is malicious, token could be exfiltrated.
- •Executes `npx -y monomind@latest`, which downloads and runs code from the npm registry, introducing supply-chain risk.
- •Modifies org state files and creates stop files without explicit backup or dry-run.
Examples
/mastermind:stoporg --org weekly-reportStop the scheduled org loop for the marketing org.name: mastermind-stoporg description: Mastermind stoporg — stop a running scheduled org loop by setting its status to "stopped". The next scheduled wakeup will read the status, skip all work, and not reschedule. Loop dies within one interval — no orphaned wakeups. type: domain-skill default_mode: auto
Mastermind Stop Org
This skill is invoked by mastermind:stoporg or directly via /mastermind:stoporg.
Inputs
org_name: name of the org to stop (matches.monomind/orgs/<org_name>.json)session_id: session ID generated by the command wrappercaller: command | master
Step 0 — Brain Load (standalone only)
If caller is not "command", load brain context following mastermind-protocol/SKILL.md Brain Load Procedure with namespace: ops.
Step 1 — Validate Org
orgFile=".monomind/orgs/${org_name}.json"
[ ! -f "$orgFile" ] && {
echo "ERROR: Org '${org_name}' not found."
echo "Available orgs: $(ls .monomind/orgs/*.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 | tr '\n' ' ')"
exit 1
}
Read current status:
current_status=$(jq -r '.status // "no-schedule"' "$orgFile")
has_schedule=$(jq -r 'if .loop.poll_interval_minutes then "yes" else "no" end' "$orgFile")
If has_schedule == "no" — this is a v2 org (Org Runtime v2 has schedule,
never .loop). Its daemon polls .monomind/orgs/<name>/stop every 2s, which is
exactly what monomind org stop writes — use the CLI, not the v1 .stops/ path:
REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null || pwd)
CTRL_URL=$(jq -r '.url // "http://localhost:4242"' "$REPO_ROOT/.monomind/control.json" 2>/dev/null || echo "http://localhost:4242")
npx -y monomind@latest org stop "${org_name}" \
|| { mkdir -p ".monomind/orgs/${org_name}"; date -u +%Y-%m-%dT%H:%M:%SZ > ".monomind/orgs/${org_name}/stop"; }
# Also POST to the control server in case a dashboard-started instance is running
curl -s -X POST -H "x-monomind-token: $(cat "${REPO_ROOT:-$(git rev-parse --show-toplevel 2>/dev/null || pwd)}/.monomind/dashboard-token" 2>/dev/null || true)" "${CTRL_URL}/api/orgs/${org_name}/stop" >/dev/null 2>&1 || true
echo "Stop requested for org '${org_name}' (v2 daemon exits within 2s)."
- Exit.
Everything below this point only runs for v1 orgs — v2 orgs already exited above.
If current_status == "stopped":
- Print: "Org '<org_name>' is already stopped."
- Exit.
<!-- LEGACY-ORG-V1: remove this step when v1 orgs are gone -->
Step 2 — Set Status to Stopped and Clear next_run (v1 only)
orgFile=".monomind/orgs/${org_name}.json"
tmp="${orgFile}.tmp"
# Clear next_run to avoid showing a stale future timestamp in orgstatus
jq '.status = "stopped" | if .loop then .loop.next_run = null else . end' "$orgFile" > "$tmp" && mv "$tmp" "$orgFile"
<!-- LEGACY-ORG-V1: remove this step when v1 orgs are gone -->
Step 3 — Write Stop File (for any running boss agents, v1 only)
Any persistent boss agent checks for this file at the start of each loop iteration:
mkdir -p .monomind/orgs/.stops
touch ".monomind/orgs/.stops/${org_name}.stop"
<!-- LEGACY-ORG-V1: remove this step when v1 orgs are gone -->
Step 5 — Report to User (v1 only)
✓ Org "<org_name>" stopped.
Current status: stopped
The loop will exit at its next scheduled wakeup without rescheduling.
Loop fully dead within: ≤$(jq -r '.loop.poll_interval_minutes // "?"' "$orgFile") minutes
To restart: /mastermind:runorg --org <org_name>
Status: /mastermind:orgstatus --org <org_name>
Step 6 — Return Output
domain: ops
status: complete
decisions:
- what: "Org <org_name> stopped"
why: "status set to 'stopped'; next wakeup exits without rescheduling"
confidence: 1.0
outcome: shipped
next_actions:
- "To restart: /mastermind:runorg --org <org_name>"
- "To check current state: /mastermind:orgstatus --org <org_name>"
Step 7 — Brain Write (standalone only)
If caller is not "command", follow mastermind-protocol/SKILL.md Brain Write Procedure for domain ops.
Docker Compose Architect
DevOps
Designs optimized Docker Compose configurations.
Incident Postmortem Writer
DevOps
Writes structured and blameless incident postmortem reports.
Runbook Creator
DevOps
Creates clear operational runbooks for common DevOps procedures.