mirror of
https://github.com/affaan-m/everything-claude-code.git
synced 2026-05-14 02:10:07 +08:00
540 lines
16 KiB
JSON
540 lines
16 KiB
JSON
{
|
|
"version": 1,
|
|
"description": "Maps project indicator files to ECC skills, rules, hooks, and default commands. Used by /project-init to auto-configure projects.",
|
|
"stacks": [
|
|
{
|
|
"id": "typescript",
|
|
"name": "TypeScript / JavaScript",
|
|
"indicators": [
|
|
{ "file": "tsconfig.json" },
|
|
{ "file": "tsconfig.*.json" },
|
|
{ "file": "package.json", "contains": "typescript" }
|
|
],
|
|
"rules": ["common", "typescript"],
|
|
"skills": [
|
|
"coding-standards",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["npx tsc --noEmit", "npm run build"],
|
|
"test": ["npm test", "npx jest", "npx vitest"],
|
|
"lint": ["npx eslint .", "npx tsc --noEmit"],
|
|
"format": ["npx prettier --write ."]
|
|
},
|
|
"permissions": {
|
|
"allow": ["npx tsc", "npx eslint", "npx prettier", "npm test", "npm run *", "npx jest", "npx vitest"],
|
|
"deny": ["npm publish"]
|
|
}
|
|
},
|
|
{
|
|
"id": "javascript",
|
|
"name": "JavaScript (Node.js)",
|
|
"indicators": [
|
|
{ "file": "package.json" },
|
|
{ "file": ".eslintrc*" },
|
|
{ "file": "eslint.config.*" }
|
|
],
|
|
"rules": ["common", "typescript"],
|
|
"skills": [
|
|
"coding-standards",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["npm run build"],
|
|
"test": ["npm test", "npx jest", "npx vitest"],
|
|
"lint": ["npx eslint ."],
|
|
"format": ["npx prettier --write ."]
|
|
},
|
|
"permissions": {
|
|
"allow": ["npx eslint", "npx prettier", "npm test", "npm run *", "npx jest", "npx vitest"],
|
|
"deny": ["npm publish"]
|
|
}
|
|
},
|
|
{
|
|
"id": "react",
|
|
"name": "React",
|
|
"indicators": [
|
|
{ "file": "package.json", "contains": "\"react\":" }
|
|
],
|
|
"rules": ["common", "typescript", "web"],
|
|
"skills": [
|
|
"coding-standards",
|
|
"frontend-patterns",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["npm run build"],
|
|
"test": ["npm test", "npx jest", "npx vitest"],
|
|
"lint": ["npx eslint ."],
|
|
"format": ["npx prettier --write ."]
|
|
},
|
|
"permissions": {
|
|
"allow": ["npx eslint", "npx prettier", "npm test", "npm run *", "npx jest", "npx vitest"],
|
|
"deny": ["npm publish"]
|
|
}
|
|
},
|
|
{
|
|
"id": "nextjs",
|
|
"name": "Next.js",
|
|
"indicators": [
|
|
{ "file": "next.config.*" },
|
|
{ "file": "package.json", "contains": "\"next\":" }
|
|
],
|
|
"rules": ["common", "typescript", "web"],
|
|
"skills": [
|
|
"coding-standards",
|
|
"frontend-patterns",
|
|
"backend-patterns",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["npm run build", "npx next build"],
|
|
"test": ["npm test", "npx jest", "npx vitest"],
|
|
"lint": ["npx next lint", "npx eslint ."],
|
|
"format": ["npx prettier --write ."],
|
|
"dev": ["npm run dev", "npx next dev"]
|
|
},
|
|
"permissions": {
|
|
"allow": ["npx next *", "npx eslint", "npx prettier", "npm test", "npm run *", "npx jest", "npx vitest"],
|
|
"deny": ["npm publish"]
|
|
}
|
|
},
|
|
{
|
|
"id": "golang",
|
|
"name": "Go",
|
|
"indicators": [
|
|
{ "file": "go.mod" },
|
|
{ "file": "go.sum" }
|
|
],
|
|
"rules": ["common", "golang"],
|
|
"skills": [
|
|
"golang-patterns",
|
|
"golang-testing",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["go build ./..."],
|
|
"test": ["go test ./..."],
|
|
"lint": ["golangci-lint run", "go vet ./..."],
|
|
"format": ["gofmt -w ."]
|
|
},
|
|
"permissions": {
|
|
"allow": ["go build *", "go test *", "go vet *", "go mod *", "go run *", "golangci-lint *", "gofmt *"],
|
|
"deny": []
|
|
}
|
|
},
|
|
{
|
|
"id": "python",
|
|
"name": "Python",
|
|
"indicators": [
|
|
{ "file": "pyproject.toml" },
|
|
{ "file": "setup.py" },
|
|
{ "file": "setup.cfg" },
|
|
{ "file": "requirements.txt" },
|
|
{ "file": "Pipfile" },
|
|
{ "file": "poetry.lock" }
|
|
],
|
|
"rules": ["common", "python"],
|
|
"skills": [
|
|
"python-patterns",
|
|
"python-testing",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["python -m build", "pip install -e ."],
|
|
"test": ["pytest", "python -m pytest"],
|
|
"lint": ["ruff check .", "flake8", "mypy ."],
|
|
"format": ["ruff format .", "black ."]
|
|
},
|
|
"permissions": {
|
|
"allow": ["python *", "pip install *", "pytest *", "ruff *", "black *", "mypy *", "flake8 *"],
|
|
"deny": ["pip install --user *"]
|
|
}
|
|
},
|
|
{
|
|
"id": "rust",
|
|
"name": "Rust",
|
|
"indicators": [
|
|
{ "file": "Cargo.toml" },
|
|
{ "file": "Cargo.lock" }
|
|
],
|
|
"rules": ["common", "rust"],
|
|
"skills": [
|
|
"rust-patterns",
|
|
"rust-testing",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["cargo build"],
|
|
"test": ["cargo test"],
|
|
"lint": ["cargo clippy -- -D warnings"],
|
|
"format": ["cargo fmt"]
|
|
},
|
|
"permissions": {
|
|
"allow": ["cargo build *", "cargo test *", "cargo clippy *", "cargo fmt *", "cargo run *", "cargo check *"],
|
|
"deny": ["cargo publish"]
|
|
}
|
|
},
|
|
{
|
|
"id": "java",
|
|
"name": "Java",
|
|
"indicators": [
|
|
{ "file": "pom.xml" },
|
|
{ "file": "build.gradle" },
|
|
{ "file": "build.gradle.kts" }
|
|
],
|
|
"rules": ["common", "java"],
|
|
"skills": [
|
|
"java-coding-standards",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["./mvnw compile", "./gradlew build", "mvn compile", "gradle build"],
|
|
"test": ["./mvnw test", "./gradlew test", "mvn test", "gradle test"],
|
|
"lint": ["./mvnw checkstyle:check", "./gradlew checkstyleMain"],
|
|
"format": ["./mvnw spotless:apply", "./gradlew spotlessApply"]
|
|
},
|
|
"permissions": {
|
|
"allow": ["./mvnw *", "./gradlew *", "mvn *", "gradle *", "java *"],
|
|
"deny": ["./mvnw deploy", "./gradlew publish", "mvn deploy", "gradle publish"]
|
|
}
|
|
},
|
|
{
|
|
"id": "springboot",
|
|
"name": "Spring Boot (Java/Kotlin)",
|
|
"indicators": [
|
|
{ "file": "pom.xml", "contains": "spring-boot" },
|
|
{ "file": "build.gradle", "contains": "spring-boot" },
|
|
{ "file": "build.gradle.kts", "contains": "spring-boot" }
|
|
],
|
|
"rules": ["common", "java"],
|
|
"skills": [
|
|
"springboot-patterns",
|
|
"springboot-tdd",
|
|
"springboot-verification",
|
|
"springboot-security",
|
|
"java-coding-standards",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["./mvnw compile", "./gradlew build"],
|
|
"test": ["./mvnw test", "./gradlew test"],
|
|
"lint": ["./mvnw checkstyle:check"],
|
|
"format": ["./mvnw spotless:apply"],
|
|
"dev": ["./mvnw spring-boot:run", "./gradlew bootRun"]
|
|
},
|
|
"permissions": {
|
|
"allow": ["./mvnw *", "./gradlew *", "mvn *", "gradle *", "java *"],
|
|
"deny": ["./mvnw deploy", "./gradlew publish", "mvn deploy", "gradle publish"]
|
|
}
|
|
},
|
|
{
|
|
"id": "kotlin",
|
|
"name": "Kotlin",
|
|
"indicators": [
|
|
{ "file": "build.gradle.kts" },
|
|
{ "file": "settings.gradle.kts" },
|
|
{ "file": "build.gradle", "contains": "kotlin" }
|
|
],
|
|
"rules": ["common", "kotlin"],
|
|
"skills": [
|
|
"kotlin-patterns",
|
|
"kotlin-testing",
|
|
"kotlin-coroutines-flows",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["./gradlew build"],
|
|
"test": ["./gradlew test"],
|
|
"lint": ["./gradlew ktlintCheck", "./gradlew detekt"],
|
|
"format": ["./gradlew ktlintFormat"]
|
|
},
|
|
"permissions": {
|
|
"allow": ["./gradlew *", "gradle *", "kotlin *"],
|
|
"deny": ["./gradlew publish"]
|
|
}
|
|
},
|
|
{
|
|
"id": "swift",
|
|
"name": "Swift / SwiftUI",
|
|
"indicators": [
|
|
{ "file": "Package.swift" },
|
|
{ "file": "*.xcodeproj" },
|
|
{ "file": "*.xcworkspace" },
|
|
{ "file": "Podfile" }
|
|
],
|
|
"rules": ["common", "swift"],
|
|
"skills": [
|
|
"swiftui-patterns",
|
|
"swift-concurrency-6-2",
|
|
"swift-actor-persistence",
|
|
"swift-protocol-di-testing",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["swift build", "xcodebuild build"],
|
|
"test": ["swift test", "xcodebuild test"],
|
|
"lint": ["swiftlint"],
|
|
"format": ["swiftformat ."]
|
|
},
|
|
"permissions": {
|
|
"allow": ["swift build *", "swift test *", "swift run *", "xcodebuild *", "swiftlint *", "swiftformat *"],
|
|
"deny": []
|
|
}
|
|
},
|
|
{
|
|
"id": "dart-flutter",
|
|
"name": "Dart / Flutter",
|
|
"indicators": [
|
|
{ "file": "pubspec.yaml" },
|
|
{ "file": "pubspec.lock" }
|
|
],
|
|
"rules": ["common", "dart"],
|
|
"skills": [
|
|
"dart-flutter-patterns",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["flutter build", "dart compile"],
|
|
"test": ["flutter test", "dart test"],
|
|
"lint": ["dart analyze"],
|
|
"format": ["dart format ."]
|
|
},
|
|
"permissions": {
|
|
"allow": ["flutter *", "dart *"],
|
|
"deny": ["flutter pub publish"]
|
|
}
|
|
},
|
|
{
|
|
"id": "php-laravel",
|
|
"name": "PHP / Laravel",
|
|
"indicators": [
|
|
{ "file": "composer.json" },
|
|
{ "file": "artisan" },
|
|
{ "file": "composer.lock" }
|
|
],
|
|
"rules": ["common", "php"],
|
|
"skills": [
|
|
"laravel-patterns",
|
|
"laravel-tdd",
|
|
"laravel-verification",
|
|
"laravel-security",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["composer install"],
|
|
"test": ["php artisan test", "vendor/bin/phpunit", "vendor/bin/pest"],
|
|
"lint": ["vendor/bin/phpstan analyse", "vendor/bin/pint"],
|
|
"format": ["vendor/bin/pint"]
|
|
},
|
|
"permissions": {
|
|
"allow": ["php artisan *", "composer *", "vendor/bin/*"],
|
|
"deny": []
|
|
}
|
|
},
|
|
{
|
|
"id": "ruby",
|
|
"name": "Ruby / Rails",
|
|
"indicators": [
|
|
{ "file": "Gemfile" },
|
|
{ "file": "Gemfile.lock" },
|
|
{ "file": "Rakefile" }
|
|
],
|
|
"rules": ["common"],
|
|
"skills": [
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["bundle install"],
|
|
"test": ["bundle exec rspec", "bundle exec rake test"],
|
|
"lint": ["bundle exec rubocop"],
|
|
"format": ["bundle exec rubocop -A"]
|
|
},
|
|
"permissions": {
|
|
"allow": ["bundle exec *", "rails *", "rake *", "ruby *"],
|
|
"deny": ["gem push"]
|
|
}
|
|
},
|
|
{
|
|
"id": "csharp-dotnet",
|
|
"name": "C# / .NET",
|
|
"indicators": [
|
|
{ "file": "*.csproj" },
|
|
{ "file": "*.sln" },
|
|
{ "file": "global.json" }
|
|
],
|
|
"rules": ["common", "csharp"],
|
|
"skills": [
|
|
"dotnet-patterns",
|
|
"csharp-testing",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["dotnet build"],
|
|
"test": ["dotnet test"],
|
|
"lint": ["dotnet format --verify-no-changes"],
|
|
"format": ["dotnet format"]
|
|
},
|
|
"permissions": {
|
|
"allow": ["dotnet build *", "dotnet test *", "dotnet run *", "dotnet format *"],
|
|
"deny": ["dotnet nuget push"]
|
|
}
|
|
},
|
|
{
|
|
"id": "cpp",
|
|
"name": "C / C++",
|
|
"indicators": [
|
|
{ "file": "CMakeLists.txt" },
|
|
{ "file": "Makefile" },
|
|
{ "file": "meson.build" },
|
|
{ "file": "*.vcxproj" }
|
|
],
|
|
"rules": ["common", "cpp"],
|
|
"skills": [
|
|
"cpp-coding-standards",
|
|
"cpp-testing",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["cmake --build build", "make"],
|
|
"test": ["ctest --test-dir build", "make test"],
|
|
"lint": ["clang-tidy -p build"],
|
|
"format": ["clang-format -i **/*.cpp **/*.h **/*.c **/*.hpp"]
|
|
},
|
|
"permissions": {
|
|
"allow": ["cmake *", "make *", "ctest *", "clang-tidy *", "clang-format *", "gcc *", "g++ *"],
|
|
"deny": []
|
|
}
|
|
},
|
|
{
|
|
"id": "perl",
|
|
"name": "Perl",
|
|
"indicators": [
|
|
{ "file": "cpanfile" },
|
|
{ "file": "Makefile.PL" },
|
|
{ "file": "Build.PL" },
|
|
{ "file": "dist.ini" }
|
|
],
|
|
"rules": ["common", "perl"],
|
|
"skills": [
|
|
"perl-patterns",
|
|
"perl-testing",
|
|
"perl-security",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["perl Makefile.PL && make", "perl Build.PL && ./Build"],
|
|
"test": ["prove -lr t/", "make test"],
|
|
"lint": ["perlcritic lib/"],
|
|
"format": ["perltidy -b lib/**/*.pl"]
|
|
},
|
|
"permissions": {
|
|
"allow": ["perl *", "prove *", "make *", "perlcritic *", "perltidy *"],
|
|
"deny": []
|
|
}
|
|
},
|
|
{
|
|
"id": "django",
|
|
"name": "Django (Python)",
|
|
"indicators": [
|
|
{ "file": "manage.py" },
|
|
{ "file": "requirements.txt", "contains": "django" },
|
|
{ "file": "pyproject.toml", "contains": "django" }
|
|
],
|
|
"rules": ["common", "python"],
|
|
"skills": [
|
|
"django-patterns",
|
|
"django-tdd",
|
|
"django-verification",
|
|
"django-security",
|
|
"python-patterns",
|
|
"python-testing",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["pip install -e ."],
|
|
"test": ["python manage.py test", "pytest"],
|
|
"lint": ["ruff check .", "mypy ."],
|
|
"format": ["ruff format .", "black ."],
|
|
"dev": ["python manage.py runserver"]
|
|
},
|
|
"permissions": {
|
|
"allow": ["python *", "pip install *", "pytest *", "ruff *", "black *", "mypy *"],
|
|
"deny": []
|
|
}
|
|
},
|
|
{
|
|
"id": "android",
|
|
"name": "Android (Kotlin/Java)",
|
|
"indicators": [
|
|
{ "file": "settings.gradle.kts", "contains": "android" },
|
|
{ "file": "build.gradle", "contains": "android" },
|
|
{ "file": "AndroidManifest.xml" }
|
|
],
|
|
"rules": ["common", "kotlin"],
|
|
"skills": [
|
|
"android-clean-architecture",
|
|
"kotlin-patterns",
|
|
"kotlin-testing",
|
|
"kotlin-coroutines-flows",
|
|
"compose-multiplatform-patterns",
|
|
"tdd-workflow",
|
|
"verification-loop"
|
|
],
|
|
"commands": {
|
|
"build": ["./gradlew assembleDebug"],
|
|
"test": ["./gradlew testDebugUnitTest"],
|
|
"lint": ["./gradlew lint", "./gradlew ktlintCheck"],
|
|
"format": ["./gradlew ktlintFormat"]
|
|
},
|
|
"permissions": {
|
|
"allow": ["./gradlew *", "adb *"],
|
|
"deny": []
|
|
}
|
|
},
|
|
{
|
|
"id": "docker",
|
|
"name": "Docker / Containerized",
|
|
"indicators": [
|
|
{ "file": "Dockerfile" },
|
|
{ "file": "docker-compose.yml" },
|
|
{ "file": "docker-compose.yaml" },
|
|
{ "file": "compose.yml" },
|
|
{ "file": "compose.yaml" }
|
|
],
|
|
"rules": [],
|
|
"skills": [
|
|
"docker-patterns",
|
|
"deployment-patterns"
|
|
],
|
|
"commands": {
|
|
"build": ["docker compose build", "docker build ."],
|
|
"test": ["docker compose run --rm app test"],
|
|
"dev": ["docker compose up"]
|
|
},
|
|
"permissions": {
|
|
"allow": ["docker compose *", "docker build *"],
|
|
"deny": ["docker push"]
|
|
}
|
|
}
|
|
]
|
|
}
|