moai-alfred-language-detection
About
This Claude Skill automatically detects project languages and frameworks by analyzing configuration files like package.json, pyproject.toml, and go.mod. It uses comprehensive pattern matching trained on over 17,000 production code examples, making it ideal for quickly identifying a project's tech stack during analysis.
Quick Install
Claude Code
Recommended/plugin add https://github.com/modu-ai/moai-adkgit clone https://github.com/modu-ai/moai-adk.git ~/.claude/skills/moai-alfred-language-detectionCopy and paste this command in Claude Code to install this skill
Documentation
moai-alfred-language-detection
Enterprise Language & Framework Auto-Detection
Research Base: 17,253 code examples from 4 package managers Version: 4.0.0
📖 Progressive Disclosure
Level 1: Quick Reference
Alfred automatically detects project language and framework by parsing configuration files:
Supported Languages (4 ecosystems):
- JavaScript/TypeScript: package.json → npm/yarn/pnpm
- Python: pyproject.toml → Poetry/pip/Pipenv
- Rust: Cargo.toml → Cargo
- Go: go.mod → Go modules
Key Capabilities:
- Config file identification with priority order
- Package manager detection via lockfiles
- Framework identification from dependencies
- Runtime version extraction
- Monorepo pattern recognition
- Fallback to extension analysis
Detection Priority:
- Config file exists (highest accuracy)
- Dependency analysis (framework identification)
- File extension scan (fallback)
Level 2: Practical Implementation
Pattern 1: Node.js Project Detection - package.json
Objective: Identify JavaScript/TypeScript projects and extract metadata.
package.json Structure:
{
"name": "my-web-app",
"version": "1.0.0",
"description": "Modern web application",
"main": "index.js",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"test": "vitest",
"lint": "eslint ."
},
"dependencies": {
"react": "^18.2.0",
"next": "14.0.0",
"express": "^4.18.2"
},
"devDependencies": {
"typescript": "^5.3.0",
"vite": "^5.0.0",
"vitest": "^1.0.0",
"eslint": "^8.54.0"
},
"engines": {
"node": ">=18.0.0",
"npm": ">=9.0.0"
}
}
Detection Logic:
- Language: JavaScript (default if no "type": "module")
- Language: TypeScript (devDependencies.typescript exists)
- Frameworks: React + Next.js (dependencies.react && dependencies.next)
- Server: Express (dependencies.express)
- Build Tool: Vite (devDependencies.vite)
- Test Framework: Vitest (devDependencies.vitest)
- Node Version: ≥18.0.0 (engines.node)
Implementation:
def detect_nodejs_project():
"""Detect Node.js project details from package.json."""
# Check for package.json
if not os.path.exists('package.json'):
return None
with open('package.json', 'r') as f:
package_data = json.load(f)
detection = {
'language': 'javascript',
'frameworks': [],
'build_tools': [],
'test_frameworks': [],
'package_manager': 'npm',
'node_version': None
}
# Language detection
if package_data.get('type') == 'module':
detection['language'] = 'javascript-esm'
elif 'typescript' in package_data.get('devDependencies', {}):
detection['language'] = 'typescript'
# Framework detection
deps = package_data.get('dependencies', {})
if 'react' in deps:
detection['frameworks'].append('react')
if 'next' in deps:
detection['frameworks'].append('next.js')
elif 'gatsby' in deps:
detection['frameworks'].append('gatsby')
elif 'express' in deps:
detection['frameworks'].append('express')
elif 'vue' in deps:
detection['frameworks'].append('vue')
# Build tool detection
dev_deps = package_data.get('devDependencies', {})
if 'vite' in dev_deps:
detection['build_tools'].append('vite')
elif 'webpack' in dev_deps:
detection['build_tools'].append('webpack')
elif 'rollup' in dev_deps:
detection['build_tools'].append('rollup')
# Test framework detection
if 'vitest' in dev_deps:
detection['test_frameworks'].append('vitest')
elif 'jest' in dev_deps:
detection['test_frameworks'].append('jest')
elif 'mocha' in dev_deps:
detection['test_frameworks'].append('mocha')
# Package manager detection
if os.path.exists('pnpm-lock.yaml'):
detection['package_manager'] = 'pnpm'
elif os.path.exists('yarn.lock'):
detection['package_manager'] = 'yarn'
# Node version extraction
engines = package_data.get('engines', {})
detection['node_version'] = engines.get('node')
return detection
Pattern 2: Python Project Detection - pyproject.toml
Objective: Identify Python projects and extract build system, framework, and dependency information.
pyproject.toml Structure:
[build-system]
requires = ["setuptools>=61.0", "wheel"]
build-backend = "setuptools.build_meta"
[project]
name = "my-python-app"
version = "1.0.0"
description = "Python application with FastAPI"
dependencies = [
"fastapi>=0.104.0",
"uvicorn[standard]>=0.24.0",
"sqlalchemy>=2.0.0"
]
[project.optional-dependencies]
dev = [
"pytest>=7.4.0",
"pytest-cov>=4.1.0",
"black>=23.0.0",
"mypy>=1.7.0"
]
[tool.poetry]
name = "my-python-app"
version = "1.0.0"
description = "Python application with FastAPI"
[tool.poetry.dependencies]
python = "^3.11"
fastapi = "^0.104.0"
uvicorn = {extras = ["standard"], version = "^0.24.0"}
[tool.poetry.group.dev.dependencies]
pytest = "^7.4.0"
pytest-cov = "^4.1.0"
black = "^23.0.0"
mypy = "^1.7.0"
[tool.setuptools.packages.find]
where = ["src"]
[tool.black]
line-length = 88
target-version = ['py311']
[tool.mypy]
python_version = "3.11"
strict = true
Detection Logic:
- Build System: Poetry (tool.poetry), setuptools (build-system.requires), or pip (fallback)
- Python Version: From poetry.dependencies.python or requires-python
- Frameworks: FastAPI, Django, Flask (from dependencies)
- Test Frameworks: pytest, unittest (from optional-dependencies/dev)
- Linting: black, flake8, mypy (from dev dependencies)
Implementation:
def detect_python_project():
"""Detect Python project details from pyproject.toml."""
# Check for pyproject.toml
if not os.path.exists('pyproject.toml'):
return None
with open('pyproject.toml', 'r') as f:
toml_data = toml.load(f)
detection = {
'language': 'python',
'frameworks': [],
'build_system': None,
'test_frameworks': [],
'linting_tools': [],
'python_version': None,
'package_manager': 'pip'
}
# Build system detection
if 'tool' in toml_data and 'poetry' in toml_data['tool']:
detection['build_system'] = 'poetry'
detection['package_manager'] = 'poetry'
# Extract Python version from Poetry
python_dep = toml_data['tool']['poetry'].get('dependencies', {}).get('python')
if python_dep:
detection['python_version'] = python_dep.replace('^', '>=')
elif 'build-system' in toml_data:
build_requires = toml_data['build-system'].get('requires', [])
if 'setuptools' in str(build_requires):
detection['build_system'] = 'setuptools'
elif 'flit' in str(build_requires):
detection['build_system'] = 'flit'
elif 'hatch' in str(build_requires):
detection['build_system'] = 'hatch'
# Framework detection from dependencies
deps = []
if 'project' in toml_data and 'dependencies' in toml_data['project']:
deps = toml_data['project']['dependencies']
elif 'tool' in toml_data and 'poetry' in toml_data['tool']:
deps = list(toml_data['tool']['poetry'].get('dependencies', {}).keys())
deps_str = ' '.join(deps).lower()
if 'fastapi' in deps_str:
detection['frameworks'].append('fastapi')
if 'django' in deps_str:
detection['frameworks'].append('django')
if 'flask' in deps_str:
detection['frameworks'].append('flask')
if 'pydantic' in deps_str:
detection['frameworks'].append('pydantic')
# Test framework detection
dev_deps = []
if 'project' in toml_data and 'optional-dependencies' in toml_data['project']:
dev_deps = toml_data['project']['optional-dependencies'].get('dev', [])
elif 'tool' in toml_data and 'poetry' in toml_data:
dev_deps = list(toml_data['tool']['poetry'].get('group', {}).get('dev', {}).get('dependencies', {}).keys())
dev_deps_str = ' '.join(dev_deps).lower()
if 'pytest' in dev_deps_str:
detection['test_frameworks'].append('pytest')
if 'unittest' in dev_deps_str:
detection['test_frameworks'].append('unittest')
# Linting tools detection
if 'black' in dev_deps_str:
detection['linting_tools'].append('black')
if 'flake8' in dev_deps_str:
detection['linting_tools'].append('flake8')
if 'mypy' in dev_deps_str:
detection['linting_tools'].append('mypy')
if 'ruff' in dev_deps_str:
detection['linting_tools'].append('ruff')
return detection
Pattern 3: Rust Project Detection - Cargo.toml
Objective: Identify Rust projects and extract crate information, dependencies, and edition.
Cargo.toml Structure:
[package]
name = "my-rust-app"
version = "0.1.0"
edition = "2021"
description = "Rust application with web framework"
[dependencies]
tokio = { version = "1.0", features = ["full"] }
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
axum = "0.7"
sqlx = { version = "0.7", features = ["postgres", "runtime-tokio-rustls"] }
[dev-dependencies]
tokio-test = "0.4"
criterion = "0.5"
[features]
default = ["axum"]
rocket = ["dep:rocket", "tokio/sync"]
[workspace]
members = [
"crates/core",
"crates/utils",
"crates/api"
]
[profile.release]
lto = true
codegen-units = 1
panic = "abort"
Detection Logic:
- Edition: 2021, 2021, or 2018 from package.edition
- Frameworks: axum, rocket, actix-web (from dependencies)
- Async Runtime: tokio, async-std (from dependencies)
- Database: sqlx, diesel (from dependencies)
- Serialization: serde, serde_json (from dependencies)
- Workspace: Multi-crate project if workspace members exist
Implementation:
def detect_rust_project():
"""Detect Rust project details from Cargo.toml."""
# Check for Cargo.toml
if not os.path.exists('Cargo.toml'):
return None
with open('Cargo.toml', 'r') as f:
cargo_data = toml.load(f)
detection = {
'language': 'rust',
'frameworks': [],
'async_runtime': None,
'database_libs': [],
'serialization': [],
'edition': '2021',
'is_workspace': False
}
# Package information
if 'package' in cargo_data:
package_info = cargo_data['package']
detection['edition'] = package_info.get('edition', '2021')
# Workspace detection
if 'workspace' in cargo_data:
detection['is_workspace'] = True
# Dependencies analysis
deps = cargo_data.get('dependencies', {})
deps_str = ' '.join(deps.keys()).lower()
# Framework detection
if 'axum' in deps_str:
detection['frameworks'].append('axum')
if 'rocket' in deps_str:
detection['frameworks'].append('rocket')
if 'actix-web' in deps_str or 'actix' in deps_str:
detection['frameworks'].append('actix-web')
# Async runtime detection
if 'tokio' in deps_str:
detection['async_runtime'] = 'tokio'
elif 'async-std' in deps_str:
detection['async_runtime'] = 'async-std'
# Database libraries detection
if 'sqlx' in deps_str:
detection['database_libs'].append('sqlx')
if 'diesel' in deps_str:
detection['database_libs'].append('diesel')
if 'sea-orm' in deps_str:
detection['database_libs'].append('sea-orm')
# Serialization detection
if 'serde' in deps_str:
detection['serialization'].append('serde')
if 'serde_json' in deps_str:
detection['serialization'].append('serde_json')
return detection
Pattern 4: Go Project Detection - go.mod
Objective: Identify Go projects and extract module information, Go version, and dependencies.
go.mod Structure:
module github.com/username/my-go-app
go 1.21
require (
github.com/gin-gonic/gin v1.9.1
github.com/golang-migrate/migrate/v4 v4.16.2
github.com/lib/pq v1.10.9
github.com/spf13/viper v1.17.0
github.com/stretchr/testify v1.8.4
)
require (
github.com/bytedance/sonic v1.9.1 // indirect
github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect
github.com/gabriel-vasile/mimetype v1.4.2 // indirect
)
Detection Logic:
- Go Version: From go directive (1.21, 1.20, etc.)
- Frameworks: gin, echo, fiber (from require statements)
- Database: lib/pq (PostgreSQL), go-sqlite3, gorm (from require)
- Configuration: viper, envconfig (from require)
- Testing: testify, gomock (from require)
Implementation:
def detect_go_project():
"""Detect Go project details from go.mod."""
# Check for go.mod
if not os.path.exists('go.mod'):
return None
with open('go.mod', 'r') as f:
go_mod_content = f.read()
detection = {
'language': 'go',
'frameworks': [],
'database_libs': [],
'config_libs': [],
'test_libs': [],
'go_version': None,
'module_name': None
}
lines = go_mod_content.split('\n')
for line in lines:
GitHub Repository
Related Skills
sglang
MetaSGLang is a high-performance LLM serving framework that specializes in fast, structured generation for JSON, regex, and agentic workflows using its RadixAttention prefix caching. It delivers significantly faster inference, especially for tasks with repeated prefixes, making it ideal for complex, structured outputs and multi-turn conversations. Choose SGLang over alternatives like vLLM when you need constrained decoding or are building applications with extensive prefix sharing.
evaluating-llms-harness
TestingThis Claude Skill runs the lm-evaluation-harness to benchmark LLMs across 60+ standardized academic tasks like MMLU and GSM8K. It's designed for developers to compare model quality, track training progress, or report academic results. The tool supports various backends including HuggingFace and vLLM models.
llamaguard
OtherLlamaGuard is Meta's 7-8B parameter model for moderating LLM inputs and outputs across six safety categories like violence and hate speech. It offers 94-95% accuracy and can be deployed using vLLM, Hugging Face, or Amazon SageMaker. Use this skill to easily integrate content filtering and safety guardrails into your AI applications.
langchain
MetaLangChain is a framework for building LLM applications using agents, chains, and RAG pipelines. It supports multiple LLM providers, offers 500+ integrations, and includes features like tool calling and memory management. Use it for rapid prototyping and deploying production systems like chatbots, autonomous agents, and question-answering services.
