| 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.commandsfrom 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:
# Use testWorkspace with the workspace name
bun run --filter=web test
# Or for all workspaces
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
- node.md - Node.js patterns and commands
- python.md - Python patterns and commands
- monorepo.md - Monorepo-specific patterns