[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GSZTY7Q3J8M940R8Y0SH2B":3,"skill-same:01M6GSZTY7Q3J8M940R8Y0SH2B":65},{"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":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6GSZTY7Q3J8M940R8Y0SH2B","ast-grep-outline",null,"Use when exploring or modifying a codebase and you need a cheap structural map of files, directories, imports, exports, or direct members before reading full source.","ian-pascoe\u002Fdotfiles","ian-pascoe","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F122142608?v=4","01M6GSZBDQ0HT39DH8XZS6TPJ3","Ian Pascoe","01M6GSZBJ2CD0C1K3688C2RFEJ",2,"MIT","https:\u002F\u002Fgithub.com\u002Fian-pascoe\u002Fdotfiles\u002Fblob\u002Fmain\u002Fdot_agents\u002Fskills\u002Fast-grep-outline\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"ast grep outline","ast grep","grep","ast","outline","when","imports","codebase","source","directories","reading","you","structural","full","map","files","use","direct","2026-11-10 10:12:30",false,"---\nname: ast-grep-outline\ndescription: Use when exploring or modifying a codebase and you need a cheap structural map of files, directories, imports, exports, or direct members before reading full source.\n---\n\n# Use ast-grep outline\n\n`ast-grep outline` prints a structural map of source code with line\nnumbers: top-level declarations (imports, functions, classes, structs,\ninterfaces, modules, enums) and their direct **members** (fields, methods,\nconstructors, enum variants). It is a local, syntax-only view — cheap enough\nto run before any full file read.\n\nRead code in stages: find candidate files with search or file names, outline\nthem, then open only the source range the outline points to. Defaults adapt to\ninput: a file shows its local structure with member digests; a directory shows\nonly its exported surface as grouped names.\n\n## When To Use It\n\n**Understand a file before editing.** Get a table of contents, dependencies,\nand public entry points before reading implementation details:\n\n```shell\nast-grep outline \u003Cfile>\nast-grep outline \u003Cfile> --items imports\nast-grep outline \u003Cfile> --items exports\n```\n\n**Map an unfamiliar directory.** Scan the public surface of a subtree, then\nnarrow by symbol type when you know what you are looking for:\n\n```shell\nast-grep outline \u003Cdir> --items exports\nast-grep outline \u003Cdir> --type struct,enum,function\n```\n\n**Zoom into a known symbol.** After search finds a likely name, list its\nmembers with line numbers instead of reading the whole body:\n\n```shell\nast-grep outline \u003Cfile> --match \u003Csymbol> --type class --view expanded\n```\n\n**Trace dependency direction.** Find which files import a package or module to\ndecide where a change belongs:\n\n```shell\nast-grep outline \u003Cdir> --items imports --view signatures\n```\n\n**Review changed files after editing.** Git tells you what changed; outline\nsummarizes the resulting structure and public surface:\n\n```shell\nast-grep outline $(git diff --name-only HEAD) --items exports\n```\n\n## Argument Guide\n\n- `--items \u003CKIND>` selects top-level items: `structure` for local declarations,\n  `exports` for public API, `imports` for dependencies, `all` when\n  import\u002Fexport edges matter together. The default, `auto`, picks `structure`\n  for a file and `exports` for a directory. No other value is accepted; to\n  keep only functions, classes, or another symbol kind, use `--type`.\n- `--view \u003CVIEW>` controls detail, from least to most: `names` for directory\n  scans, `signatures` for one line per item, `digest` for signatures plus\n  member names, `expanded` for one line per member with its line number. The\n  default, `auto`, picks one from the input path. No other value is accepted.\n- `--match \u003CREGEX>` filters top-level items by name or signature. Rust regex,\n  case-sensitive; it never matches members.\n- `--type \u003CTYPE[,TYPE...]>` keeps only some top-level symbol types, such as\n  `--type class,function`. Member types like `method,field` never match\n  top-level items.\n- `--pub-members` hides private members when the view prints members.\n- `--json=stream` emits one JSON object per file with precise ranges. Use it\n  only to pipe or post-process entries; prefer text for navigation.\n\n## Limits\n\n`outline` shows local syntax structure. It does not resolve references, infer\ntypes, follow re-export chains, or build a call graph. Use `ast-grep run`,\n`rg`, or compiler-backed tools for those questions, then outline the candidate\nfiles they surface.\n","# Use ast-grep outline\n\n`ast-grep outline` prints a structural map of source code with line\nnumbers: top-level declarations (imports, functions, classes, structs,\ninterfaces, modules, enums) and their direct **members** (fields, methods,\nconstructors, enum variants). It is a local, syntax-only view — cheap enough\nto run before any full file read.\n\nRead code in stages: find candidate files with search or file names, outline\nthem, then open only the source range the outline points to. Defaults adapt to\ninput: a file shows its local structure with member digests; a directory shows\nonly its exported surface as grouped names.\n\n## When To Use It\n\n**Understand a file before editing.** Get a table of contents, dependencies,\nand public entry points before reading implementation details:\n\n```shell\nast-grep outline \u003Cfile>\nast-grep outline \u003Cfile> --items imports\nast-grep outline \u003Cfile> --items exports\n```\n\n**Map an unfamiliar directory.** Scan the public surface of a subtree, then\nnarrow by symbol type when you know what you are looking for:\n\n```shell\nast-grep outline \u003Cdir> --items exports\nast-grep outline \u003Cdir> --type struct,enum,function\n```\n\n**Zoom into a known symbol.** After search finds a likely name, list its\nmembers with line numbers instead of reading the whole body:\n\n```shell\nast-grep outline \u003Cfile> --match \u003Csymbol> --type class --view expanded\n```\n\n**Trace dependency direction.** Find which files import a package or module to\ndecide where a change belongs:\n\n```shell\nast-grep outline \u003Cdir> --items imports --view signatures\n```\n\n**Review changed files after editing.** Git tells you what changed; outline\nsummarizes the resulting structure and public surface:\n\n```shell\nast-grep outline $(git diff --name-only HEAD) --items exports\n```\n\n## Argument Guide\n\n- `--items \u003CKIND>` selects top-level items: `structure` for local declarations,\n  `exports` for public API, `imports` for dependencies, `all` when\n  import\u002Fexport edges matter together. The default, `auto`, picks `structure`\n  for a file and `exports` for a directory. No other value is accepted; to\n  keep only functions, classes, or another symbol kind, use `--type`.\n- `--view \u003CVIEW>` controls detail, from least to most: `names` for directory\n  scans, `signatures` for one line per item, `digest` for signatures plus\n  member names, `expanded` for one line per member with its line number. The\n  default, `auto`, picks one from the input path. No other value is accepted.\n- `--match \u003CREGEX>` filters top-level items by name or signature. Rust regex,\n  case-sensitive; it never matches members.\n- `--type \u003CTYPE[,TYPE...]>` keeps only some top-level symbol types, such as\n  `--type class,function`. Member types like `method,field` never match\n  top-level items.\n- `--pub-members` hides private members when the view prints members.\n- `--json=stream` emits one JSON object per file with precise ranges. Use it\n  only to pipe or post-process entries; prefer text for navigation.\n\n## Limits\n\n`outline` shows local syntax structure. It does not resolve references, infer\ntypes, follow re-export chains, or build a call graph. Use `ast-grep run`,\n`rg`, or compiler-backed tools for those questions, then outline the candidate\nfiles they surface.\n",{"name":5,"description":7},"main","e130bbfecbe906a7e18454979361c78699f9a22e","dot_agents\u002Fskills\u002Fast-grep-outline",0,"https:\u002F\u002Fgithub.com\u002Fian-pascoe\u002Fdotfiles","https:\u002F\u002Fgithub.com\u002Fian-pascoe","spiritledsoftware.com","Jacksonville, FL · Full-stack & AI-agent tooling · Spirit-Led Software · clerk-solidjs · Caplets","2026-11-13 23:10:27",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add ian-pascoe\u002Fdotfiles --skill ast-grep-outline",{"tool":57,"command":58},"bunx","bunx skills add ian-pascoe\u002Fdotfiles --skill ast-grep-outline",{"tool":60,"command":61},"pnpm","pnpm dlx skills add ian-pascoe\u002Fdotfiles --skill ast-grep-outline","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fian-pascoe\u002Fdotfiles\u002Fblob\u002Fmain\u002Fdot_agents\u002Fskills\u002Fast-grep-outline\u002FSKILL.md",true,[],[66,103,123,148,173,189],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":80,"publishedAt":37},"01M6HP2303VY6W6MNP8Z3AQRAX","agent-browser","Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to \"open a website\", \"fill out a form\", \"click a button\", \"take a screenshot\", \"scrape data from a page\", \"test this web app\", \"login to a site\", \"automate browser actions\", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.","https:\u002F\u002Fgithub.com\u002Fian-pascoe\u002Fdotfiles\u002Fblob\u002Fmain\u002Fdot_agents\u002Fskills\u002Fagent-browser\u002FSKILL.md",[72,77],{"categoryNo":73,"categoryName":74,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":78,"categoryName":79,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000023","Skill与智能体开发",[81,82,83,84,85,86,68,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102],"browser","agent browser","web tools","programmatic","slack messages","exploratory testing","discord","Bash","apps","qa","bedrock","open","testing","app","browser automation","messages","actions","notion","conversations","extracting","figma","click",{"skillNo":104,"name":105,"nameZh":6,"description":106,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":117,"publishedAt":37},"01M6GT848K41AFQJAW9VVX1HQ8","writing-for-agents","Writing documents for agents. Use when creating or editing skills, or modifying AGENTS.md or CLAUDE.md.","https:\u002F\u002Fgithub.com\u002Fian-pascoe\u002Fdotfiles\u002Fblob\u002Fmain\u002Fdot_agents\u002Fskills\u002Fwriting-for-agents\u002FSKILL.md",[109,112],{"categoryNo":110,"categoryName":111,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":113,"categoryName":114,"taxonomyType":115,"taxonomyTypeDesc":116},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[118,119,120,24,121,122,35],"for","writing for agents","writing","editing","documents",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":37},"01M6GT80DBGR6AMGJPK4S8RFMH","wizard","Generate an interactive bash wizard that walks a human through steps only they can perform. Use when provisioning infrastructure, setting up credentials or CI secrets, walking an unfamiliar third-party dashboard, or running a one-off migration or cutover. Don't invoke this for steps the agent can perform itself.","https:\u002F\u002Fgithub.com\u002Fian-pascoe\u002Fdotfiles\u002Fblob\u002Fmain\u002Fdot_agents\u002Fskills\u002Fwizard\u002FSKILL.md",[],[125,24,130,131,118,132,133,134,135,136,137,138,139,140,141,142,88,35,143,144,145,146,147],"party","invoke","running","infrastructure","third-party","provisioning","migration","secrets","human","credentials","dashboard","can","interactive","only","provisioning infrastructure","ci","up","generate",{"skillNo":149,"name":150,"nameZh":6,"description":151,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":152,"categories":153,"keywords":154,"publishedAt":37},"01M6GT7WTZMRN5FZX4SWMWNS3A","wayfinder","Plan a huge chunk of work (more than one agent session can hold) as a shared map of decision tickets on your issue tracker, and resolve them one at a time until the way to the destination is clear.","https:\u002F\u002Fgithub.com\u002Fian-pascoe\u002Fdotfiles\u002Fblob\u002Fmain\u002Fdot_agents\u002Fskills\u002Fwayfinder\u002FSKILL.md",[],[150,33,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,141],"more","true","decision","session","time","chunk","as","shared","one at a time","agent session","issue tracker","issue","clear","at","tickets","tracker","plan","work",{"skillNo":174,"name":175,"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":37},"01M6GT7SEP7TD1K1SDJDXQACKF","wait-what","Stop. That last message did not land: re-pitch it.","https:\u002F\u002Fgithub.com\u002Fian-pascoe\u002Fdotfiles\u002Fblob\u002Fmain\u002Fdot_agents\u002Fskills\u002Fwait-what\u002FSKILL.md",[],[180,181,182,183,184,185,186,187,156,188],"wait what","wait","it","stop","land","re","pitch","message","last",{"skillNo":190,"name":191,"nameZh":6,"description":192,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":193,"categories":194,"keywords":195,"publishedAt":37},"01M6GT7CWQC5PVT70A1PGGVPDT","unslop","Cut AI tells from any writing.","https:\u002F\u002Fgithub.com\u002Fian-pascoe\u002Fdotfiles\u002Fblob\u002Fmain\u002Fdot_agents\u002Fskills\u002Funslop\u002FSKILL.md",[],[191,120,156,196],"cut"]