Library Detection Skill Automatically detect the technology stack of a project by analyzing package manifests and configuration files. Returns structured data for use in onboarding, documentation discovery, and tool configuration. Variables | Variable | Default | Description | |----------|---------|-------------| | SCAN DEPTH | 3 | Max directory depth to search for manifests | | INCLUDE DEV DEPS | true | Include development dependencies in analysis | | DETECT FRAMEWORKS | true | Identify frameworks from dependencies | | DETECT TEST TOOLS | true | Identify test frameworks and runners | | OUTPU…

| sed 's/[\u003c>=!].*//' | sed 's/\\[.*//'\n```\n\n### Note\n\nrequirements.txt lacks structure. Cross-reference with pyproject.toml if both exist.\n\n## Go (go.mod)\n\n### Read the file\n\n```bash\ncat go.mod\n```\n\n### Extract dependencies\n\n```bash\n# Direct dependencies (require block)\ngrep -A 100 '^require' go.mod | grep -E '^\\t' | awk '{print $1}'\n```\n\n### Framework detection patterns\n\n| Module Path | Framework | Category |\n|-------------|-----------|----------|\n| `github.com/gin-gonic/gin` | Gin | backend |\n| `github.com/labstack/echo` | Echo | backend |\n| `github.com/gofiber/fiber` | Fiber | backend |\n| `github.com/go-chi/chi` | Chi | backend |\n| `github.com/gorilla/mux` | Gorilla Mux | backend |\n\n### Test framework detection\n\n| Module | Test Framework |\n|--------|----------------|\n| `github.com/stretchr/testify` | Testify |\n| `github.com/onsi/ginkgo` | Ginkgo |\n| `github.com/onsi/gomega` | Gomega |\n\n## Rust (Cargo.toml)\n\n### Read the file\n\n```bash\ncat Cargo.toml\n```\n\n### Extract dependencies\n\n```bash\n# Using Python to parse TOML\npython3 -c \"import tomllib; import json; d=tomllib.load(open('Cargo.toml', 'rb')); print(json.dumps(list(d.get('dependencies', {}).keys())))\"\n```\n\n### Framework detection patterns\n\n| Crate | Framework | Category |\n|-------|-----------|----------|\n| `actix-web` | Actix Web | backend |\n| `axum` | Axum | backend |\n| `rocket` | Rocket | backend |\n| `warp` | Warp | backend |\n| `yew` | Yew | frontend |\n| `leptos` | Leptos | fullstack |\n| `dioxus` | Dioxus | frontend |\n\n## Dart/Flutter (pubspec.yaml)\n\n### Read the file\n\n```bash\ncat pubspec.yaml\n```\n\n### Extract dependencies\n\nLook in these sections:\n- `dependencies`\n- `dev_dependencies`\n\n### Framework detection patterns\n\n| Dependency | Framework | Category |\n|------------|-----------|----------|\n| `flutter` | Flutter | mobile |\n\n### Test framework detection\n\n| Dependency | Test Framework |\n|------------|----------------|\n| `flutter_test` | Flutter Test |\n| `test` | Dart Test |\n| `integration_test` | Flutter Integration Test |\n\n### Build tool detection\n\n| File/Dependency | Build Tool |\n|-----------------|------------|\n| `flutter` in deps | Flutter |\n| `build_runner` | Build Runner |\n\n## C/C++ (CMakeLists.txt / meson.build / WORKSPACE)\n\n### Read the file\n\n```bash\nls -la CMakeLists.txt meson.build WORKSPACE 2>/dev/null\n```\n\n### Extract dependencies\n\nLook for:\n- `find_package(...)` in CMake\n- `dependency(...)` in Meson\n- `http_archive` / `git_repository` in Bazel WORKSPACE\n\n### Framework detection patterns\n\n| Pattern | Framework | Category |\n|---------|-----------|----------|\n| `find_package(Boost` | Boost | core |\n| `find_package(GTest` | GoogleTest | testing |\n| `dependency('gtest'` | GoogleTest | testing |\n| `dependency('catch2'` | Catch2 | testing |\n\n### Test framework detection\n\n| Dependency/Pattern | Test Framework |\n|--------------------|----------------|\n| `gtest` | GoogleTest |\n| `gmock` | GoogleMock |\n| `catch2` | Catch2 |\n| `doctest` | doctest |\n\n### Build tool detection\n\n| File/Pattern | Build Tool |\n|--------------|------------|\n| `CMakeLists.txt` | CMake |\n| `meson.build` | Meson |\n| `WORKSPACE` | Bazel |\n\n## Database Detection\n\nLook for these patterns in any manifest:\n\n| Pattern | Database |\n|---------|----------|\n| `prisma`, `@prisma/client` | PostgreSQL/MySQL (Prisma) |\n| `sqlalchemy`, `asyncpg` | PostgreSQL |\n| `pymongo`, `motor` | MongoDB |\n| `redis`, `ioredis` | Redis |\n| `mysql2`, `pymysql` | MySQL |\n| `sqlite3`, `better-sqlite3` | SQLite |\n| `typeorm` | Various SQL |\n| `drizzle-orm` | Various SQL |\n| `mongoose` | MongoDB |\n\n## Cloud Provider Detection\n\nLook for SDK packages:\n\n| Pattern | Provider |\n|---------|----------|\n| `@aws-sdk/*`, `boto3` | AWS |\n| `@google-cloud/*`, `google-cloud-*` | GCP |\n| `@azure/*`, `azure-*` | Azure |\n| `@vercel/*` | Vercel |\n| `@supabase/*`, `supabase` | Supabase |\n\n## Output Template\n\nAfter parsing all manifests, compile results:\n\n```json\n{\n \"project_root\": \"/path/to/project\",\n \"scanned_at\": \"2025-12-21T12:00:00Z\",\n \"languages\": [\"typescript\", \"python\", \"go\", \"rust\", \"dart\", \"cpp\"],\n \"frameworks\": [\n {\"name\": \"react\", \"version\": \"^18.2.0\", \"category\": \"frontend\"},\n {\"name\": \"fastapi\", \"version\": \"^0.109.0\", \"category\": \"backend\"}\n ],\n \"test_frameworks\": [\n {\"name\": \"vitest\", \"version\": \"^1.2.0\"},\n {\"name\": \"pytest\", \"version\": \"^7.4.0\"}\n ],\n \"build_tools\": [\"vite\", \"uv\"],\n \"databases\": [\"postgresql\"],\n \"cloud_providers\": [\"vercel\"],\n \"ci_cd\": [\"github-actions\"],\n \"manifests_found\": [\"package.json\", \"pyproject.toml\"]\n}\n```\n","content_type":"text/markdown; charset=utf-8","language":"markdown","size":7495,"content_sha256":"742ee1961d99b0a494781409b63c05c7d33388a1d0c18557d53cfaf6e19d6fb4"},{"filename":"skill-report.json","content":"{\n \"schema_version\": \"2.0\",\n \"meta\": {\n \"generated_at\": \"2026-01-16T22:08:50.561Z\",\n \"slug\": \"consiliency-library-detection\",\n \"source_url\": \"https://github.com/Consiliency/treesitter-chunker/tree/main/.ai-dev-kit/skills/library-detection\",\n \"source_ref\": \"main\",\n \"model\": \"claude\",\n \"analysis_version\": \"3.0.0\",\n \"source_type\": \"community\",\n \"content_hash\": \"4d170c576cb6f82ad6dcddc5ae296b363da8e4ad6a25729749803248d9215ec8\",\n \"tree_hash\": \"3d27d0e1fcaed40f173da9108e3d0d13c79692bc19a0dba6e8ebcbabb2f5c762\"\n },\n \"skill\": {\n \"name\": \"library-detection\",\n \"description\": \"Detect project stack from package manifests (package.json, pyproject.toml, go.mod, Cargo.toml, pubspec.yaml, CMakeLists.txt). Auto-identify frameworks, test tools, and build systems for onboarding.\",\n \"summary\": \"Detect project stack from package manifests (package.json, pyproject.toml, go.mod, Cargo.toml, pubsp...\",\n \"icon\": \"📦\",\n \"version\": \"1.0.0\",\n \"author\": \"Consiliency\",\n \"license\": \"MIT\",\n \"category\": \"documentation\",\n \"tags\": [\n \"dependency-detection\",\n \"stack-analysis\",\n \"project-discovery\",\n \"framework-detection\"\n ],\n \"supported_tools\": [\n \"claude\",\n \"codex\",\n \"claude-code\"\n ],\n \"risk_factors\": [\n \"external_commands\",\n \"filesystem\",\n \"network\"\n ]\n },\n \"security_audit\": {\n \"risk_level\": \"safe\",\n \"is_blocked\": false,\n \"safe_to_publish\": true,\n \"summary\": \"All 190 static findings are FALSE POSITIVES. This is a pure documentation skill containing only markdown files (SKILL.md, cookbook/manifest-parsing.md) with instructional content. The flagged 'external_commands' are example shell snippets in code blocks, not executable code. The 'weak cryptographic algorithm' findings refer to JSON Schema URL references, not crypto operations. The 'obfuscation' heuristic misinterpreted documentation examples as suspicious code. No executable code, network calls, file writes, or system access capabilities exist.\",\n \"risk_factor_evidence\": [\n {\n \"factor\": \"external_commands\",\n \"evidence\": [\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 13,\n \"line_end\": 15\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 15,\n \"line_end\": 19\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 19,\n \"line_end\": 28\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 28,\n \"line_end\": 34\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 34,\n \"line_end\": 35\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 35,\n \"line_end\": 36\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 36,\n \"line_end\": 37\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 37,\n \"line_end\": 38\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 38,\n \"line_end\": 39\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 39,\n \"line_end\": 40\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 40,\n \"line_end\": 41\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 41,\n \"line_end\": 42\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 42,\n \"line_end\": 43\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 43,\n \"line_end\": 44\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 44,\n \"line_end\": 45\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 45,\n \"line_end\": 51\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 51,\n \"line_end\": 52\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 52,\n \"line_end\": 53\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 53,\n \"line_end\": 54\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 54,\n \"line_end\": 55\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 55,\n \"line_end\": 56\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 56,\n \"line_end\": 57\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 57,\n \"line_end\": 63\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 63,\n \"line_end\": 64\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 64,\n \"line_end\": 65\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 65,\n \"line_end\": 66\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 66,\n \"line_end\": 67\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 67,\n \"line_end\": 68\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 68,\n \"line_end\": 74\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 74,\n \"line_end\": 77\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 77,\n \"line_end\": 82\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 82,\n \"line_end\": 83\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 83,\n \"line_end\": 84\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 84,\n \"line_end\": 90\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 90,\n \"line_end\": 91\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 91,\n \"line_end\": 92\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 92,\n \"line_end\": 93\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 93,\n \"line_end\": 94\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 94,\n \"line_end\": 95\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 95,\n \"line_end\": 96\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 96,\n \"line_end\": 97\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 97,\n \"line_end\": 103\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 103,\n \"line_end\": 104\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 104,\n \"line_end\": 105\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 105,\n \"line_end\": 106\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 106,\n \"line_end\": 112\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 112,\n \"line_end\": 113\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 113,\n \"line_end\": 114\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 114,\n \"line_end\": 115\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 115,\n \"line_end\": 116\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 116,\n \"line_end\": 122\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 122,\n \"line_end\": 125\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 125,\n \"line_end\": 135\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 135,\n \"line_end\": 137\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 137,\n \"line_end\": 141\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 141,\n \"line_end\": 144\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 144,\n \"line_end\": 150\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 150,\n \"line_end\": 151\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 151,\n \"line_end\": 152\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 152,\n \"line_end\": 153\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 153,\n \"line_end\": 154\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 154,\n \"line_end\": 160\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 160,\n \"line_end\": 161\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 161,\n \"line_end\": 162\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 162,\n \"line_end\": 168\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 168,\n \"line_end\": 170\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 170,\n \"line_end\": 174\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 174,\n \"line_end\": 177\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 177,\n \"line_end\": 183\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 183,\n \"line_end\": 184\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 184,\n \"line_end\": 185\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 185,\n \"line_end\": 186\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 186,\n \"line_end\": 187\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 187,\n \"line_end\": 188\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 188,\n \"line_end\": 189\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 189,\n \"line_end\": 195\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 195,\n \"line_end\": 197\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 197,\n \"line_end\": 202\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 202,\n \"line_end\": 203\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 203,\n \"line_end\": 209\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 209,\n \"line_end\": 215\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 215,\n \"line_end\": 216\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 216,\n \"line_end\": 217\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 217,\n \"line_end\": 223\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 223,\n \"line_end\": 224\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 224,\n \"line_end\": 230\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 230,\n \"line_end\": 232\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 232,\n \"line_end\": 237\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 237,\n \"line_end\": 238\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 238,\n \"line_end\": 239\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 239,\n \"line_end\": 239\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 239,\n \"line_end\": 245\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 245,\n \"line_end\": 246\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 246,\n \"line_end\": 247\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 247,\n \"line_end\": 248\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 248,\n \"line_end\": 254\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 254,\n \"line_end\": 255\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 255,\n \"line_end\": 256\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 256,\n \"line_end\": 257\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 257,\n \"line_end\": 263\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 263,\n \"line_end\": 264\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 264,\n \"line_end\": 265\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 265,\n \"line_end\": 273\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 273,\n \"line_end\": 273\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 273,\n \"line_end\": 274\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 274,\n \"line_end\": 274\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 274,\n \"line_end\": 275\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 275,\n \"line_end\": 275\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 275,\n \"line_end\": 276\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 276,\n \"line_end\": 276\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 276,\n \"line_end\": 277\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 277,\n \"line_end\": 277\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 277,\n \"line_end\": 278\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 278,\n \"line_end\": 278\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 278,\n \"line_end\": 279\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 279,\n \"line_end\": 280\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 280,\n \"line_end\": 281\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 281,\n \"line_end\": 289\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 289,\n \"line_end\": 289\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 289,\n \"line_end\": 290\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 290,\n \"line_end\": 290\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 290,\n \"line_end\": 291\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 291,\n \"line_end\": 291\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 291,\n \"line_end\": 292\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 292,\n \"line_end\": 293\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 293,\n \"line_end\": 293\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 293,\n \"line_end\": 299\n },\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 299,\n \"line_end\": 318\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 48,\n \"line_end\": 48\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 49,\n \"line_end\": 49\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 50,\n \"line_end\": 50\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 51,\n \"line_end\": 51\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 52,\n \"line_end\": 52\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 53,\n \"line_end\": 53\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 54,\n \"line_end\": 54\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 55,\n \"line_end\": 55\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 56,\n \"line_end\": 56\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 57,\n \"line_end\": 57\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 58,\n \"line_end\": 58\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 59,\n \"line_end\": 59\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 60,\n \"line_end\": 60\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 63,\n \"line_end\": 63\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 64,\n \"line_end\": 64\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 65,\n \"line_end\": 65\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 66,\n \"line_end\": 66\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 67,\n \"line_end\": 67\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 68,\n \"line_end\": 68\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 68,\n \"line_end\": 68\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 82,\n \"line_end\": 98\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 98,\n \"line_end\": 103\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 103,\n \"line_end\": 114\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 114,\n \"line_end\": 122\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 122,\n \"line_end\": 122\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 122,\n \"line_end\": 123\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 123,\n \"line_end\": 123\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 123,\n \"line_end\": 124\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 124,\n \"line_end\": 125\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 125,\n \"line_end\": 126\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 126,\n \"line_end\": 127\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 127,\n \"line_end\": 128\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 128,\n \"line_end\": 129\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 129,\n \"line_end\": 129\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 129,\n \"line_end\": 130\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 130,\n \"line_end\": 131\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 131,\n \"line_end\": 131\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 131,\n \"line_end\": 131\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 131,\n \"line_end\": 132\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 132,\n \"line_end\": 132\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 132,\n \"line_end\": 133\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 133,\n \"line_end\": 150\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 150,\n \"line_end\": 204\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 204,\n \"line_end\": 216\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 216,\n \"line_end\": 219\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 219,\n \"line_end\": 223\n }\n ]\n },\n {\n \"factor\": \"filesystem\",\n \"evidence\": [\n {\n \"file\": \"cookbook/manifest-parsing.md\",\n \"line_start\": 231,\n \"line_end\": 231\n },\n {\n \"file\": \"skill-report.json\",\n \"line_start\": 6,\n \"line_end\": 6\n }\n ]\n },\n {\n \"factor\": \"network\",\n \"evidence\": [\n {\n \"file\": \"skill-report.json\",\n \"line_start\": 6,\n \"line_end\": 6\n },\n {\n \"file\": \"SKILL.md\",\n \"line_start\": 152,\n \"line_end\": 152\n }\n ]\n }\n ],\n \"critical_findings\": [],\n \"high_findings\": [],\n \"medium_findings\": [],\n \"low_findings\": [],\n \"dangerous_patterns\": [],\n \"files_scanned\": 3,\n \"total_lines\": 732,\n \"audit_model\": \"claude\",\n \"audited_at\": \"2026-01-16T22:08:50.561Z\"\n },\n \"content\": {\n \"user_title\": \"Detect project technology stacks from manifests\",\n \"value_statement\": \"This skill identifies the technology stack of any project by scanning package manifests and configuration files. It helps developers quickly understand project dependencies, frameworks, and build tools without manual investigation.\",\n \"seo_keywords\": [\n \"library detection\",\n \"dependency analysis\",\n \"framework detection\",\n \"stack identification\",\n \"package manifest parsing\",\n \"Claude\",\n \"Codex\",\n \"Claude Code\"\n ],\n \"actual_capabilities\": [\n \"Scans package manifests across 12+ file types including package.json, pyproject.toml, go.mod, and Cargo.toml\",\n \"Identifies frameworks from dependency patterns such as React, FastAPI, Django, and Express\",\n \"Detects test frameworks and build tools including pytest, vitest, Jest, Vite, and webpack\",\n \"Classifies dependencies into production, development, peer, and optional categories\",\n \"Outputs structured analysis in JSON, markdown, or toon format\",\n \"Recognizes databases and cloud providers from SDK package patterns\"\n ],\n \"limitations\": [\n \"Only analyzes manifest files, not actual code imports or runtime dependencies\",\n \"Cannot detect implicit dependencies or dynamic imports used in code\",\n \"Requires manifests to be present in standard project locations to function\"\n ],\n \"use_cases\": [\n {\n \"target_user\": \"Onboarding developers\",\n \"title\": \"New team member onboarding\",\n \"description\": \"Quickly understand project tech stack when joining a new codebase\"\n },\n {\n \"target_user\": \"Documentation writers\",\n \"title\": \"Automated documentation\",\n \"description\": \"Generate stack documentation and identify relevant doc sources automatically\"\n },\n {\n \"target_user\": \"DevOps engineers\",\n \"title\": \"Environment setup\",\n \"description\": \"Identify required tools, test frameworks, and build systems for CI/CD configuration\"\n }\n ],\n \"prompt_templates\": [\n {\n \"title\": \"Basic stack scan\",\n \"scenario\": \"Scan a project directory\",\n \"prompt\": \"Use library-detection to identify the technology stack of this project. List the languages, frameworks, test tools, and build systems found.\"\n },\n {\n \"title\": \"Framework verification\",\n \"scenario\": \"Verify framework assumptions\",\n \"prompt\": \"Run library-detection to confirm the frameworks and libraries used in this project. Check both production and development dependencies.\"\n },\n {\n \"title\": \"Test framework discovery\",\n \"scenario\": \"Find test tools\",\n \"prompt\": \"Use library-detection to identify all test frameworks and testing utilities in this project. Include version information where available.\"\n },\n {\n \"title\": \"Full stack report\",\n \"scenario\": \"Generate comprehensive report\",\n \"prompt\": \"Execute library-detection with full detail. Output the complete stack analysis including languages, frameworks, databases, cloud providers, and CI/CD tools.\"\n }\n ],\n \"output_examples\": [\n {\n \"input\": \"Scan this project to identify its technology stack\",\n \"output\": [\n \"Languages: TypeScript, Python\",\n \"Frameworks: React 18.2.0 (frontend), FastAPI 0.109.0 (backend)\",\n \"Test Frameworks: Vitest 1.2.0, pytest 7.4.0\",\n \"Build Tools: Vite, uv\",\n \"Databases: PostgreSQL (via Prisma)\",\n \"Cloud Providers: Vercel\",\n \"CI/CD: GitHub Actions\"\n ]\n },\n {\n \"input\": \"What test frameworks are used in this codebase\",\n \"output\": [\n \"Detected test frameworks:\",\n \"- Vitest 1.2.0 (JavaScript/TypeScript)\",\n \"- pytest 7.4.0 (Python)\",\n \"- React Testing Library (development dependency)\"\n ]\n }\n ],\n \"best_practices\": [\n \"Always verify detected frameworks against actual imports when precision is critical\",\n \"Use the OUTPUT_FORMAT variable to match downstream processing requirements\",\n \"Cross-reference requirements.txt with pyproject.toml for Python projects\"\n ],\n \"anti_patterns\": [\n \"Assuming framework usage without checking actual imports or configuration\",\n \"Skipping manifest analysis for supposedly simple projects\",\n \"Reporting libraries without verifying they are actually used in the codebase\"\n ],\n \"faq\": [\n {\n \"question\": \"Which package manifest formats are supported?\",\n \"answer\": \"Supports package.json, pyproject.toml, requirements.txt, go.mod, Cargo.toml, pubspec.yaml, CMakeLists.txt, meson.build, pom.xml, build.gradle, Gemfile, composer.json.\"\n },\n {\n \"question\": \"What is the maximum scan depth?\",\n \"answer\": \"Default depth is 3 directories. Configure with SCAN_DEPTH variable. Deeper scans may impact performance on large monorepos.\"\n },\n {\n \"question\": \"Can this skill integrate with other skills?\",\n \"answer\": \"Yes. Other skills can reference library-detection output for documentation discovery, tool configuration, and agent routing based on detected stack.\"\n },\n {\n \"question\": \"Is project data sent anywhere?\",\n \"answer\": \"No. This skill only reads local manifest files and outputs analysis. No network calls are made and no data leaves the local environment.\"\n },\n {\n \"question\": \"Why did detection miss some dependencies?\",\n \"answer\": \"Ensure manifests exist in standard locations. Some dependencies may be dynamically imported or defined in lock files not directly parsed.\"\n },\n {\n \"question\": \"How does this compare to dependency scanning tools?\",\n \"answer\": \"This skill analyzes manifest structure rather than lock files. It provides faster broad-stroke identification suitable for onboarding and documentation.\"\n }\n ]\n },\n \"file_structure\": [\n {\n \"name\": \"cookbook\",\n \"type\": \"dir\",\n \"path\": \"cookbook\",\n \"children\": [\n {\n \"name\": \"manifest-parsing.md\",\n \"type\": \"file\",\n \"path\": \"cookbook/manifest-parsing.md\",\n \"lines\": 319\n }\n ]\n },\n {\n \"name\": \"SKILL.md\",\n \"type\": \"file\",\n \"path\": \"SKILL.md\",\n \"lines\": 224\n }\n ]\n}\n","content_type":"application/json; charset=utf-8","language":"json","size":32125,"content_sha256":"fa449b0486042d272d19c291c510a9fc5700b4f9c27e192258a69e54df952db9"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"Library Detection Skill","type":"text"}]},{"type":"paragraph","content":[{"text":"Automatically detect the technology stack of a project by analyzing package manifests and configuration files. Returns structured data for use in onboarding, documentation discovery, and tool configuration.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Variables","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Variable","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Default","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Description","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"SCAN_DEPTH","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"3","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Max directory depth to search for manifests","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"INCLUDE_DEV_DEPS","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"true","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Include development dependencies in analysis","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"DETECT_FRAMEWORKS","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"true","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Identify frameworks from dependencies","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"DETECT_TEST_TOOLS","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"true","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Identify test frameworks and runners","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"OUTPUT_FORMAT","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"json","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Output format: json, markdown, or toon","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Instructions","type":"text"}]},{"type":"paragraph","content":[{"text":"MANDATORY","type":"text","marks":[{"type":"strong"}]},{"text":" - Follow the Workflow steps below in order. Do not skip steps.","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Scan for package manifests in the project","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Parse each manifest to extract dependencies","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Classify dependencies into categories","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Detect frameworks and test tools from dependency patterns","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Output structured stack summary","type":"text"}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Red Flags - STOP and Reconsider","type":"text"}]},{"type":"paragraph","content":[{"text":"If you're about to:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Assume a framework without checking imports or config files","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Skip manifest files because \"the project is simple\"","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Hardcode framework versions instead of reading from manifests","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Report a library without verifying it's actually used","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"STOP","type":"text","marks":[{"type":"strong"}]},{"text":" -> Read the manifest files -> Verify with imports/configs -> Then report","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Workflow","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"1. Discover Manifests","type":"text"}]},{"type":"paragraph","content":[{"text":"Scan for these files (in order of priority):","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"File","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Language","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Parser","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"package.json","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"JavaScript/TypeScript","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"JSON","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"pyproject.toml","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Python","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"TOML","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"requirements.txt","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Python","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Line-based","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"go.mod","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Go","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Go mod","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Cargo.toml","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Rust","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"TOML","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"pubspec.yaml","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Dart/Flutter","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"YAML","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"CMakeLists.txt","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"C/C++","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"CMake","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"meson.build","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"C/C++","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Meson","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"WORKSPACE","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Bazel","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Bazel","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"pom.xml","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Java","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"XML","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"build.gradle","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Java/Kotlin","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Gradle DSL","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Gemfile","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Ruby","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Ruby DSL","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"composer.json","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"PHP","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"JSON","type":"text"}]}]}]}]},{"type":"paragraph","content":[{"text":"Also check for:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Dockerfile","type":"text","marks":[{"type":"code_inline"}]},{"text":" - containerization","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"docker-compose.yml","type":"text","marks":[{"type":"code_inline"}]},{"text":" - container orchestration","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":".github/workflows/*.yml","type":"text","marks":[{"type":"code_inline"}]},{"text":" - CI/CD","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Makefile","type":"text","marks":[{"type":"code_inline"}]},{"text":" - build system","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"tsconfig.json","type":"text","marks":[{"type":"code_inline"}]},{"text":" - TypeScript config","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"vite.config.*","type":"text","marks":[{"type":"code_inline"}]},{"text":" / ","type":"text"},{"text":"webpack.config.*","type":"text","marks":[{"type":"code_inline"}]},{"text":" - bundlers","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"2. Parse Dependencies","type":"text"}]},{"type":"paragraph","content":[{"text":"For each manifest, extract:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Production dependencies","type":"text","marks":[{"type":"strong"}]},{"text":": runtime requirements","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Development dependencies","type":"text","marks":[{"type":"strong"}]},{"text":": build/test tools","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Peer dependencies","type":"text","marks":[{"type":"strong"}]},{"text":": expected host environment","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Optional dependencies","type":"text","marks":[{"type":"strong"}]},{"text":": feature flags","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"3. Classify Stack","type":"text"}]},{"type":"paragraph","content":[{"text":"Group findings into:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"json"},"content":[{"text":"{\n \"languages\": [\"typescript\", \"python\", \"go\", \"rust\", \"dart\", \"cpp\"],\n \"frameworks\": [\n {\"name\": \"react\", \"version\": \"^18.0.0\", \"category\": \"frontend\"},\n {\"name\": \"fastapi\", \"version\": \"^0.100.0\", \"category\": \"backend\"}\n ],\n \"test_frameworks\": [\n {\"name\": \"vitest\", \"version\": \"^1.0.0\"},\n {\"name\": \"pytest\", \"version\": \"^7.0.0\"}\n ],\n \"build_tools\": [\"vite\", \"uv\", \"docker\"],\n \"databases\": [\"postgresql\", \"redis\"],\n \"cloud_providers\": [\"aws\", \"vercel\"],\n \"ci_cd\": [\"github-actions\"]\n}","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"4. Framework Detection Patterns","type":"text"}]},{"type":"paragraph","content":[{"text":"Use the cookbook for specific detection logic:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Read ","type":"text"},{"text":"./cookbook/manifest-parsing.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" for parsing rules","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Match dependency names against known framework patterns","type":"text"}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"5. Output","type":"text"}]},{"type":"paragraph","content":[{"text":"Return the structured stack summary in the requested format.","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Cookbook","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Manifest Parsing","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"IF: Parsing any package manifest","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"THEN: Read and execute ","type":"text"},{"text":"./cookbook/manifest-parsing.md","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Quick Reference","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Detection Patterns","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Dependency Pattern","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Detected As","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"react","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"react-dom","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"React framework","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"vue","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"@vue/*","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Vue framework","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"next","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Next.js framework","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"fastapi","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"FastAPI framework","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"django","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Django framework","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"flask","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Flask framework","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"express","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Express.js framework","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"vitest","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"jest","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"JavaScript test framework","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"pytest","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Python test framework","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"gtest","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"gmock","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"catch2","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"C/C++ test framework","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"flutter","type":"text","marks":[{"type":"code_inline"}]},{"text":", ","type":"text"},{"text":"flutter_test","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Flutter framework","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"@testing-library/*","type":"text","marks":[{"type":"code_inline"}]}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Testing utilities","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Category Mappings","type":"text"}]},{"type":"table","attrs":{"layout":null},"content":[{"type":"tr","content":[{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Category","type":"text"}]}]},{"type":"th","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"Examples","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"frontend","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"react, vue, svelte, angular","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"backend","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"fastapi, django, express, gin","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"database","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"prisma, sqlalchemy, typeorm","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"testing","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"vitest, jest, pytest, playwright","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"build","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"vite, webpack, esbuild, rollup","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"linting","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"eslint, prettier, ruff, black","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"typing","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"typescript, mypy, pyright","type":"text"}]}]}]},{"type":"tr","content":[{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"build-native","type":"text"}]}]},{"type":"td","attrs":{"colspan":1,"rowspan":1,"colwidth":null,"alignment":""},"content":[{"type":"paragraph","content":[{"text":"cmake, meson, bazel","type":"text"}]}]}]}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Output Schema","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"json"},"content":[{"text":"{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"type\": \"object\",\n \"properties\": {\n \"project_root\": {\"type\": \"string\"},\n \"scanned_at\": {\"type\": \"string\", \"format\": \"date-time\"},\n \"languages\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n },\n \"frameworks\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\"type\": \"string\"},\n \"version\": {\"type\": \"string\"},\n \"category\": {\"type\": \"string\"}\n }\n }\n },\n \"test_frameworks\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"name\": {\"type\": \"string\"},\n \"version\": {\"type\": \"string\"}\n }\n }\n },\n \"build_tools\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n },\n \"databases\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n },\n \"cloud_providers\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n },\n \"ci_cd\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n },\n \"manifests_found\": {\n \"type\": \"array\",\n \"items\": {\"type\": \"string\"}\n }\n }\n}","type":"text"}]},{"type":"heading","attrs":{"level":2},"content":[{"text":"Integration","type":"text"}]},{"type":"paragraph","content":[{"text":"Other skills and commands can use this skill for:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Documentation discovery","type":"text","marks":[{"type":"strong"}]},{"text":": Map detected frameworks to doc sources","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Onboarding","type":"text","marks":[{"type":"strong"}]},{"text":": Generate quickstart guides tailored to the stack","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Tool configuration","type":"text","marks":[{"type":"strong"}]},{"text":": Auto-configure linters, formatters, test runners","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Agent routing","type":"text","marks":[{"type":"strong"}]},{"text":": Select appropriate AI providers based on stack","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Example usage in another skill:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"## Prerequisites\n\nBefore implementing, run the `library-detection` skill to identify:\n- Test frameworks (for writing tests)\n- Build tools (for verification)\n- Database libraries (for data layer work)","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}}]},"metadata":{"date":"2026-06-05","name":"library-detection","author":"@skillopedia","source":{"stars":336,"repo_name":"marketplace","origin_url":"https://github.com/aiskillstore/marketplace/blob/HEAD/skills/consiliency/library-detection/SKILL.md","repo_owner":"aiskillstore","body_sha256":"982dd4a81b9bcab52329b5efe12d9db97db9d211007d1dde9649d7f516ed1a5f","cluster_key":"5d1c66f143a5ce509158061dfec780e89a292b20da785ba4820980c084195b57","clean_bundle":{"format":"clean-skill-bundle-v1","source":"aiskillstore/marketplace/skills/consiliency/library-detection/SKILL.md","attachments":[{"id":"f4b8d3df-b909-52f6-9ea2-e7db4560ce35","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/f4b8d3df-b909-52f6-9ea2-e7db4560ce35/attachment.md","path":"cookbook/manifest-parsing.md","size":7495,"sha256":"742ee1961d99b0a494781409b63c05c7d33388a1d0c18557d53cfaf6e19d6fb4","contentType":"text/markdown; charset=utf-8"},{"id":"a505049c-a88d-5d1f-83f8-7f7387100d5f","key":"uploads/10433ee7-ad12-4ae0-b34e-97553e46c6c8/a505049c-a88d-5d1f-83f8-7f7387100d5f/attachment.json","path":"skill-report.json","size":32125,"sha256":"fa449b0486042d272d19c291c510a9fc5700b4f9c27e192258a69e54df952db9","contentType":"application/json; charset=utf-8"}],"bundle_sha256":"49575fedb90dff4f0af4528af66db4ee02b05d11ee4f3ea6117faf26351c3639","attachment_count":2,"text_attachments":2,"attachment_storage":"skillopedia-attachments-v1","binary_attachments":0,"excluded_attachments":[]},"cluster_size":1,"skill_md_path":"skills/consiliency/library-detection/SKILL.md","import_metadata":{"date":"2026-06-05","author":"@skillopedia","version":"v1","category":"testing-qa","category_label":"Testing"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"testing-qa","import_tag":"clean-skills-v1","description":"Detect project stack from package manifests (package.json, pyproject.toml, go.mod, Cargo.toml, pubspec.yaml, CMakeLists.txt). Auto-identify frameworks, test tools, and build systems for onboarding."}},"renderedAt":1782980098165}

Library Detection Skill Automatically detect the technology stack of a project by analyzing package manifests and configuration files. Returns structured data for use in onboarding, documentation discovery, and tool configuration. Variables | Variable | Default | Description | |----------|---------|-------------| | SCAN DEPTH | 3 | Max directory depth to search for manifests | | INCLUDE DEV DEPS | true | Include development dependencies in analysis | | DETECT FRAMEWORKS | true | Identify frameworks from dependencies | | DETECT TEST TOOLS | true | Identify test frameworks and runners | | OUTPU…