[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HTZ4JHZ00GC71SNAS77TMS":3,"skill-same:01M6HTZ4JHZ00GC71SNAS77TMS":78},{"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":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":48,"ownerHtmlUrl":49,"ownerBlogUrl":6,"ownerDescription":50,"updatedAt":51,"install":52,"resources":65},"01M6HTZ4JHZ00GC71SNAS77TMS","stale-proposals",null,"Audit this repository's local proposal queue for stale entries: proposals still open as a proposal task (awaiting consent or approved) even though the work already shipped, plus old proposals whose subject has become inert. Reconcile proposals against plugin changelogs and first-parent Git history, automatically resolve only unambiguous shipped matches, and ask before any weak-match, aged, or dismissal decision. Use when the user asks to check, reconcile, clean up, prune, or find stale proposals; asks whether proposal work already shipped; is confused why an old PROP remains open; or wants to stop heartbeat from repeatedly surfacing obsolete proposal-pending items. Supports a report-only no-apply mode.","gtapps\u002Fhermitd","gtapps","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F16778396?v=4","01M6HTX8TNTPQN3NXRVA63VHTH","01M6HTX8Z23S531ZPPA5DKJVD0",84,"MIT","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fstale-proposals\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37],"stale proposals","stale","proposals","when","prune","reconcile","git","repository","why","audit","work","ask","only","open","clean","local","decision","up","mode","proposal","2026-11-10 10:12:30",false,"---\nname: stale-proposals\ndescription: \"Audit this repository's local proposal queue for stale entries: proposals still open as a proposal task (awaiting consent or approved) even though the work already shipped, plus old proposals whose subject has become inert. Reconcile proposals against plugin changelogs and first-parent Git history, automatically resolve only unambiguous shipped matches, and ask before any weak-match, aged, or dismissal decision. Use when the user asks to check, reconcile, clean up, prune, or find stale proposals; asks whether proposal work already shipped; is confused why an old PROP remains open; or wants to stop heartbeat from repeatedly surfacing obsolete proposal-pending items. Supports a report-only no-apply mode.\"\n---\n\n# Stale Proposals\n\nReconcile the open proposal queue against what actually shipped.\n\nTrust shipping evidence more than age. An unambiguous shipped match can close automatically because the evidence is inspectable and the decision is reversible. Age or silence alone requires the user's judgment.\n\n## Invocation\n\n- `$stale-proposals` — audit the queue, auto-resolve strong shipped matches, and ask about everything else.\n- `$stale-proposals` with `no apply` or `report only` — write nothing and report all verdicts.\n\n## Step 1 — Collect bounded evidence\n\nFrom the repository root, run:\n\n```bash\nbun .agents\u002Fskills\u002Fstale-proposals\u002Fscripts\u002Fcollect-evidence.ts [--hermit-dir \u003Chermit-dir>]\n```\n\n`\u003Chermit-dir>` is the state folder that holds `tasks\u002F`; a proposal is a task record with `kind: proposal` (see `plugins\u002Fhermitd\u002Fdocs\u002Ftask-records.md`), and migrated ones keep their `PROP-NNN` id as dedupe key `proposal:PROP-NNN`. It defaults to `\u003Crepo>\u002F.hermit`, which is only right in the resident's own checkout. In a checkout whose `.hermit` is a projection (a core checkout under a resident workspace, a worktree), pass the resident's absolute `.hermit` path. Use that same path in Steps 3 and 4.\n\nThe script prints one of:\n\n- `OK|\u003Cbundle-path>|\u003Copen>|\u003Cbullets>|\u003Ccommits>|\u003Ccutoff>|\u003Ctasks>`\n- `NONE|no-open-proposals`\n\nFor `NONE|no-open-proposals`, report `Queue is clean — no open proposals.` and stop. A non-zero exit means a wrong path or an unmigrated state folder: report the stderr message and stop, never treat it as a clean queue. Unmigrated means `proposals\u002F*.md` still exist; the user runs `proposal.ts migrate \u003Chermit-dir>` once, this skill does not. The bundle also lists closed task records that name a PROP id.\n\nDo not read the evidence bundle in the main session. It can be tens of thousands of tokens and exists specifically to keep that corpus isolated.\n\n## Step 2 — Match in one isolated worker\n\nSpawn one worker agent with a fresh context (`fork_turns: \"none\"` when supported). Give it only the repository root, evidence-bundle path, and the contract below. Wait for its result before continuing. If agent spawning is unavailable, stop and explain that this audit requires one isolated worker; do not load the bundle into the main session as a fallback.\n\nUse this contract verbatim, substituting the real path:\n\n> Read the evidence bundle at `\u003Cpath>`. It lists open proposals (each headed by its `PROP-NNN` or `T-` id), then CHANGELOG bullets, closed task records, then first-parent commits.\n>\n> For each open proposal, decide whether the thing it asked for has already shipped. Emit exactly one line per proposal, and nothing else:\n>\n> - `SHIPPED-STRONG|\u003CID>|\u003Cplugin> \u003Cversion> \u002F \u003Ccommit or \"changelog\">|\u003Cone sentence: what the evidence says, in the changelog's own words>`\n> - `SHIPPED-WEAK|\u003CID>|\u003Cevidence ref>|\u003Cone sentence: what matches and what you could not confirm>`\n> - `AGED|\u003CID>|\u003Cage in days>|\u003Cone sentence: why nothing has moved on this>`\n> - `OPEN|\u003CID>`\n>\n> **STRONG requires all three:** the evidence names the same component the proposal targets; it describes the same behavior change the proposal asked for; and no distinct part of the proposal's ask is left unaddressed. A proposal asking for three things where the changelog delivers two is **WEAK**, not strong — partial delivery is the single most likely way this audit closes live work by mistake, so when you notice yourself arguing for why a gap \"probably doesn't matter,\" that is WEAK.\n>\n> Ignore date order at your peril: evidence dated before a proposal was created cannot be that proposal shipping. It is usually the prior art the proposal was written against. Changelog dates have day granularity while proposals carry a timestamp, so same-day changelog or commit evidence cannot be ordered at all — treat it as at most `SHIPPED-WEAK` and say so.\n>\n> **Closed task records** (the bundle's task section) are stronger evidence. A record whose title or `closed_reason` names the proposal, closed `done`, with a `closed_reason` saying its PR or PRs all merged, counts as `SHIPPED-STRONG` evidence even when it is the only evidence and even on the same day as the proposal: the record was opened and closed after the proposal existed. It must still cover the whole ask; a record for one of several parts is `SHIPPED-WEAK`. A cancelled record, or one that only records a helper report or investigation, is not shipping evidence.\n>\n> A proposal can ship under a different name than it asked for. Match on substance — the component, the behavior, the problem being closed — not on the proposal's chosen identifier.\n>\n> Use `AGED` only when there is no shipping evidence at all AND no commit in the history touches the proposal's subject area since it was created — an untouched subject is what \"inert\" actually means. Age alone is not staleness; a good idea nobody got to yet is `OPEN`.\n>\n> Be conservative. `OPEN` is the correct answer for most proposals and costs nothing; a wrong `SHIPPED-STRONG` silently closes live work.\n\nReject malformed lines or missing proposal IDs instead of guessing.\n\n## Step 3 — Apply strong matches\n\nSkip this step in report-only mode.\n\nOnly a proposal still awaiting consent (`status: proposed` in the bundle) is auto-resolved: an approved one was a deliberate yes, so a `SHIPPED-STRONG` on an `accepted` proposal joins the Step 4 list.\n\nThe bundle's `task:` line gives the task id. Record the evidence, then close it with `dismiss`, which is how `task.ts` drops a proposal from the terminal (`plugins\u002Fhermitd\u002Fdocs\u002Ftask-records.md` § Proposals and durable questions):\n\n```bash\nbun plugins\u002Fhermitd\u002Fscripts\u002Ftask.ts note \u003Chermit-dir> \u003Ctask-id> --decision \u003C\u003C'HERMIT_NOTE'\nResolved @now: shipped in \u003Cplugin> \u003Cversion>. \u003Cevidence sentence>\nHERMIT_NOTE\n\necho \"Shipped in \u003Cplugin> \u003Cversion>.\" | bun plugins\u002Fhermitd\u002Fscripts\u002Ftask.ts dismiss \u003Chermit-dir> \u003Ctask-id> --reason-stdin\n```\n\nReplace `@now` with the current date. The note makes the automatic resolution auditable. A shipped proposal closes as cancelled (the record's closed reason reads \"Consent declined\"), because a pending proposal has no resolved outcome; the Decisions note says why. `dismiss` runs without a prompt on a turn the operator typed in the terminal. On a chat turn it is denied with a pointer to the chat path, and elsewhere it asks for permission (bypass mode refuses it), so a denial or refusal means leave it for Step 4 and say so.\n\n`dismiss` prints `{\"id\":...,\"closed_by\":\"cancelled\",...}` on success. A `{\"status\":\"refused\",...}` (such as `not_proposal`), an `{\"error\":...}`, or a hook denial means nothing was closed: report it, move that proposal to Step 4, and continue. A `note` already written stays as a harmless record.\n\n## Step 4 — Ask about the rest\n\nPresent `SHIPPED-WEAK` first, then `AGED`, then any `accepted` `SHIPPED-STRONG`. Ask the user in one concise round whether to resolve, dismiss, or leave each item open. Separate items when one group clearly needs different decisions.\n\nStop and wait for the response. Do not interpret the original audit request as approval for these mutations.\n\nApply confirmed choices with `task.ts` against the same `\u003Chermit-dir>` as Step 1. Both resolve and dismiss close the record as cancelled; the Decision note carries the difference:\n\n- **Awaiting consent:** `note --decision` with the user's choice and reason (for resolve, as Step 3), then `dismiss \u003Ctask-id> --reason-stdin` with the reason on stdin.\n- **Accepted:** `cancel \u003Ctask-id> --actor \u003Csource>:\u003Cuser-id> --chat \u003Cchat-key> --user \u003Cuser-id> --reason-stdin` with the reason on stdin, using the user's own identity from this conversation on a chat turn. From a terminal session, `dismiss \u003Ctask-id> --reason-stdin` instead.\n- **Leave open:** make no changes.\n\nTreat only family-wide dismissal preferences as durable feedback; proposal-specific reasons are not standing policy.\n\n## Step 5 — Report the delta\n\nUse this compact shape:\n\n```text\nProposal queue: \u003CN> open → \u003CM> open\n\nResolved automatically (\u003Cn>)\n  PROP-056 — shipped in hermitd [Unreleased]: \u003Cevidence>\n\nConfirmed with you (\u003Cn>)\n  PROP-006 — dismissed\n\nStill open (\u003Cn>)\n```\n\nReport what changed and any failed mutations. Do not re-list the whole remaining queue.\n","# Stale Proposals\n\nReconcile the open proposal queue against what actually shipped.\n\nTrust shipping evidence more than age. An unambiguous shipped match can close automatically because the evidence is inspectable and the decision is reversible. Age or silence alone requires the user's judgment.\n\n## Invocation\n\n- `$stale-proposals` — audit the queue, auto-resolve strong shipped matches, and ask about everything else.\n- `$stale-proposals` with `no apply` or `report only` — write nothing and report all verdicts.\n\n## Step 1 — Collect bounded evidence\n\nFrom the repository root, run:\n\n```bash\nbun .agents\u002Fskills\u002Fstale-proposals\u002Fscripts\u002Fcollect-evidence.ts [--hermit-dir \u003Chermit-dir>]\n```\n\n`\u003Chermit-dir>` is the state folder that holds `tasks\u002F`; a proposal is a task record with `kind: proposal` (see `plugins\u002Fhermitd\u002Fdocs\u002Ftask-records.md`), and migrated ones keep their `PROP-NNN` id as dedupe key `proposal:PROP-NNN`. It defaults to `\u003Crepo>\u002F.hermit`, which is only right in the resident's own checkout. In a checkout whose `.hermit` is a projection (a core checkout under a resident workspace, a worktree), pass the resident's absolute `.hermit` path. Use that same path in Steps 3 and 4.\n\nThe script prints one of:\n\n- `OK|\u003Cbundle-path>|\u003Copen>|\u003Cbullets>|\u003Ccommits>|\u003Ccutoff>|\u003Ctasks>`\n- `NONE|no-open-proposals`\n\nFor `NONE|no-open-proposals`, report `Queue is clean — no open proposals.` and stop. A non-zero exit means a wrong path or an unmigrated state folder: report the stderr message and stop, never treat it as a clean queue. Unmigrated means `proposals\u002F*.md` still exist; the user runs `proposal.ts migrate \u003Chermit-dir>` once, this skill does not. The bundle also lists closed task records that name a PROP id.\n\nDo not read the evidence bundle in the main session. It can be tens of thousands of tokens and exists specifically to keep that corpus isolated.\n\n## Step 2 — Match in one isolated worker\n\nSpawn one worker agent with a fresh context (`fork_turns: \"none\"` when supported). Give it only the repository root, evidence-bundle path, and the contract below. Wait for its result before continuing. If agent spawning is unavailable, stop and explain that this audit requires one isolated worker; do not load the bundle into the main session as a fallback.\n\nUse this contract verbatim, substituting the real path:\n\n> Read the evidence bundle at `\u003Cpath>`. It lists open proposals (each headed by its `PROP-NNN` or `T-` id), then CHANGELOG bullets, closed task records, then first-parent commits.\n>\n> For each open proposal, decide whether the thing it asked for has already shipped. Emit exactly one line per proposal, and nothing else:\n>\n> - `SHIPPED-STRONG|\u003CID>|\u003Cplugin> \u003Cversion> \u002F \u003Ccommit or \"changelog\">|\u003Cone sentence: what the evidence says, in the changelog's own words>`\n> - `SHIPPED-WEAK|\u003CID>|\u003Cevidence ref>|\u003Cone sentence: what matches and what you could not confirm>`\n> - `AGED|\u003CID>|\u003Cage in days>|\u003Cone sentence: why nothing has moved on this>`\n> - `OPEN|\u003CID>`\n>\n> **STRONG requires all three:** the evidence names the same component the proposal targets; it describes the same behavior change the proposal asked for; and no distinct part of the proposal's ask is left unaddressed. A proposal asking for three things where the changelog delivers two is **WEAK**, not strong — partial delivery is the single most likely way this audit closes live work by mistake, so when you notice yourself arguing for why a gap \"probably doesn't matter,\" that is WEAK.\n>\n> Ignore date order at your peril: evidence dated before a proposal was created cannot be that proposal shipping. It is usually the prior art the proposal was written against. Changelog dates have day granularity while proposals carry a timestamp, so same-day changelog or commit evidence cannot be ordered at all — treat it as at most `SHIPPED-WEAK` and say so.\n>\n> **Closed task records** (the bundle's task section) are stronger evidence. A record whose title or `closed_reason` names the proposal, closed `done`, with a `closed_reason` saying its PR or PRs all merged, counts as `SHIPPED-STRONG` evidence even when it is the only evidence and even on the same day as the proposal: the record was opened and closed after the proposal existed. It must still cover the whole ask; a record for one of several parts is `SHIPPED-WEAK`. A cancelled record, or one that only records a helper report or investigation, is not shipping evidence.\n>\n> A proposal can ship under a different name than it asked for. Match on substance — the component, the behavior, the problem being closed — not on the proposal's chosen identifier.\n>\n> Use `AGED` only when there is no shipping evidence at all AND no commit in the history touches the proposal's subject area since it was created — an untouched subject is what \"inert\" actually means. Age alone is not staleness; a good idea nobody got to yet is `OPEN`.\n>\n> Be conservative. `OPEN` is the correct answer for most proposals and costs nothing; a wrong `SHIPPED-STRONG` silently closes live work.\n\nReject malformed lines or missing proposal IDs instead of guessing.\n\n## Step 3 — Apply strong matches\n\nSkip this step in report-only mode.\n\nOnly a proposal still awaiting consent (`status: proposed` in the bundle) is auto-resolved: an approved one was a deliberate yes, so a `SHIPPED-STRONG` on an `accepted` proposal joins the Step 4 list.\n\nThe bundle's `task:` line gives the task id. Record the evidence, then close it with `dismiss`, which is how `task.ts` drops a proposal from the terminal (`plugins\u002Fhermitd\u002Fdocs\u002Ftask-records.md` § Proposals and durable questions):\n\n```bash\nbun plugins\u002Fhermitd\u002Fscripts\u002Ftask.ts note \u003Chermit-dir> \u003Ctask-id> --decision \u003C\u003C'HERMIT_NOTE'\nResolved @now: shipped in \u003Cplugin> \u003Cversion>. \u003Cevidence sentence>\nHERMIT_NOTE\n\necho \"Shipped in \u003Cplugin> \u003Cversion>.\" | bun plugins\u002Fhermitd\u002Fscripts\u002Ftask.ts dismiss \u003Chermit-dir> \u003Ctask-id> --reason-stdin\n```\n\nReplace `@now` with the current date. The note makes the automatic resolution auditable. A shipped proposal closes as cancelled (the record's closed reason reads \"Consent declined\"), because a pending proposal has no resolved outcome; the Decisions note says why. `dismiss` runs without a prompt on a turn the operator typed in the terminal. On a chat turn it is denied with a pointer to the chat path, and elsewhere it asks for permission (bypass mode refuses it), so a denial or refusal means leave it for Step 4 and say so.\n\n`dismiss` prints `{\"id\":...,\"closed_by\":\"cancelled\",...}` on success. A `{\"status\":\"refused\",...}` (such as `not_proposal`), an `{\"error\":...}`, or a hook denial means nothing was closed: report it, move that proposal to Step 4, and continue. A `note` already written stays as a harmless record.\n\n## Step 4 — Ask about the rest\n\nPresent `SHIPPED-WEAK` first, then `AGED`, then any `accepted` `SHIPPED-STRONG`. Ask the user in one concise round whether to resolve, dismiss, or leave each item open. Separate items when one group clearly needs different decisions.\n\nStop and wait for the response. Do not interpret the original audit request as approval for these mutations.\n\nApply confirmed choices with `task.ts` against the same `\u003Chermit-dir>` as Step 1. Both resolve and dismiss close the record as cancelled; the Decision note carries the difference:\n\n- **Awaiting consent:** `note --decision` with the user's choice and reason (for resolve, as Step 3), then `dismiss \u003Ctask-id> --reason-stdin` with the reason on stdin.\n- **Accepted:** `cancel \u003Ctask-id> --actor \u003Csource>:\u003Cuser-id> --chat \u003Cchat-key> --user \u003Cuser-id> --reason-stdin` with the reason on stdin, using the user's own identity from this conversation on a chat turn. From a terminal session, `dismiss \u003Ctask-id> --reason-stdin` instead.\n- **Leave open:** make no changes.\n\nTreat only family-wide dismissal preferences as durable feedback; proposal-specific reasons are not standing policy.\n\n## Step 5 — Report the delta\n\nUse this compact shape:\n\n```text\nProposal queue: \u003CN> open → \u003CM> open\n\nResolved automatically (\u003Cn>)\n  PROP-056 — shipped in hermitd [Unreleased]: \u003Cevidence>\n\nConfirmed with you (\u003Cn>)\n  PROP-006 — dismissed\n\nStill open (\u003Cn>)\n```\n\nReport what changed and any failed mutations. Do not re-list the whole remaining queue.\n",{"name":5,"description":7},"main","9ad858aaec20d1087625e634b51ab70c993f22cd",".agents\u002Fskills\u002Fstale-proposals",16,"https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd","https:\u002F\u002Fhermitd.dev","https:\u002F\u002Fgithub.com\u002Fgtapps","Software engineer from Portugal.\r\nBuilding and deploying agents for real companies.","2026-11-11 08:46:23",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add gtapps\u002Fhermitd --skill stale-proposals",{"tool":58,"command":59},"bunx","bunx skills add gtapps\u002Fhermitd --skill stale-proposals",{"tool":61,"command":62},"pnpm","pnpm dlx skills add gtapps\u002Fhermitd --skill stale-proposals","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fstale-proposals\u002FSKILL.md",true,[66,72],{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"agents\u002Fopenai.yaml","REFERENCE","参考文档",237,"https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fstale-proposals\u002Fagents\u002Fopenai.yaml",{"path":73,"resourceType":74,"resourceTypeDesc":75,"sizeBytes":76,"sourceHtmlUrl":77},"scripts\u002Fcollect-evidence.ts","SCRIPT","脚本",7788,"https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fstale-proposals\u002Fscripts\u002Fcollect-evidence.ts",[79,95,110,136,152,161],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":38},"01M718AB18DTYHVGXA6VF1VVR2","dream","Nightly memory maintenance from transcript ground truth. Verifies, enriches and tidies auto-memory and topic pages with snapshot validation and undo. Also handles 'undo the dream'.","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fdream\u002FSKILL.md",[],[81,86,87,88,89,90,91,92,93,94],"with","maintenance","memory","validation","snapshot","pages","auto","memory maintenance","transcript",{"skillNo":96,"name":97,"nameZh":6,"description":98,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":99,"categories":100,"keywords":101,"publishedAt":38},"01M6HVD4WX8RB5EKH49HM66M8X","when-done-switch-to","Arm a deferred model or effort switch. Use for \"when done switch to\", \"after this drop to sonnet\", or \"switch model when idle\".","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fwhen-done-switch-to\u002FSKILL.md",[],[21,102,103,104,105,106,107,108,109],"done","switch","when done switch to","for","model","use","drop","sonnet",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":38},"01M6HVD0ZA2Q1RD7CA0X8VWF3T","weekly-review","Generate the weekly review report for the current ISO week. Writes to .hermit\u002Fcompiled\u002Freview-weekly-YYYY-Www.md (dev-facing detail) and sends a plain-language channel summary (Delivered \u002F Decisions \u002F Waiting on you \u002F Spend). Runs every Sunday at 23:00 via routine.","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fweekly-review\u002FSKILL.md",[],[117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,105,132,133,134,135],"weekly review","review","weekly","hermit","plain","routine","channel","summary","report","at","generate","via","decisions","you","detail","iso","review report","dev","plain-language",{"skillNo":137,"name":138,"nameZh":6,"description":139,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":140,"categories":141,"keywords":142,"publishedAt":38},"01M6HVCW8PHZXSPYAZQBZXB9DX","watch","Background events via the config watch monitor or ad-hoc Monitor tool. Quiet watches cost zero tokens.","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fwatch\u002FSKILL.md",[],[138,143,144,145,146,147,148,149,150,128,151],"monitor","ZeRO","tokens","tool","cost","ad","config","background","events",{"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":6,"sourceHtmlUrl":156,"categories":157,"keywords":158,"publishedAt":38},"01M6HVCRMG53K3Y63WAH59YVFJ","watch-activate","Activate the config watch monitor.","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fwatch-activate\u002FSKILL.md",[],[138,159,160,143,149],"activate","watch activate",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":172,"publishedAt":38},"01M6HVCK6782RD4D9ADQY0ENKD","voice-notes","Transcribe and respond to voice notes. Activates when any channel message carries an audio attachment, or when asked to transcribe an inbound voice message.","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fvoice-notes\u002FSKILL.md",[167],{"categoryNo":168,"categoryName":169,"taxonomyType":170,"taxonomyTypeDesc":171},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[173,174,175,176,177,178,179,180,181,182,120,21,183,184,185,186,187,188,130,35],"notes","voice","voice notes","SET","Audio","transcribe","operator","understand","transcription","my","read","message","can","telegram","channel message","discord"]