@flitzrrr/agent-skills 1.0.3 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/.cursorrules +2 -2
  2. package/.github/copilot-instructions.md +59 -0
  3. package/.lovable +1 -1
  4. package/AGENTS.md +2 -2
  5. package/CHEATSHEET.md +84 -86
  6. package/CLAUDE.md +2 -2
  7. package/LICENSE +27 -0
  8. package/README.md +191 -99
  9. package/bin/build-catalog.js +208 -0
  10. package/bin/cli.js +7 -3
  11. package/bin/rebuild-symlinks.js +161 -0
  12. package/bin/sync-docs.js +147 -0
  13. package/bin/sync-skills.sh +17 -0
  14. package/bin/test-cli.js +115 -0
  15. package/bin/update-wiki.js +102 -0
  16. package/package.json +9 -2
  17. package/skills/dispatch-parallel-agents/skill.md +95 -0
  18. package/skills/execute-work-package/SKILL.md +300 -0
  19. package/skills/execute-work-package/scripts/start-l4l-oci.sh +75 -0
  20. package/skills/execute-work-package/tpl-execution-blueprint.md +39 -0
  21. package/skills/execute-work-package/tpl-execution-digest.md +24 -0
  22. package/skills/execute-work-package/tpl-implementer-execute-prompt.md +57 -0
  23. package/skills/execute-work-package/tpl-implementer-preflight-prompt.md +66 -0
  24. package/skills/product-description-seo/CROSS-SELL.md +31 -0
  25. package/skills/product-description-seo/KEYWORDS.md +35 -0
  26. package/skills/product-description-seo/SKILL.md +361 -0
  27. package/skills/product-description-seo/scripts/analyze_catalog.py +136 -0
  28. package/skills/product-description-seo/scripts/check_quality.py +204 -0
  29. package/skills/product-description-seo/scripts/extract_category.py +88 -0
  30. package/skills/product-description-seo/scripts/track_progress.py +140 -0
  31. package/skills/product-description-seo/scripts/update_catalog.py +80 -0
  32. package/skills/product-description-seo/scripts/validate_json.py +87 -0
  33. package/skills/systematic-debugging/skill.md +87 -0
  34. package/skills/tob-gh-cli/SKILL.md +71 -0
