[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71FSRE8MDK9MQZ5P8YMF4KV":3,"skill-same:01M71FSRE8MDK9MQZ5P8YMF4KV":83},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":14,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":56,"ownerDescription":57,"updatedAt":58,"install":59,"resources":72},"01M71FSRE8MDK9MQZ5P8YMF4KV","recover-prowl-agents",null,"ALWAYS invoke this skill when preparing for or recovering coding-agent sessions after a Prowl restart. NEVER restart Prowl without a prepared exact-session manifest.","outcomeeng\u002Fplugins","outcomeeng","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F257335685?v=4","01M71FRVRF36XYR3HRSCGFHK2R","Outcome Engineering","01M71FRVS4BZG17DWANFJ7EPNY",1,"MIT","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fcoding-agents\u002Fskills\u002Frecover-prowl-agents\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"prowl","recover prowl agents","coding","Coding-Agent","Bash","ask","prepare","manifest","when","invoke","use","sessions","write","tool","read","session","scripts","for","never","python3","2026-11-10 10:12:30",false,"---\nname: recover-prowl-agents\ndescription: >-\n  ALWAYS invoke this skill when preparing for or recovering coding-agent sessions after a Prowl restart. NEVER restart Prowl without a prepared exact-session manifest.\nargument-hint: \"\u003Cprepare|recover> \u003Cabsolute-manifest-path> [\u003Cabsolute-writable-roots-path>]\"\nallowed-tools: Read, Write, {{! tool('use_skill') !}}, Bash(python3 \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Frecover_agents.py\":*), {{! tool('ask_user') !}}\n---\n\n\u003Cobjective>\nA durable pre-restart allowlist or an idempotent post-restart recovery in which every prepared native session has one exact Prowl pane correlation, every verified pane is read before any continuation is planned, every non-controller session receives one separately submitted context-reconciled continuation instruction, and no unprepared agent is running.\n\u003C\u002Fobjective>\n\n\u003Cdependencies>\n\n- Python 3.13+, the plugin's published shipped-script interpreter floor.\n- Use skill `coding-agents:operate-prowl` for every public Prowl operation.\n- A Prowl-native input-ready prompt for any session whose exact identity or launch context is unavailable from high-confidence public process or agent evidence.\n- One absolute manifest path supplied through `$ARGUMENTS`.\n- For `recover`, an optional absolute path to a JSON file mapping a prepared candidate's absolute worktree path to a list of absolute writable roots.\n\n\u003C\u002Fdependencies>\n\n\u003Crouting>\n\nParse `$ARGUMENTS` as exactly one mode, one absolute manifest path, and for `recover` alone an optional absolute writable-roots file path:\n\n| Mode      | Workflow                                       |\n| --------- | ---------------------------------------------- |\n| `prepare` | Run `\u003Cprepare_workflow>` before Prowl stops.   |\n| `recover` | Run `\u003Crecover_workflow>` after Prowl restarts. |\n\nReject an absent mode, unsupported mode, relative path, extra positional value, a writable-roots path supplied to `prepare`, or a `recover` manifest path that does not contain a schema-5 `prepared` manifest.\n\n\u003C\u002Frouting>\n\n\u003Cidentity_evidence>\n\nA candidate requires one exact evidence source:\n\n| Source               | Required observation                                                                 |\n| -------------------- | ------------------------------------------------------------------------------------ |\n| `process-argument`   | The live native process argument contains the complete session identity.             |\n| `open-session-file`  | The live process holds an open native session file whose name contains the identity. |\n| `native-status`      | The exact pane's native status surface displays the session identity and cwd.        |\n| `current-session`    | The running controller exposes its own complete session identity.                    |\n| `public-agent`       | `\u002Foperate-prowl agents` reports an exact high-confidence session in the pane.        |\n| `operator-confirmed` | The operator explicitly confirms the exact pane, worktree, agent type, and session.  |\n\nA pane title, terminal presentation, saved transcript, rollout existence, recent file, session-file timestamp, or sessionless roster entry is never identity evidence. Prowl's `working`, `idle`, `blocked`, and `done` values are advisory workflow projections, never native-session eligibility or completion evidence. Preserve a status value when reporting it, but never include or exclude a candidate from that value alone.\n\nRecord launch context separately from identity evidence:\n\n- `resumeLocator` is the exact Claude session ID or open JSONL path, and equals `sessionId` for Codex and Pi.\n- `nativeHome` is the absolute `CODEX_HOME` owning the exact Codex rollout when applicable; it is null for Claude and Pi.\n- Derive both from the live process, its open session file, or operator-confirmed exact storage. NEVER select either by recency.\n\n\u003C\u002Fidentity_evidence>\n\n\u003Cnative_status_protocol>\n\nUse this bounded protocol only when exact process or high-confidence public-agent evidence is unavailable:\n\n1. Use skill `coding-agents:operate-prowl` to run `read` with the exact pane UUID and stable-screen mode.\n2. When a selection dialog is visibly open, use skill `coding-agents:operate-prowl` to run `key` with `Escape`. The `prepare` invocation authorizes this exact dialog dismissal; NEVER send `Escape` to active generation.\n3. Use skill `coding-agents:operate-prowl` to run `send` with `\u002Fstatus` for Claude or Codex and `\u002Fsession` for Pi, using immediate return.\n4. Use skill `coding-agents:operate-prowl` to run `read` once with stable-screen mode. When slash-command autocomplete consumed the first `Enter`, use skill `coding-agents:operate-prowl` to run `key` with `Enter` once and read once more.\n5. Record the complete displayed session identity and cwd with `source: native-status`.\n6. Use skill `coding-agents:operate-prowl` to run `key` with `Escape` once to close the status surface.\n\nStop preparation when an active session cannot safely reach its native status surface. Never queue a status command into active work or infer the identity from recency instead.\n\n\u003C\u002Fnative_status_protocol>\n\n\u003Cprepare_workflow>\n\n1. Invoke `\u002Foperate-prowl` once for `list` and once for `agents`; preserve both complete checked results.\n2. Select every positively identified native session represented by an instantiated pre-restart pane. Require exact evidence from `\u003Cidentity_evidence>` and exclude ordinary shells and unconfirmed ambiguous identities. NEVER filter on Prowl status: a `done` projection can still carry an unfinished native conversation, as the live restart test established.\n3. Establish every selected pane's complete worktree, agent type (`claude`, `codex`, or `pi`), native session, exact `resumeLocator`, applicable `nativeHome`, evidence source, role, and secondary authorization through `\u003Cidentity_evidence>`. Use `\u003Cnative_status_protocol>` only for unresolved exact identity.\n4. Reconcile by worktree. Require exactly one primary; every distinct secondary requires `secondaryAuthorized: true` after explicit operator authorization. Reject duplicate native sessions globally.\n5. Build the script input with checked public `items`, `agents`, exact `candidates`, and exact `correlationEvidence`. Each candidate uses `paneId`, `worktreePath`, `sessionId`, `resumeLocator`, `nativeHome`, `agentType`, `evidence`, `role`, and `secondaryAuthorized`; each evidence item uses `paneId`, `worktreePath`, `sessionId`, `agentType`, and `source`.\n6. Run `prepare`, repeating `--pane` for every selected pre-restart pane UUID. Accept only `status: prepared` and schema version 5.\n7. Write the complete prepared result to the absolute manifest path. Preserve the checked list and agent responses beside it when the caller requests a snapshot directory; never replace the script's candidate result with a hand-authored summary.\n8. Report the full manifest path and candidate count. Prowl may restart only after every intended live session appears exactly once and unresolved identity count is zero.\n\n\u003C\u002Fprepare_workflow>\n\n\u003Crecover_workflow>\n\n1. Read the schema-5 `prepared` manifest from the exact absolute path. Never substitute another snapshot, a historical roster, or post-restart inference.\n2. When a writable-roots path is supplied, read it and hold its object unchanged as `writableRoots`; the prepared manifest never records a root. Treat an already resumed controller as a normal prepared candidate. Its post-restart pane UUID may differ; never launch a duplicate controller.\n3. Invoke `\u002Foperate-prowl` once for `list` and once for `agents`, then run `activate` with the prepared manifest and checked public arrays.\n4. Read the activation plan exactly:\n   - `ready` carries complete existing bindings and no activation.\n   - `activation-required` carries existing bindings plus ordered `open` or `tab-create` actions.\n   - `pane-occupied`, `invalid-target`, or `invalid-schema` stops before mutation.\n5. Treat `list` as the instantiated-terminal inventory, not the visible sidebar-worktree inventory. For every `open` action, invoke `\u002Foperate-prowl` `open` with the complete prepared worktree path and `mutationAuthorized: true`; the operator's exact `recover` invocation authorizes the visible focus switch and first-tab creation for that prepared path. NEVER enumerate Git worktrees or filesystem directories to invent activation targets. For every `tab-create` action, require the prepared authorized secondary and use the same exact-worktree authorization. Preserve every complete checked result in action order.\n6. Run `bind` with the activation plan and ordered `{originalPaneId, transport}` results. An `open` result passes only with `resolution: exact-root`, an exact returned worktree path, and a complete returned pane; `new-root`, `inside-root`, path mismatch, or missing target stops recovery. Preserve `created_tab` as evidence rather than requiring one value: false can identify an existing exact target and must not trigger an extra pane. Accept only `ready`; every binding preserves one original pane and one distinct Prowl-returned post-restart pane.\n7. Invoke `\u002Foperate-prowl` once for `list` and once for `agents`, then run `recover` with the unchanged prepared manifest and exact bindings, adding `writableRoots` when held. Stop on any occupied, missing, duplicate, or mismatched target, a non-absolute root, or a launching candidate whose agent type accepts no writable-root option while a root is supplied for its worktree, without partial delivery.\n8. Launch one planned native session at a time. Invoke `\u002Foperate-prowl` once for `send` using its complete `paneId`, exact source-owned native command, and immediate-return mode, then require checked transport evidence that a trailing `Enter` was sent. The command contains only the prepared agent type, exact resume locator or session identity, applicable native home, and one writable-root option for each root supplied for the candidate's worktree; NEVER append reassessment prose or replace it with a recency selector. Serialize Codex launches sharing one `nativeHome` and wait for the prior Codex TUI to become input-ready before starting the next, preventing shared SQLite initialization locks.\n9. Run `settle` with the exact launch plan and ordered checked transports. Accept only `resumed` or `already-current`; never retry a transport that may have delivered. A transport with no `response.data.input.trailing_enter_sent: true` is not settled.\n10. Wait for each launched native TUI to become input-ready through one bounded stable-screen read. When Claude presents its exact old-session resume-mode prompt, select the recommended `Resume from summary` option with one authorized `Enter`; this preserves the exact native identity while avoiding a full-history reload. Resolve update, trust, authentication, account-selection, or any other usage-affecting dialog only within explicit operator authority; stop that candidate when exact recovery remains unavailable.\n11. Invoke `\u002Foperate-prowl` once more for `list` and `agents`. Build exact post-restart `correlationEvidence`: use exact high-confidence public-agent identity where available and `\u003Cnative_status_protocol>` or process-backed evidence otherwise.\n12. Run `verify` with the prepared manifest, exact bindings, checked public arrays, and correlation evidence. Accept only `verified`, with target count equal to the prepared candidate count and empty missing, duplicate, and unexpected arrays.\n13. Establish one global context-read barrier before planning or sending any continuation. In prepared-manifest order, invoke `\u002Foperate-prowl` `read` with stable-screen mode for every verified binding, including the active controller and every already-correlated pane. Preserve each complete checked result as `{originalPaneId, paneId, transport}`. Finish all reads before the first reassessment send; NEVER interleave a pane read with continuation delivery. If any pane cannot be read, stop reassessment for the entire set with zero sends.\n14. Run `reassess` with the verified result and the complete ordered `paneReadResults`. `already-current` emits no delivery. `reassessment-ready` emits one source-owned continuation instruction for each verified non-controller session absent from `reassessedSessionIds`. The instruction requires the resumed agent to reconcile the native conversation and every explicitly presented plan or context artifact against the work actually delivered before continuing or marking anything complete; separate useful work never absorbs an unreconciled plan.\n15. For every reassessment delivery, invoke `\u002Foperate-prowl` once for `send` using its complete `paneId`, exact source-owned text, and immediate-return mode. These sends occur only after verification and the global context-read barrier and contain no native launch command. Require checked transport evidence that trailing `Enter` was sent; visible text still sitting in an editor is not delivery.\n16. Run `settle` with the reassessment plan and ordered checked transports. Accept only `reassessment-sent`, then perform one bounded stable-screen read per recipient to establish that the submitted turn left the editor or began a response. Replace the manifest with the returned `prepared` object only after that submission check so repeated recovery emits no duplicate reassessment.\n17. Preserve the activation plan, bindings, launch plan, checked launch transports, verification result, complete pane-read barrier, reassessment plan, checked reassessment transports, and updated manifest together. Report every full old-pane\u002Fnew-pane\u002Fworktree\u002Fagent\u002Fsession correlation.\n\n\u003C\u002Frecover_workflow>\n\n\u003Ccommand_forms>\n\nEvery operation takes its JSON input from stdin. Write the input with the file-write tool to a file in the scratch directory the harness names for this session, under a file name unique to the agent and the operation, and submit it through the input redirect `\u003C \u003Cinput-file>`. Where the harness names no scratch directory, use the one the environment designates, such as `$RUNNER_TEMP` on a hosted runner. An input carries pane reads, transports, and JSON that the dangerous-command guard refuses in a heredoc, a pipe, or an inline argument. The input shapes:\n\n- `prepare`: `{\"items\":[],\"agents\":[],\"candidates\":[],\"correlationEvidence\":[]}`, with `--pane \u003Cpre-restart-pane-uuid>` repeated per selected pane\n- `activate`: `{\"prepared\":{},\"items\":[],\"agents\":[]}`\n- `bind`: `{\"plan\":{},\"activationResults\":[]}`\n- `recover`: `{\"prepared\":{},\"bindings\":[],\"items\":[],\"agents\":[],\"writableRoots\":{}}`, where `writableRoots` is optional and maps an absolute worktree path to its list of absolute roots\n- `settle`: `{\"plan\":{},\"deliveryResults\":[]}`\n- `verify`: `{\"prepared\":{},\"bindings\":[],\"items\":[],\"agents\":[],\"correlationEvidence\":[]}`\n- `reassess`: `{\"prepared\":{},\"bindings\":[],\"verification\":{},\"paneReadResults\":[]}`\n\n```bash\npython3 \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Frecover_agents.py\" \u003Coperation> \u003C \u003Cinput-file>\n```\n\n\u003C\u002Fcommand_forms>\n\n\u003Cconstraints>\n\n- ALWAYS: Use skill `coding-agents:operate-prowl` for public Prowl operations and preserve complete checked results.\n- ALWAYS preserve original and post-restart pane UUIDs, absolute worktree paths, agent types, native session IDs, exact resume locators, applicable native homes, evidence sources, roles, authorization values, and reassessed-session identities verbatim.\n- NEVER reconstruct eligibility or identity from Prowl status, transcript content, saved-history recency, rollout recency, pane presentation, or a latest-session selector.\n- NEVER enumerate worktrees blindly; activation targets only complete worktree paths already preserved by prepared native-session candidates.\n- NEVER type into an occupied mismatched pane, close a pane, launch an unprepared identity, or execute one native session in multiple panes or worktrees.\n- NEVER pass an operation input through a heredoc, a pipe, or an inline argument, and NEVER remove an input file; the harness clears its scratch directory.\n- ALWAYS take writable roots from the recover request, preserve each absolute root verbatim, and record none in the prepared manifest.\n- NEVER start a watcher, polling loop, daemon, background process, or open-ended wait.\n- NEVER plan or send reassessment before every verified pane has one checked context read; one unreadable pane blocks all continuation sends.\n- NEVER combine native launch and reassessment in one send, treat interruption metadata as cancellation, substitute repository completion for an unanswered operator request, treat distinct delivered work as satisfying an unreconciled plan, ask again for existing authority, or silently exit when a pending interaction can be restored.\n\n\u003C\u002Fconstraints>\n\n\u003Ctesting>\n\nExercise schema-5 preparation, exact Claude resume locators, applicable Codex homes, lazy activation, checked binding, launch-only native command selection for Claude\u002FCodex\u002FPi with supplied writable roots, all-pane context-read barriers, strict launch and reassessment settlement, durable reassessment idempotence, secondary authorization, duplicate rejection, path preservation, external exact correlation evidence, extra-agent rejection, and CLI dispatch through the linked mapping, property, and compliance evidence.\n\n\u003C\u002Ftesting>\n\n\u003Cfailure_modes>\n\n**Sidebar worktrees disappeared from `list`.** Claude treated `prowl list` as the sidebar inventory and concluded Prowl had lost its topology. The live GUI still showed known worktree rows; `list` contained only instantiated terminal panes. Activate only prepared paths with `open`, require `exact-root`, and bind the returned new pane.\n\n**A `done` session was unfinished.** Claude excluded a pane because Prowl reported `done`, but its exact native session resumed into concrete unfinished implementation work. Treat every Prowl status as advisory and decide eligibility from exact native identity evidence.\n\n**Concurrent Codex launches locked SQLite.** Six exact Codex resumes sharing one `CODEX_HOME` started together; three returned to the shell with a database-lock failure. Serialize launches sharing one native home and wait for each prior TUI to become input-ready.\n\n**Claude required summary resumption.** An old exact session opened a native choice between summary and full-history resumption. Accept the recommended summary option with one `Enter`; do not mistake the prompt for failed identity correlation or send continuation prose into it.\n\n**Continuation text looked delivered but remained editable.** A transport return alone did not prove the turn was submitted. Require the checked public response's `trailing_enter_sent` value and one bounded post-send read before recording durable reassessment.\n\n**A plan was declared absorbed without reading its pane.** A resumed session received a generic continuation instruction before the controller read its visible context. It merged a useful but separate change, then treated an explicit unfinished cutover plan as already covered. Read every verified pane before sending any continuation to any recovered session, then require plan-by-plan acceptance-scope reconciliation; distinct work never completes an unread plan.\n\n**SPX selected another session.** `spx agent resume --latest` selected Pi in a worktree whose prepared candidate was Codex and selected a different Claude session elsewhere. Select the exact native command from the prepared agent type and complete session ID; recency never chooses recovery identity.\n\n**Slash autocomplete consumed Enter.** `\u002Fstatus` remained in the editor because the first `Enter` selected autocomplete instead of opening Status. Detect the visible autocomplete state, send one additional `Enter`, capture identity, and close Status with `Escape`.\n\n**Launch prose remained buffered.** Claude sent the native resume command and reassessment prose as one terminal input. The interactive TUI consumed the launch while the prose remained buffered until the session quit. Send only the native launch command, verify native identity, then send reassessment separately.\n\n**A pending selection became an exit.** The reassessment instruction told a restored Codex session to stop when continuation was unclear. The prior turn was waiting for an operator disposition, so Codex stopped instead of restoring the structured question. Re-present pending questions, selections, approvals, and blockers without choosing for the operator.\n\n**Authentication interruption looked complete.** A Claude response failed with invalid credentials after an explicit operator correction. After login, reassessment inspected Git, declared the repository work complete, and asked for authorization already supplied instead of answering the unsatisfied turn. Retry the last substantive operator request after authentication or tool repair, preserving its original constraints; repository completion never satisfies an unanswered response.\n\n**Native storage used another lookup root.** Claude required an exact JSONL path after its project location changed, and Codex required the account-specific `CODEX_HOME` containing its rollout. Preserve the exact resume locator and applicable native home during preparation; never rediscover either by recency after restart.\n\n**The environment adapter leaked its request pipe.** `prowl send` rejected text with “Cannot provide text as both argument and stdin” because the adapter child inherited the JSON request stream. `\u002Foperate-prowl` binds absent operation input to null-device stdin; preserve that boundary before recovery delivery.\n\n\u003C\u002Ffailure_modes>\n\n\u003Csuccess_criteria>\n\n- Preparation persists one schema-5 candidate per intended exact native session, including exact launch context, with zero unresolved, duplicate, or unauthorized identity; Prowl status never filters the set.\n- Recovery binds every original pane to one distinct post-restart pane in the same worktree and launches only prepared exact native sessions through launch-only sends, each carrying one writable-root option per root the recover request supplies for its worktree.\n- Settlement proves every planned launch and reassessment transport once without caller-supplied delivery claims or retries.\n- Verification reports `verified`, the prepared target count, and empty missing, duplicate, and unexpected agent arrays before reassessment begins.\n- Every verified pane has one checked stable-screen context read before any reassessment delivery is planned or sent; one failed read produces zero continuation sends.\n- Every non-controller session receives one separately settled reassessment instruction that reconciles explicit plans against delivered scope, restores unsatisfied operator work or its pending interaction, and prevents duplicate delivery through the updated manifest.\n\n\u003C\u002Fsuccess_criteria>\n","\u003Cobjective>\nA durable pre-restart allowlist or an idempotent post-restart recovery in which every prepared native session has one exact Prowl pane correlation, every verified pane is read before any continuation is planned, every non-controller session receives one separately submitted context-reconciled continuation instruction, and no unprepared agent is running.\n\u003C\u002Fobjective>\n\n\u003Cdependencies>\n\n- Python 3.13+, the plugin's published shipped-script interpreter floor.\n- Use skill `coding-agents:operate-prowl` for every public Prowl operation.\n- A Prowl-native input-ready prompt for any session whose exact identity or launch context is unavailable from high-confidence public process or agent evidence.\n- One absolute manifest path supplied through `$ARGUMENTS`.\n- For `recover`, an optional absolute path to a JSON file mapping a prepared candidate's absolute worktree path to a list of absolute writable roots.\n\n\u003C\u002Fdependencies>\n\n\u003Crouting>\n\nParse `$ARGUMENTS` as exactly one mode, one absolute manifest path, and for `recover` alone an optional absolute writable-roots file path:\n\n| Mode      | Workflow                                       |\n| --------- | ---------------------------------------------- |\n| `prepare` | Run `\u003Cprepare_workflow>` before Prowl stops.   |\n| `recover` | Run `\u003Crecover_workflow>` after Prowl restarts. |\n\nReject an absent mode, unsupported mode, relative path, extra positional value, a writable-roots path supplied to `prepare`, or a `recover` manifest path that does not contain a schema-5 `prepared` manifest.\n\n\u003C\u002Frouting>\n\n\u003Cidentity_evidence>\n\nA candidate requires one exact evidence source:\n\n| Source               | Required observation                                                                 |\n| -------------------- | ------------------------------------------------------------------------------------ |\n| `process-argument`   | The live native process argument contains the complete session identity.             |\n| `open-session-file`  | The live process holds an open native session file whose name contains the identity. |\n| `native-status`      | The exact pane's native status surface displays the session identity and cwd.        |\n| `current-session`    | The running controller exposes its own complete session identity.                    |\n| `public-agent`       | `\u002Foperate-prowl agents` reports an exact high-confidence session in the pane.        |\n| `operator-confirmed` | The operator explicitly confirms the exact pane, worktree, agent type, and session.  |\n\nA pane title, terminal presentation, saved transcript, rollout existence, recent file, session-file timestamp, or sessionless roster entry is never identity evidence. Prowl's `working`, `idle`, `blocked`, and `done` values are advisory workflow projections, never native-session eligibility or completion evidence. Preserve a status value when reporting it, but never include or exclude a candidate from that value alone.\n\nRecord launch context separately from identity evidence:\n\n- `resumeLocator` is the exact Claude session ID or open JSONL path, and equals `sessionId` for Codex and Pi.\n- `nativeHome` is the absolute `CODEX_HOME` owning the exact Codex rollout when applicable; it is null for Claude and Pi.\n- Derive both from the live process, its open session file, or operator-confirmed exact storage. NEVER select either by recency.\n\n\u003C\u002Fidentity_evidence>\n\n\u003Cnative_status_protocol>\n\nUse this bounded protocol only when exact process or high-confidence public-agent evidence is unavailable:\n\n1. Use skill `coding-agents:operate-prowl` to run `read` with the exact pane UUID and stable-screen mode.\n2. When a selection dialog is visibly open, use skill `coding-agents:operate-prowl` to run `key` with `Escape`. The `prepare` invocation authorizes this exact dialog dismissal; NEVER send `Escape` to active generation.\n3. Use skill `coding-agents:operate-prowl` to run `send` with `\u002Fstatus` for Claude or Codex and `\u002Fsession` for Pi, using immediate return.\n4. Use skill `coding-agents:operate-prowl` to run `read` once with stable-screen mode. When slash-command autocomplete consumed the first `Enter`, use skill `coding-agents:operate-prowl` to run `key` with `Enter` once and read once more.\n5. Record the complete displayed session identity and cwd with `source: native-status`.\n6. Use skill `coding-agents:operate-prowl` to run `key` with `Escape` once to close the status surface.\n\nStop preparation when an active session cannot safely reach its native status surface. Never queue a status command into active work or infer the identity from recency instead.\n\n\u003C\u002Fnative_status_protocol>\n\n\u003Cprepare_workflow>\n\n1. Invoke `\u002Foperate-prowl` once for `list` and once for `agents`; preserve both complete checked results.\n2. Select every positively identified native session represented by an instantiated pre-restart pane. Require exact evidence from `\u003Cidentity_evidence>` and exclude ordinary shells and unconfirmed ambiguous identities. NEVER filter on Prowl status: a `done` projection can still carry an unfinished native conversation, as the live restart test established.\n3. Establish every selected pane's complete worktree, agent type (`claude`, `codex`, or `pi`), native session, exact `resumeLocator`, applicable `nativeHome`, evidence source, role, and secondary authorization through `\u003Cidentity_evidence>`. Use `\u003Cnative_status_protocol>` only for unresolved exact identity.\n4. Reconcile by worktree. Require exactly one primary; every distinct secondary requires `secondaryAuthorized: true` after explicit operator authorization. Reject duplicate native sessions globally.\n5. Build the script input with checked public `items`, `agents`, exact `candidates`, and exact `correlationEvidence`. Each candidate uses `paneId`, `worktreePath`, `sessionId`, `resumeLocator`, `nativeHome`, `agentType`, `evidence`, `role`, and `secondaryAuthorized`; each evidence item uses `paneId`, `worktreePath`, `sessionId`, `agentType`, and `source`.\n6. Run `prepare`, repeating `--pane` for every selected pre-restart pane UUID. Accept only `status: prepared` and schema version 5.\n7. Write the complete prepared result to the absolute manifest path. Preserve the checked list and agent responses beside it when the caller requests a snapshot directory; never replace the script's candidate result with a hand-authored summary.\n8. Report the full manifest path and candidate count. Prowl may restart only after every intended live session appears exactly once and unresolved identity count is zero.\n\n\u003C\u002Fprepare_workflow>\n\n\u003Crecover_workflow>\n\n1. Read the schema-5 `prepared` manifest from the exact absolute path. Never substitute another snapshot, a historical roster, or post-restart inference.\n2. When a writable-roots path is supplied, read it and hold its object unchanged as `writableRoots`; the prepared manifest never records a root. Treat an already resumed controller as a normal prepared candidate. Its post-restart pane UUID may differ; never launch a duplicate controller.\n3. Invoke `\u002Foperate-prowl` once for `list` and once for `agents`, then run `activate` with the prepared manifest and checked public arrays.\n4. Read the activation plan exactly:\n   - `ready` carries complete existing bindings and no activation.\n   - `activation-required` carries existing bindings plus ordered `open` or `tab-create` actions.\n   - `pane-occupied`, `invalid-target`, or `invalid-schema` stops before mutation.\n5. Treat `list` as the instantiated-terminal inventory, not the visible sidebar-worktree inventory. For every `open` action, invoke `\u002Foperate-prowl` `open` with the complete prepared worktree path and `mutationAuthorized: true`; the operator's exact `recover` invocation authorizes the visible focus switch and first-tab creation for that prepared path. NEVER enumerate Git worktrees or filesystem directories to invent activation targets. For every `tab-create` action, require the prepared authorized secondary and use the same exact-worktree authorization. Preserve every complete checked result in action order.\n6. Run `bind` with the activation plan and ordered `{originalPaneId, transport}` results. An `open` result passes only with `resolution: exact-root`, an exact returned worktree path, and a complete returned pane; `new-root`, `inside-root`, path mismatch, or missing target stops recovery. Preserve `created_tab` as evidence rather than requiring one value: false can identify an existing exact target and must not trigger an extra pane. Accept only `ready`; every binding preserves one original pane and one distinct Prowl-returned post-restart pane.\n7. Invoke `\u002Foperate-prowl` once for `list` and once for `agents`, then run `recover` with the unchanged prepared manifest and exact bindings, adding `writableRoots` when held. Stop on any occupied, missing, duplicate, or mismatched target, a non-absolute root, or a launching candidate whose agent type accepts no writable-root option while a root is supplied for its worktree, without partial delivery.\n8. Launch one planned native session at a time. Invoke `\u002Foperate-prowl` once for `send` using its complete `paneId`, exact source-owned native command, and immediate-return mode, then require checked transport evidence that a trailing `Enter` was sent. The command contains only the prepared agent type, exact resume locator or session identity, applicable native home, and one writable-root option for each root supplied for the candidate's worktree; NEVER append reassessment prose or replace it with a recency selector. Serialize Codex launches sharing one `nativeHome` and wait for the prior Codex TUI to become input-ready before starting the next, preventing shared SQLite initialization locks.\n9. Run `settle` with the exact launch plan and ordered checked transports. Accept only `resumed` or `already-current`; never retry a transport that may have delivered. A transport with no `response.data.input.trailing_enter_sent: true` is not settled.\n10. Wait for each launched native TUI to become input-ready through one bounded stable-screen read. When Claude presents its exact old-session resume-mode prompt, select the recommended `Resume from summary` option with one authorized `Enter`; this preserves the exact native identity while avoiding a full-history reload. Resolve update, trust, authentication, account-selection, or any other usage-affecting dialog only within explicit operator authority; stop that candidate when exact recovery remains unavailable.\n11. Invoke `\u002Foperate-prowl` once more for `list` and `agents`. Build exact post-restart `correlationEvidence`: use exact high-confidence public-agent identity where available and `\u003Cnative_status_protocol>` or process-backed evidence otherwise.\n12. Run `verify` with the prepared manifest, exact bindings, checked public arrays, and correlation evidence. Accept only `verified`, with target count equal to the prepared candidate count and empty missing, duplicate, and unexpected arrays.\n13. Establish one global context-read barrier before planning or sending any continuation. In prepared-manifest order, invoke `\u002Foperate-prowl` `read` with stable-screen mode for every verified binding, including the active controller and every already-correlated pane. Preserve each complete checked result as `{originalPaneId, paneId, transport}`. Finish all reads before the first reassessment send; NEVER interleave a pane read with continuation delivery. If any pane cannot be read, stop reassessment for the entire set with zero sends.\n14. Run `reassess` with the verified result and the complete ordered `paneReadResults`. `already-current` emits no delivery. `reassessment-ready` emits one source-owned continuation instruction for each verified non-controller session absent from `reassessedSessionIds`. The instruction requires the resumed agent to reconcile the native conversation and every explicitly presented plan or context artifact against the work actually delivered before continuing or marking anything complete; separate useful work never absorbs an unreconciled plan.\n15. For every reassessment delivery, invoke `\u002Foperate-prowl` once for `send` using its complete `paneId`, exact source-owned text, and immediate-return mode. These sends occur only after verification and the global context-read barrier and contain no native launch command. Require checked transport evidence that trailing `Enter` was sent; visible text still sitting in an editor is not delivery.\n16. Run `settle` with the reassessment plan and ordered checked transports. Accept only `reassessment-sent`, then perform one bounded stable-screen read per recipient to establish that the submitted turn left the editor or began a response. Replace the manifest with the returned `prepared` object only after that submission check so repeated recovery emits no duplicate reassessment.\n17. Preserve the activation plan, bindings, launch plan, checked launch transports, verification result, complete pane-read barrier, reassessment plan, checked reassessment transports, and updated manifest together. Report every full old-pane\u002Fnew-pane\u002Fworktree\u002Fagent\u002Fsession correlation.\n\n\u003C\u002Frecover_workflow>\n\n\u003Ccommand_forms>\n\nEvery operation takes its JSON input from stdin. Write the input with the file-write tool to a file in the scratch directory the harness names for this session, under a file name unique to the agent and the operation, and submit it through the input redirect `\u003C \u003Cinput-file>`. Where the harness names no scratch directory, use the one the environment designates, such as `$RUNNER_TEMP` on a hosted runner. An input carries pane reads, transports, and JSON that the dangerous-command guard refuses in a heredoc, a pipe, or an inline argument. The input shapes:\n\n- `prepare`: `{\"items\":[],\"agents\":[],\"candidates\":[],\"correlationEvidence\":[]}`, with `--pane \u003Cpre-restart-pane-uuid>` repeated per selected pane\n- `activate`: `{\"prepared\":{},\"items\":[],\"agents\":[]}`\n- `bind`: `{\"plan\":{},\"activationResults\":[]}`\n- `recover`: `{\"prepared\":{},\"bindings\":[],\"items\":[],\"agents\":[],\"writableRoots\":{}}`, where `writableRoots` is optional and maps an absolute worktree path to its list of absolute roots\n- `settle`: `{\"plan\":{},\"deliveryResults\":[]}`\n- `verify`: `{\"prepared\":{},\"bindings\":[],\"items\":[],\"agents\":[],\"correlationEvidence\":[]}`\n- `reassess`: `{\"prepared\":{},\"bindings\":[],\"verification\":{},\"paneReadResults\":[]}`\n\n```bash\npython3 \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Frecover_agents.py\" \u003Coperation> \u003C \u003Cinput-file>\n```\n\n\u003C\u002Fcommand_forms>\n\n\u003Cconstraints>\n\n- ALWAYS: Use skill `coding-agents:operate-prowl` for public Prowl operations and preserve complete checked results.\n- ALWAYS preserve original and post-restart pane UUIDs, absolute worktree paths, agent types, native session IDs, exact resume locators, applicable native homes, evidence sources, roles, authorization values, and reassessed-session identities verbatim.\n- NEVER reconstruct eligibility or identity from Prowl status, transcript content, saved-history recency, rollout recency, pane presentation, or a latest-session selector.\n- NEVER enumerate worktrees blindly; activation targets only complete worktree paths already preserved by prepared native-session candidates.\n- NEVER type into an occupied mismatched pane, close a pane, launch an unprepared identity, or execute one native session in multiple panes or worktrees.\n- NEVER pass an operation input through a heredoc, a pipe, or an inline argument, and NEVER remove an input file; the harness clears its scratch directory.\n- ALWAYS take writable roots from the recover request, preserve each absolute root verbatim, and record none in the prepared manifest.\n- NEVER start a watcher, polling loop, daemon, background process, or open-ended wait.\n- NEVER plan or send reassessment before every verified pane has one checked context read; one unreadable pane blocks all continuation sends.\n- NEVER combine native launch and reassessment in one send, treat interruption metadata as cancellation, substitute repository completion for an unanswered operator request, treat distinct delivered work as satisfying an unreconciled plan, ask again for existing authority, or silently exit when a pending interaction can be restored.\n\n\u003C\u002Fconstraints>\n\n\u003Ctesting>\n\nExercise schema-5 preparation, exact Claude resume locators, applicable Codex homes, lazy activation, checked binding, launch-only native command selection for Claude\u002FCodex\u002FPi with supplied writable roots, all-pane context-read barriers, strict launch and reassessment settlement, durable reassessment idempotence, secondary authorization, duplicate rejection, path preservation, external exact correlation evidence, extra-agent rejection, and CLI dispatch through the linked mapping, property, and compliance evidence.\n\n\u003C\u002Ftesting>\n\n\u003Cfailure_modes>\n\n**Sidebar worktrees disappeared from `list`.** Claude treated `prowl list` as the sidebar inventory and concluded Prowl had lost its topology. The live GUI still showed known worktree rows; `list` contained only instantiated terminal panes. Activate only prepared paths with `open`, require `exact-root`, and bind the returned new pane.\n\n**A `done` session was unfinished.** Claude excluded a pane because Prowl reported `done`, but its exact native session resumed into concrete unfinished implementation work. Treat every Prowl status as advisory and decide eligibility from exact native identity evidence.\n\n**Concurrent Codex launches locked SQLite.** Six exact Codex resumes sharing one `CODEX_HOME` started together; three returned to the shell with a database-lock failure. Serialize launches sharing one native home and wait for each prior TUI to become input-ready.\n\n**Claude required summary resumption.** An old exact session opened a native choice between summary and full-history resumption. Accept the recommended summary option with one `Enter`; do not mistake the prompt for failed identity correlation or send continuation prose into it.\n\n**Continuation text looked delivered but remained editable.** A transport return alone did not prove the turn was submitted. Require the checked public response's `trailing_enter_sent` value and one bounded post-send read before recording durable reassessment.\n\n**A plan was declared absorbed without reading its pane.** A resumed session received a generic continuation instruction before the controller read its visible context. It merged a useful but separate change, then treated an explicit unfinished cutover plan as already covered. Read every verified pane before sending any continuation to any recovered session, then require plan-by-plan acceptance-scope reconciliation; distinct work never completes an unread plan.\n\n**SPX selected another session.** `spx agent resume --latest` selected Pi in a worktree whose prepared candidate was Codex and selected a different Claude session elsewhere. Select the exact native command from the prepared agent type and complete session ID; recency never chooses recovery identity.\n\n**Slash autocomplete consumed Enter.** `\u002Fstatus` remained in the editor because the first `Enter` selected autocomplete instead of opening Status. Detect the visible autocomplete state, send one additional `Enter`, capture identity, and close Status with `Escape`.\n\n**Launch prose remained buffered.** Claude sent the native resume command and reassessment prose as one terminal input. The interactive TUI consumed the launch while the prose remained buffered until the session quit. Send only the native launch command, verify native identity, then send reassessment separately.\n\n**A pending selection became an exit.** The reassessment instruction told a restored Codex session to stop when continuation was unclear. The prior turn was waiting for an operator disposition, so Codex stopped instead of restoring the structured question. Re-present pending questions, selections, approvals, and blockers without choosing for the operator.\n\n**Authentication interruption looked complete.** A Claude response failed with invalid credentials after an explicit operator correction. After login, reassessment inspected Git, declared the repository work complete, and asked for authorization already supplied instead of answering the unsatisfied turn. Retry the last substantive operator request after authentication or tool repair, preserving its original constraints; repository completion never satisfies an unanswered response.\n\n**Native storage used another lookup root.** Claude required an exact JSONL path after its project location changed, and Codex required the account-specific `CODEX_HOME` containing its rollout. Preserve the exact resume locator and applicable native home during preparation; never rediscover either by recency after restart.\n\n**The environment adapter leaked its request pipe.** `prowl send` rejected text with “Cannot provide text as both argument and stdin” because the adapter child inherited the JSON request stream. `\u002Foperate-prowl` binds absent operation input to null-device stdin; preserve that boundary before recovery delivery.\n\n\u003C\u002Ffailure_modes>\n\n\u003Csuccess_criteria>\n\n- Preparation persists one schema-5 candidate per intended exact native session, including exact launch context, with zero unresolved, duplicate, or unauthorized identity; Prowl status never filters the set.\n- Recovery binds every original pane to one distinct post-restart pane in the same worktree and launches only prepared exact native sessions through launch-only sends, each carrying one writable-root option per root the recover request supplies for its worktree.\n- Settlement proves every planned launch and reassessment transport once without caller-supplied delivery claims or retries.\n- Verification reports `verified`, the prepared target count, and empty missing, duplicate, and unexpected agent arrays before reassessment begins.\n- Every verified pane has one checked stable-screen context read before any reassessment delivery is planned or sent; one failed read produces zero continuation sends.\n- Every non-controller session receives one separately settled reassessment instruction that reconciles explicit plans against delivered scope, restores unsatisfied operator work or its pending interaction, and prevents duplicate delivery through the updated manifest.\n\n\u003C\u002Fsuccess_criteria>\n",{"name":5,"description":7,"allowed-tools":49,"argument-hint":50},"Read, Write, {{! tool('use_skill') !}}, Bash(python3 \"${CLAUDE_SKILL_DIR}\u002Fscripts\u002Frecover_agents.py\":*), {{! tool('ask_user') !}}","\u003Cprepare|recover> \u003Cabsolute-manifest-path> [\u003Cabsolute-writable-roots-path>]","main","978d51c51d68c99cffb2ba48f7cad9d2f07e5738","src\u002Fplugins\u002Fcoding-agents\u002Fskills\u002Frecover-prowl-agents","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins","https:\u002F\u002Fgithub.com\u002Foutcomeeng","https:\u002F\u002Foutcome.engineering","Spec-driven development for AI-assisted engineering","2026-11-13 22:49:15",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add outcomeeng\u002Fplugins --skill recover-prowl-agents",{"tool":65,"command":66},"bunx","bunx skills add outcomeeng\u002Fplugins --skill recover-prowl-agents",{"tool":68,"command":69},"pnpm","pnpm dlx skills add outcomeeng\u002Fplugins --skill recover-prowl-agents","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fcoding-agents\u002Fskills\u002Frecover-prowl-agents\u002FSKILL.md",true,[73,79],{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"scripts\u002Fagent_tokens.py","SCRIPT","脚本",261,"https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fcoding-agents\u002Fskills\u002Frecover-prowl-agents\u002Fscripts\u002Fagent_tokens.py",{"path":80,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":81,"sourceHtmlUrl":82},"scripts\u002Frecover_agents.py",57715,"https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fcoding-agents\u002Fskills\u002Frecover-prowl-agents\u002Fscripts\u002Frecover_agents.py",[84,90,122,138,154,167],{"skillNo":85,"name":86,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":44},"01M71G25RZTPQG9KJ00JCHC1F7","plugin","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Ftemplates\u002Fplugin\u002FSKILL.md",[],[86],{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":104,"publishedAt":44},"01M71G23DCX3SV60H63HBBKQ6J","sanitize-powerpoint","ALWAYS invoke this skill when sanitizing, cleaning up, auditing, or aligning a PowerPoint (.pptx) deck — slide-master and layout structure, layout type attributes, stray fonts, non-theme colors, or layout naming. NEVER hand-edit pptx XML without this skill.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fwork\u002Fskills\u002Fsanitize-powerpoint\u002FSKILL.md",[96,99],{"categoryNo":97,"categoryName":98,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":100,"categoryName":101,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[105,106,107,108,109,110,111,42,112,113,114,115,116,117,118,119,120,121,33,32],"sanitize powerpoint","powerpoint","sanitize","fonts","type","cleaning","structure","attributes","theme","pptx","naming","layout","deck","up","edit","xml","master",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":44},"01M71G21PQKBCDECHGVYSKPJW5","draw-excalidraw","ALWAYS invoke this skill when creating Excalidraw diagrams, visualizing workflows, architectures, or concepts. NEVER generate Excalidraw JSON without this skill.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fwork\u002Fskills\u002Fdraw-excalidraw\u002FSKILL.md",[],[129,130,131,132,133,42,33,134,135,32,136,137],"draw excalidraw","excalidraw","draw","diagrams","architectures","generate","workflows","concepts","json",{"skillNo":139,"name":140,"nameZh":6,"description":141,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":142,"categories":143,"keywords":147,"publishedAt":44},"01M71G1ZMNGFD37RZYM620XM2C","typescript-test-standards","TypeScript test standards enforced across all skills. Loaded by other skills, not invoked directly.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Ftypescript\u002Fskills\u002Ftypescript-test-standards\u002FSKILL.md",[144],{"categoryNo":145,"categoryName":146,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[148,149,150,151,152,38,153],"typescript","typescript test standards","test","standards","false","across",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":163,"publishedAt":44},"01M71G1XBH0X1VCTR7269MDGSY","typescript-code-standards","TypeScript code standards enforced across all skills. Loaded by other skills, not invoked directly.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Ftypescript\u002Fskills\u002Ftypescript-code-standards\u002FSKILL.md",[160],{"categoryNo":161,"categoryName":162,"taxonomyType":102,"taxonomyTypeDesc":103},"01JBSEEDCAT000000000000030","开发工程师",[148,164,165,166,151,152,38,153],"code","typescript code standards","code standards",{"skillNo":168,"name":169,"nameZh":6,"description":170,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":171,"categories":172,"keywords":173,"publishedAt":44},"01M71G1TQ3VN45SJ75DFMJDB9W","typescript-architecture-standards","TypeScript ADR conventions enforced across architect and auditor skills. Loaded by other skills, not invoked directly.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Ftypescript\u002Fskills\u002Ftypescript-architecture-standards\u002FSKILL.md",[],[174,151,175,176,148,177,178,153,38,179,152,180],"architecture standards","typescript architecture standards","architecture","adr","architect","auditor","conventions"]