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.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +22 -1
- package/.claude-plugin/run-agent-inbox-mcp.sh +76 -0
- package/.claude-plugin/run-minimem-mcp.sh +98 -0
- package/.claude-plugin/run-opentasks-mcp.sh +65 -0
- package/CLAUDE.md +200 -36
- package/README.md +65 -0
- package/e2e/helpers/cleanup.mjs +17 -3
- package/e2e/helpers/map-mock-server.mjs +201 -25
- package/e2e/helpers/sidecar.mjs +222 -0
- package/e2e/helpers/workspace.mjs +2 -1
- package/e2e/tier5-sidecar-inbox.test.mjs +900 -0
- package/e2e/tier6-inbox-mcp.test.mjs +173 -0
- package/e2e/tier6-live-agent.test.mjs +759 -0
- package/e2e/vitest.config.e2e.mjs +1 -1
- package/hooks/hooks.json +15 -8
- package/package.json +13 -1
- package/references/agent-inbox/CLAUDE.md +151 -0
- package/references/agent-inbox/README.md +238 -0
- package/references/agent-inbox/docs/CLAUDE-CODE-SWARM-PROPOSAL.md +137 -0
- package/references/agent-inbox/docs/DESIGN.md +1156 -0
- package/references/agent-inbox/hooks/inbox-hook.mjs +119 -0
- package/references/agent-inbox/hooks/register-hook.mjs +69 -0
- package/references/agent-inbox/package-lock.json +3347 -0
- package/references/agent-inbox/package.json +58 -0
- package/references/agent-inbox/rules/agent-inbox.md +78 -0
- package/references/agent-inbox/src/federation/address.ts +61 -0
- package/references/agent-inbox/src/federation/connection-manager.ts +573 -0
- package/references/agent-inbox/src/federation/delivery-queue.ts +222 -0
- package/references/agent-inbox/src/federation/index.ts +6 -0
- package/references/agent-inbox/src/federation/routing-engine.ts +188 -0
- package/references/agent-inbox/src/federation/trust.ts +71 -0
- package/references/agent-inbox/src/index.ts +390 -0
- package/references/agent-inbox/src/ipc/ipc-server.ts +207 -0
- package/references/agent-inbox/src/jsonrpc/mail-server.ts +382 -0
- package/references/agent-inbox/src/map/map-client.ts +414 -0
- package/references/agent-inbox/src/mcp/mcp-server.ts +272 -0
- package/references/agent-inbox/src/mesh/delivery-bridge.ts +110 -0
- package/references/agent-inbox/src/mesh/mesh-connector.ts +41 -0
- package/references/agent-inbox/src/mesh/mesh-transport.ts +157 -0
- package/references/agent-inbox/src/mesh/type-mapper.ts +239 -0
- package/references/agent-inbox/src/push/notifier.ts +233 -0
- package/references/agent-inbox/src/registry/warm-registry.ts +255 -0
- package/references/agent-inbox/src/router/message-router.ts +175 -0
- package/references/agent-inbox/src/storage/interface.ts +48 -0
- package/references/agent-inbox/src/storage/memory.ts +145 -0
- package/references/agent-inbox/src/storage/sqlite.ts +671 -0
- package/references/agent-inbox/src/traceability/traceability.ts +183 -0
- package/references/agent-inbox/src/types.ts +303 -0
- package/references/agent-inbox/test/federation/address.test.ts +101 -0
- package/references/agent-inbox/test/federation/connection-manager.test.ts +546 -0
- package/references/agent-inbox/test/federation/delivery-queue.test.ts +159 -0
- package/references/agent-inbox/test/federation/integration.test.ts +857 -0
- package/references/agent-inbox/test/federation/routing-engine.test.ts +117 -0
- package/references/agent-inbox/test/federation/sdk-integration.test.ts +744 -0
- package/references/agent-inbox/test/federation/trust.test.ts +89 -0
- package/references/agent-inbox/test/ipc-jsonrpc.test.ts +113 -0
- package/references/agent-inbox/test/ipc-server.test.ts +197 -0
- package/references/agent-inbox/test/mail-server.test.ts +285 -0
- package/references/agent-inbox/test/map-client.test.ts +408 -0
- package/references/agent-inbox/test/mesh/delivery-bridge.test.ts +178 -0
- package/references/agent-inbox/test/mesh/e2e-mesh.test.ts +527 -0
- package/references/agent-inbox/test/mesh/e2e-real-meshpeer.test.ts +629 -0
- package/references/agent-inbox/test/mesh/federation-mesh.test.ts +269 -0
- package/references/agent-inbox/test/mesh/mesh-connector.test.ts +66 -0
- package/references/agent-inbox/test/mesh/mesh-transport.test.ts +191 -0
- package/references/agent-inbox/test/mesh/meshpeer-integration.test.ts +442 -0
- package/references/agent-inbox/test/mesh/mock-mesh.ts +125 -0
- package/references/agent-inbox/test/mesh/mock-meshpeer.ts +266 -0
- package/references/agent-inbox/test/mesh/type-mapper.test.ts +226 -0
- package/references/agent-inbox/test/message-router.test.ts +184 -0
- package/references/agent-inbox/test/push-notifier.test.ts +139 -0
- package/references/agent-inbox/test/registry/warm-registry.test.ts +171 -0
- package/references/agent-inbox/test/sqlite-prefix.test.ts +192 -0
- package/references/agent-inbox/test/sqlite-storage.test.ts +243 -0
- package/references/agent-inbox/test/storage.test.ts +196 -0
- package/references/agent-inbox/test/traceability.test.ts +123 -0
- package/references/agent-inbox/test/wake.test.ts +330 -0
- package/references/agent-inbox/tsconfig.json +20 -0
- package/references/agent-inbox/tsup.config.ts +10 -0
- package/references/agent-inbox/vitest.config.ts +8 -0
- package/references/minimem/.claude/settings.json +7 -0
- package/references/minimem/.sudocode/issues.jsonl +18 -0
- package/references/minimem/.sudocode/specs.jsonl +1 -0
- package/references/minimem/CLAUDE.md +329 -0
- package/references/minimem/README.md +565 -0
- package/references/minimem/claude-plugin/.claude-plugin/plugin.json +10 -0
- package/references/minimem/claude-plugin/.mcp.json +7 -0
- package/references/minimem/claude-plugin/README.md +158 -0
- package/references/minimem/claude-plugin/commands/recall.md +47 -0
- package/references/minimem/claude-plugin/commands/remember.md +41 -0
- package/references/minimem/claude-plugin/hooks/__tests__/hooks.test.ts +272 -0
- package/references/minimem/claude-plugin/hooks/hooks.json +27 -0
- package/references/minimem/claude-plugin/hooks/session-end.sh +86 -0
- package/references/minimem/claude-plugin/hooks/session-start.sh +85 -0
- package/references/minimem/claude-plugin/skills/memory/SKILL.md +108 -0
- package/references/minimem/media/banner.png +0 -0
- package/references/minimem/package-lock.json +5373 -0
- package/references/minimem/package.json +76 -0
- package/references/minimem/scripts/postbuild.js +49 -0
- package/references/minimem/src/__tests__/edge-cases.test.ts +371 -0
- package/references/minimem/src/__tests__/errors.test.ts +265 -0
- package/references/minimem/src/__tests__/helpers.ts +199 -0
- package/references/minimem/src/__tests__/internal.test.ts +407 -0
- package/references/minimem/src/__tests__/knowledge-frontmatter.test.ts +148 -0
- package/references/minimem/src/__tests__/knowledge.test.ts +148 -0
- package/references/minimem/src/__tests__/minimem.integration.test.ts +1127 -0
- package/references/minimem/src/__tests__/session.test.ts +190 -0
- package/references/minimem/src/cli/__tests__/commands.test.ts +760 -0
- package/references/minimem/src/cli/__tests__/contained-layout.test.ts +286 -0
- package/references/minimem/src/cli/commands/__tests__/conflicts.test.ts +141 -0
- package/references/minimem/src/cli/commands/append.ts +76 -0
- package/references/minimem/src/cli/commands/config.ts +262 -0
- package/references/minimem/src/cli/commands/conflicts.ts +415 -0
- package/references/minimem/src/cli/commands/daemon.ts +169 -0
- package/references/minimem/src/cli/commands/index.ts +12 -0
- package/references/minimem/src/cli/commands/init.ts +166 -0
- package/references/minimem/src/cli/commands/mcp.ts +221 -0
- package/references/minimem/src/cli/commands/push-pull.ts +213 -0
- package/references/minimem/src/cli/commands/search.ts +223 -0
- package/references/minimem/src/cli/commands/status.ts +84 -0
- package/references/minimem/src/cli/commands/store.ts +189 -0
- package/references/minimem/src/cli/commands/sync-init.ts +290 -0
- package/references/minimem/src/cli/commands/sync.ts +70 -0
- package/references/minimem/src/cli/commands/upsert.ts +197 -0
- package/references/minimem/src/cli/config.ts +611 -0
- package/references/minimem/src/cli/index.ts +299 -0
- package/references/minimem/src/cli/shared.ts +189 -0
- package/references/minimem/src/cli/sync/__tests__/central.test.ts +152 -0
- package/references/minimem/src/cli/sync/__tests__/conflicts.test.ts +209 -0
- package/references/minimem/src/cli/sync/__tests__/daemon.test.ts +118 -0
- package/references/minimem/src/cli/sync/__tests__/detection.test.ts +207 -0
- package/references/minimem/src/cli/sync/__tests__/integration.test.ts +476 -0
- package/references/minimem/src/cli/sync/__tests__/registry.test.ts +363 -0
- package/references/minimem/src/cli/sync/__tests__/state.test.ts +255 -0
- package/references/minimem/src/cli/sync/__tests__/validation.test.ts +193 -0
- package/references/minimem/src/cli/sync/__tests__/watcher.test.ts +178 -0
- package/references/minimem/src/cli/sync/central.ts +292 -0
- package/references/minimem/src/cli/sync/conflicts.ts +205 -0
- package/references/minimem/src/cli/sync/daemon.ts +407 -0
- package/references/minimem/src/cli/sync/detection.ts +138 -0
- package/references/minimem/src/cli/sync/index.ts +107 -0
- package/references/minimem/src/cli/sync/operations.ts +373 -0
- package/references/minimem/src/cli/sync/registry.ts +279 -0
- package/references/minimem/src/cli/sync/state.ts +358 -0
- package/references/minimem/src/cli/sync/validation.ts +206 -0
- package/references/minimem/src/cli/sync/watcher.ts +237 -0
- package/references/minimem/src/cli/version.ts +34 -0
- package/references/minimem/src/core/index.ts +9 -0
- package/references/minimem/src/core/indexer.ts +628 -0
- package/references/minimem/src/core/searcher.ts +221 -0
- package/references/minimem/src/db/schema.ts +183 -0
- package/references/minimem/src/db/sqlite-vec.ts +24 -0
- package/references/minimem/src/embeddings/__tests__/embeddings.test.ts +431 -0
- package/references/minimem/src/embeddings/batch-gemini.ts +392 -0
- package/references/minimem/src/embeddings/batch-openai.ts +409 -0
- package/references/minimem/src/embeddings/embeddings.ts +434 -0
- package/references/minimem/src/index.ts +132 -0
- package/references/minimem/src/internal.ts +299 -0
- package/references/minimem/src/minimem.ts +1291 -0
- package/references/minimem/src/search/__tests__/hybrid.test.ts +247 -0
- package/references/minimem/src/search/graph.ts +234 -0
- package/references/minimem/src/search/hybrid.ts +151 -0
- package/references/minimem/src/search/search.ts +256 -0
- package/references/minimem/src/server/__tests__/mcp.test.ts +347 -0
- package/references/minimem/src/server/__tests__/tools.test.ts +364 -0
- package/references/minimem/src/server/mcp.ts +326 -0
- package/references/minimem/src/server/tools.ts +720 -0
- package/references/minimem/src/session.ts +460 -0
- package/references/minimem/src/store/__tests__/manifest.test.ts +177 -0
- package/references/minimem/src/store/__tests__/materialize.test.ts +52 -0
- package/references/minimem/src/store/__tests__/store-graph.test.ts +228 -0
- package/references/minimem/src/store/index.ts +27 -0
- package/references/minimem/src/store/manifest.ts +203 -0
- package/references/minimem/src/store/materialize.ts +185 -0
- package/references/minimem/src/store/store-graph.ts +252 -0
- package/references/minimem/tsconfig.json +19 -0
- package/references/minimem/tsup.config.ts +26 -0
- package/references/minimem/vitest.config.ts +29 -0
- package/references/openteams/src/cli/generate.ts +23 -1
- package/references/openteams/src/generators/agent-prompt-generator.test.ts +94 -0
- package/references/openteams/src/generators/agent-prompt-generator.ts +42 -13
- package/references/openteams/src/generators/package-generator.ts +9 -1
- package/references/openteams/src/generators/skill-generator.test.ts +28 -0
- package/references/openteams/src/generators/skill-generator.ts +10 -4
- package/references/skill-tree/.claude/settings.json +6 -0
- package/references/skill-tree/.sudocode/issues.jsonl +19 -0
- package/references/skill-tree/.sudocode/specs.jsonl +3 -0
- package/references/skill-tree/CLAUDE.md +132 -0
- package/references/skill-tree/README.md +396 -0
- package/references/skill-tree/docs/GAPS_v1.md +221 -0
- package/references/skill-tree/docs/INTEGRATION_PLAN.md +467 -0
- package/references/skill-tree/docs/TODOS.md +91 -0
- package/references/skill-tree/docs/anthropic_skill_guide.md +1364 -0
- package/references/skill-tree/docs/design/federated-skill-trees.md +524 -0
- package/references/skill-tree/docs/design/multi-agent-sync.md +759 -0
- package/references/skill-tree/docs/scraper/BRAINSTORM.md +583 -0
- package/references/skill-tree/docs/scraper/POC_PLAN.md +420 -0
- package/references/skill-tree/docs/scraper/README.md +170 -0
- package/references/skill-tree/examples/basic-usage.ts +157 -0
- package/references/skill-tree/package-lock.json +1852 -0
- package/references/skill-tree/package.json +66 -0
- package/references/skill-tree/plan.md +78 -0
- package/references/skill-tree/scraper/README.md +123 -0
- package/references/skill-tree/scraper/docs/DESIGN.md +683 -0
- package/references/skill-tree/scraper/docs/PLAN.md +336 -0
- package/references/skill-tree/scraper/drizzle.config.ts +10 -0
- package/references/skill-tree/scraper/package-lock.json +6329 -0
- package/references/skill-tree/scraper/package.json +68 -0
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-description.md +7 -0
- package/references/skill-tree/scraper/test/fixtures/invalid-skill/missing-name.md +7 -0
- package/references/skill-tree/scraper/test/fixtures/minimal-skill/SKILL.md +27 -0
- package/references/skill-tree/scraper/test/fixtures/skill-json/SKILL.json +21 -0
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/SKILL.md +54 -0
- package/references/skill-tree/scraper/test/fixtures/skill-with-meta/_meta.json +24 -0
- package/references/skill-tree/scraper/test/fixtures/valid-skill/SKILL.md +93 -0
- package/references/skill-tree/scraper/test/fixtures/valid-skill/_meta.json +22 -0
- package/references/skill-tree/scraper/tsup.config.ts +14 -0
- package/references/skill-tree/scraper/vitest.config.ts +17 -0
- package/references/skill-tree/scripts/convert-to-vitest.ts +166 -0
- package/references/skill-tree/skills/skill-writer/SKILL.md +339 -0
- package/references/skill-tree/skills/skill-writer/references/examples.md +326 -0
- package/references/skill-tree/skills/skill-writer/references/patterns.md +210 -0
- package/references/skill-tree/skills/skill-writer/references/quality-checklist.md +123 -0
- package/references/skill-tree/test/run-all.ts +106 -0
- package/references/skill-tree/test/utils.ts +128 -0
- package/references/skill-tree/vitest.config.ts +16 -0
- package/references/swarmkit/src/commands/init/phases/configure.ts +0 -22
- package/references/swarmkit/src/commands/init/phases/global-setup.ts +5 -3
- package/references/swarmkit/src/commands/init/wizard.ts +2 -2
- package/references/swarmkit/src/packages/setup.test.ts +53 -7
- package/references/swarmkit/src/packages/setup.ts +37 -1
- package/scripts/bootstrap.mjs +26 -1
- package/scripts/generate-agents.mjs +5 -1
- package/scripts/map-hook.mjs +97 -64
- package/scripts/map-sidecar.mjs +179 -25
- package/scripts/team-loader.mjs +12 -41
- package/skills/swarm/SKILL.md +89 -25
- package/src/__tests__/agent-generator.test.mjs +6 -13
- package/src/__tests__/bootstrap.test.mjs +124 -1
- package/src/__tests__/config.test.mjs +200 -27
- package/src/__tests__/e2e-live-map.test.mjs +536 -0
- package/src/__tests__/e2e-mesh-sidecar.test.mjs +570 -0
- package/src/__tests__/e2e-native-task-hooks.test.mjs +376 -0
- package/src/__tests__/e2e-sidecar-bridge.test.mjs +477 -0
- package/src/__tests__/helpers.mjs +13 -0
- package/src/__tests__/inbox.test.mjs +22 -89
- package/src/__tests__/index.test.mjs +35 -9
- package/src/__tests__/integration.test.mjs +513 -0
- package/src/__tests__/map-events.test.mjs +514 -150
- package/src/__tests__/mesh-connection.test.mjs +308 -0
- package/src/__tests__/opentasks-client.test.mjs +517 -0
- package/src/__tests__/paths.test.mjs +185 -41
- package/src/__tests__/sidecar-client.test.mjs +35 -0
- package/src/__tests__/sidecar-server.test.mjs +124 -0
- package/src/__tests__/skilltree-client.test.mjs +80 -0
- package/src/agent-generator.mjs +104 -33
- package/src/bootstrap.mjs +150 -10
- package/src/config.mjs +81 -17
- package/src/context-output.mjs +58 -8
- package/src/inbox.mjs +9 -54
- package/src/index.mjs +39 -8
- package/src/map-connection.mjs +4 -3
- package/src/map-events.mjs +350 -80
- package/src/mesh-connection.mjs +148 -0
- package/src/opentasks-client.mjs +269 -0
- package/src/paths.mjs +182 -27
- package/src/sessionlog.mjs +14 -9
- package/src/sidecar-client.mjs +81 -27
- package/src/sidecar-server.mjs +175 -16
- package/src/skilltree-client.mjs +173 -0
- package/src/template.mjs +68 -4
- 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)
|