name: agent-ops-build description: "Language-aware build orchestration that detects project language and runs appropriate build pipeline" category: extended invokes: [agent-ops-baseline, agent-ops-state] invoked_by: [agent-ops-validation] state_files: read: [constitution.md, baseline.md] write: [baseline.md, focus.md]
agent-ops-build
Language-aware build orchestration skill that detects project language and runs the appropriate build pipeline.
Purpose
Provide a unified build command that:
- Auto-detects project language(s) from configuration files
- Runs language-appropriate build stages
- Reports findings in a consistent format
- Integrates with agent-ops-baseline for comparison
When to Use
- Running a full build pipeline
- Validating changes before commit
- Capturing baseline metrics
- When constitution lacks explicit build commands
Detection Logic
flowchart TD
A[Start] --> B{pyproject.toml?}
B -->|Yes| C[Python Project]
B -->|No| D{setup.py?}
D -->|Yes| C
D -->|No| E{package.json?}
E -->|Yes| F[Node.js Project]
E -->|No| G{*.sln?}
G -->|Yes| H[.NET Project]
G -->|No| I{*.csproj?}
I -->|Yes| H
I -->|No| J[Unknown - Check Constitution]
Language Detection
| Language | Indicators | Priority |
|---|---|---|
| Python | pyproject.toml, setup.py, requirements.txt | 1 |
| TypeScript/JS | package.json, tsconfig.json | 2 |
| C#/.NET | *.sln, *.csproj | 3 |
For mixed projects, run pipelines in priority order.
Build Pipelines
Python Pipeline
Stage 1: Dependencies → uv sync / pip install
Stage 2: Format → ruff format --check
Stage 3: Lint → ruff check
Stage 4: Type Check → mypy src/
Stage 5: Test → pytest --cov
Stage 6: Coverage → Check threshold
Commands:
uv sync
uv run ruff format --check .
uv run ruff check .
uv run mypy src/
uv run pytest --cov=src --cov-report=term-missing
TypeScript/Node.js Pipeline
Stage 1: Dependencies → npm ci / pnpm install
Stage 2: Format → prettier --check
Stage 3: Lint → eslint
Stage 4: Type Check → tsc --noEmit
Stage 5: Test → vitest run / jest
Stage 6: Coverage → Check threshold
Commands:
pnpm install
pnpm run format:check
pnpm run lint
pnpm run typecheck
pnpm run test:coverage
C#/.NET Pipeline
Stage 1: Dependencies → dotnet restore
Stage 2: Format → dotnet format --verify-no-changes
Stage 3: Build → dotnet build -c Release
Stage 4: Test → dotnet test --collect:"XPlat Code Coverage"
Stage 5: Coverage → ReportGenerator (if available)
Commands:
dotnet restore
dotnet format --verify-no-changes
dotnet build -c Release --no-restore
dotnet test -c Release --no-build --collect:"XPlat Code Coverage"
Workflow
1. Detection Phase
Detecting project type...
✓ Found pyproject.toml → Python
✓ Found package.json → Node.js
Detected: Python + Node.js (mixed project)
2. Configuration Phase
Check for existing configuration:
- Constitution commands (highest priority)
- Package manager detection (uv vs pip, pnpm vs npm)
- Tool configuration files (ruff.toml, eslint.config.js)
3. Execution Phase
Run each stage, stopping on first failure:
Python Build Pipeline
═════════════════════
[1/6] Dependencies
$ uv sync
✓ Resolved 45 packages (2.1s)
[2/6] Format Check
$ uv run ruff format --check .
✓ 23 files checked (0.3s)
[3/6] Lint
$ uv run ruff check .
✓ 0 issues (0.4s)
[4/6] Type Check
$ uv run mypy src/
✓ Success, no errors (1.2s)
[5/6] Tests
$ uv run pytest --cov=src
✓ 45 passed (3.1s)
[6/6] Coverage
✓ 84.2% (threshold: 80%)
═════════════════════
✓ BUILD SUCCESSFUL
Total time: 7.1s
4. Report Phase
Generate consistent output:
## Build Report
**Project**: my-project
**Languages**: Python, Node.js
**Date**: 2024-01-15 10:30:00
### Python
| Stage | Status | Time | Notes |
|-------|--------|------|-------|
| Dependencies | ✓ | 2.1s | 45 packages |
| Format | ✓ | 0.3s | 23 files |
| Lint | ✓ | 0.4s | 0 issues |
| Type Check | ✓ | 1.2s | - |
| Tests | ✓ | 3.1s | 45 passed |
| Coverage | ✓ | - | 84.2% |
### Node.js
| Stage | Status | Time | Notes |
|-------|--------|------|-------|
| Dependencies | ✓ | 4.2s | 120 packages |
| Format | ✓ | 0.5s | - |
| Lint | ✓ | 1.1s | 0 warnings |
| Type Check | ✓ | 2.3s | - |
| Tests | ✓ | 5.2s | 78 passed |
| Coverage | ✓ | - | 72.1% |
### Summary
- **Status**: ✓ PASSED
- **Total Time**: 19.4s
- **Warnings**: 0
- **Errors**: 0
Constitution Integration
If constitution.md has explicit commands, prefer those:
# Constitution
## Commands
- **Build**: `make build`
- **Test**: `make test`
- **Lint**: `make lint`
The skill will use constitution commands over auto-detected ones.
Baseline Integration
When --baseline flag is used or baseline.md exists:
- Run build pipeline
- Compare results to baseline
- Report differences
Comparing to baseline (2024-01-14)...
| Metric | Baseline | Current | Change |
|--------|----------|---------|--------|
| Tests | 45 | 48 | +3 |
| Coverage | 82.1% | 84.2% | +2.1% |
| Lint | 0 | 0 | - |
| Type Errors | 0 | 0 | - |
✓ No regressions detected
Options
| Option | Description | Default |
|---|---|---|
--language | Force specific language | auto-detect |
--stage | Run specific stage only | all |
--fix | Auto-fix issues (format, lint) | false |
--baseline | Compare to baseline | false |
--strict | Fail on warnings | false |
--coverage-threshold | Minimum coverage | from config |
Error Handling
Stage Failure
[3/6] Lint
$ uv run ruff check .
✗ 3 issues found
src/auth.py:45:1: E501 Line too long (120 > 100)
src/users.py:12:5: F401 Unused import 'os'
src/users.py:30:1: E302 Expected 2 blank lines
Hint: Run with --fix to auto-fix 2 issues
═════════════════════
✗ BUILD FAILED at stage: Lint
Missing Tools
[2/6] Format Check
⚠ ruff not found
Hint: Install with 'uv add --dev ruff'
Skipping format check...
Examples
Basic Build
Run the build pipeline
Specific Language
Run Python build only
With Auto-fix
Run build and fix any auto-fixable issues
Compare to Baseline
Run build and compare to baseline
Output Files
The skill can optionally output:
build-report.md— Markdown reportbuild-report.json— Machine-readable JSON- Updates to
baseline.md— If capturing new baseline
Integration with Other Skills
| Skill | Integration |
|---|---|
agent-ops-baseline | Compare results, update baseline |
agent-ops-validation | Pre-commit validation |
agent-ops-constitution | Read custom commands |
agent-ops-recovery | Handle build failures |
Troubleshooting
"No project detected"
Ensure you have one of:
pyproject.toml/setup.py(Python)package.json(Node.js)*.sln/*.csproj(.NET)
Or add explicit commands to constitution.md.
"Tool not found"
Install required tools:
- Python:
uv,ruff,mypy,pytest - Node.js:
pnpm/npm,eslint,prettier - .NET:
dotnetCLI
"Coverage below threshold"
Either:
- Add more tests to increase coverage
- Adjust threshold in configuration
- Use
--coverage-thresholdto override