.claude/skills/project-analyzer/SKILL.md
Automated brownfield codebase analysis with weighted keyword scoring, three-stream analysis, and design pattern recognition. Detects project type, frameworks, dependencies, architecture patterns, and generates comprehensive project profile.
npx skillsauth add oimiragieo/agent-studio project-analyzerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
References (archive): SCAFFOLD_SKILLS_ARCHIVE_MAP.md — ProjectAnalyzer monorepo/service detection from Auto-Claude-develop analysis/analyzers.
<identity> Project Analyzer - Automated brownfield codebase analysis for rapid project onboarding and understanding. </identity> <capabilities> - Detecting project type (frontend, backend, fullstack, library, cli, mobile, monorepo) - Identifying frameworks and libraries from manifests and structure - Generating file statistics and language breakdown - Mapping component relationships and module structure - Detecting architecture patterns (MVC, layered, microservices, etc.) - Analyzing dependency health and outdated packages - Identifying code quality indicators (linting, testing, type safety) - Detecting technical debt and anti-patterns - Generating prioritized improvement recommendations </capabilities> <instructions> <execution_process>Locate project root by finding manifest files:
Search for package manager files:
package.json (Node.js/JavaScript/TypeScript)requirements.txt, pyproject.toml, setup.py (Python)go.mod (Go)Cargo.toml (Rust)pom.xml, build.gradle (Java/Maven/Gradle)composer.json (PHP)Identify project root:
Validate project root:
.git directoryClassify project based on manifest files and directory structure:
Frontend Projects:
src/components/, public/, assets/Backend Projects:
routes/, controllers/, models/, api/Fullstack Projects:
Library/Package Projects:
index.ts, lib/, dist/, build/library field in package.jsonCLI Projects:
bin field in package.jsonMobile Projects:
android/, ios/, mobile/Monorepo Projects:
workspaces in package.json, pnpm-workspace.yamlMicroservices Projects:
docker-compose.yml, service configsIdentify frameworks from manifest files and imports:
Read package.json dependencies (Node.js):
dependencies and devDependenciesRead requirements.txt (Python):
Analyze imports (optional deep scan):
Framework Categories:
Confidence Scoring:
Generate quantitative project statistics:
Count files by type:
node_modules/, .git/, dist/, build/Count lines of code:
Identify largest files:
Calculate averages:
Language Detection:
.ts, .tsx → TypeScript.js, .jsx → JavaScript.py → Python.go → Go.rs → Rust.java → Java.md → Markdown.json → JSON.yaml, .yml → YAMLAnalyze project structure and architecture:
Identify root directories:
src/, app/, lib/test/, __tests__/, cypress/config/, .config/docs/, documentation/dist/, build/, out/scripts/, bin/assets/, static/, public/Detect entry points:
index.ts, main.py, app.pyapp.ts, server.ts, app/page.tsxhandler.ts, lambda.tscli.ts, bin/Detect architecture pattern:
models/, views/, controllers/presentation/, business/, data/domain/, application/, infrastructure/Detect module system:
package.json for "type": "module" (ESM)import/export (ESM) vs require (CommonJS)Analyze dependency health:
Count dependencies:
Check for outdated packages (optional):
npm outdated or equivalentSecurity scan (optional):
npm audit or equivalentDetect code quality tooling:
Linting Configuration:
.eslintrc.json, eslint.config.js, ruff.tomlFormatting Configuration:
.prettierrc, pyproject.toml (Black/Ruff)Testing Framework:
Type Safety:
tsconfig.json"strict": trueIdentify common patterns and anti-patterns:
Good Practices:
Anti-Patterns:
Neutral Patterns:
Calculate technical debt score:
Debt Indicators:
Debt Score (0-100):
Remediation Effort:
Create prioritized improvement recommendations:
Categorize Recommendations:
Prioritize by Impact:
Estimate Effort and Impact:
Validate analysis output against schema:
Schema Validation:
project-analysis.schema.jsonOutput Metadata:
</execution_process>
<performance> **Performance Requirements**:node_modules/, .git/, dist/Integration with Other Skills:
<best_practices>
# Analyze current project
node .claude/tools/analysis/project-analyzer/analyzer.mjs
# Analyze specific directory
node .claude/tools/analysis/project-analyzer/analyzer.mjs /path/to/project
# Output to file
node .claude/tools/analysis/project-analyzer/analyzer.mjs --output .claude/context/artifacts/project-analysis.json
Agent Invocation:
# Analyze current project
Analyze this project
# Generate comprehensive analysis
Perform full project analysis and save to artifacts
# Quick analysis (manifest only)
Quick project type detection
</usage_example>
<formatting_example>
Sample Output (.claude/context/artifacts/project-analysis.json):
{
"analysis_id": "analysis-llm-rules-20250115",
"project_type": "fullstack",
"analyzed_at": "2025-01-15T10:30:00.000Z",
"project_root": "C:\\dev\\projects\\LLM-RULES",
"stats": {
"total_files": 1243,
"total_lines": 125430,
"languages": {
"JavaScript": 45230,
"TypeScript": 38120,
"Markdown": 25680,
"JSON": 12400,
"YAML": 4000
},
"file_types": {
".js": 234,
".mjs": 156,
".ts": 89,
".md": 312,
".json": 145
},
"directories": 87,
"avg_file_size_lines": 101,
"largest_files": [
{
"path": ".claude/tools/enforcement-gate.mjs",
"lines": 1520
}
]
},
"frameworks": [
{
"name": "nextjs",
"version": "14.0.0",
"category": "framework",
"confidence": 1.0,
"source": "package.json"
},
{
"name": "react",
"version": "18.2.0",
"category": "framework",
"confidence": 1.0,
"source": "package.json"
}
],
"structure": {
"root_directories": [
{
"name": ".claude",
"purpose": "config",
"file_count": 543
},
{
"name": "conductor-main",
"purpose": "source",
"file_count": 234
}
],
"entry_points": [
{
"path": "conductor-main/src/index.ts",
"type": "main"
}
],
"architecture_pattern": "modular",
"module_system": "esm"
},
"dependencies": {
"production": 45,
"development": 23
},
"code_quality": {
"linting": {
"configured": true,
"tool": "eslint"
},
"formatting": {
"configured": true,
"tool": "prettier"
},
"testing": {
"framework": "vitest",
"test_files": 89,
"coverage_configured": true
},
"type_safety": {
"typescript": true,
"strict_mode": true
}
},
"tech_debt": {
"score": 35,
"indicators": [
{
"category": "complexity",
"severity": "medium",
"description": "3 files exceed 1000 lines",
"remediation_effort": "moderate"
}
]
},
"recommendations": [
{
"priority": "P1",
"category": "maintainability",
"title": "Refactor large files",
"description": "Break down files > 1000 lines into smaller modules",
"effort": "moderate",
"impact": "high"
}
],
"metadata": {
"analyzer_version": "1.0.0",
"analysis_duration_ms": 2340,
"files_analyzed": 1243,
"files_skipped": 3420,
"errors": []
}
}
</formatting_example> </examples>
When classifying files, directories, or components into categories, use weighted keyword scoring instead of simple string matching to prevent false positives:
| Signal Source | Score Weight | Example |
| -------------------- | ------------ | ----------------------------------------- |
| File path/URL | 3 points | /api/routes/ matches "API" category |
| File/class name | 2 points | AuthService.ts matches "Authentication" |
| File content/imports | 1 point | import express matches "Backend" |
Threshold: Require 2+ total points before assigning a category. Falls back to "other" if no category scores above threshold. This prevents weak single-signal matches from misclassifying components.
Category keywords (extend per project type):
For comprehensive project understanding, analyze three parallel streams:
Stream 1 — Code Analysis: AST patterns, framework detection, dependency graph, architecture classification. This is the existing core workflow (Steps 1-11).
Stream 2 — Documentation: README quality, API docs existence, inline doc coverage, changelog maintenance, contribution guides. Score: docFiles / totalFiles weighted by type.
Stream 3 — Community/Operations: Git activity (commit frequency, contributor count), CI/CD configuration, issue templates, PR templates, release workflow, Docker/container setup.
Combine all three streams into the output JSON under analysis.streams:
{
"streams": {
"code": { "score": 0.85, "findings": [...] },
"documentation": { "score": 0.60, "findings": [...] },
"operations": { "score": 0.75, "findings": [...] }
},
"compositeHealth": 0.73
}
Detect common design patterns with confidence scoring:
| Pattern | Detection Signal | Confidence Threshold |
| ---------- | ------------------------------------------- | -------------------- |
| Singleton | Private constructor + static instance | 0.80 |
| Factory | create* methods returning interface types | 0.70 |
| Observer | subscribe/on/emit/addEventListener | 0.70 |
| Strategy | Interface + multiple implementations | 0.60 |
| Decorator | Wrapper classes with same interface | 0.60 |
| Repository | Data access layer abstraction | 0.70 |
| Middleware | Chain-of-responsibility in request pipeline | 0.70 |
Output detected patterns in the analysis JSON with location, confidence, and evidence:
{
"patterns": [
{
"type": "Factory",
"category": "Creational",
"confidence": 0.85,
"location": "src/services/UserFactory.ts",
"evidence": ["createUser method", "returns IUser interface"]
}
]
}
For additional detection patterns extracted from the Auto-Claude analysis framework, see:
references/auto-claude-patterns.md - Monorepo indicators, SERVICE_INDICATORS, SERVICE_ROOT_FILES, infrastructure detection, convention detectionreferences/service-patterns.md - Service type detection (frontend, backend, library), framework-specific patterns, entry point detectionreferences/database-patterns.md - Database configuration file patterns, ORM detection (Prisma, SQLAlchemy, TypeORM, Drizzle, Mongoose), connection string patternsreferences/route-patterns.md - Express, FastAPI, Flask, Django, Next.js, Go, Rust API route detection patternsThese references provide comprehensive regex patterns and detection logic for brownfield codebase analysis.
Before starting:
Read .claude/context/memory/learnings.md
After completing:
.claude/context/memory/learnings.md.claude/context/memory/issues.md.claude/context/memory/decisions.mdASSUME INTERRUPTION: If it's not in memory, it didn't happen.
tools
Comprehensive biosignal processing toolkit for analyzing physiological data including ECG, EEG, EDA, RSP, PPG, EMG, and EOG signals. Use this skill when processing cardiovascular signals, brain activity, electrodermal responses, respiratory patterns, muscle activity, or eye movements. Applicable for heart rate variability analysis, event-related potentials, complexity measures, autonomic nervous system assessment, psychophysiology research, and multi-modal physiological signal integration.
tools
Comprehensive toolkit for creating, analyzing, and visualizing complex networks and graphs in Python. Use when working with network/graph data structures, analyzing relationships between entities, computing graph algorithms (shortest paths, centrality, clustering), detecting communities, generating synthetic networks, or visualizing network topologies. Applicable to social networks, biological networks, transportation systems, citation networks, and any domain involving pairwise relationships.
data-ai
Molecular featurization for ML (100+ featurizers). ECFP, MACCS, descriptors, pretrained models (ChemBERTa), convert SMILES to features, for QSAR and molecular ML.
development
Run Python code in the cloud with serverless containers, GPUs, and autoscaling. Use when deploying ML models, running batch processing jobs, scheduling compute-intensive tasks, or serving APIs that require GPU acceleration or dynamic scaling.