Skip to content

Automated Code Review

Git push to any configured repository triggers automated review by three dedicated sprite agents working in sequence.

┌─────────────────────────────────────────────────────────────────────┐
│ Git Push → GitHub Action │
│ ↓ │
│ ┌─────────┐ ┌─────────┐ │
│ │ hammer │ │ anvil │ (parallel review) │
│ │ (Claude)│ │ (Codex) │ │
│ └────┬────┘ └────┬────┘ │
│ ↓ ↓ │
│ └───────┬───────┘ │
│ ↓ │
│ ┌─────────┐ │
│ │ forge │ (synthesis) │
│ │ (Claude)│ │
│ └────┬────┘ │
│ ↓ │
│ Prioritized RFD + GitHub Issues │
└─────────────────────────────────────────────────────────────────────┘
ComponentSpriteAI BackendPurpose
hammerhammerClaude CodeArchitectural review, documentation
anvilanvilCodexCode correctness, edge cases
forgeforgeClaude CodeSynthesis and prioritization
  1. Push triggers GitHub Action — On main, dev, or feature/** branches
  2. Parallel review — hammer (Claude) and anvil (Codex) analyze the diff independently
  3. RFDs written — Each writes a Request for Discussion to docs/rfd/
  4. Forge triggers — After both complete, forge synthesizes findings
  5. Prioritized output — Synthesis RFD with scored findings, optionally creates GitHub issues
Repohammeranvilforge
rs-1
hardwareOS
opticworks-store
esphome-presence-engine
rv1106-system
n8n-marketing-automation

Reviews generate three RFD documents per commit:

docs/rfd/
├── RFD-2025-01-22-abc123-hammer-review.md (Claude)
├── RFD-2025-01-22-abc123-anvil-review.md (Codex)
└── RFD-2025-01-22-abc123-synthesis.md (Forge)

Forge combines hammer and anvil findings into a prioritized, actionable summary.

Each finding is scored using weighted factors:

FactorWeightDescription
Severity40%Critical=1.0, High=0.8, Medium=0.5, Low=0.2, Info=0.1
Consensus25%Both reviewers agree=1.0, single reviewer=0.5
Critical Path20%Changes to critical files=1.0, other=0.3
Recurrence15%Same issue in multiple repos=0.5-1.0
ScoreAction
>= 0.8Auto-create GitHub issue
>= 0.6Actionable finding (included in synthesis)
< 0.6Deferred (archived for reference)

Forge scans RFDs across all app repos to detect:

  • Same issue appearing in multiple repositories
  • Recurring issues within a single repo over time
  • Systemic patterns (e.g., “auth issues across 3 repos”)
## Executive Summary
Brief overview of changes and findings
## Actionable Findings (score >= 0.6)
Prioritized list with scores and recommended actions
## Deferred Findings (score < 0.6)
Lower-priority items for future consideration
## Cross-Repo Pattern Analysis
Patterns detected across multiple repositories
## Recommended Actions
Specific next steps ordered by priority

Each repo can customize review behavior via scripts/hammer/prompt_config.json:

{
"docs_candidates": ["README.md", "docs/overview.md"],
"context_files": ["docs/architecture.md"],
"prompt_append": "Focus on boot-time regressions.",
"recent_commits": 30
}
FieldDescription
docs_candidatesFiles searched for docs excerpt
context_filesAdditional context files
prompt_appendNotes appended to prompt
recent_commitsCommits to include (default: 20)
recent_rfdsRecent RFD filenames to include (default: 5)

Forge configuration: agent-harness/scripts/forge/synthesis_config.json

{
"app_repos": ["hardwareOS", "opticworks-store", ...],
"critical_paths": {
"hardwareOS": ["cmd/", "internal/auth/"],
"rs-1": ["src/", "platformio.ini"]
},
"thresholds": {
"actionable": 0.6,
"create_issue": 0.8
}
}

Add skip tokens to your commit message:

TokenSkips
[skip-hammer]Claude Code review
[skip-anvil]Codex review
[skip-forge]Synthesis
Terminal window
git commit -m "chore: update deps [skip-hammer] [skip-anvil] [skip-forge]"
Terminal window
# Hammer (Claude)
gh workflow run hammer-review.yml -R r-mccarty/rs-1
# Anvil (Codex)
gh workflow run anvil-review.yml -R r-mccarty/rs-1
# Forge (synthesis)
gh workflow run forge-synthesis.yml -R r-mccarty/rs-1
Terminal window
gh run list -R r-mccarty/rs-1 --workflow hammer-review.yml --limit 5
gh run list -R r-mccarty/rs-1 --workflow anvil-review.yml --limit 5
gh run list -R r-mccarty/rs-1 --workflow forge-synthesis.yml --limit 5
  1. Verify GitHub Action is enabled for the repository
  2. Check Action logs: gh run view <id> --log
  3. Verify sprite is running: sprite status -s hammer
  1. Check workflow logs: gh run view <id> --log
  2. Verify sprite is running: sprite status -s <sprite>
  3. Check sprite logs: sprite console -s <sprite>
  1. Verify both hammer and anvil RFDs exist for the commit
  2. Check forge workflow was triggered: gh run list --workflow forge-synthesis.yml
  3. Verify Claude credentials on forge sprite

Symptom: error running landlock: Sandbox(LandlockRestrict)

Fix: Sprites already have external sandboxing. Re-provision to set correct config:

Terminal window
./scripts/create-sprite.py --existing anvil

Source: agent-harness/docs/code-review.md, agent-harness/scripts/forge/synthesis_config.json