claude-code-swarm 0.3.3 β†’ 0.3.5

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 (273) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +22 -1
  3. package/.claude-plugin/run-agent-inbox-mcp.sh +76 -0
  4. package/.claude-plugin/run-minimem-mcp.sh +98 -0
  5. package/.claude-plugin/run-opentasks-mcp.sh +65 -0
  6. package/CLAUDE.md +200 -36
  7. package/README.md +65 -0
  8. package/e2e/helpers/cleanup.mjs +17 -3
  9. package/e2e/helpers/map-mock-server.mjs +201 -25
  10. package/e2e/helpers/sidecar.mjs +222 -0
  11. package/e2e/helpers/workspace.mjs +2 -1
  12. package/e2e/tier5-sidecar-inbox.test.mjs +900 -0
  13. package/e2e/tier6-inbox-mcp.test.mjs +173 -0
  14. package/e2e/tier6-live-agent.test.mjs +759 -0
  15. package/e2e/vitest.config.e2e.mjs +1 -1
  16. package/hooks/hooks.json +15 -8
  17. package/package.json +13 -1
  18. package/references/agent-inbox/CLAUDE.md +151 -0
  19. package/references/agent-inbox/README.md +238 -0
  20. package/references/agent-inbox/docs/CLAUDE-CODE-SWARM-PROPOSAL.md +137 -0
  21. package/references/agent-inbox/docs/DESIGN.md +1156 -0
  22. package/references/agent-inbox/hooks/inbox-hook.mjs +119 -0
  23. package/references/agent-inbox/hooks/register-hook.mjs +69 -0
  24. package/references/agent-inbox/package-lock.json +3347 -0
  25. package/references/agent-inbox/package.json +58 -0
  26. package/references/agent-inbox/rules/agent-inbox.md +78 -0
  27. package/references/agent-inbox/src/federation/address.ts +61 -0
  28. package/references/agent-inbox/src/federation/connection-manager.ts +573 -0
  29. package/references/agent-inbox/src/federation/delivery-queue.ts +222 -0
  30. package/references/agent-inbox/src/federation/index.ts +6 -0
  31. package/references/agent-inbox/src/federation/routing-engine.ts +188 -0
  32. package/references/agent-inbox/src/federation/trust.ts +71 -0
  33. package/references/agent-inbox/src/index.ts +390 -0
  34. package/references/agent-inbox/src/ipc/ipc-server.ts +207 -0
  35. package/references/agent-inbox/src/jsonrpc/mail-server.ts +382 -0
  36. package/references/agent-inbox/src/map/map-client.ts +414 -0
  37. package/references/agent-inbox/src/mcp/mcp-server.ts +272 -0
  38. package/references/agent-inbox/src/mesh/delivery-bridge.ts +110 -0
  39. package/references/agent-inbox/src/mesh/mesh-connector.ts +41 -0
  40. package/references/agent-inbox/src/mesh/mesh-transport.ts +157 -0
  41. package/references/agent-inbox/src/mesh/type-mapper.ts +239 -0
  42. package/references/agent-inbox/src/push/notifier.ts +233 -0
  43. package/references/agent-inbox/src/registry/warm-registry.ts +255 -0
  44. package/references/agent-inbox/src/router/message-router.ts +175 -0
  45. package/references/agent-inbox/src/storage/interface.ts +48 -0
  46. package/references/agent-inbox/src/storage/memory.ts +145 -0
  47. package/references/agent-inbox/src/storage/sqlite.ts +671 -0
  48. package/references/agent-inbox/src/traceability/traceability.ts +183 -0
  49. package/references/agent-inbox/src/types.ts +303 -0
  50. package/references/agent-inbox/test/federation/address.test.ts +101 -0
  51. package/references/agent-inbox/test/federation/connection-manager.test.ts +546 -0
  52. package/references/agent-inbox/test/federation/delivery-queue.test.ts +159 -0
  53. package/references/agent-inbox/test/federation/integration.test.ts +857 -0
  54. package/references/agent-inbox/test/federation/routing-engine.test.ts +117 -0
  55. package/references/agent-inbox/test/federation/sdk-integration.test.ts +744 -0
  56. package/references/agent-inbox/test/federation/trust.test.ts +89 -0
  57. package/references/agent-inbox/test/ipc-jsonrpc.test.ts +113 -0
  58. package/references/agent-inbox/test/ipc-server.test.ts +197 -0
  59. package/references/agent-inbox/test/mail-server.test.ts +285 -0
  60. package/references/agent-inbox/test/map-client.test.ts +408 -0
  61. package/references/agent-inbox/test/mesh/delivery-bridge.test.ts +178 -0
  62. package/references/agent-inbox/test/mesh/e2e-mesh.test.ts +527 -0
  63. package/references/agent-inbox/test/mesh/e2e-real-meshpeer.test.ts +629 -0
  64. package/references/agent-inbox/test/mesh/federation-mesh.test.ts +269 -0
  65. package/references/agent-inbox/test/mesh/mesh-connector.test.ts +66 -0
  66. package/references/agent-inbox/test/mesh/mesh-transport.test.ts +191 -0
  67. package/references/agent-inbox/test/mesh/meshpeer-integration.test.ts +442 -0
  68. package/references/agent-inbox/test/mesh/mock-mesh.ts +125 -0
  69. package/references/agent-inbox/test/mesh/mock-meshpeer.ts +266 -0
  70. package/references/agent-inbox/test/mesh/type-mapper.test.ts +226 -0
  71. package/references/agent-inbox/test/message-router.test.ts +184 -0
  72. package/references/agent-inbox/test/push-notifier.test.ts +139 -0
  73. package/references/agent-inbox/test/registry/warm-registry.test.ts +171 -0
  74. package/references/agent-inbox/test/sqlite-prefix.test.ts +192 -0
  75. package/references/agent-inbox/test/sqlite-storage.test.ts +243 -0
  76. package/references/agent-inbox/test/storage.test.ts +196 -0
  77. package/references/agent-inbox/test/traceability.test.ts +123 -0
  78. package/references/agent-inbox/test/wake.test.ts +330 -0
  79. package/references/agent-inbox/tsconfig.json +20 -0
  80. package/references/agent-inbox/tsup.config.ts +10 -0
  81. package/references/agent-inbox/vitest.config.ts +8 -0
  82. package/references/minimem/.claude/settings.json +7 -0
  83. package/references/minimem/.sudocode/issues.jsonl +18 -0
  84. package/references/minimem/.sudocode/specs.jsonl +1 -0
  85. package/references/minimem/CLAUDE.md +329 -0
  86. package/references/minimem/README.md +565 -0
  87. package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
  88. package/references/minimem/claude-plugin/.mcp.json +7 -0
  89. package/references/minimem/claude-plugin/README.md +158 -0
  90. package/references/minimem/claude-plugin/commands/recall.md +47 -0
  91. package/references/minimem/claude-plugin/commands/remember.md +41 -0
  92. package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
  93. package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
  94. package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
  95. package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
  96. package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
  97. package/references/minimem/media/banner.png +0 -0
  98. package/references/minimem/package-lock.json +5373 -0
  99. package/references/minimem/package.json +76 -0
  100. package/references/minimem/scripts/postbuild.js +49 -0
  101. package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
  102. package/references/minimem/src/__tests__/errors.test.ts +265 -0
  103. package/references/minimem/src/__tests__/helpers.ts +199 -0
  104. package/references/minimem/src/__tests__/internal.test.ts +407 -0
  105. package/references/minimem/src/__tests__/knowledge-frontmatter.test.ts +148 -0
  106. package/references/minimem/src/__tests__/knowledge.test.ts +148 -0
  107. package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
  108. package/references/minimem/src/__tests__/session.test.ts +190 -0
  109. package/references/minimem/src/cli/__tests__/commands.test.ts +760 -0
  110. package/references/minimem/src/cli/__tests__/contained-layout.test.ts +286 -0
  111. package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
  112. package/references/minimem/src/cli/commands/append.ts +76 -0
  113. package/references/minimem/src/cli/commands/config.ts +262 -0
  114. package/references/minimem/src/cli/commands/conflicts.ts +415 -0
  115. package/references/minimem/src/cli/commands/daemon.ts +169 -0
  116. package/references/minimem/src/cli/commands/index.ts +12 -0
  117. package/references/minimem/src/cli/commands/init.ts +166 -0
  118. package/references/minimem/src/cli/commands/mcp.ts +221 -0
  119. package/references/minimem/src/cli/commands/push-pull.ts +213 -0
  120. package/references/minimem/src/cli/commands/search.ts +223 -0
  121. package/references/minimem/src/cli/commands/status.ts +84 -0
  122. package/references/minimem/src/cli/commands/store.ts +189 -0
  123. package/references/minimem/src/cli/commands/sync-init.ts +290 -0
  124. package/references/minimem/src/cli/commands/sync.ts +70 -0
  125. package/references/minimem/src/cli/commands/upsert.ts +197 -0
  126. package/references/minimem/src/cli/config.ts +611 -0
  127. package/references/minimem/src/cli/index.ts +299 -0
  128. package/references/minimem/src/cli/shared.ts +189 -0
  129. package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
  130. package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
  131. package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
  132. package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
  133. package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
  134. package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
  135. package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
  136. package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
  137. package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
  138. package/references/minimem/src/cli/sync/central.ts +292 -0
  139. package/references/minimem/src/cli/sync/conflicts.ts +205 -0
  140. package/references/minimem/src/cli/sync/daemon.ts +407 -0
  141. package/references/minimem/src/cli/sync/detection.ts +138 -0
  142. package/references/minimem/src/cli/sync/index.ts +107 -0
  143. package/references/minimem/src/cli/sync/operations.ts +373 -0
  144. package/references/minimem/src/cli/sync/registry.ts +279 -0
  145. package/references/minimem/src/cli/sync/state.ts +358 -0
  146. package/references/minimem/src/cli/sync/validation.ts +206 -0
  147. package/references/minimem/src/cli/sync/watcher.ts +237 -0
  148. package/references/minimem/src/cli/version.ts +34 -0
  149. package/references/minimem/src/core/index.ts +9 -0
  150. package/references/minimem/src/core/indexer.ts +628 -0
  151. package/references/minimem/src/core/searcher.ts +221 -0
  152. package/references/minimem/src/db/schema.ts +183 -0
  153. package/references/minimem/src/db/sqlite-vec.ts +24 -0
  154. package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
  155. package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
  156. package/references/minimem/src/embeddings/batch-openai.ts +409 -0
  157. package/references/minimem/src/embeddings/embeddings.ts +434 -0
  158. package/references/minimem/src/index.ts +132 -0
  159. package/references/minimem/src/internal.ts +299 -0
  160. package/references/minimem/src/minimem.ts +1291 -0
  161. package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
  162. package/references/minimem/src/search/graph.ts +234 -0
  163. package/references/minimem/src/search/hybrid.ts +151 -0
  164. package/references/minimem/src/search/search.ts +256 -0
  165. package/references/minimem/src/server/__tests__/mcp.test.ts +347 -0
  166. package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
  167. package/references/minimem/src/server/mcp.ts +326 -0
  168. package/references/minimem/src/server/tools.ts +720 -0
  169. package/references/minimem/src/session.ts +460 -0
  170. package/references/minimem/src/store/__tests__/manifest.test.ts +177 -0
  171. package/references/minimem/src/store/__tests__/materialize.test.ts +52 -0
  172. package/references/minimem/src/store/__tests__/store-graph.test.ts +228 -0
  173. package/references/minimem/src/store/index.ts +27 -0
  174. package/references/minimem/src/store/manifest.ts +203 -0
  175. package/references/minimem/src/store/materialize.ts +185 -0
  176. package/references/minimem/src/store/store-graph.ts +252 -0
  177. package/references/minimem/tsconfig.json +19 -0
  178. package/references/minimem/tsup.config.ts +26 -0
  179. package/references/minimem/vitest.config.ts +29 -0
  180. package/references/openteams/src/cli/generate.ts +23 -1
  181. package/references/openteams/src/generators/agent-prompt-generator.test.ts +94 -0
  182. package/references/openteams/src/generators/agent-prompt-generator.ts +42 -13
  183. package/references/openteams/src/generators/package-generator.ts +9 -1
  184. package/references/openteams/src/generators/skill-generator.test.ts +28 -0
  185. package/references/openteams/src/generators/skill-generator.ts +10 -4
  186. package/references/skill-tree/.claude/settings.json +6 -0
  187. package/references/skill-tree/.sudocode/issues.jsonl +19 -0
  188. package/references/skill-tree/.sudocode/specs.jsonl +3 -0
  189. package/references/skill-tree/CLAUDE.md +132 -0
  190. package/references/skill-tree/README.md +396 -0
  191. package/references/skill-tree/docs/GAPS_v1.md +221 -0
  192. package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
  193. package/references/skill-tree/docs/TODOS.md +91 -0
  194. package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
  195. package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
  196. package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
  197. package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
  198. package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
  199. package/references/skill-tree/docs/scraper/README.md +170 -0
  200. package/references/skill-tree/examples/basic-usage.ts +157 -0
  201. package/references/skill-tree/package-lock.json +1852 -0
  202. package/references/skill-tree/package.json +66 -0
  203. package/references/skill-tree/plan.md +78 -0
  204. package/references/skill-tree/scraper/README.md +123 -0
  205. package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
  206. package/references/skill-tree/scraper/docs/PLAN.md +336 -0
  207. package/references/skill-tree/scraper/drizzle.config.ts +10 -0
  208. package/references/skill-tree/scraper/package-lock.json +6329 -0
  209. package/references/skill-tree/scraper/package.json +68 -0
  210. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
  211. package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
  212. package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
  213. package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
  214. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
  215. package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
  216. package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
  217. package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
  218. package/references/skill-tree/scraper/tsup.config.ts +14 -0
  219. package/references/skill-tree/scraper/vitest.config.ts +17 -0
  220. package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
  221. package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
  222. package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
  223. package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
  224. package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
  225. package/references/skill-tree/test/run-all.ts +106 -0
  226. package/references/skill-tree/test/utils.ts +128 -0
  227. package/references/skill-tree/vitest.config.ts +16 -0
  228. package/references/swarmkit/src/commands/init/phases/configure.ts +0 -22
  229. package/references/swarmkit/src/commands/init/phases/global-setup.ts +5 -3
  230. package/references/swarmkit/src/commands/init/wizard.ts +2 -2
  231. package/references/swarmkit/src/packages/setup.test.ts +53 -7
  232. package/references/swarmkit/src/packages/setup.ts +37 -1
  233. package/scripts/bootstrap.mjs +26 -1
  234. package/scripts/generate-agents.mjs +5 -1
  235. package/scripts/map-hook.mjs +97 -64
  236. package/scripts/map-sidecar.mjs +179 -25
  237. package/scripts/team-loader.mjs +12 -41
  238. package/skills/swarm/SKILL.md +89 -25
  239. package/src/__tests__/agent-generator.test.mjs +6 -13
  240. package/src/__tests__/bootstrap.test.mjs +124 -1
  241. package/src/__tests__/config.test.mjs +200 -27
  242. package/src/__tests__/e2e-live-map.test.mjs +536 -0
  243. package/src/__tests__/e2e-mesh-sidecar.test.mjs +570 -0
  244. package/src/__tests__/e2e-native-task-hooks.test.mjs +376 -0
  245. package/src/__tests__/e2e-sidecar-bridge.test.mjs +477 -0
  246. package/src/__tests__/helpers.mjs +13 -0
  247. package/src/__tests__/inbox.test.mjs +22 -89
  248. package/src/__tests__/index.test.mjs +35 -9
  249. package/src/__tests__/integration.test.mjs +513 -0
  250. package/src/__tests__/map-events.test.mjs +514 -150
  251. package/src/__tests__/mesh-connection.test.mjs +308 -0
  252. package/src/__tests__/opentasks-client.test.mjs +517 -0
  253. package/src/__tests__/paths.test.mjs +185 -41
  254. package/src/__tests__/sidecar-client.test.mjs +35 -0
  255. package/src/__tests__/sidecar-server.test.mjs +124 -0
  256. package/src/__tests__/skilltree-client.test.mjs +80 -0
  257. package/src/agent-generator.mjs +104 -33
  258. package/src/bootstrap.mjs +150 -10
  259. package/src/config.mjs +81 -17
  260. package/src/context-output.mjs +58 -8
  261. package/src/inbox.mjs +9 -54
  262. package/src/index.mjs +39 -8
  263. package/src/map-connection.mjs +4 -3
  264. package/src/map-events.mjs +350 -80
  265. package/src/mesh-connection.mjs +148 -0
  266. package/src/opentasks-client.mjs +269 -0
  267. package/src/paths.mjs +182 -27
  268. package/src/sessionlog.mjs +14 -9
  269. package/src/sidecar-client.mjs +81 -27
  270. package/src/sidecar-server.mjs +175 -16
  271. package/src/skilltree-client.mjs +173 -0
  272. package/src/template.mjs +68 -4
  273. package/vitest.config.mjs +1 -0
