[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6AD49QFD4PE30YVMFSQA5HB":3,"skill-same:01M6AD49QFD4PE30YVMFSQA5HB":58},{"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":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":37,"repositoryHtmlUrl":38,"repositoryHomepageUrl":39,"ownerHtmlUrl":40,"ownerBlogUrl":41,"ownerDescription":42,"updatedAt":43,"install":44,"resources":57},"01M6AD49QFD4PE30YVMFSQA5HB","console-rendering",null,"Use Go struct tags to render styled terminal output in gh-aw.","github\u002Fgh-aw","github","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9919?v=4","01M6AC83DS133TPXFSP1DHNCC6","GitHub","01M6AD3VCZ4WKQSFSRTPN7N9DN",5621,"MIT","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fconsole-rendering\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28],"console","console rendering","rendering","terminal","go","gh","use","tags","render","output","2026-11-10 10:12:30",false,"---\nname: console-rendering\ndescription: Use Go struct tags to render styled terminal output in gh-aw.\n---\n\n# Console Rendering System Usage\n\nUse this guide for the struct tag-based console rendering system.\n\n## Struct Tag Support\n\nUse the `console` struct tag to control rendering behavior:\n\n- **`header:\"Name\"`** - Sets the display name for fields (used in both structs and tables)\n- **`title:\"Section Title\"`** - Sets the title for nested structs, slices, or maps\n- **`format:\"type\"`** - Sets the formatting type for the field value\n  - `format:number` - Formats integers as human-readable numbers (e.g., \"1k\", \"1.2M\")\n  - `format:cost` - Formats floats as currency with $ prefix (e.g., \"$1.234\")\n- **`omitempty`** - Skips the field if it has a zero value\n- **`\"-\"`** - Always skips the field\n\n## Example Usage\n\n```go\ntype Overview struct {\n    RunID    int64  `console:\"header:Run ID\"`\n    Workflow string `console:\"header:Workflow\"`\n    Status   string `console:\"header:Status\"`\n    Duration string `console:\"header:Duration,omitempty\"`\n}\n\ndata := Overview{\n    RunID:    12345,\n    Workflow: \"test-workflow\",\n    Status:   \"completed\",\n    Duration: \"5m30s\",\n}\n\n\u002F\u002F Simple rendering\nfmt.Print(console.RenderStruct(data))\n\n\u002F\u002F Output:\n\u002F\u002F   Run ID  : 12345\n\u002F\u002F   Workflow: test-workflow\n\u002F\u002F   Status  : completed\n\u002F\u002F   Duration: 5m30s\n```\n\n## Format Tag Examples\n\n### Number Formatting\n\n```go\ntype Metrics struct {\n    TokenUsage int `console:\"header:Token Usage,format:number\"`\n    Errors     int `console:\"header:Errors\"`\n}\n\ndata := Metrics{\n    TokenUsage: 250000,\n    Errors:     5,\n}\n\n\u002F\u002F Renders as:\n\u002F\u002F   Token Usage: 250k\n\u002F\u002F   Errors     : 5\n```\n\n### Cost Formatting\n\n```go\ntype Billing struct {\n    Cost float64 `console:\"header:Estimated Cost,format:cost\"`\n}\n\ndata := Billing{\n    Cost: 1.234,\n}\n\n\u002F\u002F Renders as:\n\u002F\u002F   Estimated Cost: $1.234\n```\n\n## Rendering Behavior\n\n### Structs\nStructs are rendered as key-value pairs with proper alignment.\n\n### Slices\nSlices of structs are automatically rendered as tables:\n\n```go\ntype Job struct {\n    Name       string `console:\"header:Name\"`\n    Status     string `console:\"header:Status\"`\n    Conclusion string `console:\"header:Conclusion,omitempty\"`\n}\n\njobs := []Job{\n    {Name: \"build\", Status: \"completed\", Conclusion: \"success\"},\n    {Name: \"test\", Status: \"in_progress\", Conclusion: \"\"},\n}\n\nfmt.Print(console.RenderStruct(jobs))\n```\n\nRenders as:\n\n```\nName  | Status      | Conclusion\n----- | ----------- | ----------\nbuild | completed   | success\ntest  | in_progress | -\n```\n\n### Maps\nMaps are rendered as markdown-style headers with key-value pairs.\n\n### Special Type Handling\n\n#### time.Time\n`time.Time` fields are automatically formatted as `\"2006-01-02 15:04:05\"`. Zero time values are considered empty when used with `omitempty`.\n\n#### Unexported Fields\nThe rendering system safely handles unexported struct fields by checking `CanInterface()` before attempting to access field values.\n","# Console Rendering System Usage\n\nUse this guide for the struct tag-based console rendering system.\n\n## Struct Tag Support\n\nUse the `console` struct tag to control rendering behavior:\n\n- **`header:\"Name\"`** - Sets the display name for fields (used in both structs and tables)\n- **`title:\"Section Title\"`** - Sets the title for nested structs, slices, or maps\n- **`format:\"type\"`** - Sets the formatting type for the field value\n  - `format:number` - Formats integers as human-readable numbers (e.g., \"1k\", \"1.2M\")\n  - `format:cost` - Formats floats as currency with $ prefix (e.g., \"$1.234\")\n- **`omitempty`** - Skips the field if it has a zero value\n- **`\"-\"`** - Always skips the field\n\n## Example Usage\n\n```go\ntype Overview struct {\n    RunID    int64  `console:\"header:Run ID\"`\n    Workflow string `console:\"header:Workflow\"`\n    Status   string `console:\"header:Status\"`\n    Duration string `console:\"header:Duration,omitempty\"`\n}\n\ndata := Overview{\n    RunID:    12345,\n    Workflow: \"test-workflow\",\n    Status:   \"completed\",\n    Duration: \"5m30s\",\n}\n\n\u002F\u002F Simple rendering\nfmt.Print(console.RenderStruct(data))\n\n\u002F\u002F Output:\n\u002F\u002F   Run ID  : 12345\n\u002F\u002F   Workflow: test-workflow\n\u002F\u002F   Status  : completed\n\u002F\u002F   Duration: 5m30s\n```\n\n## Format Tag Examples\n\n### Number Formatting\n\n```go\ntype Metrics struct {\n    TokenUsage int `console:\"header:Token Usage,format:number\"`\n    Errors     int `console:\"header:Errors\"`\n}\n\ndata := Metrics{\n    TokenUsage: 250000,\n    Errors:     5,\n}\n\n\u002F\u002F Renders as:\n\u002F\u002F   Token Usage: 250k\n\u002F\u002F   Errors     : 5\n```\n\n### Cost Formatting\n\n```go\ntype Billing struct {\n    Cost float64 `console:\"header:Estimated Cost,format:cost\"`\n}\n\ndata := Billing{\n    Cost: 1.234,\n}\n\n\u002F\u002F Renders as:\n\u002F\u002F   Estimated Cost: $1.234\n```\n\n## Rendering Behavior\n\n### Structs\nStructs are rendered as key-value pairs with proper alignment.\n\n### Slices\nSlices of structs are automatically rendered as tables:\n\n```go\ntype Job struct {\n    Name       string `console:\"header:Name\"`\n    Status     string `console:\"header:Status\"`\n    Conclusion string `console:\"header:Conclusion,omitempty\"`\n}\n\njobs := []Job{\n    {Name: \"build\", Status: \"completed\", Conclusion: \"success\"},\n    {Name: \"test\", Status: \"in_progress\", Conclusion: \"\"},\n}\n\nfmt.Print(console.RenderStruct(jobs))\n```\n\nRenders as:\n\n```\nName  | Status      | Conclusion\n----- | ----------- | ----------\nbuild | completed   | success\ntest  | in_progress | -\n```\n\n### Maps\nMaps are rendered as markdown-style headers with key-value pairs.\n\n### Special Type Handling\n\n#### time.Time\n`time.Time` fields are automatically formatted as `\"2006-01-02 15:04:05\"`. Zero time values are considered empty when used with `omitempty`.\n\n#### Unexported Fields\nThe rendering system safely handles unexported struct fields by checking `CanInterface()` before attempting to access field values.\n",{"name":5,"description":7},"main","8541229759617347888641eba917d3b0ad66a984",".github\u002Fskills\u002Fconsole-rendering",625,"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-12 03:23:28",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add github\u002Fgh-aw --skill console-rendering",{"tool":50,"command":51},"bunx","bunx skills add github\u002Fgh-aw --skill console-rendering",{"tool":53,"command":54},"pnpm","pnpm dlx skills add github\u002Fgh-aw --skill console-rendering","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.github\u002Fskills\u002Fconsole-rendering\u002FSKILL.md",true,[],[59,87,105,130,156,174],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":73,"publishedAt":29},"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",[65,70],{"categoryNo":66,"categoryName":67,"taxonomyType":68,"taxonomyTypeDesc":69},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",{"categoryNo":71,"categoryName":72,"taxonomyType":68,"taxonomyTypeDesc":69},"01JBSEEDCAT000000000000023","Skill与智能体开发",[9,74,75,76,77,78,24,79,80,81,82,83,84,85,86],"agentic","agentic workflows","github agentic workflows","workflows","github cli","extension","for","compiling","cli","writing","actions","github actions","markdown",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":29},"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",[],[94,95,96,97,98,99,100,101,102,103,104],"windows","windows compatibility","compatibility","bugs","path","high","platform","cross-platform","patterns","command","git",{"skillNo":106,"name":107,"nameZh":6,"description":108,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":109,"categories":110,"keywords":111,"publishedAt":29},"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",[],[112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,80,128,82,129],"policy","versioning policy","versioning","incident","gate","implementation","version","Rules","workspace","pr","ci","npm","semver","release","squad","resolution","incidents","sdk",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":140,"publishedAt":29},"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",[136,139],{"categoryNo":137,"categoryName":138,"taxonomyType":68,"taxonomyTypeDesc":69},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":71,"categoryName":72,"taxonomyType":68,"taxonomyTypeDesc":69},[141,142,143,144,80,145,146,147,148,149,150,151,152,153,154,155],"tiered memory","memory","memory-management","model","cold","proposal","runtime","three","spawn","management","context","wiki","agent memory","performance","design",{"skillNo":157,"name":158,"nameZh":6,"description":159,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":160,"categories":161,"keywords":165,"publishedAt":29},"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",[162],{"categoryNo":163,"categoryName":164,"taxonomyType":68,"taxonomyTypeDesc":69},"01JBSEEDCAT000000000000008","测试与质量",[166,167,168,169,170,99,171,115,172,173],"test discipline","discipline","test","sync","when","tests","quality","update",{"skillNo":175,"name":126,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":179,"publishedAt":29},"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",[],[126,180,181,182,183,184,185,186,187,188,189,190,191,103,144,192,193,194,195,196,197,198,82],"show","interactive menu","invoke","coordinator","as","commands","upgrade","options","me","natural language","do","install","team","show me","plugins","issues","state","squad commands","sessions"]