[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ADCS45KNQGSY6GP1PVMCBK":3,"skill-same:01M6ADCS45KNQGSY6GP1PVMCBK":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":22,"linkOnly":23,"markdownContent":24,"markdownBody":25,"frontMatter":26,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":30,"repositoryHtmlUrl":31,"repositoryHomepageUrl":6,"ownerHtmlUrl":32,"ownerBlogUrl":33,"ownerDescription":34,"updatedAt":35,"install":36,"resources":49},"01M6ADCS45KNQGSY6GP1PVMCBK","console-rendering",null,"Instructions for using the struct tag-based console rendering system in Go","github\u002Fgh-aw-threat-detection","github","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9919?v=4","01M6AC83DS133TPXFSP1DHNCC6","GitHub","01M6ADCNPQCEMS9GXQZBS2TNGT",16,"MIT","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-threat-detection\u002Fblob\u002Fmain\u002Fskills\u002Fconsole-rendering\u002FSKILL.md",[],[19,20,21],"console","console rendering","go","2026-11-10 10:12:30",false,"---\nname: console-rendering\ndescription: Instructions for using the struct tag-based console rendering system in Go\n---\n\n# Console Rendering System Usage\n\nThis skill provides instructions for using 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\nThis skill provides instructions for using 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","76a4653600a9211a9dfe5e50cda88708ec918ced","skills\u002Fconsole-rendering",8,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-threat-detection","https:\u002F\u002Fgithub.com\u002Fgithub","https:\u002F\u002Fgithub.com\u002Fabout","How people build software.","2026-11-11 11:34:58",{"source":8,"skillName":5,"commands":37,"prompt":47,"zipAvailable":48},[38,41,44],{"tool":39,"command":40},"npx","npx skills add github\u002Fgh-aw-threat-detection --skill console-rendering",{"tool":42,"command":43},"bunx","bunx skills add github\u002Fgh-aw-threat-detection --skill console-rendering",{"tool":45,"command":46},"pnpm","pnpm dlx skills add github\u002Fgh-aw-threat-detection --skill console-rendering","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-threat-detection\u002Fblob\u002Fmain\u002Fskills\u002Fconsole-rendering\u002FSKILL.md",true,[50,56,60,64,68,72],{"path":51,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":54,"sourceHtmlUrl":55},"agents\u002Fopenai.yaml","REFERENCE","参考文档",152,"https:\u002F\u002Fgithub.com\u002FTohuhono\u002FOberon\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsetup-matt-pocock-skills\u002Fagents\u002Fopenai.yaml",{"path":57,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":58,"sourceHtmlUrl":59},"domain.md",813,"https:\u002F\u002Fgithub.com\u002FTohuhono\u002FOberon\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsetup-matt-pocock-skills\u002Fdomain.md",{"path":61,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":62,"sourceHtmlUrl":63},"issue-tracker-github.md",4167,"https:\u002F\u002Fgithub.com\u002FTohuhono\u002FOberon\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsetup-matt-pocock-skills\u002Fissue-tracker-github.md",{"path":65,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":66,"sourceHtmlUrl":67},"issue-tracker-gitlab.md",3860,"https:\u002F\u002Fgithub.com\u002FTohuhono\u002FOberon\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsetup-matt-pocock-skills\u002Fissue-tracker-gitlab.md",{"path":69,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":70,"sourceHtmlUrl":71},"issue-tracker-local.md",1853,"https:\u002F\u002Fgithub.com\u002FTohuhono\u002FOberon\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsetup-matt-pocock-skills\u002Fissue-tracker-local.md",{"path":73,"resourceType":52,"resourceTypeDesc":53,"sizeBytes":74,"sourceHtmlUrl":75},"triage-labels.md",1456,"https:\u002F\u002Fgithub.com\u002FTohuhono\u002FOberon\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fsetup-matt-pocock-skills\u002Ftriage-labels.md",[77,96,105,115],{"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":88,"publishedAt":22},"01M6ADCY2GJ9YPES5TYZQ56DK6","update-workflow-versions","How to manually regenerate the compiled agentic workflow .lock.yml files when the gh-aw Version Check workflow reports version drift. All workflows track the newest github\u002Fgh-aw release or prerelease.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-threat-detection\u002Fblob\u002Fmain\u002Fskills\u002Fupdate-workflow-versions\u002FSKILL.md",[83],{"categoryNo":84,"categoryName":85,"taxonomyType":86,"taxonomyTypeDesc":87},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[89,90,91,9,92,93,94,95],"update workflow versions","update","workflow","agentic","agentic workflow","workflows","release",{"skillNo":97,"name":98,"nameZh":6,"description":99,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":102,"publishedAt":22},"01M6ADCWCGBVG81YM7GH548VBN","get-gh-aw-release-binary","How to fetch the latest github\u002Fgh-aw release binary — either as the gh CLI extension (gh aw ...) or as a raw platform binary downloaded from GitHub Releases — including how to resolve the latest tag, pick the right asset, and verify its checksum.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-threat-detection\u002Fblob\u002Fmain\u002Fskills\u002Fget-gh-aw-release-binary\u002FSKILL.md",[],[95,103,104,9],"get gh aw release binary","cli",{"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":22},"01M6ADCTM254M9KNW1T21TTJFJ","error-messages","Error Message Style Guide for Validation Errors","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-threat-detection\u002Fblob\u002Fmain\u002Fskills\u002Ferror-messages\u002FSKILL.md",[],[112,113,114],"messages","error messages","validation",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":22},"01M6ADCQTSVP6607C201HSD19H","lane","Use lane in this repository when the user asks to create or work in an isolated worktree.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw-threat-detection\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Flane\u002FSKILL.md",[],[117,122,123,124],"create","repository","worktree"]