home / skills / fortiumpartners / ai-mesh / framework-detector

framework-detector skill

/skills/framework-detector

This skill automatically detects the project framework using multi-signal analysis and confidence scoring to guide framework-specific tool loading.

npx playbooks add skill fortiumpartners/ai-mesh --skill framework-detector

Review the files below or copy the command above to add this skill to your agents.

Files (5)
SKILL.md
4.8 KB
---
name: Framework Detector
version: 1.0.0
framework_versions:
  min: 1.0.0
  recommended: 1.0.0
compatible_agents:
  backend-developer: ">=3.0.0"
  frontend-developer: ">=3.0.0"
  tech-lead-orchestrator: ">=2.5.0"
description: Multi-signal framework detection with confidence scoring for 6 major frameworks
frameworks:
  - framework-detector
languages:
  - javascript
  - typescript
category: utility
updated: 2025-10-22
---

# Framework Detector Skill

## Quick Reference

**When to Use**: Automatically detect framework in project before loading framework-specific skills

**Supported Frameworks**: NestJS, React, Phoenix, Rails, .NET/ASP.NET Core, Blazor

**Detection Method**: Multi-signal analysis with weighted confidence scoring

## Usage

### Basic Detection

```javascript
const FrameworkDetector = require('./detect-framework');

const detector = new FrameworkDetector('/path/to/project');
const result = await detector.detect();

console.log(result.primary);    // "nestjs"
console.log(result.confidence); // 0.92
console.log(result.alternates); // [{ framework: "dotnet", confidence: 0.45 }]
```

### CLI Usage

```bash
# Detect framework in current directory
./detect-framework.js

# Detect framework in specific project
./detect-framework.js /path/to/project

# Output format (JSON)
{
  "primary": "react",
  "confidence": 0.89,
  "alternates": [],
  "details": { ... }
}
```

## Detection Signals

### 1. Package Manager (Weight: 10)
- **Node.js**: `package.json` dependencies
- **Ruby**: `Gemfile` gems
- **Elixir**: `mix.exs` dependencies
- **.NET**: `*.csproj` PackageReferences

### 2. Files (Weight: 8-9)
- Required: Framework-specific config files
- Optional: Common project structure files
- Wildcards: Pattern matching (e.g., `*.csproj`)

### 3. Imports (Weight: 7-8)
- Code pattern analysis in source files
- Regex-based matching
- File sampling for performance (max 20 files)

### 4. Boost Factors (Multiplier: 1.2-1.6x)
- Strong indicators multiply confidence
- Framework-specific patterns
- Examples:
  - NestJS: `nest-cli.json` (+50%)
  - React: JSX files (+40%)
  - Blazor: `.razor` files (+60%)

## Confidence Threshold

**Default**: 0.8 (80% confidence required)

**Interpretation**:
- ≥ 0.9: Very high confidence
- 0.8-0.9: High confidence
- 0.6-0.8: Medium confidence (below threshold)
- < 0.6: Low confidence

## Framework-Specific Patterns

### NestJS Detection
```
✓ @nestjs/core in package.json
✓ nest-cli.json exists
✓ @Module decorator in .ts files
✓ @Controller decorator in .ts files
```

### React Detection
```
✓ react in package.json
✓ .jsx or .tsx files exist
✓ useState or useEffect in code
✓ createRoot in code
```

### Phoenix Detection
```
✓ {:phoenix, in mix.exs
✓ config/config.exs exists
✓ Phoenix.Endpoint in .ex files
✓ Phoenix.Router in .ex files
```

### Rails Detection
```
✓ gem 'rails' in Gemfile
✓ config/application.rb exists
✓ Rails.application in code
✓ ActiveRecord::Base in code
```

### .NET Detection
```
✓ Microsoft.AspNetCore in .csproj
✓ Program.cs exists
✓ [ApiController] in .cs files
✓ using Microsoft.AspNetCore
```

