Third sibling in the orchestrator family alongside autodev and agent-radar.
Different mission. autodev and agent-radar create new repos under the user's account. oss-radar contributes PRs to OTHER PEOPLE'S open-source repos — small, high-quality contributions to active AI startup projects, with the goal of building a track record of merged PRs that recruiters can verify.
Status: working MVP. Discovers candidate repos, runs an Opus-free Sonnet-only agent chain to research → plan → implement → review → submit. Cap: 2 contribution attempts per week. AI involvement is always disclosed in the PR body.
In autodev, Claude builds something from scratch in an empty workspace. Here, Claude has to:
- Read someone else's codebase and understand it
- Match their style, conventions, and patterns
- Make a surgical change without scope creep
- Run their test suite and pass
- Write a PR body the maintainer actually opens
- Disclose AI involvement honestly
The merge-vs-reject ratio is fundamentally outside our control: maintainers are humans with opinions and time constraints. Quality matters more here than anywhere else in the orchestrator family.
┌─────────┐ ┌──────────┐ ┌────────┐ ┌──────────┐
│ scout │───▶│researcher│───▶│ planner│───▶│implementer│
└─────────┘ └──────────┘ └────────┘ └─────┬────┘
│
┌──────────┐ ┌──────────┐ ┌──────────┐ ▼
│ improver │ │ pr_writer│◀───│ reviewer │
│ (weekly) │ └────┬─────┘ └──────────┘
└──────────┘ │
▼
┌──────────────────┐
│ publisher │
│ fork → clone → │
│ branch → push → │
│ open upstream PR│
└──────────────────┘
| File / dir | Role | Model |
|---|---|---|
scout.py |
GitHub Search API for AI startup-tier repos with good-first-issue | none (HTTP) |
agents/researcher.py |
Read CONTRIBUTING, detect anti-AI policy / CLA, pick ONE issue | Sonnet 4.6 |
agents/planner.py |
Plan technical approach (read-only) | Sonnet 4.6 |
agents/implementer.py |
Make actual code changes in the forked clone | Sonnet 4.6 |
agents/reviewer.py |
Pre-PR self-review (scope, AI-tells, tests pass) | Sonnet 4.6 |
agents/pr_writer.py |
Compose PR title + body + AI disclosure | Sonnet 4.6 |
agents/improver.py |
Weekly self-improvement, edits agent prompts | Sonnet 4.6 |
publisher.py |
Fork + clone + branch + push + open upstream PR | none (API) |
contributor.py |
Stitch agents into the contribution lifecycle | none |
orchestrator.py |
Tick loop, pacing, self-heal, retries | none |
state.py |
SQLite state at %LOCALAPPDATA%\oss-radar\ |
none |
claude_cli.py |
claude -p headless wrapper |
none |
User reserved Opus quota for primary work. Every LLM call in oss-radar runs on Sonnet 4.6 — including the improver self-improvement layer (autodev uses Opus there; agent-radar and oss-radar both use Sonnet for cost discipline).
- 2 contribution attempts per week max (rolling 7-day cap)
- 36-hour minimum gap between PR-open events
- Skip-day probability 20%
- Commit windows: weekday 19:00-23:00, weekend 10:00-22:00
- One open PR per upstream repo at a time
Before opening a PR, all must hold:
- Researcher verdict is
proceed(not skipped for anti-AI / CLA / etc.) - Planner's estimated diff is ≤ 80 lines
- Implementer's tests pass
- Reviewer's verdict is
pass(orfixresolved within MAX_FIX_ROUNDS) - PR body includes AI disclosure (non-negotiable)
If any gate fails the attempt becomes skipped with a reason logged,
and the orchestrator picks the next candidate target on the next tick.
python orchestrator.py preflight # token + claude check
python orchestrator.py scout # discover candidate repos
python orchestrator.py status # active attempt + counts
python orchestrator.py health # full system check
python orchestrator.py improver # force a self-improvement run
python orchestrator.py run # loop foreverFor unattended operation: install_autostart.ps1 registers a Task
Scheduler entry that auto-launches on login with a 30-min heartbeat
(offset 25 min from autodev so all three orchestrators alternate).
MIT — see LICENSE.