[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HTZXZG69H3MQ3PEQM9VBE0":3,"skill-same:01M6HTZXZG69H3MQ3PEQM9VBE0":67},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":6,"ownerDescription":51,"updatedAt":52,"install":53,"resources":66},"01M6HTZXZG69H3MQ3PEQM9VBE0","docs-drift",null,"Documentation-drift audit for the plugin monorepo. Audits either each scoped plugin's unreleased changelog claims or its latest shipped release from the previous reachable plugin-name--v* tag, then checks whether the matching plugin README, docs\u002F, CLAUDE.md or AGENTS.md files, and root documentation still tell the truth. Reports meaningful drift with concrete proposed edits and asks before applying anything. Use when preparing or verifying a release, when asked to check the latest version, or when the operator says \"docs drift\", \"check the docs\", \"are the docs up to date\", \"docs audit\", \"did the docs keep up\", \"check documentation before release\", or whether documentation matches released or unreleased changes. Complements \u002Fpre-release-review, which checks changelog claims against code; this skill checks changelog claims against docs.","gtapps\u002Fhermitd","gtapps","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F16778396?v=4","01M6HTX8TNTPQN3NXRVA63VHTH","01M6HTX8Z23S531ZPPA5DKJVD0",85,"MIT","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdocs-drift\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"docs","docs drift","drift","when","review","for","claims","which","either","files","reports","up","README","monorepo","docs audit","operator","audit","changelog","release","code","documentation","2026-11-10 10:12:30",false,"---\nname: docs-drift\ndescription: Documentation-drift audit for the plugin monorepo. Audits either each scoped plugin's unreleased changelog claims or its latest shipped release from the previous reachable plugin-name--v* tag, then checks whether the matching plugin README, docs\u002F, CLAUDE.md or AGENTS.md files, and root documentation still tell the truth. Reports meaningful drift with concrete proposed edits and asks before applying anything. Use when preparing or verifying a release, when asked to check the latest version, or when the operator says \"docs drift\", \"check the docs\", \"are the docs up to date\", \"docs audit\", \"did the docs keep up\", \"check documentation before release\", or whether documentation matches released or unreleased changes. Complements \u002Fpre-release-review, which checks changelog claims against code; this skill checks changelog claims against docs.\n---\n\n# Docs Drift\n\nThe third leg of the release check. `\u002Frelease-status` shows what is queued,\n`\u002Fpre-release-review` verifies that the changelog tells the truth about the\ncode, and this skill verifies that the docs tell the truth after the change.\n\n**Read-only until the operator approves.** The audit never edits, commits,\ntags, pushes, publishes, or releases. Apply only the findings the operator\nselects in Step 5.\n\n## Usage\n\n- `\u002Fdocs-drift` or `\u002Fdocs-drift unreleased` — audit every plugin with a\n  non-empty `[Unreleased]` section.\n- `\u002Fdocs-drift \u003Cplugin-slug>` — audit that plugin's unreleased changes.\n- `\u002Fdocs-drift latest` — audit the latest reachable release of every tagged\n  plugin.\n- `\u002Fdocs-drift latest \u003Cplugin-slug>` — audit only that plugin's latest release.\n\nDefault to unreleased mode. Treat \"latest version\", \"latest release\", or\nequivalent wording as latest-release mode.\n\nNatural ordering before a ship:\n\n`\u002Frelease-status` → `\u002Fpre-release-review` → `\u002Fdocs-drift` → `\u002Frelease \u003Cslug>`\n\n## Step 1 — Scope plugins and snapshots\n\nNever mix released and unreleased windows in one claim set.\n\n### Unreleased mode\n\nIdentify plugins whose `[Unreleased]` section contains non-blank content:\n\n```bash\nfor p in plugins\u002F*\u002FCHANGELOG.md; do\n  slug=$(basename \"$(dirname \"$p\")\")\n  awk '\u002F^## \\[Unreleased\\]\u002F{f=1; next} \u002F^## \\[\u002F{f=0} f && NF' \"$p\" | rg -q '.' \\\n    && echo \"$slug\"\ndone\n```\n\nIf the operator named a plugin, limit scope to that slug after verifying it\nexists and has unreleased content. If nothing is in scope, stop with:\n\n`No unreleased changes in any plugin — nothing to drift-check.`\n\nUse the working tree as the documentation snapshot. Keep incidentally noticed\nolder drift separate as pre-existing debt.\n\n### Latest-release mode\n\nStart from all `plugins\u002F*\u002FCHANGELOG.md` slugs, or only the operator-named slug.\nResolve each plugin's refs independently:\n\n```bash\nEMPTY_TREE=$(git hash-object -t tree \u002Fdev\u002Fnull)\n\nfor p in plugins\u002F*\u002FCHANGELOG.md; do\n  slug=$(basename \"$(dirname \"$p\")\")\n  latest=$(git describe --tags --abbrev=0 --match \"${slug}--v*\" HEAD 2>\u002Fdev\u002Fnull || true)\n\n  if [ -z \"$latest\" ]; then\n    printf '%s\\n' \"$slug: skipped (no reachable release tag)\"\n    continue\n  fi\n\n  previous=$(git describe --tags --abbrev=0 --match \"${slug}--v*\" \"${latest}^\" 2>\u002Fdev\u002Fnull || true)\n  printf '%s\\n' \"$slug latest=$latest previous=${previous:-\u003Cempty-tree>}\"\ndone\n```\n\nUse only reachable `\u003Cslug>--v*` tags. Do not select an unreachable tag merely\nbecause its version sorts later. If a plugin has only one reachable tag, use\nthe empty tree as its previous snapshot. If every scoped plugin lacks a tag,\nstop with:\n\n`No reachable plugin release tags — nothing to latest-release drift-check.`\n\nFor each plugin, record:\n\n- claim window: `\u003Cprevious-tag>..\u003Clatest-tag>`, or empty tree to latest tag;\n- changelog claims: the exact `## [\u003Clatest-version>]` section at the latest tag;\n- documentation snapshot: the repository exactly at that plugin's latest tag.\n\nLater commits and working-tree changes are not release claims in this mode.\nDifferent plugins may have different latest-tag snapshots; preserve the\nplugin-to-tag mapping throughout the audit.\n\n## Step 2 — Extract doc-checkable claims\n\nIn unreleased mode, read only each scoped plugin's working-tree `[Unreleased]`\nsection.\n\nIn latest-release mode, derive the version from `\u003Cslug>--v\u003Cversion>` and read\nthe matching changelog section from the tagged snapshot:\n\n```bash\nversion=${latest##*--v}\ngit show \"$latest:plugins\u002F$slug\u002FCHANGELOG.md\" | awk -v ver=\"$version\" '\n  index($0, \"## [\" ver \"]\") == 1 {f=1; next}\n  \u002F^## \\[\u002F && f {exit}\n  f\n'\n```\n\nAlso inspect the plugin-scoped release diff to catch doc-checkable\noperator-visible changes that a changelog bullet may group:\n\n```bash\nrelease_diff_base=${previous:-$EMPTY_TREE}\ngit diff \"$release_diff_base\" \"$latest\" -- \"plugins\u002F$slug\u002F\"\n```\n\nUse that diff only in latest-release mode and only for claim discovery. This\nskill does not replace changelog-versus-code review.\n\nTurn each bullet or diff-derived behavior into zero or more claims:\n\n- **Removal or rename** — a skill, command, script, hook, config key, doc file,\n  or CLI changed identity.\n- **New operator-visible surface** — a new skill, slash command, config block,\n  hook, CLI, or channel behavior should appear where siblings are enumerated.\n- **Changed default or behavior** — docs may still state the previous default\n  or behavior. Treat this as the highest-severity class.\n- **Count or version claim** — a hand-written number or version marker may\n  still contain the old value.\n- **Promised documentation** — a cited file or anchor must exist and cover what\n  the changelog promises.\n\nMark pure internal fixes, refactors, and test-only changes as `no doc surface`.\nDo not manufacture a finding for every bullet.\n\n## Step 3 — Sweep the matching documentation\n\nFor each scoped plugin, consider the files that exist in its selected snapshot:\n\n- `plugins\u002F\u003Cslug>\u002FREADME.md`\n- `plugins\u002F\u003Cslug>\u002Fdocs\u002F*.md`\n- `plugins\u002F\u003Cslug>\u002FCLAUDE.md`\n- `plugins\u002F\u003Cslug>\u002FAGENTS.md`\n- top-level plugin extras such as `SAFETY.md`, `DOCKER.md`, or\n  `CONTRIBUTING.md`\n\nAlso check relevant root documentation:\n\n- root `README.md`\n- root `CLAUDE.md`\n- root `AGENTS.md`\n- root documentation extras relevant to a claim\n\nWork claim-first, not file-first:\n\n- **Unreleased:** use `rg -n` against the working tree. Sweep root files once\n  against the union of all claims.\n- **Latest release:** use `git grep -n \u003Cpattern> \"$latest\" -- \u003Cpaths>` and\n  `git show \"$latest:\u003Cpath>\"`. Sweep root files at each plugin's own latest-tag\n  snapshot. Deduplicate identical root findings without losing the plugin\u002Ftag\n  evidence.\n\nNever silently substitute current documentation for a released snapshot.\n\n**Fan out when scope is wide.** With more than two plugins in scope, dispatch\none Explore\u002Fgeneral-purpose subagent per plugin. Give it only that plugin's\nclaims, mode, and snapshot ref. Require findings as:\n\n`snapshot:file:line — claim contradicted — current text — suggested fix`\n\nKeep the root-file sweep in the main session because it needs cross-plugin\ndeduplication. In latest-release mode, require subagents to inspect tagged\nfiles with `git grep` and `git show`; the working tree is only for the\nactionability check below.\n\nIn latest-release mode, re-check each snapshot finding against the current\nworking tree:\n\n- If it is still stale, propose an edit to the current file.\n- If it is already corrected, report it under `Fixed after release` with no\n  proposed edit.\n- If the file no longer exists, explain its replacement or removal and do not\n  propose recreating it without evidence.\n\n## Step 4 — Judge meaningfulness\n\nPropose an edit only when a reader would be factually misled:\n\n- **Meaningful:** references a removed or renamed surface; states an old\n  default or behavior; gives a wrong count or version; omits a new surface from\n  a sibling enumeration; or promises documentation that does not exist or does\n  not cover the claim.\n- **Not meaningful:** tone, formatting, absent marketing coverage, missing\n  documentation for internal fixes, or changelog accuracy that\n  `\u002Fpre-release-review` owns.\n- **Borderline:** reader impact is unclear. Report it separately with a\n  one-line rationale and no proposed edit.\n\nNever pad findings.\n\n## Step 5 — Report, then ask before applying\n\nEmit one report:\n\n```text\n# Docs Drift — \u003Cdate>\n\n## Scope\nMode: \u003Cunreleased | latest release>\nIn scope: \u003Cslugs with snapshot refs>\nSkipped: \u003Cslugs and reasons>\nClaim windows: \u003C[Unreleased] | previous-tag..latest-tag per plugin>\nDocumentation snapshots: \u003Cworking tree | latest tag per plugin>\n\n## Findings\n### \u003Cn>. \u003Cslug> — \u003Cmisleading | stale-reference | missing-doc>\n- Claim: \u003Cabbreviated claim and changelog\u002Fdiff evidence>\n- Drift: \u003Csnapshot>:\u003Cdoc file:line> — currently says: \"\u003Cexcerpt>\"\n- Current tree: \u003Cstill stale | changed | file removed>\n- Proposed edit: \u003Cexact replacement text, or \"add section X covering Y\">\n\n## Fixed after release (no edit proposed)\n- \u003Csnapshot>:\u003Cfile:line> — \u003Cwhat was stale and where it is now corrected>\n\n## Borderline (no edit proposed)\n- \u003Csnapshot>:\u003Cfile:line> — \u003Cone-line rationale>\n\n## No doc surface\n- \u003Cbriefly grouped internal or test-only claims>\n\n## Pre-existing drift (not this window)\n- \u003Canything noticed outside the selected claim window>\n\n## Verdict\n\u003CN> actionable findings across \u003CM> current files | Docs are clean for this window.\n```\n\nAsk which actionable findings to apply: all, selected finding numbers, or none.\nThe audit itself is not approval to edit.\n\nFor approved findings, edit only the current working tree, surgically, matching\neach document's style. Never edit a tag. Shortening a doc means condensing the\nwording and keeping the content: removing a section or content block needs\nper-item operator confirmation, and install, upgrade and recovery steps always\nstay (compressed to a few lines plus a link if needed).\n\nAfter applying:\n\n- Re-read changed passages and run `git diff --check`.\n- For edits under `plugins\u002F\u003Cslug>\u002F`, offer a terse sentence-case line for that\n  plugin's `[Unreleased]` `### Fixed`, with no `**docs:**` prefix. Root\n  README\u002FCLAUDE.md edits skip the changelog per repository convention.\n- Report that edits are uncommitted and `\u002Fcommit` can capture them.\n- Never commit, push, tag, publish, or release from this skill.\n","# Docs Drift\n\nThe third leg of the release check. `\u002Frelease-status` shows what is queued,\n`\u002Fpre-release-review` verifies that the changelog tells the truth about the\ncode, and this skill verifies that the docs tell the truth after the change.\n\n**Read-only until the operator approves.** The audit never edits, commits,\ntags, pushes, publishes, or releases. Apply only the findings the operator\nselects in Step 5.\n\n## Usage\n\n- `\u002Fdocs-drift` or `\u002Fdocs-drift unreleased` — audit every plugin with a\n  non-empty `[Unreleased]` section.\n- `\u002Fdocs-drift \u003Cplugin-slug>` — audit that plugin's unreleased changes.\n- `\u002Fdocs-drift latest` — audit the latest reachable release of every tagged\n  plugin.\n- `\u002Fdocs-drift latest \u003Cplugin-slug>` — audit only that plugin's latest release.\n\nDefault to unreleased mode. Treat \"latest version\", \"latest release\", or\nequivalent wording as latest-release mode.\n\nNatural ordering before a ship:\n\n`\u002Frelease-status` → `\u002Fpre-release-review` → `\u002Fdocs-drift` → `\u002Frelease \u003Cslug>`\n\n## Step 1 — Scope plugins and snapshots\n\nNever mix released and unreleased windows in one claim set.\n\n### Unreleased mode\n\nIdentify plugins whose `[Unreleased]` section contains non-blank content:\n\n```bash\nfor p in plugins\u002F*\u002FCHANGELOG.md; do\n  slug=$(basename \"$(dirname \"$p\")\")\n  awk '\u002F^## \\[Unreleased\\]\u002F{f=1; next} \u002F^## \\[\u002F{f=0} f && NF' \"$p\" | rg -q '.' \\\n    && echo \"$slug\"\ndone\n```\n\nIf the operator named a plugin, limit scope to that slug after verifying it\nexists and has unreleased content. If nothing is in scope, stop with:\n\n`No unreleased changes in any plugin — nothing to drift-check.`\n\nUse the working tree as the documentation snapshot. Keep incidentally noticed\nolder drift separate as pre-existing debt.\n\n### Latest-release mode\n\nStart from all `plugins\u002F*\u002FCHANGELOG.md` slugs, or only the operator-named slug.\nResolve each plugin's refs independently:\n\n```bash\nEMPTY_TREE=$(git hash-object -t tree \u002Fdev\u002Fnull)\n\nfor p in plugins\u002F*\u002FCHANGELOG.md; do\n  slug=$(basename \"$(dirname \"$p\")\")\n  latest=$(git describe --tags --abbrev=0 --match \"${slug}--v*\" HEAD 2>\u002Fdev\u002Fnull || true)\n\n  if [ -z \"$latest\" ]; then\n    printf '%s\\n' \"$slug: skipped (no reachable release tag)\"\n    continue\n  fi\n\n  previous=$(git describe --tags --abbrev=0 --match \"${slug}--v*\" \"${latest}^\" 2>\u002Fdev\u002Fnull || true)\n  printf '%s\\n' \"$slug latest=$latest previous=${previous:-\u003Cempty-tree>}\"\ndone\n```\n\nUse only reachable `\u003Cslug>--v*` tags. Do not select an unreachable tag merely\nbecause its version sorts later. If a plugin has only one reachable tag, use\nthe empty tree as its previous snapshot. If every scoped plugin lacks a tag,\nstop with:\n\n`No reachable plugin release tags — nothing to latest-release drift-check.`\n\nFor each plugin, record:\n\n- claim window: `\u003Cprevious-tag>..\u003Clatest-tag>`, or empty tree to latest tag;\n- changelog claims: the exact `## [\u003Clatest-version>]` section at the latest tag;\n- documentation snapshot: the repository exactly at that plugin's latest tag.\n\nLater commits and working-tree changes are not release claims in this mode.\nDifferent plugins may have different latest-tag snapshots; preserve the\nplugin-to-tag mapping throughout the audit.\n\n## Step 2 — Extract doc-checkable claims\n\nIn unreleased mode, read only each scoped plugin's working-tree `[Unreleased]`\nsection.\n\nIn latest-release mode, derive the version from `\u003Cslug>--v\u003Cversion>` and read\nthe matching changelog section from the tagged snapshot:\n\n```bash\nversion=${latest##*--v}\ngit show \"$latest:plugins\u002F$slug\u002FCHANGELOG.md\" | awk -v ver=\"$version\" '\n  index($0, \"## [\" ver \"]\") == 1 {f=1; next}\n  \u002F^## \\[\u002F && f {exit}\n  f\n'\n```\n\nAlso inspect the plugin-scoped release diff to catch doc-checkable\noperator-visible changes that a changelog bullet may group:\n\n```bash\nrelease_diff_base=${previous:-$EMPTY_TREE}\ngit diff \"$release_diff_base\" \"$latest\" -- \"plugins\u002F$slug\u002F\"\n```\n\nUse that diff only in latest-release mode and only for claim discovery. This\nskill does not replace changelog-versus-code review.\n\nTurn each bullet or diff-derived behavior into zero or more claims:\n\n- **Removal or rename** — a skill, command, script, hook, config key, doc file,\n  or CLI changed identity.\n- **New operator-visible surface** — a new skill, slash command, config block,\n  hook, CLI, or channel behavior should appear where siblings are enumerated.\n- **Changed default or behavior** — docs may still state the previous default\n  or behavior. Treat this as the highest-severity class.\n- **Count or version claim** — a hand-written number or version marker may\n  still contain the old value.\n- **Promised documentation** — a cited file or anchor must exist and cover what\n  the changelog promises.\n\nMark pure internal fixes, refactors, and test-only changes as `no doc surface`.\nDo not manufacture a finding for every bullet.\n\n## Step 3 — Sweep the matching documentation\n\nFor each scoped plugin, consider the files that exist in its selected snapshot:\n\n- `plugins\u002F\u003Cslug>\u002FREADME.md`\n- `plugins\u002F\u003Cslug>\u002Fdocs\u002F*.md`\n- `plugins\u002F\u003Cslug>\u002FCLAUDE.md`\n- `plugins\u002F\u003Cslug>\u002FAGENTS.md`\n- top-level plugin extras such as `SAFETY.md`, `DOCKER.md`, or\n  `CONTRIBUTING.md`\n\nAlso check relevant root documentation:\n\n- root `README.md`\n- root `CLAUDE.md`\n- root `AGENTS.md`\n- root documentation extras relevant to a claim\n\nWork claim-first, not file-first:\n\n- **Unreleased:** use `rg -n` against the working tree. Sweep root files once\n  against the union of all claims.\n- **Latest release:** use `git grep -n \u003Cpattern> \"$latest\" -- \u003Cpaths>` and\n  `git show \"$latest:\u003Cpath>\"`. Sweep root files at each plugin's own latest-tag\n  snapshot. Deduplicate identical root findings without losing the plugin\u002Ftag\n  evidence.\n\nNever silently substitute current documentation for a released snapshot.\n\n**Fan out when scope is wide.** With more than two plugins in scope, dispatch\none Explore\u002Fgeneral-purpose subagent per plugin. Give it only that plugin's\nclaims, mode, and snapshot ref. Require findings as:\n\n`snapshot:file:line — claim contradicted — current text — suggested fix`\n\nKeep the root-file sweep in the main session because it needs cross-plugin\ndeduplication. In latest-release mode, require subagents to inspect tagged\nfiles with `git grep` and `git show`; the working tree is only for the\nactionability check below.\n\nIn latest-release mode, re-check each snapshot finding against the current\nworking tree:\n\n- If it is still stale, propose an edit to the current file.\n- If it is already corrected, report it under `Fixed after release` with no\n  proposed edit.\n- If the file no longer exists, explain its replacement or removal and do not\n  propose recreating it without evidence.\n\n## Step 4 — Judge meaningfulness\n\nPropose an edit only when a reader would be factually misled:\n\n- **Meaningful:** references a removed or renamed surface; states an old\n  default or behavior; gives a wrong count or version; omits a new surface from\n  a sibling enumeration; or promises documentation that does not exist or does\n  not cover the claim.\n- **Not meaningful:** tone, formatting, absent marketing coverage, missing\n  documentation for internal fixes, or changelog accuracy that\n  `\u002Fpre-release-review` owns.\n- **Borderline:** reader impact is unclear. Report it separately with a\n  one-line rationale and no proposed edit.\n\nNever pad findings.\n\n## Step 5 — Report, then ask before applying\n\nEmit one report:\n\n```text\n# Docs Drift — \u003Cdate>\n\n## Scope\nMode: \u003Cunreleased | latest release>\nIn scope: \u003Cslugs with snapshot refs>\nSkipped: \u003Cslugs and reasons>\nClaim windows: \u003C[Unreleased] | previous-tag..latest-tag per plugin>\nDocumentation snapshots: \u003Cworking tree | latest tag per plugin>\n\n## Findings\n### \u003Cn>. \u003Cslug> — \u003Cmisleading | stale-reference | missing-doc>\n- Claim: \u003Cabbreviated claim and changelog\u002Fdiff evidence>\n- Drift: \u003Csnapshot>:\u003Cdoc file:line> — currently says: \"\u003Cexcerpt>\"\n- Current tree: \u003Cstill stale | changed | file removed>\n- Proposed edit: \u003Cexact replacement text, or \"add section X covering Y\">\n\n## Fixed after release (no edit proposed)\n- \u003Csnapshot>:\u003Cfile:line> — \u003Cwhat was stale and where it is now corrected>\n\n## Borderline (no edit proposed)\n- \u003Csnapshot>:\u003Cfile:line> — \u003Cone-line rationale>\n\n## No doc surface\n- \u003Cbriefly grouped internal or test-only claims>\n\n## Pre-existing drift (not this window)\n- \u003Canything noticed outside the selected claim window>\n\n## Verdict\n\u003CN> actionable findings across \u003CM> current files | Docs are clean for this window.\n```\n\nAsk which actionable findings to apply: all, selected finding numbers, or none.\nThe audit itself is not approval to edit.\n\nFor approved findings, edit only the current working tree, surgically, matching\neach document's style. Never edit a tag. Shortening a doc means condensing the\nwording and keeping the content: removing a section or content block needs\nper-item operator confirmation, and install, upgrade and recovery steps always\nstay (compressed to a few lines plus a link if needed).\n\nAfter applying:\n\n- Re-read changed passages and run `git diff --check`.\n- For edits under `plugins\u002F\u003Cslug>\u002F`, offer a terse sentence-case line for that\n  plugin's `[Unreleased]` `### Fixed`, with no `**docs:**` prefix. Root\n  README\u002FCLAUDE.md edits skip the changelog per repository convention.\n- Report that edits are uncommitted and `\u002Fcommit` can capture them.\n- Never commit, push, tag, publish, or release from this skill.\n",{"name":5,"description":7},"main","79e254360ba999b70a827541bbcfd2d4cc525992",".claude\u002Fskills\u002Fdocs-drift",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-14 03:31:41",{"source":8,"skillName":5,"commands":54,"prompt":64,"zipAvailable":65},[55,58,61],{"tool":56,"command":57},"npx","npx skills add gtapps\u002Fhermitd --skill docs-drift",{"tool":59,"command":60},"bunx","bunx skills add gtapps\u002Fhermitd --skill docs-drift",{"tool":62,"command":63},"pnpm","pnpm dlx skills add gtapps\u002Fhermitd --skill docs-drift","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdocs-drift\u002FSKILL.md",true,[],[68,84,98,123,139,148],{"skillNo":69,"name":70,"nameZh":6,"description":71,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":72,"categories":73,"keywords":74,"publishedAt":39},"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",[],[70,75,76,77,78,79,80,81,82,83],"with","maintenance","memory","validation","snapshot","pages","auto","memory maintenance","transcript",{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":39},"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,91,92,93,23,94,95,96,97],"done","switch","when done switch to","model","use","drop","sonnet",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":39},"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",[],[105,22,106,107,108,109,110,111,112,113,114,115,116,117,118,23,119,120,121,122],"weekly review","weekly","hermit","plain","routine","channel","summary","report","at","generate","via","decisions","you","detail","iso","review report","dev","plain-language",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":39},"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",[],[125,130,131,132,133,134,135,136,137,115,138],"monitor","ZeRO","tokens","tool","cost","ad","config","background","events",{"skillNo":140,"name":141,"nameZh":6,"description":142,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":143,"categories":144,"keywords":145,"publishedAt":39},"01M6HVCRMG53K3Y63WAH59YVFJ","watch-activate","Activate the config watch monitor.","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fwatch-activate\u002FSKILL.md",[],[125,146,147,130,136],"activate","watch activate",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":159,"publishedAt":39},"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",[154],{"categoryNo":155,"categoryName":156,"taxonomyType":157,"taxonomyTypeDesc":158},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[160,161,162,163,164,165,33,166,167,168,107,21,169,170,171,172,173,174,117,29],"notes","voice","voice notes","SET","Audio","transcribe","understand","transcription","my","read","message","can","telegram","channel message","discord"]