### Blazor Detection
```
✓ Microsoft.AspNetCore.Components in .csproj
✓ .razor files exist
✓ @page directive in .razor files
✓ ComponentBase in code
```

## Performance

**Optimizations**:
- File sampling (10-20 files max per check)
- Glob ignore patterns (node_modules, dist, build)
- Early exit on strong matches
- Async/await for parallel checks

**Typical Detection Time**: 100-500ms

## Error Handling

**No Frameworks Detected**:
```javascript
{
  primary: null,
  confidence: 0,
  alternates: [],
  details: {}
}
```

**Multiple Frameworks** (e.g., monorepo):
```javascript
{
  primary: "react",
  confidence: 0.91,
  alternates: [
    { framework: "nestjs", confidence: 0.87 }
  ]
}
```

## Integration with SkillLoader

```javascript
const { SkillLoader } = require('../skill-loader');
const FrameworkDetector = require('./detect-framework');

async function loadFrameworkSkill(projectRoot) {
  // 1. Detect framework
  const detector = new FrameworkDetector(projectRoot);
  const result = await detector.detect();

  // 2. Handle low confidence
  if (result.confidence < 0.8) {
    // Prompt user or use alternates
    console.warn('Low confidence detection');
  }

  // 3. Load skill
  const loader = new SkillLoader({
    agentName: 'backend-developer',
    agentVersion: '3.0.0'
  });

  const skill = await loader.loadSkill(result.primary, 'quick');
  return skill;
}
```

## Configuration

Edit `framework-patterns.json` to:
- Add new frameworks
- Adjust detection weights
- Modify confidence threshold
- Update boost factors

## See Also

- [framework-patterns.json](./framework-patterns.json) - Detection patterns configuration
- [detect-framework.js](./detect-framework.js) - Implementation source
- ../../lib/skill-loader.js - Skill loading integration

Overview

This skill detects the primary web or backend framework used in a project and returns a confidence score along with alternates. It supports NestJS, React, Phoenix, Rails, .NET/ASP.NET Core, and Blazor. The detector is optimized for speed and is intended to run before loading framework-specific automation or tooling.

How this skill works

The detector analyzes multiple signals—package manager entries, framework-specific files, code imports and decorators, and strong boost patterns—to compute a weighted confidence score. It samples source files for import patterns, matches config and file name patterns, and applies multipliers for strong indicators. Results include primary framework, confidence, alternates, and a brief explanation of detected signals.

When to use it

  • Before loading a framework-specific skill or code generator
  • During CI to gate framework-dependent pipelines
  • When onboarding a new repository to quickly identify technology stack
  • In monorepos to decide which subprojects need specific handlers
  • As a pre-check for migration or upgrade tooling

Best practices

  • Run detection from the project root with common ignore patterns (node_modules, build directories) to avoid noise
  • Use the provided confidence threshold (default 0.8) to decide whether to prompt the user or proceed automatically
  • Adjust detection weights and boost factors if your projects use nonstandard layouts or custom filenames
  • Sample a limited number of files for import scanning to keep detection fast (10–20 files)
  • Handle low-confidence results by presenting alternates and brief evidence to the user

Example use cases

  • A CLI tool that auto-selects React or NestJS workflows before scaffolding code
  • CI job that routes tests to different runners based on detected framework
  • An onboarding bot that summarizes the repository stack for a new developer
  • A monorepo assistant that loads specific linters and formatters per subproject
  • Migration assistant that runs framework-specific checks only when detection confidence is high

FAQ

What does the confidence score mean?

Confidence is a weighted score from multiple signals; ≥0.9 is very high, 0.8–0.9 is high, 0.6–0.8 is medium, and below 0.6 is low.

How does the detector handle monorepos with multiple frameworks?

It returns a primary framework and alternates with their confidences so you can load multiple skills or prompt the user.

Can I add support for more frameworks?

Yes. You can extend the pattern configuration to add new frameworks, adjust weights, and tune boost factors for custom indicators.