🚧 Warning
This project is experimental and not production-ready. Expect breaking changes and incomplete features. AND all your data and code to be compromised, if you don't know what you are doing, pls avoid for now.
laun is a Rust CLI that orchestrates a two-agent implementation loop against a PRD checklist.
loop_agent(fast, cheaper): chooses the next PRD item and writes scoped instructions.worker_agent(slower, stronger): makes code changes for that item.- Orchestrator: runs tests, retries fixes when tests fail, commits on success, and marks PRD items complete.
This pattern separates planning cadence from implementation quality:
- Fast model keeps momentum and task ordering.
- Strong model handles code-heavy tasks.
- Each agent can have different visible file/test scope in prompts.
- Config-driven agent commands (works with OpenCode, Codex, or custom wrappers).
- PRD markdown checkbox parsing (
- [ ]/- [x]). - Test gate after each worker run.
- Retry loop with failure feedback to the worker.
- Optional auto-commit (
git add -A && git commit). - Optional auto-mark PRD item as done.
cargo run -- --helpcargo build --release
./target/release/laun --help- Initialize config and PRD files:
laun init- Edit
laun.toml:
- Set your agent command + args for your local CLI setup.
- Set models for loop/worker.
- Set test commands in
workflow.execution_tests.
- Edit
PRD.mdwith checklist items:
- [ ] Implement feature A
- [ ] Add tests for feature A
- [ ] Ship docs- Validate config:
laun validate- Run a dry simulation first:
laun run --dry-run --max-iterations 1- Run for real:
laun runFor each iteration:
- Load unchecked PRD items.
- Ask
loop_agentfor next action (JSON contract). - Ask
worker_agentto implement selected item. - Run
workflow.execution_tests. - If tests fail, retry worker with failing output (
max_fix_attempts). - If tests pass:
- optional commit (
workflow.auto_commit) - optional PRD item check-off (
prd.auto_mark_completed)
Generated defaults currently target OpenCode CLI. You can switch either agent to Codex or any custom command.
[prd]
file = "PRD.md"
auto_mark_completed = true
[workflow]
max_iterations = 12
max_fix_attempts = 2
auto_commit = true
execution_tests = ["cargo test"]
[loop_agent]
provider = "opencode"
command = "opencode"
args = ["run", "--model", "{model}", "--thinking", "{prompt}"]
model = "google/gemini-3-flash-preview"
[worker_agent]
provider = "opencode"
command = "opencode"
args = ["run", "--model", "{model}", "--thinking", "{prompt}"]
model = "google/gemini-3-pro-preview"Template placeholders supported in args:
{model}{prompt}{prompt_file}(absolute temp file path containing the prompt)
workflow.auto_commit = truestages and commits all current workspace changes.- Run with
--dry-runfirst to inspect flow without calling agents/tests/commits. - Start with a dedicated git branch.
Detailed command reference and advanced examples:
docs/USAGE.md