| name | project-detection |
| description | Detects project type, package manager, and monorepo structure. Returns correct commands for test/build/lint/dev. Run at project initialization and cache results in state. Use before running any build/test commands. |
Project Detection
Detects project configuration and provides standardized commands. Run once at init, cache in state file.
Usage
Run the detection script from the project root:
./marathon-ralph/skills/project-detection/scripts/detect.sh /path/to/project
Returns JSON:
{
"language": "node",
"packageManager": "bun",
"monorepo": {
"type": "turbo",
"workspaces": ["apps/web", "apps/api", "packages/shared"]
},
"commands": {
"install": "bun install",
"dev": "bun run dev",
"build": "bun run build",
"test": "bun run test",
"testWorkspace": "bun run --filter={workspace} test",
"lint": "bun run lint",
"typecheck": "bun run check-types"
}
}
Caching Results
After detection, store in marathon state file under project key:
{
"project": {
"language": "node",
"packageManager": "bun",
"monorepo": { "type": "turbo", "workspaces": [...] },
"commands": { ... },
"detectedAt": "2024-01-03T12:00:00Z"
}
}
Using Cached Commands
When running commands, always check state first:
- Read
project.commands from state
- If not present, run detection script
- Use the appropriate command from the cache
For Monorepos
When tests/builds need to target a specific workspace:
bun run --filter=web test
turbo run test
Command Selection Priority
- Use cached command from state
- If no cache, run detection
- If detection fails, fall back to reference patterns
Detection Logic
Package Manager Detection (by lock file)
| Lock File | Package Manager | Install | Run |
|---|
bun.lock or bun.lockb | bun | bun install | bun run |
pnpm-lock.yaml | pnpm | pnpm install | pnpm run |
yarn.lock | yarn | yarn install | yarn |
package-lock.json | npm | npm install | npm run |
Monorepo Detection
| Config File | Monorepo Type |
|---|
turbo.json | Turborepo |
nx.json | Nx |
lerna.json | Lerna |
pnpm-workspace.yaml | pnpm workspaces |
package.json with workspaces | npm/yarn workspaces |
Language Detection
| Indicator | Language |
|---|
package.json | Node.js |
pyproject.toml, setup.py | Python |
go.mod | Go |
Cargo.toml | Rust |
build.gradle, pom.xml | Java |
Python Project Commands
For Python projects:
| Tool | Install | Run Script | Test |
|---|
| poetry | poetry install | poetry run {script} | poetry run pytest |
| poetry+poe | poetry install | poe {task} | poe test |
| pip + venv | pip install -r requirements.txt | python -m {module} | pytest |
| uv | uv pip install -r requirements.txt | uv run {script} | uv run pytest |
| pipenv | pipenv install | pipenv run {script} | pipenv run pytest |
Note: If [tool.poe.tasks] exists in pyproject.toml, poe commands are preferred.
Reference Files