@@ -0,0 +1,420 @@
1
+ # Proof of Concept Plan
2
+
3
+ ## Goal
4
+ Build a minimal working prototype to validate the core concept: **AI agent-driven hierarchical skill indexing**
5
+
6
+ ## Scope (1-2 weeks)
7
+
8
+ ### What We'll Build
9
+ 1. Simple GitHub scraper that finds skills in a few known repos
10
+ 2. AI agent that categorizes skills into a tree structure
11
+ 3. Basic storage (JSON files to start, no DB yet)
12
+ 4. Simple CLI to browse the tree and search
13
+ 5. Proof that agent categorization works better than manual
14
+
15
+ ### What We'll Skip (for now)
16
+ - Full database setup
17
+ - Vector embeddings / semantic search
18
+ - Web UI
19
+ - Installation mechanism
20
+ - Continuous scraping
21
+ - Community features
22
+ - Versioning
23
+
24
+ ## Technical Choices for POC
25
+
26
+ ### Stack
27
+ - **Language**: Python 3.11
28
+ - **GitHub API**: PyGithub
29
+ - **AI**: Anthropic Claude API (Sonnet for quality)
30
+ - **Storage**: JSON files (`skills.json`, `taxonomy.json`)
31
+ - **CLI**: Typer (beautiful, simple)
32
+
33
+ ### Project Structure
34
+ ```
35
+ skillindex-poc/
36
+ β”œβ”€β”€ src/
37
+ β”‚ β”œβ”€β”€ scraper.py # GitHub scraping logic
38
+ β”‚ β”œβ”€β”€ agent.py # AI categorization agent
39
+ β”‚ β”œβ”€β”€ storage.py # JSON file operations
40
+ β”‚ β”œβ”€β”€ taxonomy.py # Tree structure management
41
+ β”‚ └── cli.py # CLI commands
42
+ β”œβ”€β”€ data/
43
+ β”‚ β”œβ”€β”€ skills.json # Raw skill data
44
+ β”‚ └── taxonomy.json # Tree structure
45
+ β”œβ”€β”€ tests/
46
+ β”‚ └── test_agent.py # Basic tests
47
+ β”œβ”€β”€ requirements.txt
48
+ β”œβ”€β”€ README.md
49
+ └── .env.example
50
+ ```
51
+
52
+ ## Implementation Steps
53
+
54
+ ### Step 1: Scraper (Day 1-2)
55
+ ```python
56
+ # scraper.py - Pseudocode
57
+
58
+ def scan_github_repo(repo_url):
59
+ """Scan a single GitHub repo for SKILL.md files"""
60
+ # Use PyGithub to:
61
+ # 1. Search for files named "SKILL.md"
62
+ # 2. Read each file
63
+ # 3. Parse YAML frontmatter
64
+ # 4. Extract metadata
65
+ # 5. Return list of skills
66
+ pass
67
+
68
+ def scrape_known_repos():
69
+ """Scrape a hardcoded list of repos"""
70
+ repos = [
71
+ "anthropics/skills",
72
+ "numman-ali/openskills",
73
+ # Add more...
74
+ ]
75
+ all_skills = []
76
+ for repo in repos:
77
+ skills = scan_github_repo(repo)
78
+ all_skills.extend(skills)
79
+ return all_skills
80
+ ```
81
+
82
+ **Output**: `data/skills.json`
83
+ ```json
84
+ [
85
+ {
86
+ "id": "anthropics-skills-pdf",
87
+ "name": "pdf",
88
+ "description": "Extract text, fill forms, merge PDFs...",
89
+ "repo_url": "https://github.com/anthropics/skills",
90
+ "file_path": "skills/pdf/SKILL.md",
91
+ "content": "...",
92
+ "metadata": {
93
+ "allowed_tools": ["Read", "Bash"],
94
+ "model": null
95
+ }
96
+ }
97
+ ]
98
+ ```
99
+
100
+ ### Step 2: AI Agent Categorization (Day 3-5)
101
+ ```python
102
+ # agent.py - Pseudocode
103
+
104
+ CATEGORIZATION_PROMPT = """
105
+ You are a skill taxonomy organizer. Your job is to place this skill
106
+ in a hierarchical taxonomy tree.
107
+
108
+ Skill:
109
+ Name: {name}
110
+ Description: {description}
111
+ Content: {content}
112
+
113
+ Current Taxonomy:
114
+ {taxonomy_json}
115
+
116
+ Tasks:
117
+ 1. Analyze the skill's purpose, domain, and use case
118
+ 2. Determine the best category path(s) in the taxonomy
119
+ 3. If no good category exists, suggest creating new ones
120
+ 4. Return JSON with:
121
+ - primary_path: ["Level1", "Level2", "Level3"]
122
+ - secondary_paths: [["Alt1", "Alt2"], ...]
123
+ - reasoning: "Why you chose this categorization"
124
+ - suggested_tags: ["tag1", "tag2"]
125
+ - relationships: [{"skill_id": "other-skill", "type": "depends_on"}]
126
+ """
127
+
128
+ def categorize_skill(skill, current_taxonomy):
129
+ """Use Claude to categorize a skill"""
130
+ response = anthropic.messages.create(
131
+ model="claude-sonnet-4-5-20251101",
132
+ max_tokens=2000,
133
+ messages=[{
134
+ "role": "user",
135
+ "content": CATEGORIZATION_PROMPT.format(
136
+ name=skill["name"],
137
+ description=skill["description"],
138
+ content=skill["content"][:2000], # truncate
139
+ taxonomy_json=json.dumps(current_taxonomy, indent=2)
140
+ )
141
+ }]
142
+ )
143
+ return parse_agent_response(response)
144
+
145
+ def build_taxonomy(skills):
146
+ """Build taxonomy by processing skills one at a time"""
147
+ taxonomy = {"Root": {}}
148
+ placements = []
149
+
150
+ for skill in skills:
151
+ result = categorize_skill(skill, taxonomy)
152
+ # Update taxonomy with new categories if suggested
153
+ update_taxonomy(taxonomy, result["primary_path"])
154
+ for path in result["secondary_paths"]:
155
+ update_taxonomy(taxonomy, path)
156
+
157
+ placements.append({
158
+ "skill_id": skill["id"],
159
+ "primary_path": result["primary_path"],
160
+ "secondary_paths": result["secondary_paths"],
161
+ "reasoning": result["reasoning"],
162
+ "tags": result["suggested_tags"],
163
+ "relationships": result["relationships"]
164
+ })
165
+
166
+ return taxonomy, placements
167
+ ```
168
+
169
+ **Output**: `data/taxonomy.json`
170
+ ```json
171
+ {
172
+ "tree": {
173
+ "Development": {
174
+ "Languages": {
175
+ "Python": {
176
+ "Testing": {},
177
+ "Web-Frameworks": {}
178
+ },
179
+ "JavaScript": {
180
+ "React": {}
181
+ }
182
+ },
183
+ "Infrastructure": {
184
+ "Docker": {}
185
+ }
186
+ },
187
+ "Creative": {
188
+ "Design": {}
189
+ }
190
+ },
191
+ "placements": [
192
+ {
193
+ "skill_id": "anthropics-skills-pdf",
194
+ "primary_path": ["Creative", "Design"],
195
+ "secondary_paths": [["Development", "Document-Processing"]],
196
+ "reasoning": "PDF skill is primarily for document creation/editing...",
197
+ "tags": ["pdf", "documents", "forms"],
198
+ "relationships": []
199
+ }
200
+ ]
201
+ }
202
+ ```
203
+
204
+ ### Step 3: CLI (Day 6-7)
205
+ ```python
206
+ # cli.py - Pseudocode
207
+
208
+ import typer
209
+ from rich import print
210
+ from rich.tree import Tree
211
+
212
+ app = typer.Typer()
213
+
214
+ @app.command()
215
+ def scrape():
216
+ """Scrape GitHub repos and save skills"""
217
+ print("πŸ” Scraping GitHub repositories...")
218
+ skills = scrape_known_repos()
219
+ save_skills(skills)
220
+ print(f"βœ… Found {len(skills)} skills")
221
+
222
+ @app.command()
223
+ def index():
224
+ """Run AI agent to categorize skills"""
225
+ print("πŸ€– Running AI categorization agent...")
226
+ skills = load_skills()
227
+ taxonomy, placements = build_taxonomy(skills)
228
+ save_taxonomy(taxonomy, placements)
229
+ print("βœ… Taxonomy built successfully")
230
+
231
+ @app.command()
232
+ def tree(path: str = "Root"):
233
+ """Display taxonomy tree"""
234
+ taxonomy = load_taxonomy()
235
+ display_tree(taxonomy, path)
236
+
237
+ @app.command()
238
+ def search(query: str):
239
+ """Search for skills (simple text match for POC)"""
240
+ skills = load_skills()
241
+ taxonomy = load_taxonomy()
242
+
243
+ results = []
244
+ for skill in skills:
245
+ if query.lower() in skill["name"].lower() or \
246
+ query.lower() in skill["description"].lower():
247
+ placement = find_placement(skill["id"], taxonomy)
248
+ results.append({
249
+ "skill": skill,
250
+ "path": placement["primary_path"]
251
+ })
252
+
253
+ for result in results:
254
+ print(f"πŸ“¦ {result['skill']['name']}")
255
+ print(f" Path: {' > '.join(result['path'])}")
256
+ print(f" {result['skill']['description']}")
257
+ print()
258
+
259
+ @app.command()
260
+ def show(skill_name: str):
261
+ """Show detailed info about a skill"""
262
+ skills = load_skills()
263
+ taxonomy = load_taxonomy()
264
+
265
+ skill = find_skill_by_name(skill_name, skills)
266
+ placement = find_placement(skill["id"], taxonomy)
267
+
268
+ print(f"πŸ“¦ {skill['name']}")
269
+ print(f"Primary Path: {' > '.join(placement['primary_path'])}")
270
+ if placement['secondary_paths']:
271
+ print(f"Also in: {placement['secondary_paths']}")
272
+ print(f"\nDescription:\n{skill['description']}")
273
+ print(f"\nReasoning:\n{placement['reasoning']}")
274
+ print(f"\nTags: {', '.join(placement['tags'])}")
275
+ print(f"\nSource: {skill['repo_url']}")
276
+
277
+ if __name__ == "__main__":
278
+ app()
279
+ ```
280
+
281
+ ### Step 4: Testing & Validation (Day 8-10)
282
+
283
+ **Manual Evaluation**:
284
+ 1. Run scraper on 3-5 known repos
285
+ 2. Categorize 20-50 skills with agent
286
+ 3. Manually review categorization quality
287
+ 4. Compare with flat list approaches
288
+ 5. Measure:
289
+ - Categorization accuracy (human eval)
290
+ - Taxonomy coherence (does it make sense?)
291
+ - Discoverability (can you find skills easily?)
292
+
293
+ **Test Cases**:
294
+ ```python
295
+ # tests/test_agent.py
296
+
297
+ def test_agent_categorizes_pdf_skill():
298
+ """Agent should categorize PDF skill correctly"""
299
+ skill = load_test_skill("pdf")
300
+ taxonomy = load_empty_taxonomy()
301
+
302
+ result = categorize_skill(skill, taxonomy)
303
+
304
+ # Verify it's in a sensible category
305
+ assert "Creative" in result["primary_path"] or \
306
+ "Documents" in result["primary_path"]
307
+ assert result["reasoning"] # Has reasoning
308
+ assert len(result["suggested_tags"]) > 0
309
+
310
+ def test_agent_suggests_new_categories():
311
+ """Agent should create categories as needed"""
312
+ # Give it a skill in a novel domain
313
+ skill = load_test_skill("quantum-computing-helper")
314
+ taxonomy = load_basic_taxonomy()
315
+
316
+ result = categorize_skill(skill, taxonomy)
317
+
318
+ # Should suggest creating "Quantum Computing" category
319
+ assert "Quantum" in str(result["primary_path"])
320
+ ```
321
+
322
+ ## Success Criteria
323
+
324
+ The POC is successful if:
325
+
326
+ 1. βœ… **Scraper works**: Can extract 20+ skills from GitHub
327
+ 2. βœ… **Agent categorizes coherently**: 80%+ of categorizations make sense to humans
328
+ 3. βœ… **Taxonomy is useful**: Browsing tree is more intuitive than flat list
329
+ 4. βœ… **Agent adapts**: Creates new categories when needed
330
+ 5. βœ… **CLI is usable**: Can scrape, index, browse, search in <5 commands
331
+ 6. βœ… **Performance is acceptable**: Categorizing 50 skills takes <5 minutes
332
+
333
+ ## Demo Script
334
+
335
+ ```bash
336
+ # 1. Setup
337
+ pip install -r requirements.txt
338
+ cp .env.example .env
339
+ # Add ANTHROPIC_API_KEY to .env
340
+
341
+ # 2. Scrape GitHub
342
+ python -m skillindex scrape
343
+ # Output: βœ… Found 47 skills
344
+
345
+ # 3. Run agent indexing
346
+ python -m skillindex index
347
+ # Output: πŸ€– Categorizing skill 1/47: pdf
348
+ # πŸ€– Categorizing skill 2/47: docx
349
+ # ...
350
+ # βœ… Taxonomy built successfully
351
+
352
+ # 4. Browse the tree
353
+ python -m skillindex tree
354
+ # Output: Interactive tree visualization
355
+
356
+ # 5. Search
357
+ python -m skillindex search "PDF"
358
+ # Output: πŸ“¦ pdf
359
+ # Path: Creative > Design > Documents
360
+ # Extract text, fill forms, merge PDFs...
361
+
362
+ # 6. Detailed view
363
+ python -m skillindex show pdf
364
+ # Output: Full skill details with categorization reasoning
365
+ ```
366
+
367
+ ## Evaluation Questions
368
+
369
+ After building POC, answer:
370
+
371
+ 1. **Quality**: How accurate are the agent's categorizations?
372
+ 2. **Consistency**: Does agent categorize similar skills similarly?
373
+ 3. **Adaptability**: Does it create sensible new categories?
374
+ 4. **Discoverability**: Is browsing tree better than flat list?
375
+ 5. **Cost**: How much does it cost to categorize 50 skills?
376
+ 6. **Speed**: Is it fast enough for 1000+ skills?
377
+ 7. **Value**: Would users actually want this vs existing solutions?
378
+
379
+ ## Next Steps After POC
380
+
381
+ If POC succeeds:
382
+ 1. **Add database**: Migrate from JSON to PostgreSQL
383
+ 2. **Add embeddings**: Semantic search with vector store
384
+ 3. **Continuous scraping**: Background jobs for updates
385
+ 4. **Installation**: Actually install skills to ~/.claude/skills
386
+ 5. **Web UI**: Build visual browser
387
+ 6. **Scale up**: Test with 500+ skills
388
+ 7. **Community**: Open source, gather feedback
389
+
390
+ If POC fails or is mediocre:
391
+ 1. **Analyze failures**: Where did agent categorize poorly?
392
+ 2. **Improve prompts**: Refine categorization instructions
393
+ 3. **Try different approach**: Maybe hierarchical isn't the answer?
394
+ 4. **Pivot**: Focus on semantic search instead of tree?
395
+ 5. **Kill it**: If not working, cut losses and learn
396
+
397
+ ## Resources Needed
398
+
399
+ - **API Costs**: ~$2-5 for 50 skills (Sonnet, ~1000 tokens/skill)
400
+ - **Time**: 1-2 weeks part-time
401
+ - **GitHub API**: Free tier (5000 req/hour) is plenty
402
+ - **Compute**: Runs on laptop, no special infrastructure
403
+
404
+ ## Risk Mitigation
405
+
406
+ **Risk**: Agent categorizes inconsistently
407
+ - **Mitigation**: Use structured output, few-shot examples in prompt
408
+
409
+ **Risk**: Too expensive at scale
410
+ - **Mitigation**: Cache results, only re-categorize on changes, use cheaper model
411
+
412
+ **Risk**: Taxonomy becomes unwieldy
413
+ - **Mitigation**: Limit depth to 4 levels, agent suggests merging similar categories
414
+
415
+ **Risk**: Skills don't fit hierarchy
416
+ - **Mitigation**: Allow multi-path placements, use tags for cross-cutting
417
+
418
+ ---
419
+
420
+ Ready to build? Let's start with setting up the project structure! πŸš€
@@ -0,0 +1,170 @@
1
+ # GitHub Skills Indexer
2
+
3
+ > An AI-powered system for continuously indexing, organizing, and distributing Agent Skills from GitHub
4
+
5
+ ## πŸ“š Documentation
6
+
7
+ - **[BRAINSTORM.md](BRAINSTORM.md)** - Comprehensive architecture design, research findings, and technical specifications
8
+ - **[POC_PLAN.md](POC_PLAN.md)** - Proof of concept implementation plan (1-2 weeks)
9
+
10
+ ## 🎯 Project Vision
11
+
12
+ Build a system that:
13
+ 1. **Scrapes** GitHub continuously for Agent Skills (Anthropic format)
14
+ 2. **Indexes** skills using AI agents for intelligent hierarchical organization
15
+ 3. **Organizes** skills in a tree structure (not flat lists) for better discovery
16
+ 4. **Distributes** skills with easy installation and loading
17
+
18
+ ## ✨ Key Innovations
19
+
20
+ ### πŸ€– AI-Managed Taxonomy
21
+ Unlike existing solutions (OpenSkills, SkillsMP) that use flat lists or static categories, we use Claude to:
22
+ - Semantically understand skill purposes
23
+ - Dynamically organize skills into an evolving tree structure
24
+ - Identify relationships (dependencies, alternatives, extensions)
25
+ - Adapt to new skill domains automatically
26
+
27
+ ### 🌳 Hierarchical Organization
28
+ ```
29
+ Development/
30
+ β”œβ”€β”€ Languages/
31
+ β”‚ β”œβ”€β”€ Python/
32
+ β”‚ β”‚ β”œβ”€β”€ Testing/
33
+ β”‚ β”‚ β”‚ └── pytest-helper
34
+ β”‚ β”‚ └── Web-Frameworks/
35
+ β”‚ β”‚ └── fastapi-crud-generator
36
+ β”‚ └── JavaScript/
37
+ β”‚ └── React/
38
+ β”‚ └── component-builder
39
+ └── Infrastructure/
40
+ └── Docker/
41
+ └── compose-manager
42
+ ```
43
+
44
+ ### πŸ”— Multi-Dimensional Placement
45
+ Skills can exist in multiple taxonomy paths:
46
+ - `react-testing-helper` β†’ Development/Frontend/React/Testing
47
+ - `react-testing-helper` β†’ Development/Testing/Unit-Testing
48
+ - `react-testing-helper` β†’ Languages/JavaScript/Testing-Tools
49
+
50
+ ## πŸ—οΈ Architecture Overview
51
+
52
+ ```
53
+ GitHub Repos β†’ Scraper β†’ AI Agent Indexer β†’ Database β†’ API/CLI/Web UI
54
+ ↓
55
+ Taxonomy Manager
56
+ (rebalancing)
57
+ ```
58
+
59
+ **Components:**
60
+ 1. **GitHub Scraper** - Discovers SKILL.md files across repos
61
+ 2. **AI Agent Indexer** - Categorizes skills using Claude
62
+ 3. **Data Layer** - PostgreSQL + pgvector for storage & search
63
+ 4. **API Service** - FastAPI with semantic search, taxonomy navigation
64
+ 5. **CLI Tool** - Browse tree, search, install skills
65
+ 6. **Web UI** - Visual browser with tree navigation (optional)
66
+
67
+ ## πŸ“Š Comparison with Existing Solutions
68
+
69
+ | Feature | OpenSkills | rscheiwe/open-skills | **Our Solution** |
70
+ |---------|-----------|---------------------|------------------|
71
+ | Organization | Flat directories | Flat with tags | **🌳 AI-managed tree** |
72
+ | Discovery | Manual/keyword | Vector search | **Tree + semantic + vector** |
73
+ | Installation | Git clone | API/library | **Smart dependency resolution** |
74
+ | Versioning | ❌ | βœ… | βœ… |
75
+ | Continuous Updates | ❌ | ❌ | **βœ… Background scraping** |
76
+ | Relationships | ❌ | ❌ | **βœ… Dependency graph** |
77
+ | Context-Aware | ❌ | ❌ | **βœ… Project-based suggestions** |
78
+
79
+ ## πŸš€ Getting Started (POC)
80
+
81
+ See [POC_PLAN.md](POC_PLAN.md) for implementation details.
82
+
83
+ Quick start:
84
+ ```bash
85
+ # 1. Setup
86
+ git clone <this-repo>
87
+ cd skillindex-poc
88
+ pip install -r requirements.txt
89
+ cp .env.example .env
90
+ # Add ANTHROPIC_API_KEY
91
+
92
+ # 2. Scrape & Index
93
+ python -m skillindex scrape # Find skills on GitHub
94
+ python -m skillindex index # AI categorization
95
+
96
+ # 3. Explore
97
+ python -m skillindex tree # Browse hierarchy
98
+ python -m skillindex search "testing tools" # Semantic search
99
+ python -m skillindex show pytest-helper # Skill details
100
+ ```
101
+
102
+ ## πŸ“– Research Sources
103
+
104
+ ### Official Resources
105
+ - [Anthropic Skills Repository](https://github.com/anthropics/skills)
106
+ - [Agent Skills Specification](https://agentskills.io/home)
107
+ - [Claude Code Skills Docs](https://code.claude.com/docs/en/skills)
108
+
109
+ ### Existing Implementations
110
+ - [OpenSkills](https://github.com/numman-ali/openskills) - Universal CLI loader
111
+ - [rscheiwe/open-skills](https://github.com/rscheiwe/open-skills) - Modular framework
112
+ - [Awesome Claude Skills](https://github.com/travisvn/awesome-claude-skills) - Curated list
113
+
114
+ ### Articles & Analysis
115
+ - [Anthropic Engineering Blog](https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skills)
116
+ - [Simon Willison on Skills](https://simonwillison.net/2025/Oct/16/claude-skills/)
117
+ - [Claude Skills Deep Dive](https://leehanchung.github.io/blogs/2025/10/26/claude-skills-deep-dive/)
118
+
119
+ ## πŸ—ΊοΈ Roadmap
120
+
121
+ ### Phase 1: POC (Weeks 1-2) βœ… Planning
122
+ - [x] Research existing implementations
123
+ - [x] Design architecture
124
+ - [ ] Build basic scraper
125
+ - [ ] Implement AI categorization
126
+ - [ ] Create simple CLI
127
+ - [ ] Validate with 20-50 skills
128
+
129
+ ### Phase 2: MVP (Weeks 3-6)
130
+ - [ ] PostgreSQL + pgvector setup
131
+ - [ ] Vector embeddings for semantic search
132
+ - [ ] Background task queue
133
+ - [ ] REST API
134
+ - [ ] Enhanced CLI with install
135
+ - [ ] Basic quality scoring
136
+
137
+ ### Phase 3: Advanced Features (Weeks 7-12)
138
+ - [ ] Web UI with tree visualization
139
+ - [ ] Dependency resolution
140
+ - [ ] Context-aware recommendations
141
+ - [ ] Community features (ratings)
142
+ - [ ] Analytics dashboard
143
+
144
+ ### Phase 4: Scale & Launch (Weeks 13-16)
145
+ - [ ] Performance optimization
146
+ - [ ] Comprehensive testing
147
+ - [ ] Documentation
148
+ - [ ] Public launch
149
+ - [ ] Community building
150
+
151
+ ## πŸŽ“ Learning Outcomes
152
+
153
+ This project explores:
154
+ - **AI-assisted data organization** - Can agents maintain coherent taxonomies?
155
+ - **Semantic understanding at scale** - Categorizing 1000+ diverse skills
156
+ - **Progressive disclosure** - Loading skills on-demand
157
+ - **Developer tools** - Building CLI/API for developer experience
158
+ - **Open source ecosystems** - Indexing decentralized repositories
159
+
160
+ ## 🀝 Contributing
161
+
162
+ (Coming soon after POC validation)
163
+
164
+ ## πŸ“„ License
165
+
166
+ MIT (tentative - to be decided)
167
+
168
+ ---
169
+
170
+ **Status**: πŸ“ Design Phase - [See BRAINSTORM.md for full details](BRAINSTORM.md)