The repro harness for coding agents
Reproduce issues.Keep the evidence.
Ask Codex, Cursor, or Claude Code to reproduce a GitHub issue. Relunar spins a clean Daytona sandbox, runs your baseline, and writes the evidence to your machine — never to the thread unless you say --comment.
$ npm install -g @dhruv2mars/relunarmaintainer@laptop — 23:41
relunar v0.1
The run is the receipt.
A reproduction is not a comment saying “can’t repro on my machine.” It is a directory. Every run leaves three artifacts your agent can read, your CI can parse, and you can audit — weeks later, byte for byte.
.relunar/runs/run_7k2m9x4p/
# Reproduction report
**Issue #123** — TypeError when parsing empty config
**Run** `run_7k2m9x4p` · baseline **failed** (1 test)
## Sandbox
Fresh Daytona environment · cloned `acme/widget@main`
## Setup
```
$ bun install
✓ 142 packages installed
```
## Baseline
```
$ bun test
✗ config/parser › handles empty file
Expected parseConfig({}) not to throw
Received: TypeError: Cannot read
properties of undefined
```
## Next step
Agent inspects this report locally — no
GitHub comment unless you pass `--comment`.
Agent drives.
Relunar executes.
One run moves through four phases — the same phases, in the same order, every time. That is the whole point.
Your agent picks the issue
Ask Codex, Cursor, or Claude Code to investigate open issues. The agent decides what matters and calls relunar — you never leave the editor.
Relunar spins the sandbox
The CLI reads the issue, creates a fresh Daytona sandbox with your own credentials, and clones the linked repository.
The baseline runs
Setup and baseline commands from .relunar.yml execute deterministically. A failing test is a reproduction — captured, not described.
Evidence lands locally
report.md, report.json, and logs.txt are written to .relunar/runs. Your agent reads them and decides what happens next.
Boring by design.
Trusted by default.
A harness that touches your repositories and your issue threads has to earn the right. These rules are not settings — they are the product.
- Reports stay local
- Every run writes to .relunar/runs on your machine. Nothing is uploaded, synced, or phoned home. There is no hosted service to trust.
- --comment, or silence
- Relunar never posts to a GitHub thread on its own. A public comment requires the explicit flag — every single time.
- Your credentials, your accounts
- GitHub tokens and Daytona keys resolve locally: environment, gh auth, OS keychain. Relunar holds custody of nothing.
- Batch requires --limit
- relunar repro --all-open refuses to run unbounded. You state a ceiling, or nothing happens. No runaway automation.
- Harness, not agent
- Relunar decides nothing. It executes the same deterministic workflow every run, and leaves judgment to the agent you already trust.
no. 1
no. 2
no. 3
no. 4
no. 5
First report
before the coffee cools.
01 · install
$ npm install -g @dhruv2mars/relunar
$ relunar setup
First launch walks through GitHub and Daytona auth. Credentials go to your keychain, not our servers — we don't have servers.
02 · link
$ relunar repo link owner/repo
$ relunar init
init drops a .relunar.yml in the target repo. Declare setup and baseline once; every run obeys it.
03 · reproduce
$ relunar repro 123
$ relunar repro --all-open --limit 5
Or skip the typing entirely — tell your agent to run it. Codex, Cursor, and Claude Code learn the workflow from one skill install.
.relunar.yml
version: 1 setup: - bun install baseline: - bun run typecheck - bun test report: maxLogLines: 200
Teach your agent
$ relunar skills install codex
Ships workflow skills for Codex, Cursor, and Claude Code so your agent knows when to reproduce, how to read reports, and when to stop.
Straight
answers.
No. Relunar is a CLI harness. Your coding agent chooses issues, interprets reports, and decides follow-up. Relunar handles sandbox plumbing and structured evidence.
Never by default. GitHub comments require the explicit --comment flag so maintainers stay in control of public issue threads.
Relunar clones the linked repository into a fresh Daytona sandbox, runs setup and baseline commands from .relunar.yml, and writes a structured local report. Your agent uses that foundation to investigate the issue itself.
Yes. Relunar creates ephemeral sandboxes through Daytona using your own API key. Credentials are resolved locally — never stored in the repository.
The backlog won’trepro itself.
Open source, MIT, no hosted service. Install it, link a repo, and hand your agent the harness.
$ npm install -g @dhruv2mars/relunar