package/README.md CHANGED
@@ -1,126 +1,218 @@
1
- # 🧠 Agent Skills Hub
2
-
3
- > **121 AI agent skills** from **15 industry-leading sources** — organized, evaluated, and **multiplatform-ready** for all major AI coding IDEs.
4
-
5
- ## āœ… Supported Platforms
6
-
7
- | Platform | Config File | Setup |
8
- |----------|------------|-------|
9
- | **Claude Code** | `CLAUDE.md` | Clone repo, skills auto-discovered |
10
- | **Antigravity** | `skills/` dir | Symlink `skills/` into agent skill dir |
11
- | **Codex** (OpenAI) | `AGENTS.md` | Clone repo, `AGENTS.md` auto-loaded |
12
- | **OpenCode** | `AGENTS.md` + `skills/` | Clone repo, reference skills in prompts |
13
- | **Cursor** | `.cursorrules` | Clone repo into workspace, rules auto-loaded |
14
- | **Lovable** | `.lovable` | Add as project dependency |
15
- | **Windsurf** | `AGENTS.md` | Clone repo, reference skill paths |
16
- | **Generic Agent** | `SKILL.md` per skill | Read `skills/<name>/SKILL.md` |
17
-
18
- ## Sources (15)
19
-
20
- | # | Source | Skills | Focus |
21
- |---|--------|--------|-------|
22
- | 1 | [getsentry/skills](https://github.com/getsentry/skills) | 24 | Security, code review, Git workflow, Django |
23
- | 2 | [Bhanunamikaze/Agentic-SEO-Skill](https://github.com/Bhanunamikaze/Agentic-SEO-Skill) | 16 | Comprehensive SEO auditing |
24
- | 3 | [DasDigitaleMomentum/opencode-processing-skills](https://github.com/DasDigitaleMomentum/opencode-processing-skills) | 9 | Multi-session planning & docs |
25
- | 4 | [anthropics/skills](https://github.com/anthropics/skills) | 17 | Document gen, creative design, MCP, API |
26
- | 5 | [vercel-labs/agent-skills](https://github.com/vercel-labs/agent-skills) | 5 | React/Next.js, web design, deployment |
27
- | 6 | [trailofbits/skills](https://github.com/trailofbits/skills) | 30 | Advanced security auditing, static analysis, smart contracts |
28
- | 7 | [cloudflare/skills](https://github.com/cloudflare/skills) | 9 | Workers, Durable Objects, MCP, web perf |
29
- | 8 | [stripe/ai](https://github.com/stripe/ai) | 2 | Stripe best practices & SDK upgrades |
30
- | 9 | [expo/skills](https://github.com/expo/skills) | 3 | Expo app design, deployment, upgrades |
31
- | 10 | [google-labs-code/stitch-skills](https://github.com/google-labs-code/stitch-skills) | 7 | Design-to-code, shadcn/ui, Remotion |
32
- | 11 | [hashicorp/agent-skills](https://github.com/hashicorp/agent-skills) | 3 | Terraform code/module/provider generation |
33
- | 12 | [supabase/agent-skills](https://github.com/supabase/agent-skills) | 1 | Postgres best practices |
34
- | 13 | [callstackincubator/agent-skills](https://github.com/callstackincubator/agent-skills) | 5 | React Native, GitHub workflows |
35
- | 14 | [K-Dense-AI/claude-scientific-skills](https://github.com/K-Dense-AI/claude-scientific-skills) | 100+ | Science, bioinformatics, ML, chemistry |
36
- | 15 | [ComposioHQ/skills](https://github.com/ComposioHQ/skills) | 1 | Connect agents to 1000+ external apps |
37
-
38
- ## Repository Structure
1
+ # Agent Skills Hub
39
2
 
40
- ```
41
- agent-skills/
42
- ā”œā”€ā”€ skills/ ← 121 symlinks (flat access to all skills)
43
- ā”œā”€ā”€ vendor/ ← 15 Git submodules (upstream sources)
44
- ā”œā”€ā”€ AGENTS.md ← Codex / OpenCode / Windsurf
45
- ā”œā”€ā”€ CLAUDE.md ← Claude Code
46
- ā”œā”€ā”€ .cursorrules ← Cursor IDE
47
- ā”œā”€ā”€ .lovable ← Lovable AI
48
- ā”œā”€ā”€ CHEATSHEET.md ← Decision guide: which skill when
49
- └── README.md ← This file
50
- ```
3
+ [![npm version](https://img.shields.io/npm/v/@flitzrrr/agent-skills?style=flat-square&color=cb3837)](https://www.npmjs.com/package/@flitzrrr/agent-skills)
4
+ [![npm downloads](https://img.shields.io/npm/dm/@flitzrrr/agent-skills?style=flat-square)](https://www.npmjs.com/package/@flitzrrr/agent-skills)
5
+ [![Skills](https://img.shields.io/badge/skills-480-blue?style=flat-square)](skills/)
6
+ [![Sources](https://img.shields.io/badge/sources-20-green?style=flat-square)](vendor/)
7
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue?style=flat-square)](LICENSE)
8
+ [![Weekly Discovery](https://img.shields.io/badge/auto--discovery-weekly-purple?style=flat-square)](.github/workflows/skill-discovery.yml)
51
9
 
52
- ## Quick Start
10
+ **504 curated AI agent skills** from **19 verified sources**. One install, every major coding assistant.
53
11
 
54
- ```bash
55
- # Clone with all submodules
56
- git clone --recurse-submodules git@github.com:flitzrrr/agent-skills.git
12
+ [Full catalog](https://flitzrrr.github.io/agent-skills/) | [Decision guide](CHEATSHEET.md)
57
13
 
58
- # Update all upstream sources
59
- git submodule update --remote --merge
60
- ```
14
+ ---
61
15
 
62
- ## Install via npm
16
+ ## Quick Start
63
17
 
64
18
  ```bash
65
19
  npx @flitzrrr/agent-skills install
66
20
  ```
67
21
 
68
- ## Platform Setup
22
+ Detects installed platforms and provisions skills for each. Target a single platform with:
69
23
 
70
- ### Claude Code
71
24
  ```bash
72
- git clone --recurse-submodules git@github.com:flitzrrr/agent-skills.git
73
- # CLAUDE.md auto-discovered
25
+ npx @flitzrrr/agent-skills install <platform>
74
26
  ```
75
27
 
76
- ### Antigravity (Gemini)
77
- ```bash
78
- ln -sf /path/to/agent-skills/skills/* ~/.gemini/antigravity/skills/
79
- ```
28
+ Where `<platform>` is one of: `vscode`, `codex`, `antigravity`, `opencode`.
80
29
 
81
- ### Codex (OpenAI)
82
- ```bash
83
- git clone --recurse-submodules git@github.com:flitzrrr/agent-skills.git
84
- # AGENTS.md auto-discovered
85
- ```
30
+ <details>
31
+ <summary>Manual setup (git clone)</summary>
86
32
 
87
- ### Cursor
88
33
  ```bash
89
34
  git clone --recurse-submodules git@github.com:flitzrrr/agent-skills.git
90
- # .cursorrules auto-loaded
35
+ cd agent-skills
36
+
37
+ # Symlink into target platform(s):
38
+ ln -sf $(pwd)/skills/* ~/.copilot/skills/ # VS Code / GitHub Copilot
39
+ ln -sf $(pwd)/skills/* ~/.codex/skills/ # Codex
40
+ ln -sf $(pwd)/skills/* ~/.gemini/antigravity/skills/ # Antigravity
41
+ ln -sf $(pwd)/skills/* ~/.config/opencode/skills/ # OpenCode
42
+
43
+ # Pull upstream updates:
44
+ git submodule update --remote --merge
91
45
  ```
92
46
 
93
- ### OpenCode
94
- ```bash
95
- # Skills are symlinked — see CHEATSHEET.md for usage
96
- ln -sf /path/to/agent-skills/skills/* ~/.opencode/skills/
47
+ </details>
48
+
49
+ <details>
50
+ <summary>All CLI commands</summary>
51
+
52
+ | Command | Description |
53
+ | --- | --- |
54
+ | `npx @flitzrrr/agent-skills install` | Install for all detected platforms |
55
+ | `npx @flitzrrr/agent-skills install <platform>` | Install for a single platform |
56
+ | `npx @flitzrrr/agent-skills update` | Pull latest upstream skills |
57
+ | `npx @flitzrrr/agent-skills list` | List all available skills |
58
+
59
+ </details>
60
+
61
+ ---
62
+
63
+ ## Platform Support
64
+
65
+ | Platform | Discovery Mechanism | Install Method |
66
+ | --- | --- | --- |
67
+ | VS Code (GitHub Copilot) | `.github/copilot-instructions.md` + `~/.copilot/skills/` | `install vscode` |
68
+ | Claude Code | `CLAUDE.md` (project-level) | Clone into project |
69
+ | Codex | `AGENTS.md` | `install codex` |
70
+ | Cursor | `.cursorrules` (project-level) | Clone into workspace |
71
+ | Lovable | `.lovable` | Clone into workspace |
72
+ | Windsurf | `AGENTS.md` | Clone into workspace |
73
+ | Antigravity | `~/.gemini/antigravity/skills/` | `install antigravity` |
74
+ | OpenCode | `AGENTS.md` + `skills/` | `install opencode` |
75
+ | Any agent | Read `skills/<name>/SKILL.md` directly | Manual |
76
+
77
+ ---
78
+
79
+ ## Skill Categories
80
+
81
+ | Category | Examples | Sources |
82
+ | --- | --- | --- |
83
+ | Security and code review | `security-review`, `code-review`, `find-bugs`, `gha-security-review` | Sentry, Trail of Bits |
84
+ | Git workflow | `commit`, `create-branch`, `pr-writer`, `iterate-pr` | Sentry |
85
+ | Project planning | `create-plan`, `resume-plan`, `execute-work-package`, `generate-handover` | DasDigitaleMomentum |
86
+ | Document generation | `anthropic-pdf`, `anthropic-docx`, `anthropic-pptx`, `anthropic-xlsx` | Anthropic |
87
+ | Frontend and React | `vercel-react-best-practices`, `vercel-web-design-guidelines`, `anthropic-frontend-design` | Vercel, Anthropic |
88
+ | Infrastructure | `aws-lambda`, `terraform-code-generation`, `cloudflare-wrangler` | AWS, HashiCorp, Cloudflare |
89
+ | Finance | `finance-equity-research`, `finance-ib-advisory`, `finance-wealth-mgmt` | Anthropic |
90
+ | Science and ML | `scientific-bioinformatics`, `scientific-alphafold`, `scientific-chembl` | K-Dense-AI |
91
+ | Marketing and SEO | `content-strategy`, `seo-audit`, `product-description-seo` | Coreyhaines, Bhanunamikaze |
92
+ | Developer tools | `anthropic-mcp-builder`, `anthropic-webapp-testing`, `systematic-debugging` | Anthropic, Sentry |
93
+ | Django | `django-access-review`, `django-perf-review` | Sentry |
94
+ | Deployment | `vercel-deploy-to-vercel`, `stitch-shadcn-ui` | Vercel, Google |
95
+
96
+ See [CHEATSHEET.md](CHEATSHEET.md) for a decision guide on which skill to use for a given task.
97
+
98
+ ---
99
+
100
+ ## Sources
101
+
102
+ | Source | Skills | Focus |
103
+ | --- | ---: | --- |
104
+ | [K-Dense-AI/claude-scientific-skills](https://github.com/K-Dense-AI/claude-scientific-skills) | 175 | Science, bioinformatics, ML, chemistry |
105
+ | [trailofbits/skills](https://github.com/trailofbits/skills) | 60 | Security auditing, static analysis, smart contracts |
106
+ | [anthropics/financial-services-plugins](https://github.com/anthropics/financial-services-plugins) | 56 | Finance: IB, equity research, PE, wealth mgmt |
107
+ | [MoizIbnYousaf/Ai-Agent-Skills](https://github.com/MoizIbnYousaf/Ai-Agent-Skills) | 48 | Database design, debugging, code patterns |
108
+ | [coreyhaines31/marketingskills](https://github.com/coreyhaines31/marketingskills) | 33 | Marketing: SEO, email, content, analytics |
109
+ | [getsentry/skills](https://github.com/getsentry/skills) | 24 | Security, code review, Git workflow, Django |
110
+ | [itsmostafa/aws-agent-skills](https://github.com/itsmostafa/aws-agent-skills) | 18 | AWS infrastructure and services |
111
+ | [anthropics/skills](https://github.com/anthropics/skills) | 17 | Document gen, creative design, MCP |
112
+ | [hashicorp/agent-skills](https://github.com/hashicorp/agent-skills) | 14 | Terraform generation |
113
+ | [expo/skills](https://github.com/expo/skills) | 11 | Expo design and deployment |
114
+ | [cloudflare/skills](https://github.com/cloudflare/skills) | 9 | Workers, Durable Objects, MCP |
115
+ | [DasDigitaleMomentum/opencode-processing-skills](https://github.com/DasDigitaleMomentum/opencode-processing-skills) | 9 | Multi-session planning |
116
+ | [google-labs-code/stitch-skills](https://github.com/google-labs-code/stitch-skills) | 7 | Design-to-code, shadcn/ui, Remotion |
117
+ | [vercel-labs/agent-skills](https://github.com/vercel-labs/agent-skills) | 5 | React, Next.js, web design |
118
+ | [callstackincubator/agent-skills](https://github.com/callstackincubator/agent-skills) | 5 | React Native, GitHub workflows |
119
+ | [JackyST0/awesome-agent-skills](https://github.com/JackyST0/awesome-agent-skills) | 5 | General-purpose agent patterns |
120
+ | [stripe/ai](https://github.com/stripe/ai) | 2 | Stripe best practices |
121
+ | [Bhanunamikaze/Agentic-SEO-Skill](https://github.com/Bhanunamikaze/Agentic-SEO-Skill) | 1 | SEO auditing (16 sub-skills) |
122
+ | [supabase/agent-skills](https://github.com/supabase/agent-skills) | 1 | Postgres best practices |
123
+
124
+ New sources are discovered weekly via [GitHub Actions](.github/workflows/skill-discovery.yml) and security-scanned before integration.
125
+
126
+ ---
127
+
128
+ ## Architecture
129
+
130
+ ```
131
+ agent-skills/
132
+ skills/ 504 entries (symlinks to vendor + local forks)
133
+ vendor/ 20 Git submodules (upstream sources)
134
+ bin/ CLI and build scripts
135
+ docs/ GitHub Pages catalog and project documentation
136
+ .github/ CI workflows and copilot-instructions.md
97
137
  ```
98
138
 
99
- ### Lovable
100
- ```bash
101
- git submodule add git@github.com:flitzrrr/agent-skills.git skills
139
+ Skills are exposed as a flat directory under `skills/`. Most entries are symlinks into `vendor/` submodules. Skills with local extensions (e.g., `execute-work-package` with multi-transport support) are maintained as real directories alongside the symlinks.
140
+
141
+ ### Naming Convention
142
+
143
+ Skills are namespaced by source to avoid collisions: `anthropic-pdf`, `tob-static-analysis`, `cloudflare-wrangler`, `terraform-code-generation`, `scientific-bioinformatics`, `aws-lambda`, `finance-equity-research`, `callstack-react-native-best-practices`. Sentry and marketing skills are un-prefixed (`code-review`, `content-strategy`).
144
+
145
+ ### Automation
146
+
147
+ | Workflow | Trigger | Purpose |
148
+ | --- | --- | --- |
149
+ | [Skill Discovery](.github/workflows/skill-discovery.yml) | Weekly | Find trending skill repos, security-scan, auto-add |
150
+ | [Submodule Update](.github/workflows/submodule-update.yml) | Weekly | Pull upstream changes, open PR |
151
+ | [MegaLinter](.github/workflows/megalinter.yml) | Push / PR | Lint markdown, YAML, JSON |
152
+ | [npm Publish](.github/workflows/npm-publish.yml) | Tag `v*` | Publish to npm, create GitHub Release |
153
+
154
+ ---
155
+
156
+ ## MCP Execution Backend (l4l-oci)
157
+
158
+ The [execute-work-package](skills/execute-work-package) skill supports three transport modes for delegating implementation to a sub-agent:
159
+
160
+ | Transport | Mechanism | When to use |
161
+ | --- | --- | --- |
162
+ | **MCP via l4l-oci** (default) | [l4l-oci](https://github.com/DasDigitaleMomentum/l4l-oci) exposes 10 MCP tools for the gated blueprint-gate-execute lifecycle | Any IDE with MCP support |
163
+ | **Fresh Agent** | IDE spawns a new sub-agent per step (no external server) | Fallback when l4l-oci is not configured |
164
+ | **Stateful Session** | Sub-agent session resumed across steps | OpenCode only |
165
+
166
+ When l4l-oci MCP tools are available (`create_handle`, `generate_blueprint`, `submit_gate`, `execute_handle`, `get_digest`), the skill uses them automatically. The bundled `scripts/start-l4l-oci.sh` auto-starts the server if needed. See the [l4l-oci setup guide](https://github.com/DasDigitaleMomentum/l4l-oci/blob/main/docs/setup.md) for configuration.
167
+
168
+ ### Lifecycle
169
+
170
+ ```mermaid
171
+ sequenceDiagram
172
+ participant User
173
+ participant Primary as Primary Agent<br/>(IDE)
174
+ participant MCP as l4l-oci MCP Server
175
+ participant Sub as Sub-LLM<br/>(configurable)
176
+
177
+ User->>Primary: Task with scope and DoD
178
+
179
+ rect rgb(240, 245, 250)
180
+ Note over Primary,Sub: Blueprint Phase
181
+ Primary->>MCP: create_handle(project_root)
182
+ MCP-->>Primary: handle_id
183
+ Primary->>MCP: generate_blueprint(handle_id, prompt)
184
+ MCP->>Sub: Generate Execution Blueprint
185
+ Sub-->>MCP: Blueprint (ordered steps)
186
+ Primary->>MCP: get_blueprint(handle_id)
187
+ MCP-->>Primary: Blueprint for review
188
+ end
189
+
190
+ Primary->>User: Present Blueprint for review
191
+
192
+ User->>Primary: Approve
193
+
194
+ rect rgb(240, 250, 240)
195
+ Note over Primary,Sub: Gate
196
+ Primary->>MCP: submit_gate(handle_id, "accept")
197
+ MCP-->>Primary: Gated
198
+ end
199
+
200
+ rect rgb(250, 245, 240)
201
+ Note over Primary,Sub: Execute Phase
202
+ Primary->>MCP: execute_handle(handle_id)
203
+ MCP->>Sub: Implement Blueprint steps
204
+ Sub->>Sub: Edit files, run verification
205
+ Sub-->>MCP: Execution Digest
206
+ Primary->>MCP: get_digest(handle_id)
207
+ MCP-->>Primary: Digest (outcome, files, verify result)
208
+ end
209
+
210
+ Primary->>User: Report results
102
211
  ```
103
212
 
104
- ## Naming Convention
105
-
106
- | Source | Prefix | Example |
107
- |--------|--------|---------|
108
- | Sentry | *(none)* | `code-review`, `security-review` |
109
- | SEO | `seo` | `seo` |
110
- | OpenCode | *(none)* | `create-plan`, `resume-plan` |
111
- | Anthropic | `anthropic-` | `anthropic-pdf`, `anthropic-mcp-builder` |
112
- | Vercel | `vercel-` | `vercel-react-best-practices` |
113
- | Trail of Bits | `tob-` | `tob-static-analysis`, `tob-semgrep-rule-creator` |
114
- | Cloudflare | `cloudflare-` | `cloudflare-wrangler`, `cloudflare-web-perf` |
115
- | Stripe | `stripe-` | `stripe-stripe-best-practices` |
116
- | Expo | `expo` | `expo` |
117
- | Google Stitch | `stitch-` | `stitch-shadcn-ui`, `stitch-remotion` |
118
- | HashiCorp | `terraform-` | `terraform-code-generation` |
119
- | Supabase | `supabase-` | `supabase-postgres` |
120
- | CallStack | `callstack-` | `callstack-react-native-best-practices` |
121
- | Scientific | `scientific` | `scientific` (100+ sub-skills) |
122
- | Composio | `composio` | `composio` |
213
+ ---
123
214
 
124
215
  ## License
125
216
 
126
- Each vendored repository retains its original license. See individual repos for details.
217
+ MIT -- applies to the CLI, workflows, and documentation in this repository.
218
+ Each vendored submodule in `vendor/` retains its own original license.
@@ -0,0 +1,208 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * Build catalog.json from all SKILL.md frontmatter.
5
+ * Searches recursively for SKILL.md and generates descriptions
6
+ * for skills that lack frontmatter descriptions.
7
+ *
8
+ * Run: node bin/build-catalog.js
9
+ * Output: docs/catalog.json
10
+ */
11
+
12
+ const fs = require("fs");
13
+ const path = require("path");
14
+
15
+ const ROOT = path.join(__dirname, "..");
16
+ const SKILLS_DIR = path.join(ROOT, "skills");
17
+ const OUT = path.join(ROOT, "docs", "catalog.json");
18
+
19
+ function findSkillMd(dir, maxDepth) {
20
+ if (maxDepth <= 0) return null;
21
+ try {
22
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
23
+ // Check current directory first
24
+ for (const e of entries) {
25
+ if (e.isFile() && e.name.toLowerCase() === "skill.md") {
26
+ return path.join(dir, e.name);
27
+ }
28
+ }
29
+ // Then recurse into subdirectories
30
+ for (const e of entries) {
31
+ if (e.isDirectory() && e.name !== ".git" && e.name !== "node_modules") {
32
+ const found = findSkillMd(path.join(dir, e.name), maxDepth - 1);
33
+ if (found) return found;
34
+ }
35
+ }
36
+ } catch {}
37
+ return null;
38
+ }
39
+
40
+ function extractDescription(skillMdPath) {
41
+ const content = fs.readFileSync(skillMdPath, "utf8");
42
+ const fmMatch = content.match(/^---\s*\n([\s\S]*?)\n---/);
43
+ if (fmMatch) {
44
+ const fm = fmMatch[1];
45
+ let desc = null;
46
+
47
+ // 1. Quoted description: description: "..."
48
+ const quotedMatch = fm.match(/description:\s*"([\s\S]*?)"/);
49
+ if (quotedMatch) {
50
+ desc = quotedMatch[1];
51
+ }
52
+
53
+ // 2. YAML multi-line (>, >-, |, |-): collect indented lines
54
+ if (!desc) {
55
+ const multiMatch = fm.match(/description:\s*[>|]-?\s*\n([\s\S]*?)(?=\n\S|\n*$)/);
56
+ if (multiMatch) {
57
+ desc = multiMatch[1]
58
+ .split("\n")
59
+ .map((l) => l.replace(/^\s{2,}/, "").trim())
60
+ .filter(Boolean)
61
+ .join(" ");
62
+ }
63
+ }
64
+
65
+ // 3. Single-line description
66
+ if (!desc) {
67
+ const singleMatch = fm.match(/description:\s*(.+?)(?:\n|$)/);
68
+ if (singleMatch) {
69
+ desc = singleMatch[1];
70
+ }
71
+ }
72
+
73
+ if (desc) {
74
+ desc = desc.replace(/\s+/g, " ").trim();
75
+ // First sentence
76
+ const sentEnd = desc.match(/[.!?]\s/);
77
+ if (sentEnd) desc = desc.substring(0, sentEnd.index + 1);
78
+ if (desc.length > 150) desc = desc.substring(0, 147) + "...";
79
+ // Reject garbage (too short, only symbols, YAML artifacts)
80
+ if (desc.length >= 10 && /[a-zA-Z]{3,}/.test(desc)) {
81
+ return desc;
82
+ }
83
+ }
84
+ }
85
+ // Fallback: first real paragraph after frontmatter
86
+ const noFm = content.replace(/^---[\s\S]*?---\s*/, "");
87
+ const lines = noFm
88
+ .split("\n")
89
+ .filter((l) => l.trim() && !l.startsWith("#") && !l.startsWith("```") && !l.startsWith("-"));
90
+ if (lines.length > 0) {
91
+ let desc = lines[0].trim();
92
+ const sentEnd = desc.match(/[.!?]\s/);
93
+ if (sentEnd) desc = desc.substring(0, sentEnd.index + 1);
94
+ if (desc.length > 150) desc = desc.substring(0, 147) + "...";
95
+ if (desc.length >= 10 && /[a-zA-Z]{3,}/.test(desc)) {
96
+ return desc;
97
+ }
98
+ }
99
+ return null;
100
+ }
101
+
102
+ // Generate a human-readable description from the skill name
103
+ function descFromName(name) {
104
+ const map = {
105
+ "expo": "Expo SDK integration for React Native mobile app development.",
106
+ "scientific": "Scientific computing and research automation toolkit.",
107
+ // finance
108
+ "finance-equity-research": "Equity research analysis and investment recommendations.",
109
+ "finance-financial-analysis": "Financial modeling, valuation, and quantitative analysis.",
110
+ "finance-investment-banking": "Investment banking deal execution and M&A advisory.",
111
+ "finance-lseg": "LSEG (London Stock Exchange Group) data integration.",
112
+ "finance-private-equity": "Private equity deal sourcing and portfolio management.",
113
+ "finance-spglobal": "S&P Global market intelligence data integration.",
114
+ "finance-wealth-management": "Wealth management and financial planning advisory.",
115
+ // terraform
116
+ "terraform-code-generation": "Generate Terraform HCL code from infrastructure requirements.",
117
+ "terraform-module-generation": "Create reusable Terraform modules following best practices.",
118
+ "terraform-provider-development": "Build custom Terraform providers for new infrastructure APIs.",
119
+ // tob skills without parseable YAML
120
+ "tob-debug-buttercup": "Debug Buttercup password manager issues and extension failures.",
121
+ "tob-differential-review": "Security-focused differential code review for pull requests.",
122
+ "tob-gh-cli": "Automate GitHub workflows using the gh CLI for issues, PRs, and releases.",
123
+ "tob-static-analysis": "Run and interpret static analysis tools across multiple languages.",
124
+ "tob-testing-handbook-skills": "Apply Trail of Bits testing handbook best practices.",
125
+ "tob-workflow-skill-design": "Design and structure new Claude Code skills and workflows.",
126
+ "tob-yara-authoring": "Author and validate YARA rules for malware detection and threat hunting.",
127
+ // seo
128
+ "seo": "Deterministic LLM-first SEO audits for websites, blogs, and repositories.",
129
+ };
130
+ if (map[name]) return map[name];
131
+
132
+ // Auto-generate from name (strip known prefixes)
133
+ const cleaned = name
134
+ .replace(/^(tob|anthropic|agents|cloudflare|sentry|google|finance|terraform)-/, "");
135
+ const parts = cleaned.split("-");
136
+ const readable = parts.map((p) => p.charAt(0).toUpperCase() + p.slice(1)).join(" ");
137
+ // Make it a full sentence
138
+ return `${readable} tooling and automation.`;
139
+ }
140
+
141
+ function main() {
142
+ if (!fs.existsSync(SKILLS_DIR)) {
143
+ console.error("skills/ directory not found");
144
+ process.exit(1);
145
+ }
146
+
147
+ const entries = fs.readdirSync(SKILLS_DIR);
148
+ const catalog = [];
149
+
150
+ for (const entry of entries) {
151
+ const entryPath = path.join(SKILLS_DIR, entry);
152
+ let realDir;
153
+
154
+ try {
155
+ const stats = fs.lstatSync(entryPath);
156
+ if (stats.isSymbolicLink()) {
157
+ const linkTarget = fs.readlinkSync(entryPath);
158
+ const normalized = linkTarget.replace(/^(\.\.\/)+/, "");
159
+ realDir = path.join(ROOT, normalized);
160
+ } else if (stats.isDirectory()) {
161
+ realDir = entryPath;
162
+ } else {
163
+ continue;
164
+ }
165
+ } catch {
166
+ continue;
167
+ }
168
+
169
+ const prefix = entry.split("-")[0];
170
+ let description = null;
171
+
172
+ if (fs.existsSync(realDir) && fs.statSync(realDir).isDirectory()) {
173
+ // Search recursively for SKILL.md (max depth 4)
174
+ const skillMd = findSkillMd(realDir, 4);
175
+ if (skillMd) {
176
+ description = extractDescription(skillMd);
177
+ }
178
+ }
179
+
180
+ // Fallback: generate from name
181
+ if (!description) {
182
+ description = descFromName(entry);
183
+ }
184
+
185
+ catalog.push({
186
+ name: entry,
187
+ source: prefix,
188
+ description,
189
+ });
190
+ }
191
+
192
+ catalog.sort((a, b) => a.name.localeCompare(b.name));
193
+
194
+ const output = {
195
+ generated: new Date().toISOString(),
196
+ total: catalog.length,
197
+ skills: catalog,
198
+ };
199
+
200
+ fs.mkdirSync(path.dirname(OUT), { recursive: true });
201
+ fs.writeFileSync(OUT, JSON.stringify(output, null, 2));
202
+
203
+ const withDesc = catalog.filter((s) => s.description).length;
204
+ console.log(`Built catalog: ${output.total} skills, ${withDesc} with descriptions`);
205
+ console.log(`Output: ${OUT}`);
206
+ }
207
+
208
+ main();
package/bin/cli.js CHANGED
@@ -26,6 +26,10 @@ const PLATFORMS = {
26
26
  name: "OpenCode",
27
27
  dir: path.join(os.homedir(), ".config", "opencode", "skills"),
28
28
  },
29
+ vscode: {
30
+ name: "VS Code (GitHub Copilot)",
31
+ dir: path.join(os.homedir(), ".copilot", "skills"),
32
+ },
29
33
  cursor: {
30
34
  name: "Cursor",
31
35
  dir: null,
@@ -38,7 +42,7 @@ function log(msg) {
38
42
  }
39
43
 
40
44
  function header(msg) {
41
- console.log(`\n🧠 ${msg}\n`);
45
+ console.log(`\n> ${msg}\n`);
42
46
  }
43
47
 
44
48
  function cloneRepo() {
@@ -128,7 +132,7 @@ switch (command) {
128
132
  }
129
133
  }
130
134
 
131
- log("\nāœ… Done! See CHEATSHEET.md for which skill to use when.");
135
+ log("\nDone. See CHEATSHEET.md for which skill to use when.");
132
136
  log(` ${SKILL_DIR}/CHEATSHEET.md`);
133
137
  break;
134
138
  }
@@ -136,7 +140,7 @@ switch (command) {
136
140
  case "update": {
137
141
  header("Updating Agent Skills...");
138
142
  cloneRepo();
139
- log("\nāœ… All skills updated to latest versions.");
143
+ log("\nAll skills updated to latest versions.");
140
144
  break;
141
145
  }
142
146