From idev
Detects which architectural layer (frontend or backend) a file or task belongs to and routes to the matching pattern skill. Use when a task spans frontend and backend, or when determining which layer a file belongs to.
How this skill is triggered — by the user, by Claude, or both
Slash command
/idev:architecture-scannerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Unified layer detection that connects frontend and backend pattern skills with the project map. Works on ANY project by auto-detecting which directories are FE vs BE and what technologies are used.
Unified layer detection that connects frontend and backend pattern skills with the project map. Works on ANY project by auto-detecting which directories are FE vs BE and what technologies are used.
When a task spans multiple layers (frontend + backend) or when Claude needs to determine which layer a file belongs to.
This skill bridges three systems:
${CLAUDE_PLUGIN_ROOT}/skills/backend-patterns/)${CLAUDE_PLUGIN_ROOT}/skills/frontend-patterns/).claude/idev/project-map/project.map.md) — if availableIt auto-detects project types, which directories are frontend vs backend, and provides FE-to-BE endpoint mappings.
Scan the workspace root using technology-agnostic detection. Check for ALL of these — do not assume any specific stack.
Glob for these marker files (exclude dependency folders like node_modules, vendor, bin, obj):
Frontend markers:
package.json → Read to detect: react, vue, angular, svelte, next, nuxt, solid, qwik
pubspec.yaml → Flutter/Dart
Podfile → iOS (Swift/ObjC)
build.gradle + /app → Android
Backend markers:
*.sln / *.csproj → .NET (C#)
go.mod → Go
Cargo.toml → Rust
pom.xml / build.gradle (no /app) → Java/Kotlin (Spring Boot, etc.)
requirements.txt / pyproject.toml / setup.py → Python (Django, Flask, FastAPI)
Gemfile → Ruby (Rails)
composer.json → PHP (Laravel)
package.json (with express/fastify/nest/koa) → Node.js backend
Monorepo markers:
lerna.json / nx.json / turbo.json / pnpm-workspace.yaml → Monorepo
For each detected project root:
1. Read the marker file to determine exact framework
2. Classify as: "frontend", "backend", "fullstack", "shared/lib", or "mobile"
3. Detect language: TypeScript, JavaScript, C#, Python, Go, Java, Rust, etc.
4. Record the root directory path
If .claude/idev/project-map/project.map.md exists:
1. Grep for section headers to find FE/BE groupings
2. Cross-reference detected roots with map sections
3. Use map to fill in any missing feature-to-directory mappings
Discover how frontend calls backend. Detection varies by stack:
Search FE project for API base URL config:
React/Vue/Angular: grep for "baseURL|BASE_URL|API_URL|VITE_API|NEXT_PUBLIC_API"
Flutter: grep for "baseUrl|apiUrl"
Any: grep for environment variable files (.env, .env.local, .env.development)
Search FE service/api files for endpoint paths:
TypeScript/JS: grep for "api/|/api" in *.service.ts, *.api.ts, api/*.ts
Python: grep for "requests.get|requests.post|httpx"
Flutter: grep for "http.get|http.post|dio"
Search BE project for route definitions:
.NET: grep for [Route("api/"] or [Http*(" in *.cs
Express: grep for "app.get|app.post|router.get|router.post" in *.ts/*.js
FastAPI: grep for "@app.get|@app.post|@router" in *.py
Django: grep for "path(" in urls.py
Spring: grep for "@GetMapping|@PostMapping|@RequestMapping" in *.java
Go: grep for "HandleFunc|Handle|r.GET|r.POST" in *.go
Rails: read config/routes.rb
Laravel: read routes/api.php
NestJS: grep for "@Get|@Post|@Controller" in *.ts
1. Normalize FE endpoint paths and BE route definitions
2. Match them by URL pattern
3. Build FE→BE mapping table
Write to .claude/idev/architecture-scanner/cache.json:
{
"generated": "YYYY-MM-DD",
"projectType": "monorepo|single-app|multi-repo",
"layers": {
"frontend": {
"root": "relative/path/to/fe",
"framework": "react|vue|angular|svelte|next|nuxt|flutter",
"language": "typescript|javascript|dart",
"patternsSkill": "frontend-patterns",
"apiConfigFile": "relative/path/to/api/config",
"serviceFilesPattern": "**/*.service.ts"
},
"backend": {
"root": "relative/path/to/be",
"framework": ".net|express|fastapi|django|spring|rails|laravel|nestjs|go",
"language": "csharp|typescript|python|java|go|ruby|php|rust",
"patternsSkill": "backend-patterns",
"routesLocation": "relative/path/to/controllers-or-routes"
}
},
"apiRoutes": {
"api/example/get-all": "ExampleController.cs (or example.routes.ts, etc.)"
},
"featureMapping": {
"FeatureName": {
"feRoot": "path/to/fe/feature",
"beControllers": ["Controller.cs"],
"feServices": ["service.ts"]
}
},
"filePatterns": {
"*.tsx": "frontend",
"*.cs": "backend"
}
}
Given a file path:
1. Check if path contains any known layer root
2. Fall back to file extension check against filePatterns
3. Return: "frontend" or "backend"
4. Load the corresponding patterns skill
Given a frontend API call (e.g., "api/jobs/get-all"):
1. Look up apiRoutes for matching endpoint
2. Return the BE route handler file and method name
3. Read that specific method for implementation details
Given a backend route/controller method:
1. Look up apiRoutes in reverse
2. Grep FE service files for the endpoint URL
3. Follow imports to find the hook/composable and component using it
When user asks for a full-stack feature:
1. Load architecture-scanner cache
2. Determine which layers are affected
3. Load backend-patterns cache → Create BE files following detected conventions
4. Load frontend-patterns cache → Create FE files following detected conventions
5. Update apiRoutes with new endpoint mapping
6. Use the Checklist from both pattern skills
Guides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.
npx claudepluginhub theophiluschinomona/idev --plugin idev