[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71M16PFDT5JSBV8PDPEF7JC":3,"skill-same:01M71M16PFDT5JSBV8PDPEF7JC":61},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":41,"repositoryHtmlUrl":42,"repositoryHomepageUrl":43,"ownerHtmlUrl":44,"ownerBlogUrl":45,"ownerDescription":6,"updatedAt":46,"install":47,"resources":60},"01M71M16PFDT5JSBV8PDPEF7JC","mastermind-liveness",null,"Mastermind liveness — check that every in-progress, blocked or in-review org issue has a way forward (run, queued wake, blocker or recovery action); fix stalled ones.","monoes\u002Fmonomind","monoes","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F276744696?v=4","01M71KWF37AJ2NJBP3KWBVSDGT","01M71KWF4CSF8ADH0M6HA09VD2",23,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fmastermind-liveness\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30],"mastermind liveness","domain","fix","auto","review","check","wake","progress","recovery","run","action","issue","org","2026-11-10 10:56:23",false,"---\nname: mastermind-liveness\ndescription: \"Mastermind liveness — check that every in-progress, blocked or in-review org issue has a way forward (run, queued wake, blocker or recovery action); fix stalled ones.\"\ntype: domain-skill\ndefault_mode: auto\npick: low\n---\n\n# Mastermind Liveness\n\nThis skill is invoked directly via `\u002Fmastermind-liveness`.\n\n---\n\n## Inputs\n\n- `brain_context`: BRAIN CONTEXT block (injected by command, or loaded below if standalone)\n- `org_name`: org to check (required)\n- `action`: check | checkout | release | wakeup | recover\n- `issue_id`: specific issue to operate on (required for checkout\u002Frelease\u002Fwakeup\u002Frecover)\n- `agent_id`: agent claiming checkout (required for checkout)\n- `run_id`: execution run ID (required for checkout)\n- `reason`: recovery reason (required for recover)\n- `caller`: command | master\n\n---\n\n## Liveness Contract\n\nAn issue is **healthy** when the product can answer \"what moves this forward next?\" without requiring a human to reconstruct intent.\n\nAn issue is **stalled** when it is non-terminal but has no:\n- active run linked to the issue\n- queued wake or continuation deliverable to the responsible agent\n- explicit execution-policy participant\n- pending interaction waiting on a specific responder\n- one-shot monitor (`nextCheckAt`) that will wake the assignee\n- human owner (`assigneeUserId`)\n- first-class blocker chain whose leaf issues are themselves healthy\n- open explicit recovery action naming owner + next action\n\n**Valid non-terminal statuses for agent-owned work:** `todo`, `in_progress`, `blocked`, `in_review`\n\n**Status → execution expectation:**\n- `todo`: actionable but not yet claimed — may still need wake path to assignee\n- `in_progress`: must have agent assignee + active execution backing (strict)\n- `blocked`: must have named external dependency (blockedByIssueIds) or explicit human decision needed\n- `in_review`: review participant must be named; next move belongs to reviewer\n\n---\n\n## Step 0 — Brain Load (standalone only)\n\nIf `caller` is not \"command\", load brain context following mastermind-protocol\u002FSKILL.md Brain Load Procedure with namespace: `ops`.\n\n---\n\n## Step 1 — Load Org and Issues\n\n```bash\norgFile=\".monomind\u002Forgs\u002F${org_name}.json\"\n[ ! -f \"$orgFile\" ] && { echo \"ERROR: Org '${org_name}' not found.\"; exit 1; }\n\nissuesFile=\".monomind\u002Forgs\u002F${org_name}-issues.json\"\nstateFile=\".monomind\u002Forgs\u002F${org_name}-state.json\"\n```\n\nNormalize any legacy records written by a pre-2.10 version of these skills. Idempotent — safe to run on every load. Guarded because this skill tolerates a missing issues file.\n\n```bash\n[ -f \"$issuesFile\" ] && python3 - \"$issuesFile\" \u003C\u003C'PYEOF'\nimport json, sys\npath = sys.argv[1]\ndata = json.load(open(path))\nRENAME = {\n    \"assignee_id\": \"assigneeId\", \"assigned_to\": \"assigneeId\",\n    \"created_at\": \"createdAt\", \"updated_at\": \"updatedAt\",\n    \"closed_at\": \"closedAt\", \"project_id\": \"projectId\",\n    \"parent_id\": \"parentId\", \"recovery_status\": \"recoveryStatus\",\n    \"lastActivityAt\": \"updatedAt\",\n}\nchanged = False\nfor iss in data.get(\"issues\", []):\n    for old, new in RENAME.items():\n        if old in iss:\n            iss.setdefault(new, iss.pop(old))\n            iss.pop(old, None)\n            changed = True\n    if iss.get(\"status\") == \"open\":\n        iss[\"status\"] = \"todo\"\n        changed = True\nif changed:\n    tmp = path + \".tmp\"\n    with open(tmp, \"w\") as f:\n        json.dump(data, f, indent=2)\n    import os; os.replace(tmp, path)\nPYEOF\n```\n\n---\n\n## Step 2 — Execute Action\n\n### check (default)\n\nAudit every non-terminal agent-owned issue for liveness. Flag stalled issues.\n\n```bash\necho \"LIVENESS CHECK — ${org_name}\"\necho \"════════════════════════════════════════════════════════\"\n\npython3 - \"$issuesFile\" \"$stateFile\" \u003C\u003C'PYEOF'\nimport json, sys, os\nfrom datetime import datetime, timedelta\n\nissues_path = sys.argv[1]\nstate_path  = sys.argv[2]\n\n# Load issues\nif not os.path.exists(issues_path):\n    print(\"  No issues file found. Org has no tracked issues.\")\n    sys.exit(0)\n\ndata   = json.load(open(issues_path))\nissues = data.get(\"issues\", [])\n\n# Load active agent run IDs from state\nactive_runs = set()\nif os.path.exists(state_path):\n    try:\n        state = json.load(open(state_path))\n        for role in state.get(\"roles\", []):\n            if role.get(\"currentRunId\"): active_runs.add(role[\"currentRunId\"])\n    except: pass\n\nnon_terminal_statuses = {\"todo\",\"in_progress\",\"blocked\",\"in_review\"}\nterminal_statuses     = {\"done\",\"cancelled\"}\n\nhealthy, stalled, warnings = [], [], []\nnow = datetime.utcnow()\n\nfor iss in issues:\n    status = iss.get(\"status\",\"\")\n    iid    = iss.get(\"id\",\"?\")\n    title  = (iss.get(\"title\") or \"?\")[:50]\n\n    if status in terminal_statuses:\n        continue\n    if status not in non_terminal_statuses:\n        # Silently skipping an unknown status is how issues become invisible.\n        warnings.append((iid, title, status, f\"unknown status '{status}' — outside the canonical vocabulary\"))\n        continue\n\n    aId = iss.get(\"assigneeAgentId\")\n    uId = iss.get(\"assigneeUserId\")\n\n    # Human-owned: the next move belongs to a person, not an execution path.\n    if uId and not aId:\n        healthy.append((iid, title, status, \"user-owned\"))\n        continue\n\n    paths = []\n\n    run_id = iss.get(\"executionRunId\") or iss.get(\"checkoutRunId\")\n    if run_id and run_id in active_runs:\n        paths.append(\"active-run\")\n\n    resolved_ids = {i.get(\"id\") for i in issues if i.get(\"status\") in terminal_statuses}\n    blockers = iss.get(\"blockedByIssueIds\") or []\n    if status == \"blocked\":\n        if blockers:\n            unresolved = [b for b in blockers if b not in resolved_ids]\n            if unresolved:\n                paths.append(f\"blocked-by:{','.join(unresolved[:2])}\")\n            else:\n                warnings.append((iid, title, status, \"all blockers resolved but issue still blocked\"))\n        elif not iss.get(\"recoveryActions\"):\n            # Liveness Contract: blocked requires a named dependency or an\n            # explicit human decision. This issue records neither.\n            stalled.append((iid, title, status, \"blocked with no blockedByIssueIds and no recovery action\"))\n            continue\n\n    if iss.get(\"executionPolicy\", {}).get(\"monitor\", {}).get(\"nextCheckAt\"):\n        paths.append(\"monitor\")\n\n    if iss.get(\"recoveryActions\") and any(\n        r.get(\"status\") not in (\"resolved\",\"cancelled\")\n        for r in iss.get(\"recoveryActions\",[])\n    ):\n        paths.append(\"recovery-action\")\n\n    if iss.get(\"currentParticipant\"):\n        paths.append(\"participant\")\n\n    if status == \"in_review\" and not (iss.get(\"reviewerId\") or iss.get(\"currentParticipant\")):\n        stalled.append((iid, title, status, \"in_review with no named reviewer\"))\n        continue\n\n    if status == \"in_progress\" and aId and not paths:\n        updated = iss.get(\"updatedAt\",\"\")\n        if updated:\n            try:\n                age = now - datetime.fromisoformat(updated[:19])\n                if age > timedelta(hours=2):\n                    stalled.append((iid, title, status, f\"in_progress {int(age.total_seconds()\u002F\u002F3600)}h with no active path\"))\n                    continue\n            except Exception:\n                pass\n        stalled.append((iid, title, status, \"in_progress with no active execution path\"))\n        continue\n\n    if paths:\n        healthy.append((iid, title, status, \" + \".join(paths)))\n    elif not aId:\n        warnings.append((iid, title, status, \"no assignee — nothing will pick this up\"))\n    elif status == \"todo\":\n        warnings.append((iid, title, status, \"todo assigned to agent — may need wakeup\"))\n    else:\n        stalled.append((iid, title, status, f\"{status} with an agent assignee but no execution path\"))\n\nprint(f\"  ✓ Healthy: {len(healthy)}\")\nif healthy:\n    for iid, t, s, p in healthy[:5]:\n        print(f\"    {iid}: [{s}] {t} — {p}\")\n    if len(healthy) > 5: print(f\"    … {len(healthy)-5} more\")\n\nprint()\nif stalled:\n    print(f\"  ✗ STALLED: {len(stalled)}\")\n    for iid, t, s, p in stalled:\n        print(f\"    {iid}: [{s}] {t}\")\n        print(f\"      → {p}\")\n    print()\n    print(\"  Fix: \u002Fmastermind-liveness --org \u003Corg> --action recover --issue-id \u003Cid> --reason 'execution path lost'\")\nelse:\n    print(\"  ✓ No stalled issues.\")\n\nif warnings:\n    print()\n    print(f\"  ⚠ Warnings: {len(warnings)}\")\n    for iid, t, s, p in warnings:\n        print(f\"    {iid}: [{s}] {t} — {p}\")\nPYEOF\n```\n\n### checkout\n\nClaim an issue for execution by an agent run. Sets `checkoutRunId` and `executionRunId`.\n\n```bash\n[ -z \"$issue_id\" ] && { echo \"ERROR: --issue-id required.\"; exit 1; }\n[ -z \"$agent_id\" ] && { echo \"ERROR: --agent-id required.\"; exit 1; }\n[ -z \"$run_id\"   ] && { echo \"ERROR: --run-id required.\"; exit 1; }\nts=$(date -u +%Y-%m-%dT%H:%M:%SZ)\n\npython3 - \"$issuesFile\" \"$issue_id\" \"$agent_id\" \"$run_id\" \"$ts\" \u003C\u003C'PYEOF'\nimport json, os, sys\n\npath, iid, agentId, runId, ts = sys.argv[1:]\ndata = json.load(open(path))\nissues = data.get(\"issues\", [])\n\nfound = False\nfor iss in issues:\n    if iss.get(\"id\") == iid:\n        existing = iss.get(\"checkoutRunId\")\n        if existing and existing != runId:\n            print(f\"  CONFLICT: Issue already checked out by run {existing}\")\n            print(f\"  Release first: \u002Fmastermind-liveness --org \u003Corg> --action release --issue-id {iid}\")\n            sys.exit(1)\n        iss[\"checkoutRunId\"]  = runId\n        iss[\"executionRunId\"] = runId\n        iss[\"assigneeId\"]     = agentId\n        iss[\"assigneeAgentId\"]= agentId\n        iss[\"assigneeUserId\"] = None\n        iss[\"status\"]         = \"in_progress\"\n        iss[\"checkedOutAt\"]   = ts\n        iss[\"updatedAt\"]      = ts\n        found = True\n        print(f\"  CHECKOUT: Issue {iid} → agent {agentId}, run {runId}\")\n        print(f\"  Status set to: in_progress\")\n        break\n\nif not found:\n    print(f\"  ERROR: Issue '{iid}' not found.\")\n    sys.exit(1)\n\ndata[\"issues\"] = issues\ntmp = path + \".tmp\"\nwith open(tmp, \"w\") as f:\n    json.dump(data, f, indent=2)\nos.replace(tmp, path)\nPYEOF\n\nactivityFile=\".monomind\u002Forgs\u002F${org_name}-activity.jsonl\"\njq -cn --arg iid \"$issue_id\" --arg ts \"$ts\" --arg st \"in_progress\" --arg ag \"$agent_id\" --arg sm \"checkout $issue_id\" \\\n  '{issue_id:$iid, ts:$ts, status:$st, tokens:null, agent:$ag, type:\"checkout\", summary:$sm}' \\\n  >> \"$activityFile\"\n```\n\n### release\n\nRelease the checkout lock on an issue.\n\n```bash\n[ -z \"$issue_id\" ] && { echo \"ERROR: --issue-id required.\"; exit 1; }\nts=$(date -u +%Y-%m-%dT%H:%M:%SZ)\n\npython3 - \"$issuesFile\" \"$issue_id\" \"$ts\" \"${run_id:-}\" \u003C\u003C'PYEOF'\nimport json, sys, os\n\npath, iid, ts, run_id = sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4]\ndata = json.load(open(path))\nissues = data.get(\"issues\", [])\n\nfor iss in issues:\n    if iss.get(\"id\") == iid:\n        current = iss.get(\"checkoutRunId\",\"\")\n        if run_id and current != run_id:\n            print(f\"  WARNING: Releasing run {run_id} but issue has run {current}. Proceeding.\")\n        iss.pop(\"checkoutRunId\", None)\n        iss.pop(\"executionRunId\", None)\n        iss.pop(\"checkedOutAt\", None)\n        iss[\"updatedAt\"] = ts\n        print(f\"  RELEASED: Checkout cleared for issue {iid}\")\n        print(f\"  Status remains: {iss.get('status','?')} — update separately if needed.\")\n        data[\"issues\"] = issues\n        tmp = path + \".tmp\"\n        with open(tmp, \"w\") as f:\n            json.dump(data, f, indent=2)\n        os.replace(tmp, path)\n        sys.exit(0)\n\nprint(f\"  ERROR: Issue '{iid}' not found.\")\nsys.exit(1)\nPYEOF\n\nactivityFile=\".monomind\u002Forgs\u002F${org_name}-activity.jsonl\"\ncurrentStatus=$(jq -r --arg id \"$issue_id\" '(.issues \u002F\u002F [])[] | select(.id == $id) | .status \u002F\u002F \"todo\"' \"$issuesFile\")\njq -cn --arg iid \"$issue_id\" --arg ts \"$ts\" --arg st \"$currentStatus\" --arg ag \"${agent_id:-operator}\" --arg sm \"release $issue_id\" \\\n  '{issue_id:$iid, ts:$ts, status:$st, tokens:null, agent:$ag, type:\"release\", summary:$sm}' \\\n  >> \"$activityFile\"\n```\n\n### wakeup\n\nDecide whether the assignee of a `todo` or `blocked` issue should be woken.\n\n```bash\n[ -z \"$issue_id\" ] && { echo \"ERROR: --issue-id required.\"; exit 1; }\n\npython3 - \"$issuesFile\" \"$stateFile\" \"$issue_id\" \"${agent_id:-}\" \u003C\u003C'PYEOF'\nimport json, sys, os\n\nissues_path, state_path, iid, actor_agent_id = sys.argv[1:]\n\ndata = json.load(open(issues_path))\niss = next((i for i in data.get(\"issues\",[]) if i.get(\"id\") == iid), None)\nif not iss:\n    print(f\"  ERROR: Issue '{iid}' not found.\")\n    sys.exit(1)\n\ncheckout_agent = iss.get(\"assigneeAgentId\") or \"\"\ncheckout_run   = iss.get(\"checkoutRunId\",\"\")\n\n# Port of Paperclip's shouldWakeAssigneeOnCheckout logic\nactor_is_agent     = bool(actor_agent_id)\nactor_differs      = actor_agent_id != checkout_agent\ncheckout_has_no_run= not checkout_run\n\nshould_wake = (\n    not actor_is_agent          # non-agent actor (board\u002Fhuman) → always wake\n    or actor_differs            # different agent claiming → wake original\n    or checkout_has_no_run      # no active run → wake to get work started\n)\n\nprint(f\"  Issue:   {iid} — {iss.get('title','?')[:60]}\")\nprint(f\"  Status:  {iss.get('status','?')}\")\nprint(f\"  Assignee:{checkout_agent or '(none)'}\")\nprint(f\"  Run:     {checkout_run or '(none)'}\")\nprint(f\"  Actor:   {actor_agent_id or '(board)'}\")\nprint()\nif should_wake:\n    print(\"  WAKE: YES — assignee should be notified to pick up this issue.\")\n    print(\"  Reasons:\")\n    if not actor_is_agent:           print(\"    · Non-agent actor (board\u002Fhuman)\")\n    if actor_is_agent and actor_differs: print(f\"    · Actor ({actor_agent_id}) != assignee ({checkout_agent})\")\n    if checkout_has_no_run:          print(\"    · No active execution run\")\nelse:\n    print(\"  WAKE: NO — assignee already has an active run for this issue.\")\nPYEOF\n```\n\n### recover\n\nFile an explicit recovery action on a stalled issue with a named owner and next step.\n\n```bash\n[ -z \"$issue_id\" ] && { echo \"ERROR: --issue-id required.\"; exit 1; }\n[ -z \"$reason\"   ] && { echo \"ERROR: --reason required.\"; exit 1; }\nts=$(date -u +%Y-%m-%dT%H:%M:%SZ)\nrecoveryId=\"recovery-$(python3 -c 'import time; print(int(time.time()*1000))')\"\n\npython3 - \"$issuesFile\" \"$issue_id\" \"$recoveryId\" \"${agent_id:-operator}\" \"$reason\" \"$ts\" \u003C\u003C'PYEOF'\nimport json, os, sys\n\npath, iid, rid, owner, cause, ts = sys.argv[1:]\ndata = json.load(open(path))\nissues = data.get(\"issues\", [])\n\nfor iss in issues:\n    if iss.get(\"id\") == iid:\n        recovery = {\n            \"id\": rid,\n            \"kind\": \"restore-liveness\",\n            \"owner\": owner,\n            \"cause\": cause,\n            \"createdAt\": ts,\n            \"status\": \"open\",\n            \"nextAction\": f\"Investigate why issue '{iid}' has no active execution path and restore it.\",\n        }\n        iss.setdefault(\"recoveryActions\", []).append(recovery)\n        iss[\"status\"] = \"blocked\"\n        iss[\"updatedAt\"] = ts\n        data[\"issues\"] = issues\n        tmp = path + \".tmp\"\n        with open(tmp, \"w\") as f:\n            json.dump(data, f, indent=2)\n        os.replace(tmp, path)\n        print(f\"  RECOVERY ACTION FILED: {rid}\")\n        print(f\"  Issue {iid} → status: blocked (pending recovery)\")\n        print(f\"  Owner: {owner}\")\n        print(f\"  Cause: {cause}\")\n        print(f\"  Resolve with: \u002Fmastermind-liveness --org \u003Corg> --action checkout --issue-id {iid} --agent-id \u003Cid> --run-id \u003Cid>\")\n        sys.exit(0)\n\nprint(f\"  ERROR: Issue '{iid}' not found.\")\nsys.exit(1)\nPYEOF\n\nactivityFile=\".monomind\u002Forgs\u002F${org_name}-activity.jsonl\"\njq -cn --arg iid \"$issue_id\" --arg ts \"$ts\" --arg st \"blocked\" --arg ag \"${agent_id:-operator}\" --arg sm \"recover $issue_id\" \\\n  '{issue_id:$iid, ts:$ts, status:$st, tokens:null, agent:$ag, type:\"recover\", summary:$sm}' \\\n  >> \"$activityFile\"\n```\n\n---\n\n## Step 3 — Return Output\n\n```yaml\ndomain: ops\nstatus: complete\naction: \u003Caction>\norg_name: \u003Corg_name>\nissue_id: \u003Cissue_id or all>\n```\n\n---\n\n## Step 4 — Brain Write (standalone only)\n\nIf `caller` is not \"command\", follow mastermind-protocol\u002FSKILL.md Brain Write Procedure for domain `ops`.\n","# Mastermind Liveness\n\nThis skill is invoked directly via `\u002Fmastermind-liveness`.\n\n---\n\n## Inputs\n\n- `brain_context`: BRAIN CONTEXT block (injected by command, or loaded below if standalone)\n- `org_name`: org to check (required)\n- `action`: check | checkout | release | wakeup | recover\n- `issue_id`: specific issue to operate on (required for checkout\u002Frelease\u002Fwakeup\u002Frecover)\n- `agent_id`: agent claiming checkout (required for checkout)\n- `run_id`: execution run ID (required for checkout)\n- `reason`: recovery reason (required for recover)\n- `caller`: command | master\n\n---\n\n## Liveness Contract\n\nAn issue is **healthy** when the product can answer \"what moves this forward next?\" without requiring a human to reconstruct intent.\n\nAn issue is **stalled** when it is non-terminal but has no:\n- active run linked to the issue\n- queued wake or continuation deliverable to the responsible agent\n- explicit execution-policy participant\n- pending interaction waiting on a specific responder\n- one-shot monitor (`nextCheckAt`) that will wake the assignee\n- human owner (`assigneeUserId`)\n- first-class blocker chain whose leaf issues are themselves healthy\n- open explicit recovery action naming owner + next action\n\n**Valid non-terminal statuses for agent-owned work:** `todo`, `in_progress`, `blocked`, `in_review`\n\n**Status → execution expectation:**\n- `todo`: actionable but not yet claimed — may still need wake path to assignee\n- `in_progress`: must have agent assignee + active execution backing (strict)\n- `blocked`: must have named external dependency (blockedByIssueIds) or explicit human decision needed\n- `in_review`: review participant must be named; next move belongs to reviewer\n\n---\n\n## Step 0 — Brain Load (standalone only)\n\nIf `caller` is not \"command\", load brain context following mastermind-protocol\u002FSKILL.md Brain Load Procedure with namespace: `ops`.\n\n---\n\n## Step 1 — Load Org and Issues\n\n```bash\norgFile=\".monomind\u002Forgs\u002F${org_name}.json\"\n[ ! -f \"$orgFile\" ] && { echo \"ERROR: Org '${org_name}' not found.\"; exit 1; }\n\nissuesFile=\".monomind\u002Forgs\u002F${org_name}-issues.json\"\nstateFile=\".monomind\u002Forgs\u002F${org_name}-state.json\"\n```\n\nNormalize any legacy records written by a pre-2.10 version of these skills. Idempotent — safe to run on every load. Guarded because this skill tolerates a missing issues file.\n\n```bash\n[ -f \"$issuesFile\" ] && python3 - \"$issuesFile\" \u003C\u003C'PYEOF'\nimport json, sys\npath = sys.argv[1]\ndata = json.load(open(path))\nRENAME = {\n    \"assignee_id\": \"assigneeId\", \"assigned_to\": \"assigneeId\",\n    \"created_at\": \"createdAt\", \"updated_at\": \"updatedAt\",\n    \"closed_at\": \"closedAt\", \"project_id\": \"projectId\",\n    \"parent_id\": \"parentId\", \"recovery_status\": \"recoveryStatus\",\n    \"lastActivityAt\": \"updatedAt\",\n}\nchanged = False\nfor iss in data.get(\"issues\", []):\n    for old, new in RENAME.items():\n        if old in iss:\n            iss.setdefault(new, iss.pop(old))\n            iss.pop(old, None)\n            changed = True\n    if iss.get(\"status\") == \"open\":\n        iss[\"status\"] = \"todo\"\n        changed = True\nif changed:\n    tmp = path + \".tmp\"\n    with open(tmp, \"w\") as f:\n        json.dump(data, f, indent=2)\n    import os; os.replace(tmp, path)\nPYEOF\n```\n\n---\n\n## Step 2 — Execute Action\n\n### check (default)\n\nAudit every non-terminal agent-owned issue for liveness. Flag stalled issues.\n\n```bash\necho \"LIVENESS CHECK — ${org_name}\"\necho \"════════════════════════════════════════════════════════\"\n\npython3 - \"$issuesFile\" \"$stateFile\" \u003C\u003C'PYEOF'\nimport json, sys, os\nfrom datetime import datetime, timedelta\n\nissues_path = sys.argv[1]\nstate_path  = sys.argv[2]\n\n# Load issues\nif not os.path.exists(issues_path):\n    print(\"  No issues file found. Org has no tracked issues.\")\n    sys.exit(0)\n\ndata   = json.load(open(issues_path))\nissues = data.get(\"issues\", [])\n\n# Load active agent run IDs from state\nactive_runs = set()\nif os.path.exists(state_path):\n    try:\n        state = json.load(open(state_path))\n        for role in state.get(\"roles\", []):\n            if role.get(\"currentRunId\"): active_runs.add(role[\"currentRunId\"])\n    except: pass\n\nnon_terminal_statuses = {\"todo\",\"in_progress\",\"blocked\",\"in_review\"}\nterminal_statuses     = {\"done\",\"cancelled\"}\n\nhealthy, stalled, warnings = [], [], []\nnow = datetime.utcnow()\n\nfor iss in issues:\n    status = iss.get(\"status\",\"\")\n    iid    = iss.get(\"id\",\"?\")\n    title  = (iss.get(\"title\") or \"?\")[:50]\n\n    if status in terminal_statuses:\n        continue\n    if status not in non_terminal_statuses:\n        # Silently skipping an unknown status is how issues become invisible.\n        warnings.append((iid, title, status, f\"unknown status '{status}' — outside the canonical vocabulary\"))\n        continue\n\n    aId = iss.get(\"assigneeAgentId\")\n    uId = iss.get(\"assigneeUserId\")\n\n    # Human-owned: the next move belongs to a person, not an execution path.\n    if uId and not aId:\n        healthy.append((iid, title, status, \"user-owned\"))\n        continue\n\n    paths = []\n\n    run_id = iss.get(\"executionRunId\") or iss.get(\"checkoutRunId\")\n    if run_id and run_id in active_runs:\n        paths.append(\"active-run\")\n\n    resolved_ids = {i.get(\"id\") for i in issues if i.get(\"status\") in terminal_statuses}\n    blockers = iss.get(\"blockedByIssueIds\") or []\n    if status == \"blocked\":\n        if blockers:\n            unresolved = [b for b in blockers if b not in resolved_ids]\n            if unresolved:\n                paths.append(f\"blocked-by:{','.join(unresolved[:2])}\")\n            else:\n                warnings.append((iid, title, status, \"all blockers resolved but issue still blocked\"))\n        elif not iss.get(\"recoveryActions\"):\n            # Liveness Contract: blocked requires a named dependency or an\n            # explicit human decision. This issue records neither.\n            stalled.append((iid, title, status, \"blocked with no blockedByIssueIds and no recovery action\"))\n            continue\n\n    if iss.get(\"executionPolicy\", {}).get(\"monitor\", {}).get(\"nextCheckAt\"):\n        paths.append(\"monitor\")\n\n    if iss.get(\"recoveryActions\") and any(\n        r.get(\"status\") not in (\"resolved\",\"cancelled\")\n        for r in iss.get(\"recoveryActions\",[])\n    ):\n        paths.append(\"recovery-action\")\n\n    if iss.get(\"currentParticipant\"):\n        paths.append(\"participant\")\n\n    if status == \"in_review\" and not (iss.get(\"reviewerId\") or iss.get(\"currentParticipant\")):\n        stalled.append((iid, title, status, \"in_review with no named reviewer\"))\n        continue\n\n    if status == \"in_progress\" and aId and not paths:\n        updated = iss.get(\"updatedAt\",\"\")\n        if updated:\n            try:\n                age = now - datetime.fromisoformat(updated[:19])\n                if age > timedelta(hours=2):\n                    stalled.append((iid, title, status, f\"in_progress {int(age.total_seconds()\u002F\u002F3600)}h with no active path\"))\n                    continue\n            except Exception:\n                pass\n        stalled.append((iid, title, status, \"in_progress with no active execution path\"))\n        continue\n\n    if paths:\n        healthy.append((iid, title, status, \" + \".join(paths)))\n    elif not aId:\n        warnings.append((iid, title, status, \"no assignee — nothing will pick this up\"))\n    elif status == \"todo\":\n        warnings.append((iid, title, status, \"todo assigned to agent — may need wakeup\"))\n    else:\n        stalled.append((iid, title, status, f\"{status} with an agent assignee but no execution path\"))\n\nprint(f\"  ✓ Healthy: {len(healthy)}\")\nif healthy:\n    for iid, t, s, p in healthy[:5]:\n        print(f\"    {iid}: [{s}] {t} — {p}\")\n    if len(healthy) > 5: print(f\"    … {len(healthy)-5} more\")\n\nprint()\nif stalled:\n    print(f\"  ✗ STALLED: {len(stalled)}\")\n    for iid, t, s, p in stalled:\n        print(f\"    {iid}: [{s}] {t}\")\n        print(f\"      → {p}\")\n    print()\n    print(\"  Fix: \u002Fmastermind-liveness --org \u003Corg> --action recover --issue-id \u003Cid> --reason 'execution path lost'\")\nelse:\n    print(\"  ✓ No stalled issues.\")\n\nif warnings:\n    print()\n    print(f\"  ⚠ Warnings: {len(warnings)}\")\n    for iid, t, s, p in warnings:\n        print(f\"    {iid}: [{s}] {t} — {p}\")\nPYEOF\n```\n\n### checkout\n\nClaim an issue for execution by an agent run. Sets `checkoutRunId` and `executionRunId`.\n\n```bash\n[ -z \"$issue_id\" ] && { echo \"ERROR: --issue-id required.\"; exit 1; }\n[ -z \"$agent_id\" ] && { echo \"ERROR: --agent-id required.\"; exit 1; }\n[ -z \"$run_id\"   ] && { echo \"ERROR: --run-id required.\"; exit 1; }\nts=$(date -u +%Y-%m-%dT%H:%M:%SZ)\n\npython3 - \"$issuesFile\" \"$issue_id\" \"$agent_id\" \"$run_id\" \"$ts\" \u003C\u003C'PYEOF'\nimport json, os, sys\n\npath, iid, agentId, runId, ts = sys.argv[1:]\ndata = json.load(open(path))\nissues = data.get(\"issues\", [])\n\nfound = False\nfor iss in issues:\n    if iss.get(\"id\") == iid:\n        existing = iss.get(\"checkoutRunId\")\n        if existing and existing != runId:\n            print(f\"  CONFLICT: Issue already checked out by run {existing}\")\n            print(f\"  Release first: \u002Fmastermind-liveness --org \u003Corg> --action release --issue-id {iid}\")\n            sys.exit(1)\n        iss[\"checkoutRunId\"]  = runId\n        iss[\"executionRunId\"] = runId\n        iss[\"assigneeId\"]     = agentId\n        iss[\"assigneeAgentId\"]= agentId\n        iss[\"assigneeUserId\"] = None\n        iss[\"status\"]         = \"in_progress\"\n        iss[\"checkedOutAt\"]   = ts\n        iss[\"updatedAt\"]      = ts\n        found = True\n        print(f\"  CHECKOUT: Issue {iid} → agent {agentId}, run {runId}\")\n        print(f\"  Status set to: in_progress\")\n        break\n\nif not found:\n    print(f\"  ERROR: Issue '{iid}' not found.\")\n    sys.exit(1)\n\ndata[\"issues\"] = issues\ntmp = path + \".tmp\"\nwith open(tmp, \"w\") as f:\n    json.dump(data, f, indent=2)\nos.replace(tmp, path)\nPYEOF\n\nactivityFile=\".monomind\u002Forgs\u002F${org_name}-activity.jsonl\"\njq -cn --arg iid \"$issue_id\" --arg ts \"$ts\" --arg st \"in_progress\" --arg ag \"$agent_id\" --arg sm \"checkout $issue_id\" \\\n  '{issue_id:$iid, ts:$ts, status:$st, tokens:null, agent:$ag, type:\"checkout\", summary:$sm}' \\\n  >> \"$activityFile\"\n```\n\n### release\n\nRelease the checkout lock on an issue.\n\n```bash\n[ -z \"$issue_id\" ] && { echo \"ERROR: --issue-id required.\"; exit 1; }\nts=$(date -u +%Y-%m-%dT%H:%M:%SZ)\n\npython3 - \"$issuesFile\" \"$issue_id\" \"$ts\" \"${run_id:-}\" \u003C\u003C'PYEOF'\nimport json, sys, os\n\npath, iid, ts, run_id = sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4]\ndata = json.load(open(path))\nissues = data.get(\"issues\", [])\n\nfor iss in issues:\n    if iss.get(\"id\") == iid:\n        current = iss.get(\"checkoutRunId\",\"\")\n        if run_id and current != run_id:\n            print(f\"  WARNING: Releasing run {run_id} but issue has run {current}. Proceeding.\")\n        iss.pop(\"checkoutRunId\", None)\n        iss.pop(\"executionRunId\", None)\n        iss.pop(\"checkedOutAt\", None)\n        iss[\"updatedAt\"] = ts\n        print(f\"  RELEASED: Checkout cleared for issue {iid}\")\n        print(f\"  Status remains: {iss.get('status','?')} — update separately if needed.\")\n        data[\"issues\"] = issues\n        tmp = path + \".tmp\"\n        with open(tmp, \"w\") as f:\n            json.dump(data, f, indent=2)\n        os.replace(tmp, path)\n        sys.exit(0)\n\nprint(f\"  ERROR: Issue '{iid}' not found.\")\nsys.exit(1)\nPYEOF\n\nactivityFile=\".monomind\u002Forgs\u002F${org_name}-activity.jsonl\"\ncurrentStatus=$(jq -r --arg id \"$issue_id\" '(.issues \u002F\u002F [])[] | select(.id == $id) | .status \u002F\u002F \"todo\"' \"$issuesFile\")\njq -cn --arg iid \"$issue_id\" --arg ts \"$ts\" --arg st \"$currentStatus\" --arg ag \"${agent_id:-operator}\" --arg sm \"release $issue_id\" \\\n  '{issue_id:$iid, ts:$ts, status:$st, tokens:null, agent:$ag, type:\"release\", summary:$sm}' \\\n  >> \"$activityFile\"\n```\n\n### wakeup\n\nDecide whether the assignee of a `todo` or `blocked` issue should be woken.\n\n```bash\n[ -z \"$issue_id\" ] && { echo \"ERROR: --issue-id required.\"; exit 1; }\n\npython3 - \"$issuesFile\" \"$stateFile\" \"$issue_id\" \"${agent_id:-}\" \u003C\u003C'PYEOF'\nimport json, sys, os\n\nissues_path, state_path, iid, actor_agent_id = sys.argv[1:]\n\ndata = json.load(open(issues_path))\niss = next((i for i in data.get(\"issues\",[]) if i.get(\"id\") == iid), None)\nif not iss:\n    print(f\"  ERROR: Issue '{iid}' not found.\")\n    sys.exit(1)\n\ncheckout_agent = iss.get(\"assigneeAgentId\") or \"\"\ncheckout_run   = iss.get(\"checkoutRunId\",\"\")\n\n# Port of Paperclip's shouldWakeAssigneeOnCheckout logic\nactor_is_agent     = bool(actor_agent_id)\nactor_differs      = actor_agent_id != checkout_agent\ncheckout_has_no_run= not checkout_run\n\nshould_wake = (\n    not actor_is_agent          # non-agent actor (board\u002Fhuman) → always wake\n    or actor_differs            # different agent claiming → wake original\n    or checkout_has_no_run      # no active run → wake to get work started\n)\n\nprint(f\"  Issue:   {iid} — {iss.get('title','?')[:60]}\")\nprint(f\"  Status:  {iss.get('status','?')}\")\nprint(f\"  Assignee:{checkout_agent or '(none)'}\")\nprint(f\"  Run:     {checkout_run or '(none)'}\")\nprint(f\"  Actor:   {actor_agent_id or '(board)'}\")\nprint()\nif should_wake:\n    print(\"  WAKE: YES — assignee should be notified to pick up this issue.\")\n    print(\"  Reasons:\")\n    if not actor_is_agent:           print(\"    · Non-agent actor (board\u002Fhuman)\")\n    if actor_is_agent and actor_differs: print(f\"    · Actor ({actor_agent_id}) != assignee ({checkout_agent})\")\n    if checkout_has_no_run:          print(\"    · No active execution run\")\nelse:\n    print(\"  WAKE: NO — assignee already has an active run for this issue.\")\nPYEOF\n```\n\n### recover\n\nFile an explicit recovery action on a stalled issue with a named owner and next step.\n\n```bash\n[ -z \"$issue_id\" ] && { echo \"ERROR: --issue-id required.\"; exit 1; }\n[ -z \"$reason\"   ] && { echo \"ERROR: --reason required.\"; exit 1; }\nts=$(date -u +%Y-%m-%dT%H:%M:%SZ)\nrecoveryId=\"recovery-$(python3 -c 'import time; print(int(time.time()*1000))')\"\n\npython3 - \"$issuesFile\" \"$issue_id\" \"$recoveryId\" \"${agent_id:-operator}\" \"$reason\" \"$ts\" \u003C\u003C'PYEOF'\nimport json, os, sys\n\npath, iid, rid, owner, cause, ts = sys.argv[1:]\ndata = json.load(open(path))\nissues = data.get(\"issues\", [])\n\nfor iss in issues:\n    if iss.get(\"id\") == iid:\n        recovery = {\n            \"id\": rid,\n            \"kind\": \"restore-liveness\",\n            \"owner\": owner,\n            \"cause\": cause,\n            \"createdAt\": ts,\n            \"status\": \"open\",\n            \"nextAction\": f\"Investigate why issue '{iid}' has no active execution path and restore it.\",\n        }\n        iss.setdefault(\"recoveryActions\", []).append(recovery)\n        iss[\"status\"] = \"blocked\"\n        iss[\"updatedAt\"] = ts\n        data[\"issues\"] = issues\n        tmp = path + \".tmp\"\n        with open(tmp, \"w\") as f:\n            json.dump(data, f, indent=2)\n        os.replace(tmp, path)\n        print(f\"  RECOVERY ACTION FILED: {rid}\")\n        print(f\"  Issue {iid} → status: blocked (pending recovery)\")\n        print(f\"  Owner: {owner}\")\n        print(f\"  Cause: {cause}\")\n        print(f\"  Resolve with: \u002Fmastermind-liveness --org \u003Corg> --action checkout --issue-id {iid} --agent-id \u003Cid> --run-id \u003Cid>\")\n        sys.exit(0)\n\nprint(f\"  ERROR: Issue '{iid}' not found.\")\nsys.exit(1)\nPYEOF\n\nactivityFile=\".monomind\u002Forgs\u002F${org_name}-activity.jsonl\"\njq -cn --arg iid \"$issue_id\" --arg ts \"$ts\" --arg st \"blocked\" --arg ag \"${agent_id:-operator}\" --arg sm \"recover $issue_id\" \\\n  '{issue_id:$iid, ts:$ts, status:$st, tokens:null, agent:$ag, type:\"recover\", summary:$sm}' \\\n  >> \"$activityFile\"\n```\n\n---\n\n## Step 3 — Return Output\n\n```yaml\ndomain: ops\nstatus: complete\naction: \u003Caction>\norg_name: \u003Corg_name>\nissue_id: \u003Cissue_id or all>\n```\n\n---\n\n## Step 4 — Brain Write (standalone only)\n\nIf `caller` is not \"command\", follow mastermind-protocol\u002FSKILL.md Brain Write Procedure for domain `ops`.\n",{"name":5,"pick":36,"type":37,"description":7,"default_mode":21},"low","domain-skill","main","f7cd4595d0f8959822163e14f9787117765c931a",".claude\u002Fskills\u002Fmastermind-liveness",2,"https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind","https:\u002F\u002Fmonoes.github.io\u002Fmonomind\u002F","https:\u002F\u002Fgithub.com\u002Fmonoes","https:\u002F\u002Fmonoes.me","2026-11-10 01:53:48",{"source":8,"skillName":5,"commands":48,"prompt":58,"zipAvailable":59},[49,52,55],{"tool":50,"command":51},"npx","npx skills add monoes\u002Fmonomind --skill mastermind-liveness",{"tool":53,"command":54},"bunx","bunx skills add monoes\u002Fmonomind --skill mastermind-liveness",{"tool":56,"command":57},"pnpm","pnpm dlx skills add monoes\u002Fmonomind --skill mastermind-liveness","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fmastermind-liveness\u002FSKILL.md",true,[],[62,88,125,152,177,204],{"skillNo":63,"name":64,"nameZh":6,"description":65,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":66,"categories":67,"keywords":68,"publishedAt":87},"01M71PB3SHWKMNJM6MD65VX8D6","zk-steward","Org role guidance for a ZK steward: engineer zero-knowledge proof systems with circuit design, SNARK vs STARK choice and security review. This is zero-knowledge cryptography, not Zettelkasten note-taking.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fzk-steward\u002FSKILL.md",[],[69,70,71,72,73,74,75,76,77,78,79,22,80,81,82,83,84,85,30,86],"zk","zk steward","steward","zero-knowledge","engineer","choice","design","knowledge","impact","query","snark","monomind","security review","stark","zettelkasten","cryptography","security","blockchain","2026-11-10 13:02:02",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":92,"licenseFileUrl":93,"sourceHtmlUrl":94,"categories":95,"keywords":106,"publishedAt":87},"01M71PB18SDG28WBKPKJNB814K","writing-plans","Use when you have a spec or requirements for a multi-step coding task and must write an implementation plan before touching code. Produces bite-sized TDD tasks with exact file paths, code and commands for an engineer with zero context.","MIT","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwriting-plans\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwriting-plans\u002FSKILL.md",[96,101],{"categoryNo":97,"categoryName":98,"taxonomyType":99,"taxonomyTypeDesc":100},"01JBSEEDCAT000000000000018","写作与文案","SCENARIO","使用场景",{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[107,108,109,73,110,111,112,113,78,114,115,116,117,118,119,120,121,122,123,124],"writing","writing plans","plans","superpowers","implementation plan","when","you","code","tasks","plan","product","write","commands","paths","suggest","coding","context","ZeRO",{"skillNo":126,"name":127,"nameZh":6,"description":128,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":129,"sourceHtmlUrl":130,"categories":131,"keywords":135,"publishedAt":87},"01M71PAXFM488X9ARXK0T04TF5","write-spec","Write a feature spec or PRD from a problem statement or feature idea. Use when turning a vague idea or user request into a structured document, scoping a feature with goals and non-goals, defining success metrics and acceptance criteria, or breaking a big ask into a phased spec.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwrite-spec\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwrite-spec\u002FSKILL.md",[132],{"categoryNo":133,"categoryName":134,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000031","产品经理",[118,136,137,138,139,76,140,112,141,142,143,117,144,145,146,147,148,149,150,151],"write spec","spec","user request","problem","acceptance","ask","vague","work","request","scoping","idea","metrics","feature","problem statement","use","document",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":156,"sourceHtmlUrl":157,"categories":158,"keywords":162,"publishedAt":87},"01M71PASSZY800C0RPEARBS918","write-query","Write optimized SQL for your dialect with best practices. Use when translating a natural-language data need into SQL, building a multi-CTE query with joins and aggregations, optimizing a query against a large partitioned table, or getting dialect-specific syntax for Snowflake, BigQuery, Postgres, etc.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwrite-query\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwrite-query\u002FSKILL.md",[159],{"categoryNo":160,"categoryName":161,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000033","数据分析师",[78,118,163,164,165,166,76,150,112,167,168,169,170,143,171,172,173,174,175,176],"write query","postgres","for","snowflake","best practices","natural-language","with","multi","github","sql","https","syntax","plugins","data",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":181,"categories":182,"keywords":189,"publishedAt":87},"01M71PAPTX0T3PF6ETFVR96SJJ","workflow-automation","Org role guidance for workflow automation: build and maintain CI\u002FCD definitions in GitHub Actions or equivalent: triggers, jobs, matrices, caching. Covers path filters, dependency caching, parallel jobs, timeouts and fail-fast ordering.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fworkflow-automation\u002FSKILL.md",[183,186],{"categoryNo":184,"categoryName":185,"taxonomyType":99,"taxonomyTypeDesc":100},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":187,"categoryName":188,"taxonomyType":99,"taxonomyTypeDesc":100},"01JBSEEDCAT000000000000023","Skill与智能体开发",[190,191,192,193,165,194,195,196,197,77,198,199,200,78,80,171,201,202,203,173],"Workflow Automation","automation","workflow","parallel","actions","ci","triggers","github actions","maintain","filters","caching","build","dependency","devops",{"skillNo":205,"name":206,"nameZh":6,"description":207,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":208,"categories":209,"keywords":211,"publishedAt":87},"01M71PAM19Z1XTV9NPCFSE2MY8","workflow-architect","Org role guidance for a workflow architect: map full workflow trees for systems, user journeys and agents, covering every branch and failure. Covers discovering workflows from code, handoff contracts, timeouts, recovery paths and observable state.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fworkflow-architect\u002FSKILL.md",[210],{"categoryNo":187,"categoryName":188,"taxonomyType":99,"taxonomyTypeDesc":100},[192,212,213,214,215,216,217,165,218,219,114,220,221,222,80,171,26,223,173,224],"workflow architect","architect","trees","user journeys","branch","planning","map","workflows","architecture","state","leadership","operations","systems"]