Notre avis
Cette compétence arrête une boucle d'organisation planifiée en définissant son statut sur « stopped » et en veillant à ce qu'elle ne se reprogramme plus.
Points forts
- Gère à la fois les orgs v1 et v2 avec des chemins d'exécution distincts.
- Évite les wakeups orphelins en arrêtant la boucle au prochain cycle.
- Vérifie l'existence de l'org avant d'agir et indique les orgs disponibles.
- Utilise à la fois le CLI monomind, un fichier stop et un appel API pour couvrir tous les cas.
Limites
- Spécifique au système Mastermind / monomind, pas réutilisable ailleurs.
- Nécessite des outils externes comme jq, npx, curl et git.
- L'arrêt prend effet au prochain intervalle de la boucle, pas instantanément pour les orgs v1.
Quand vous devez arrêter proprement une boucle d'organisation planifiée sans laisser de tâches résiduelles.
Si vous souhaitez simplement suspendre temporairement une boucle pour la reprendre plus tard, car cette compétence met un terme définitif au cycle.
Analyse de sécurité
PrudenceThe 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.
Exemples
/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.
Architecte Docker Compose
DevOps
Concoit des configurations Docker Compose optimisees.
Rapport de Post-Mortem
DevOps
Rédige des rapports post-mortem d'incidents structurés et blameless.
Créateur de Runbooks
DevOps
Crée des runbooks opérationnels clairs pour les procédures DevOps courantes.