Tech Stack Detector Skill
This skill provides intelligent detection of technologies, frameworks, and tools used in a project.
Detection Matrix
Languages
| Language | Detection Files | Indicators |
|---|
| TypeScript | tsconfig.json, *.ts, *.tsx | "typescript" in deps |
| JavaScript | *.js, *.jsx, jsconfig.json | No tsconfig |
| Python | pyproject.toml, setup.py, *.py | python, pip, poetry |
| Go | go.mod, go.sum, *.go | module declaration |
| Rust | Cargo.toml, *.rs | [package] section |
| Java | pom.xml, build.gradle, *.java | Maven/Gradle markers |
| C# | *.csproj, *.sln | MSBuild configs |
| Ruby | Gemfile, *.rb | gem declarations |
| PHP | composer.json, *.php | "require" section |
Frontend Frameworks
| Framework | Detection | Key Indicators |
|---|
| React | react in deps | JSX files, hooks patterns |
| Vue | vue in deps | .vue files, Options/Composition API |
| Angular | @angular/core | *.component.ts, decorators |
| Svelte | svelte in deps | .svelte files |
| Next.js | next in deps | pages/ or app/ directory |
| Nuxt | nuxt in deps | nuxt.config.* |
| Remix | @remix-run/* | app/routes/ structure |
| Astro | astro in deps | .astro files |
Backend Frameworks
| Framework | Detection | Key Indicators |
|---|
| Express | express in deps | app.use(), route handlers |
| Fastify | fastify in deps | Plugin architecture |
| NestJS | @nestjs/core | Decorators, modules |
| Django | django in requirements | settings.py, urls.py |
| FastAPI | fastapi in requirements | @app.get() decorators |
| Flask | flask in requirements | @app.route() |
| Spring | spring-boot in pom | @RestController |
| Rails | rails in Gemfile | MVC structure |
| Laravel | laravel/framework | artisan, routes/web.php |
Desktop Frameworks
| Framework | Detection | Key Indicators |
|---|
| Electron | electron in deps | main.js, preload.js |
| Tauri | @tauri-apps/* | tauri.conf.json |
| Qt | CMakeLists.txt + Qt | #include <Qt*> |
Build Tools
| Tool | Detection File | Config Pattern |
|---|
| Vite | vite.config.* | defineConfig() |
| Webpack | webpack.config.* | module.exports = {} |
| Rollup | rollup.config.* | export default {} |
| esbuild | esbuild.config.* | build() calls |
| Turbo | turbo.json | pipeline config |
| Nx | nx.json | projects, generators |
| Parcel | package.json "source" | No config file needed |
| SWC | .swcrc | jsc config |
Package Managers
| Manager | Detection File | Lock File |
|---|
| npm | package.json | package-lock.json |
| yarn | package.json | yarn.lock |
| pnpm | package.json | pnpm-lock.yaml |
| bun | package.json | bun.lockb |
| pip | requirements.txt | - |
| poetry | pyproject.toml | poetry.lock |
| cargo | Cargo.toml | Cargo.lock |
| maven | pom.xml | - |
| gradle | build.gradle | gradle.lockfile |
Testing Frameworks
| Framework | Detection | Config File |
|---|
| Jest | jest in deps | jest.config.* |
| Vitest | vitest in deps | vitest.config.* |
| Mocha | mocha in deps | .mocharc.* |
| Cypress | cypress in deps | cypress.config.* |
| Playwright | @playwright/test | playwright.config.* |
| Pytest | pytest in requirements | pytest.ini, pyproject.toml |
| JUnit | pom.xml + junit | - |
| RSpec | rspec in Gemfile | .rspec |
Databases
| Database | Detection | Connection Patterns |
|---|
| PostgreSQL | pg, psycopg2 | postgres://, postgresql:// |
| MySQL | mysql2, mysqlclient | mysql:// |
| MongoDB | mongodb, mongoose | mongodb:// |
| Redis | redis, ioredis | redis:// |
| SQLite | sqlite3, better-sqlite3 | .db, .sqlite files |
| Prisma | @prisma/client | schema.prisma |
| Drizzle | drizzle-orm | drizzle.config.ts |
Cloud & Infrastructure
| Service | Detection | Config |
|---|
| AWS | @aws-sdk/* | .aws/, serverless.yml |
| GCP | @google-cloud/* | gcloud references |
| Azure | @azure/* | azure-pipelines.yml |
| Vercel | vercel in deps | vercel.json |
| Docker | Dockerfile | docker-compose.yml |
| Kubernetes | k8s manifests | *.yaml with apiVersion |
| Terraform | *.tf files | main.tf, variables.tf |
Detection Algorithm
async function detectTechStack(projectRoot: string): Promise<TechStack> {
const detections: Detection[] = [];
// Phase 1: File-based detection (fast)
const files = await glob(['package.json', 'tsconfig.json', '*.config.*', ...]);
for (const file of files) {
detections.push(...detectFromFile(file));
}
// Phase 2: Content-based detection (selective)
const sampleFiles = selectRepresentativeFiles(projectRoot);
for (const file of sampleFiles) {
detections.push(...detectFromContent(file));
}
// Phase 3: Confidence scoring
const stack = aggregateDetections(detections);
return rankByConfidence(stack);
}
Output Format
## Tech Stack Analysis
### Primary Technologies
| Technology | Version | Confidence | Evidence |
|------------|---------|------------|----------|
| TypeScript | 5.3.x | HIGH | tsconfig.json, *.ts files |
| React | 18.x | HIGH | package.json, JSX patterns |
| Next.js | 14.x | HIGH | next.config.js, app/ directory |
### Build & Development
| Tool | Version | Purpose |
|------|---------|---------|
| pnpm | 8.x | Package manager |
| Turbo | 1.x | Monorepo build |
| Vite | 5.x | Dev server, bundling |
### Testing
| Framework | Coverage | Purpose |
|-----------|----------|---------|
| Jest | HIGH | Unit tests |
| Playwright | MEDIUM | E2E tests |
### Infrastructure
| Service | Purpose |
|---------|---------|
| Docker | Containerization |
| Vercel | Deployment |
### Uncertain Detections
⚠️ Redis: Found redis dependency but no connection config
⚠️ GraphQL: Found @apollo/client but no schema files
Integration with Steering
When invoked during /steering:
- Phase 2 (Tech Discovery) automatically uses this skill
- Populates
tech.md with detected stack
- Generates accurate build commands
- Identifies environment variable requirements
- Detects testing framework for test commands
Confidence Levels
HIGH: Config file + code evidence + dependencies
MEDIUM: Config file + dependencies (no code evidence)
LOW: Dependencies only (may be unused)