[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HTZG0WC6H2HV2QMSJXB6VP":3,"skill-same:01M6HTZG0WC6H2HV2QMSJXB6VP":62},{"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":22,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":40,"commitSha":41,"skillDirectory":42,"forksCount":43,"repositoryHtmlUrl":44,"repositoryHomepageUrl":45,"ownerHtmlUrl":46,"ownerBlogUrl":6,"ownerDescription":47,"updatedAt":48,"install":49,"resources":61},"01M6HTZG0WC6H2HV2QMSJXB6VP","test-run",null,"Run plugin test suites in this monorepo and report a concise pass\u002Ffail summary. Optional plugin slug arg; without arg, runs all plugins under plugins\u002F.","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\u002Ftest-run\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33],"test","run","test run","plugin","report","plugin test","plugins","monorepo","summary","concise","true","2026-11-10 10:12:30",false,"---\nname: test-run\ndescription: Run plugin test suites in this monorepo and report a concise pass\u002Ffail summary. Optional plugin slug arg; without arg, runs all plugins under plugins\u002F.\ndisable-model-invocation: true\n---\n# Test Run\n\nRun plugin test suites and report a concise summary. Operates on a single plugin when given a slug; otherwise loops every plugin in `plugins\u002F`.\n\n## Usage\n\n`\u002Ftest-run` — run tests for every plugin in `plugins\u002F` and report a per-plugin summary plus an overall PASS\u002FFAIL.\n\n`\u002Ftest-run \u003Cplugin-slug>` — run tests for just that plugin.\n\nExamples:\n- `\u002Ftest-run hermitd`\n- `\u002Ftest-run hermitd-homeassistant`\n\n## Steps\n\n### 0. Resolve target slugs\n\n- If no slug arg was passed, run `bash scripts\u002Ftest-all.sh` from the repo root (launches every plugin's suite in parallel; wall time is bounded by the slowest suite instead of their sum) and report its summary table directly — skip Steps 0-1 below entirely.\n- If a slug arg was passed, validate `plugins\u002F\u003Cslug>\u002F.claude-plugin\u002Fplugin.json` exists. If not, abort with: `Plugin 'plugins\u002F\u003Cslug>\u002F' not found. Available: \u003Ccomma-separated slugs>.` Then continue to Step 1 for that single plugin.\n\n### 1. Run the suite (single-plugin arg only)\n\nPlugins ship one of two test conventions. Detect and dispatch:\n\n- **Bash entrypoint** — if `plugins\u002F\u003Cslug>\u002Ftests\u002Frun-all.sh` exists (dev\u002Ffitness\u002Fscribe\u002Fforge convention):\n  ```bash\n  bash plugins\u002F\u003Cslug>\u002Ftests\u002Frun-all.sh 2>&1\n  ```\n- **Bun entrypoint** — else if any `plugins\u002F\u003Cslug>\u002Ftests\u002F*.test.ts` exists (core\u002FHA\u002Ffeed convention): `cd plugins\u002F\u003Cslug> && bun test 2>&1`.\n- **Neither marker** — mark `no tests configured` and continue.\n\nCapture full output. Extract pass\u002Ffail counts from the suite's summary line.\n\n### 2. Report\n\nPer-plugin block:\n\n```\n=== \u003Cslug> ===\nHook tests:     X passed, Y failed         (bash convention only)\nContract tests: X passed, Y failed         (bash convention only)\nScript tests:   X passed, Y failed         (bash convention only)\nBun tests:      X passed, Y failed         (bun convention only)\nPlugin result:  PASS \u002F FAIL \u002F SKIP\n```\n\nFinal overall line:\n\n```\nOverall: PASS \u002F FAIL  (\u003Cn> passed, \u003Cm> failed, \u003Ck> skipped across \u003Cp> plugins)\n```\n\nIf any test failed, include the failure details below the summary so the developer can act on them immediately.\n","# Test Run\n\nRun plugin test suites and report a concise summary. Operates on a single plugin when given a slug; otherwise loops every plugin in `plugins\u002F`.\n\n## Usage\n\n`\u002Ftest-run` — run tests for every plugin in `plugins\u002F` and report a per-plugin summary plus an overall PASS\u002FFAIL.\n\n`\u002Ftest-run \u003Cplugin-slug>` — run tests for just that plugin.\n\nExamples:\n- `\u002Ftest-run hermitd`\n- `\u002Ftest-run hermitd-homeassistant`\n\n## Steps\n\n### 0. Resolve target slugs\n\n- If no slug arg was passed, run `bash scripts\u002Ftest-all.sh` from the repo root (launches every plugin's suite in parallel; wall time is bounded by the slowest suite instead of their sum) and report its summary table directly — skip Steps 0-1 below entirely.\n- If a slug arg was passed, validate `plugins\u002F\u003Cslug>\u002F.claude-plugin\u002Fplugin.json` exists. If not, abort with: `Plugin 'plugins\u002F\u003Cslug>\u002F' not found. Available: \u003Ccomma-separated slugs>.` Then continue to Step 1 for that single plugin.\n\n### 1. Run the suite (single-plugin arg only)\n\nPlugins ship one of two test conventions. Detect and dispatch:\n\n- **Bash entrypoint** — if `plugins\u002F\u003Cslug>\u002Ftests\u002Frun-all.sh` exists (dev\u002Ffitness\u002Fscribe\u002Fforge convention):\n  ```bash\n  bash plugins\u002F\u003Cslug>\u002Ftests\u002Frun-all.sh 2>&1\n  ```\n- **Bun entrypoint** — else if any `plugins\u002F\u003Cslug>\u002Ftests\u002F*.test.ts` exists (core\u002FHA\u002Ffeed convention): `cd plugins\u002F\u003Cslug> && bun test 2>&1`.\n- **Neither marker** — mark `no tests configured` and continue.\n\nCapture full output. Extract pass\u002Ffail counts from the suite's summary line.\n\n### 2. Report\n\nPer-plugin block:\n\n```\n=== \u003Cslug> ===\nHook tests:     X passed, Y failed         (bash convention only)\nContract tests: X passed, Y failed         (bash convention only)\nScript tests:   X passed, Y failed         (bash convention only)\nBun tests:      X passed, Y failed         (bun convention only)\nPlugin result:  PASS \u002F FAIL \u002F SKIP\n```\n\nFinal overall line:\n\n```\nOverall: PASS \u002F FAIL  (\u003Cn> passed, \u003Cm> failed, \u003Ck> skipped across \u003Cp> plugins)\n```\n\nIf any test failed, include the failure details below the summary so the developer can act on them immediately.\n",{"name":5,"description":7,"disable-model-invocation":39},true,"main","79e254360ba999b70a827541bbcfd2d4cc525992",".agents\u002Fskills\u002Ftest-run",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-12 00:14:57",{"source":8,"skillName":5,"commands":50,"prompt":60,"zipAvailable":39},[51,54,57],{"tool":52,"command":53},"npx","npx skills add gtapps\u002Fhermitd --skill test-run",{"tool":55,"command":56},"bunx","bunx skills add gtapps\u002Fhermitd --skill test-run",{"tool":58,"command":59},"pnpm","pnpm dlx skills add gtapps\u002Fhermitd --skill test-run","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Ftest-run\u002FSKILL.md",[],[63,79,95,119,135,144],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":34},"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",[],[65,70,71,72,73,74,75,76,77,78],"with","maintenance","memory","validation","snapshot","pages","auto","memory maintenance","transcript",{"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":34},"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",[],[86,87,88,89,90,91,92,93,94],"when","done","switch","when done switch to","for","model","use","drop","sonnet",{"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":34},"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",[],[102,103,104,105,106,107,108,31,27,109,110,111,112,113,114,90,115,116,117,118],"weekly review","review","weekly","hermit","plain","routine","channel","at","generate","via","decisions","you","detail","iso","review report","dev","plain-language",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":34},"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",[],[121,126,127,128,129,130,131,132,133,111,134],"monitor","ZeRO","tokens","tool","cost","ad","config","background","events",{"skillNo":136,"name":137,"nameZh":6,"description":138,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":34},"01M6HVCRMG53K3Y63WAH59YVFJ","watch-activate","Activate the config watch monitor.","https:\u002F\u002Fgithub.com\u002Fgtapps\u002Fhermitd\u002Fblob\u002Fmain\u002Fplugins\u002Fhermitd\u002Fskills\u002Fwatch-activate\u002FSKILL.md",[],[121,142,143,126,132],"activate","watch activate",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":153,"publishedAt":34},"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",[150],{"categoryNo":151,"categoryName":152,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",[154,155,156,157,158,159,160,161,162,163,105,86,164,165,166,167,168,169,113,170],"notes","voice","voice notes","SET","Audio","transcribe","operator","understand","transcription","my","read","message","can","telegram","channel message","discord","up"]