MCP HubMCP Hub
スキル一覧に戻る

moai-alfred-language-detection

modu-ai
更新日 Today
69 閲覧
424
78
424
GitHubで表示
開発ai

について

このClaudeスキルは、package.json、pyproject.toml、Cargo.tomlなどの設定ファイルを解析することで、プロジェクトで使用されている言語とフレームワークを自動検出します。17,000以上のプロダクションコード例でトレーニングされた包括的なパターンマッチングを活用しており、自動化されたプロジェクト分析とセットアップに最適です。

クイックインストール

Claude Code

推奨
プラグインコマンド推奨
/plugin add https://github.com/modu-ai/moai-adk
Git クローン代替
git clone https://github.com/modu-ai/moai-adk.git ~/.claude/skills/moai-alfred-language-detection

このコマンドをClaude Codeにコピー&ペーストしてスキルをインストールします

ドキュメント

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:

  1. Config file exists (highest accuracy)
  2. Dependency analysis (framework identification)
  3. 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 リポジトリ

modu-ai/moai-adk
パス: src/moai_adk/templates/.claude/skills/moai-alfred-language-detection
agentic-aiagentic-codingagentic-workflowclaudeclaudecodevibe-coding

関連スキル

evaluating-llms-harness

テスト

This 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.

スキルを見る

sglang

メタ

SGLang 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.

スキルを見る

cloudflare-turnstile

メタ

This skill provides comprehensive guidance for implementing Cloudflare Turnstile as a CAPTCHA-alternative bot protection system. It covers integration for forms, login pages, API endpoints, and frameworks like React/Next.js/Hono, while handling invisible challenges that maintain user experience. Use it when migrating from reCAPTCHA, debugging error codes, or implementing token validation and E2E tests.

スキルを見る

langchain

メタ

LangChain 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.

スキルを見る