| name | validating-project |
| description | Auto-detect and run formatters, linters, type checkers, and tests for the current project. Use when validating a project, running all checks, checking code quality before committing, or verifying the build passes. |
| context | fork |
| model | claude-haiku-4-5 |
Validating Project
Auto-detect project tooling and run validation steps in the correct order.
Process
- Check
./CLAUDE.md for validation tools and project permissions
- Auto-detect project type if needed (package.json, pyproject.toml, Cargo.toml, Makefile, go.mod)
- Run validation pipeline: Format -> Lint -> Type Check -> Test
- Stop immediately on failures
- Report results
Tool Commands by Project Type
Make-based (check first -- overrides everything)
make format && make lint && make typecheck && make test
Or make validate if available.
Python
uv run ruff format .
uv run ruff check .
uv run ty check
uv run pytest
Node.js / TypeScript
pnpm run format
pnpm run lint
pnpm run typecheck
pnpm test
Rust
cargo fmt
cargo clippy
cargo test
Go
gofmt -w .
go vet ./...
go test ./...
Auto-Discovery Logic
if [ -f "Makefile" ]; then
elif [ -f "pyproject.toml" ]; then
elif [ -f "package.json" ]; then
elif [ -f "Cargo.toml" ]; then
elif [ -f "go.mod" ]; then
fi
Error Handling
- Tool not found: Provide installation instructions
- Configuration missing: Suggest minimal setup
- Validation failures: Show specific fix recommendations
- Dependency conflicts: Suggest resolution strategies
CLAUDE.md Integration
Cache discovered validation info in the project's CLAUDE.md:
## Project Validation Tools
- **Format**: make format
- **Lint**: make lint
- **Type Check**: make typecheck
- **Test**: make test
Reporting Format
Read ~/.claude/references/status-marks.md and follow its conventions. Report one line per check, then a single plain-text summary line.
Example output:
❨`✓`❩ Trim trailing whitespace
❨`✓`❩ Fix end of file markers
❨`~`❩ Mixed line endings (skipped — none found)
❨`✗`❩ Markdownlint (3 errors)
After the list, add a plain-text summary with no marks — e.g. "all checks passed" or "1 failure: markdownlint". Skip reasons go in parens on the same line. Never collapse the per-item list into a single emoji'd summary.