detect-language

star 35

Autonomous language and framework detection for any programming language. Use when user asks to "detect language", "what language is this project", or when initializing ralph-dev for a new project.

mylukin By mylukin schedule Updated 1/21/2026

name: detect-language description: Autonomous language and framework detection for any programming language. Use when user asks to "detect language", "what language is this project", or when initializing ralph-dev for a new project. allowed-tools: [Read, Glob, Bash] user-invocable: true

Language Detection Skill

Goal

Autonomously detect the programming language, framework, build tools, and verification commands for ANY project.

When to Use

  • User asks: "What language is this project?"
  • Initializing ralph-dev for a new project
  • User runs: /detect-language

Workflow

Step 0: Initialize CLI (Automatic)

IMPORTANT: This skill requires the Ralph-dev CLI. It will build automatically on first use.

# Bootstrap CLI - runs automatically, builds if needed
source ${CLAUDE_PLUGIN_ROOT}/shared/bootstrap-cli.sh

# Verify CLI is ready
ralph-dev --version

Step 1: Scan Project Structure

# List root files
ls -la

# Find config files (depth 2)
find . -maxdepth 2 -type f \( \
  -name 'package.json' -o -name '*.toml' -o -name '*.gradle' \
  -o -name 'pom.xml' -o -name 'Gemfile' -o -name 'go.mod' \
  -o -name '*.csproj' -o -name 'Makefile' -o -name 'Package.swift' \
\) 2>/dev/null

# Count source files by extension
for ext in ts js py go rs java rb php cs cpp swift; do
  count=$(find . -name "*.$ext" -type f 2>/dev/null | wc -l)
  [ "$count" -gt 0 ] && echo "$ext: $count files"
done

Step 2: Analyze Config Files

Read the primary config file for the detected language and extract:

  • Dependencies and devDependencies
  • Scripts/commands available
  • Framework indicators

Step 3: Determine Stack

Based on evidence, identify:

Component How to Detect
Language Primary config file + file extensions
Framework Check dependencies for react, django, express, etc.
Build Tool Config files: vite.config, webpack.config, Cargo.toml
Package Manager Lock files: pnpm-lock.yaml, yarn.lock, go.sum
Test Framework devDependencies: jest, vitest, pytest

Step 4: Generate Verification Commands

Language → Commands Mapping:

Language Type Check Lint Test Build
TypeScript npx tsc --noEmit npm run lint npm test npm run build
Python mypy . flake8 pytest -
Go - go vet ./... go test ./... go build ./...
Rust - cargo clippy cargo test cargo build
Java (Maven) - - mvn test mvn package
Java (Gradle) - - ./gradlew test ./gradlew build
Ruby - rubocop rspec -
C# - - dotnet test dotnet build

Adapt commands based on actual project config (scripts in package.json, etc.)

Step 5: Save Results

# Build JSON result
RESULT='{ "language": "...", "verifyCommands": [...] }'

# Save using CLI
ralph-dev detect-ai-save "$RESULT"

Step 6: Display Summary

✅ Language Detection Complete

Language: {language}
Framework: {framework}
Build Tool: {buildTool}
Package Manager: {packageManager}
Test Framework: {testFramework}
Confidence: {N}%

Verification Commands:
1. {typecheck command}
2. {lint command}
3. {test command}
4. {build command}

Output Format

{
  "language": "typescript",
  "confidence": 0.95,
  "evidence": ["package.json exists", "tsconfig.json exists", "47 .ts files"],
  "framework": "react",
  "buildTool": "vite",
  "packageManager": "pnpm",
  "testFramework": "vitest",
  "verifyCommands": [
    "npx tsc --noEmit",
    "pnpm run lint",
    "pnpm test",
    "pnpm run build"
  ]
}

Edge Cases

Monorepo: Multiple config files in subdirectories

  • Detect as monorepo, list packages with their languages
  • Generate per-package verification commands

Multi-Language: Significant files from multiple languages

  • Identify primary language
  • Note secondary languages
  • Generate commands for each

Custom Build: No recognized build system

  • Lower confidence score
  • Check for Makefile targets
  • Suggest manual configuration

Constraints

  • NEVER assume without evidence - always scan files first
  • NEVER suggest commands for tools not present in project
  • ALWAYS base confidence on concrete file presence
  • ALWAYS adapt commands to project's actual scripts/config
  • ALWAYS handle edge cases (monorepo, multi-language)

Error Handling

Error Action
No config files found Lower confidence, detect from file extensions
Conflicting indicators Note ambiguity, ask user to clarify
Unknown build system Suggest manual configuration
Install via CLI
npx skills add https://github.com/mylukin/ralph-dev --skill detect-language
Repository Details
star Stars 35
call_split Forks 3
navigation Branch main
article Path SKILL.md
More from Creator