[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6AD6SE9K2ZR4FDGGMF2PYWN":3,"skill-same:01M6AD6SE9K2ZR4FDGGMF2PYWN":76},{"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":18,"publishedAt":27,"linkOnly":28,"markdownContent":29,"markdownBody":30,"frontMatter":31,"refName":32,"commitSha":33,"skillDirectory":34,"forksCount":35,"repositoryHtmlUrl":36,"repositoryHomepageUrl":37,"ownerHtmlUrl":38,"ownerBlogUrl":39,"ownerDescription":40,"updatedAt":41,"install":42,"resources":55},"01M6AD6SE9K2ZR4FDGGMF2PYWN","messages",null,"Add new safe-output message types and wire validation\u002Frendering.","github\u002Fgh-aw","github","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9919?v=4","01M6AC83DS133TPXFSP1DHNCC6","GitHub","01M6AD3VCZ4WKQSFSRTPN7N9DN",5613,"MIT","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fmessages\u002FSKILL.md",[],[5,19,20,21,22,23,24,25,26],"safe","validation","message","add","rendering","types","output","new","2026-11-10 10:12:30",false,"---\nname: messages\ndescription: Add new safe-output message types and wire validation\u002Frendering.\n---\n\n\n# Adding New Message Types Guide\n\nUse this guide to add a new safe-output message type so it works in the current gh-aw pipeline: frontmatter → schema → Go compiler → JavaScript modules → action\u002Fworkflow build output.\n\n## Overview\n\nThe messages system lets workflow authors customize safe-output messages. The current architecture does not rely on the old `pkg\u002Fworkflow\u002Fjs.go` embedding registry for runtime shipping.\n\nCurrent flow:\n\n1. **Frontmatter** (YAML)\n2. **JSON Schema**\n3. **Go Compiler**\n4. **JavaScript module** under `pkg\u002Fworkflow\u002Fjs\u002F` or `actions\u002Fsetup\u002Fjs\u002F`\n5. **Action\u002Fworkflow bundle generation** via `make actions-build` or the relevant workflow build path\n\n## Step 1: Update JSON Schema\n\nAdd the new message field to `pkg\u002Fparser\u002Fschemas\u002Fmain_workflow_schema.json` in the `messages` object:\n\n```json\n{\n\t\"messages\": {\n\t\t\"properties\": {\n\t\t  \"my-new-message\": {\n\t\t    \"type\": \"string\",\n\t\t    \"description\": \"Description of when this message is used. Available placeholders: {placeholder1}, {placeholder2}.\",\n\t\t    \"examples\": [\n\t\t      \"Example message with {placeholder1}\"\n\t\t    ]\n\t\t  }\n\t\t}\n\t}\n}\n```\n\n**Key points:**\n- Use `kebab-case` for the YAML field name (for example `my-new-message`)\n- Document placeholders in the description\n- Provide helpful examples\n- Rebuild the schema-backed binary or run the relevant compile checks after changes\n\n## Step 2: Update Go Struct\n\nAdd the field to `SafeOutputMessagesConfig` in `pkg\u002Fworkflow\u002Fsafe_outputs_config_types.go`:\n\n```go\ntype SafeOutputMessagesConfig struct {\n\t\u002F\u002F ... existing fields ...\n\tMyNewMessage string `yaml:\"my-new-message,omitempty\" json:\"myNewMessage,omitempty\"`\n}\n```\n\n**Key points:**\n- Use `CamelCase` for Go field names\n- Use `kebab-case` for YAML tags\n- Use `camelCase` for JSON tags\n- Add `omitempty` to both tags\n\n## Step 3: Wire the field in the parser\n\nAdd the field to `parseMessagesConfig` in `pkg\u002Fworkflow\u002Fsafe_outputs_messages_config.go`. Each field is mapped explicitly; simple string fields use `extractStringFromMap`:\n\n```go\nconfig.MyNewMessage = extractStringFromMap(messagesMap, \"my-new-message\", nil)\n```\n\n## Step 4: Create the JavaScript message module\n\nCreate the new module in the current shared JS location, typically `pkg\u002Fworkflow\u002Fjs\u002F`:\n\n```javascript\n\u002F\u002F @ts-check\n\u002F\u002F\u002F \u003Creference types=\"@actions\u002Fgithub-script\" \u002F>\n\nconst { getMessages, renderTemplate, toSnakeCase } = require(\".\u002Fmessages_core.cjs\");\n\n\u002F**\n * @typedef {Object} MyNewMessageContext\n * @property {string} placeholder1 - Description of placeholder1\n * @property {string} placeholder2 - Description of placeholder2\n *\u002F\n\nfunction getMyNewMessage(ctx) {\n\tconst messages = getMessages();\n\tconst templateContext = toSnakeCase(ctx);\n\tconst defaultMessage = \"Default message with {placeholder1} and {placeholder2}\";\n\n\treturn messages?.myNewMessage\n\t\t? renderTemplate(messages.myNewMessage, templateContext)\n\t\t: renderTemplate(defaultMessage, templateContext);\n}\n\nmodule.exports = {\n\tgetMyNewMessage,\n};\n```\n\n**Key points:**\n- File naming: `messages_\u003Ccategory>.cjs`\n- Reuse `.\u002Fmessages_core.cjs` for shared helpers\n- Use JSDoc for types and default behavior\n- Keep the default message sensible and deterministic\n\n## Step 5: Add tests\n\nCreate a matching test file, for example `pkg\u002Fworkflow\u002Fjs\u002Fmessages_my_new.test.cjs`:\n\n```javascript\nimport { describe, it, expect, beforeEach, vi } from \"vitest\";\n\nconst mockCore = { warning: vi.fn() };\nglobal.core = mockCore;\n\ndescribe(\"getMyNewMessage\", () => {\n\tbeforeEach(() => {\n\t\tvi.clearAllMocks();\n\t\tdelete process.env.GH_AW_SAFE_OUTPUT_MESSAGES;\n\t});\n\n\tit(\"returns the default message when no custom template is configured\", async () => {\n\t\tconst { getMyNewMessage } = await import(\".\u002Fmessages_my_new.cjs\");\n\t\tconst result = getMyNewMessage({ placeholder1: \"value1\", placeholder2: \"value2\" });\n\t\texpect(result).toBe(\"Default message with value1 and value2\");\n\t});\n\n\tit(\"uses the custom template when configured\", async () => {\n\t\tprocess.env.GH_AW_SAFE_OUTPUT_MESSAGES = JSON.stringify({ myNewMessage: \"Custom: {placeholder1}\" });\n\t\tconst { getMyNewMessage } = await import(\".\u002Fmessages_my_new.cjs\");\n\t\tconst result = getMyNewMessage({ placeholder1: \"test\", placeholder2: \"ignored\" });\n\t\texpect(result).toContain(\"Custom: test\");\n\t});\n});\n```\n\nRun the relevant tests with `make test-js` or the targeted Vitest file.\n\n## Step 6: Update the core JS type metadata and exports\n\nUpdate the `SafeOutputMessages` typedef and the return object in `pkg\u002Fworkflow\u002Fjs\u002Fmessages_core.cjs`, and re-export the message helper from `pkg\u002Fworkflow\u002Fjs\u002Fmessages.cjs`.\n\n## Step 7: Wire it into the real build path\n\nDo not add any new `\u002F\u002Fgo:embed` entries to `pkg\u002Fworkflow\u002Fjs.go` for a normal message module. The current system packages JavaScript through the action-generation\u002Fbuild path.\n\nInstead:\n\n- keep the JS module in `pkg\u002Fworkflow\u002Fjs\u002F` or the relevant action folder,\n- update the action dependency map or action source if needed,\n- rebuild the action bundle with `make actions-build`.\n\n## Step 8: Use the message in consumer scripts\n\n```javascript\nconst { getMyNewMessage } = require(\".\u002Fmessages_my_new.cjs\");\n\nconst message = getMyNewMessage({\n\tplaceholder1: actualValue1,\n\tplaceholder2: actualValue2,\n});\n```\n\n## Step 9: Update documentation\n\nDocument the new message in the repo’s relevant safe-output docs, and keep the examples aligned with the current action-based JavaScript build flow.\n\n## Verification Checklist\n\nBefore committing a message change:\n\n- [ ] Frontmatter and schema updated\n- [ ] Go config\u002Fstruct updated if needed\n- [ ] JS module created under the correct source tree\n- [ ] Tests added and passing\n- [ ] `messages_core.cjs` and `messages.cjs` updated if relevant\n- [ ] Generated action\u002Fbuild output refreshed when required\n- [ ] No stale embedding instructions are introduced for the current action-based JS build flow\n\n## References\n\n- `actions\u002FREADME.md` - current action-generation\u002Fbuild workflow\n- `pkg\u002Fworkflow\u002Fjs\u002Fmessages_core.cjs` - shared safe-output message helpers\n- `pkg\u002Fworkflow\u002Fjs\u002Fmessages.cjs` - message exports\n- `pkg\u002Fparser\u002Fschemas\u002Fmain_workflow_schema.json` - schema source of truth\n\nUpdate the Message Module Architecture table:\n```markdown\n| Module | Purpose | Exported Functions |\n|--------|---------|-------------------|\n| `messages_my_new.cjs` | My new message description | `getMyNewMessage` |\n```\n\n## Notes\n\nFor current gh-aw work, keep message modules aligned with the action-generation flow instead of the historical Go-embed pattern. If you need an example, review the existing safe-output modules under `pkg\u002Fworkflow\u002Fjs\u002F` and the generated action files under `actions\u002F`.\n","# Adding New Message Types Guide\n\nUse this guide to add a new safe-output message type so it works in the current gh-aw pipeline: frontmatter → schema → Go compiler → JavaScript modules → action\u002Fworkflow build output.\n\n## Overview\n\nThe messages system lets workflow authors customize safe-output messages. The current architecture does not rely on the old `pkg\u002Fworkflow\u002Fjs.go` embedding registry for runtime shipping.\n\nCurrent flow:\n\n1. **Frontmatter** (YAML)\n2. **JSON Schema**\n3. **Go Compiler**\n4. **JavaScript module** under `pkg\u002Fworkflow\u002Fjs\u002F` or `actions\u002Fsetup\u002Fjs\u002F`\n5. **Action\u002Fworkflow bundle generation** via `make actions-build` or the relevant workflow build path\n\n## Step 1: Update JSON Schema\n\nAdd the new message field to `pkg\u002Fparser\u002Fschemas\u002Fmain_workflow_schema.json` in the `messages` object:\n\n```json\n{\n\t\"messages\": {\n\t\t\"properties\": {\n\t\t  \"my-new-message\": {\n\t\t    \"type\": \"string\",\n\t\t    \"description\": \"Description of when this message is used. Available placeholders: {placeholder1}, {placeholder2}.\",\n\t\t    \"examples\": [\n\t\t      \"Example message with {placeholder1}\"\n\t\t    ]\n\t\t  }\n\t\t}\n\t}\n}\n```\n\n**Key points:**\n- Use `kebab-case` for the YAML field name (for example `my-new-message`)\n- Document placeholders in the description\n- Provide helpful examples\n- Rebuild the schema-backed binary or run the relevant compile checks after changes\n\n## Step 2: Update Go Struct\n\nAdd the field to `SafeOutputMessagesConfig` in `pkg\u002Fworkflow\u002Fsafe_outputs_config_types.go`:\n\n```go\ntype SafeOutputMessagesConfig struct {\n\t\u002F\u002F ... existing fields ...\n\tMyNewMessage string `yaml:\"my-new-message,omitempty\" json:\"myNewMessage,omitempty\"`\n}\n```\n\n**Key points:**\n- Use `CamelCase` for Go field names\n- Use `kebab-case` for YAML tags\n- Use `camelCase` for JSON tags\n- Add `omitempty` to both tags\n\n## Step 3: Wire the field in the parser\n\nAdd the field to `parseMessagesConfig` in `pkg\u002Fworkflow\u002Fsafe_outputs_messages_config.go`. Each field is mapped explicitly; simple string fields use `extractStringFromMap`:\n\n```go\nconfig.MyNewMessage = extractStringFromMap(messagesMap, \"my-new-message\", nil)\n```\n\n## Step 4: Create the JavaScript message module\n\nCreate the new module in the current shared JS location, typically `pkg\u002Fworkflow\u002Fjs\u002F`:\n\n```javascript\n\u002F\u002F @ts-check\n\u002F\u002F\u002F \u003Creference types=\"@actions\u002Fgithub-script\" \u002F>\n\nconst { getMessages, renderTemplate, toSnakeCase } = require(\".\u002Fmessages_core.cjs\");\n\n\u002F**\n * @typedef {Object} MyNewMessageContext\n * @property {string} placeholder1 - Description of placeholder1\n * @property {string} placeholder2 - Description of placeholder2\n *\u002F\n\nfunction getMyNewMessage(ctx) {\n\tconst messages = getMessages();\n\tconst templateContext = toSnakeCase(ctx);\n\tconst defaultMessage = \"Default message with {placeholder1} and {placeholder2}\";\n\n\treturn messages?.myNewMessage\n\t\t? renderTemplate(messages.myNewMessage, templateContext)\n\t\t: renderTemplate(defaultMessage, templateContext);\n}\n\nmodule.exports = {\n\tgetMyNewMessage,\n};\n```\n\n**Key points:**\n- File naming: `messages_\u003Ccategory>.cjs`\n- Reuse `.\u002Fmessages_core.cjs` for shared helpers\n- Use JSDoc for types and default behavior\n- Keep the default message sensible and deterministic\n\n## Step 5: Add tests\n\nCreate a matching test file, for example `pkg\u002Fworkflow\u002Fjs\u002Fmessages_my_new.test.cjs`:\n\n```javascript\nimport { describe, it, expect, beforeEach, vi } from \"vitest\";\n\nconst mockCore = { warning: vi.fn() };\nglobal.core = mockCore;\n\ndescribe(\"getMyNewMessage\", () => {\n\tbeforeEach(() => {\n\t\tvi.clearAllMocks();\n\t\tdelete process.env.GH_AW_SAFE_OUTPUT_MESSAGES;\n\t});\n\n\tit(\"returns the default message when no custom template is configured\", async () => {\n\t\tconst { getMyNewMessage } = await import(\".\u002Fmessages_my_new.cjs\");\n\t\tconst result = getMyNewMessage({ placeholder1: \"value1\", placeholder2: \"value2\" });\n\t\texpect(result).toBe(\"Default message with value1 and value2\");\n\t});\n\n\tit(\"uses the custom template when configured\", async () => {\n\t\tprocess.env.GH_AW_SAFE_OUTPUT_MESSAGES = JSON.stringify({ myNewMessage: \"Custom: {placeholder1}\" });\n\t\tconst { getMyNewMessage } = await import(\".\u002Fmessages_my_new.cjs\");\n\t\tconst result = getMyNewMessage({ placeholder1: \"test\", placeholder2: \"ignored\" });\n\t\texpect(result).toContain(\"Custom: test\");\n\t});\n});\n```\n\nRun the relevant tests with `make test-js` or the targeted Vitest file.\n\n## Step 6: Update the core JS type metadata and exports\n\nUpdate the `SafeOutputMessages` typedef and the return object in `pkg\u002Fworkflow\u002Fjs\u002Fmessages_core.cjs`, and re-export the message helper from `pkg\u002Fworkflow\u002Fjs\u002Fmessages.cjs`.\n\n## Step 7: Wire it into the real build path\n\nDo not add any new `\u002F\u002Fgo:embed` entries to `pkg\u002Fworkflow\u002Fjs.go` for a normal message module. The current system packages JavaScript through the action-generation\u002Fbuild path.\n\nInstead:\n\n- keep the JS module in `pkg\u002Fworkflow\u002Fjs\u002F` or the relevant action folder,\n- update the action dependency map or action source if needed,\n- rebuild the action bundle with `make actions-build`.\n\n## Step 8: Use the message in consumer scripts\n\n```javascript\nconst { getMyNewMessage } = require(\".\u002Fmessages_my_new.cjs\");\n\nconst message = getMyNewMessage({\n\tplaceholder1: actualValue1,\n\tplaceholder2: actualValue2,\n});\n```\n\n## Step 9: Update documentation\n\nDocument the new message in the repo’s relevant safe-output docs, and keep the examples aligned with the current action-based JavaScript build flow.\n\n## Verification Checklist\n\nBefore committing a message change:\n\n- [ ] Frontmatter and schema updated\n- [ ] Go config\u002Fstruct updated if needed\n- [ ] JS module created under the correct source tree\n- [ ] Tests added and passing\n- [ ] `messages_core.cjs` and `messages.cjs` updated if relevant\n- [ ] Generated action\u002Fbuild output refreshed when required\n- [ ] No stale embedding instructions are introduced for the current action-based JS build flow\n\n## References\n\n- `actions\u002FREADME.md` - current action-generation\u002Fbuild workflow\n- `pkg\u002Fworkflow\u002Fjs\u002Fmessages_core.cjs` - shared safe-output message helpers\n- `pkg\u002Fworkflow\u002Fjs\u002Fmessages.cjs` - message exports\n- `pkg\u002Fparser\u002Fschemas\u002Fmain_workflow_schema.json` - schema source of truth\n\nUpdate the Message Module Architecture table:\n```markdown\n| Module | Purpose | Exported Functions |\n|--------|---------|-------------------|\n| `messages_my_new.cjs` | My new message description | `getMyNewMessage` |\n```\n\n## Notes\n\nFor current gh-aw work, keep message modules aligned with the action-generation flow instead of the historical Go-embed pattern. If you need an example, review the existing safe-output modules under `pkg\u002Fworkflow\u002Fjs\u002F` and the generated action files under `actions\u002F`.\n",{"name":5,"description":7},"main","8541229759617347888641eba917d3b0ad66a984",".github\u002Fskills\u002Fmessages",626,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw","https:\u002F\u002Fgh.io\u002Fgh-aw","https:\u002F\u002Fgithub.com\u002Fgithub","https:\u002F\u002Fgithub.com\u002Fabout","How people build software.","2026-11-11 11:58:50",{"source":8,"skillName":5,"commands":43,"prompt":53,"zipAvailable":54},[44,47,50],{"tool":45,"command":46},"npx","npx skills add github\u002Fgh-aw --skill messages",{"tool":48,"command":49},"bunx","bunx skills add github\u002Fgh-aw --skill messages",{"tool":51,"command":52},"pnpm","pnpm dlx skills add github\u002Fgh-aw --skill messages","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fmessages\u002FSKILL.md",true,[56,62,66,72],{"path":57,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":60,"sourceHtmlUrl":61},"sections\u002Fmanifest.json","REFERENCE","参考文档",676,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fdesign-consultation\u002Fsections\u002Fmanifest.json",{"path":63,"resourceType":58,"resourceTypeDesc":59,"sizeBytes":64,"sourceHtmlUrl":65},"sections\u002Fproposal-and-preview.md",21353,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fdesign-consultation\u002Fsections\u002Fproposal-and-preview.md",{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"sections\u002Fproposal-and-preview.md.tmpl","OTHER","其他",16422,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fdesign-consultation\u002Fsections\u002Fproposal-and-preview.md.tmpl",{"path":73,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":74,"sourceHtmlUrl":75},"SKILL.md.tmpl",9554,"https:\u002F\u002Fgithub.com\u002Fshengdabai\u002FTony-Claude-Code-Skills\u002Fblob\u002Fmain\u002Fskills\u002Fdesign-consultation\u002FSKILL.md.tmpl",[77,106,124,149,175,193],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":91,"publishedAt":27},"01M6ADC942STTXHFV410J4DH0X","GitHub Agentic Workflows","GitHub Agentic Workflows (`gh-aw`) is a GitHub CLI extension for writing Agentic Workflows in markdown and compiling them to GitHub Actions.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002FSKILL.md",[83,88],{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",{"categoryNo":89,"categoryName":90,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000023","Skill与智能体开发",[9,92,93,94,95,96,97,98,99,100,101,102,103,104,105],"agentic","agentic workflows","github agentic workflows","workflows","github cli","gh","extension","for","compiling","cli","writing","actions","github actions","markdown",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":27},"01M6ADC6ZXSA46N9XD6VNAP1MS","windows-compatibility","Cross-platform path handling and command patterns","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Fwindows-compatibility\u002FSKILL.md",[],[113,114,115,116,117,118,119,120,121,122,123],"windows","windows compatibility","compatibility","bugs","path","high","platform","cross-platform","patterns","command","git",{"skillNo":125,"name":126,"nameZh":6,"description":127,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":27},"01M6ADC44957SVQF96R5YY247P","versioning-policy","Semver versioning rules for Squad SDK and CLI — prevents prerelease version incidents","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Fversioning-policy\u002FSKILL.md",[],[131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,99,147,101,148],"policy","versioning policy","versioning","incident","gate","implementation","version","Rules","workspace","pr","ci","npm","semver","release","squad","resolution","incidents","sdk",{"skillNo":150,"name":151,"nameZh":6,"description":152,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":153,"categories":154,"keywords":159,"publishedAt":27},"01M6ADC1PHMEAEVR87F8PDR89X","tiered-memory","Three-tier agent memory model (hot\u002Fcold\u002Fwiki) for context reduction per spawn","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Ftiered-memory\u002FSKILL.md",[155,158],{"categoryNo":156,"categoryName":157,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":89,"categoryName":90,"taxonomyType":86,"taxonomyTypeDesc":87},[160,161,162,163,99,164,165,166,167,168,169,170,171,172,173,174],"tiered memory","memory","memory-management","model","cold","proposal","runtime","three","spawn","management","context","wiki","agent memory","performance","design",{"skillNo":176,"name":177,"nameZh":6,"description":178,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":179,"categories":180,"keywords":184,"publishedAt":27},"01M6ADBZTDGFM0E25EWRQEMYEH","test-discipline","Update tests when changing APIs — no exceptions","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Ftest-discipline\u002FSKILL.md",[181],{"categoryNo":182,"categoryName":183,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000008","测试与质量",[185,186,187,188,189,118,190,134,191,192],"test discipline","discipline","test","sync","when","tests","quality","update",{"skillNo":194,"name":145,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":196,"categories":197,"keywords":198,"publishedAt":27},"01M6ADBX5MJP4Z7CG4XTV8ZVT8","Squad's command catalog and interactive menu. Invoke via \u002Fsquad (slash command) or natural language (\"squad commands\", \"what can squad do\", \"show me squad options\"). Presents categorized operations (Install & Upgrade, Team Management, Issues & PRs, Plugins & Skills, Model & Cost, Sessions & State) as an interactive picker. Routes to the right squad CLI command or the Squad coordinator agent.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Fsquad\u002FSKILL.md",[],[145,199,200,201,202,203,204,205,206,207,208,209,210,122,163,211,212,213,214,215,216,217,101],"show","interactive menu","invoke","coordinator","as","commands","upgrade","options","me","natural language","do","install","team","show me","plugins","issues","state","squad commands","sessions"]