{"id":51764451,"url":"https://github.com/quangdang46/looper_rust","last_synced_at":"2026-07-19T17:34:04.585Z","repository":{"id":344515772,"uuid":"1178909519","full_name":"quangdang46/looper_rust","owner":"quangdang46","description":"An autonomous AI development loop for Claude Code, Codex that plans, executes, and iterates on your tasks automatically — letting you complete complex workflows with a single command.","archived":false,"fork":false,"pushed_at":"2026-07-11T17:54:09.000Z","size":18507,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-07-11T18:12:25.631Z","etag":null,"topics":["beads","claude-code","cli","codex-cli","developer-tools","loops","orchestration","rust","sqlite"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quangdang46.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-11T13:47:52.000Z","updated_at":"2026-07-11T17:54:12.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/quangdang46/looper_rust","commit_stats":null,"previous_names":["quangdang46/grove","quangdang46/looper_rust"],"tags_count":7,"template":false,"template_full_name":null,"purl":"pkg:github/quangdang46/looper_rust","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quangdang46%2Flooper_rust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quangdang46%2Flooper_rust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quangdang46%2Flooper_rust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quangdang46%2Flooper_rust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quangdang46","download_url":"https://codeload.github.com/quangdang46/looper_rust/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quangdang46%2Flooper_rust/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35661225,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-19T02:00:06.923Z","response_time":112,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["beads","claude-code","cli","codex-cli","developer-tools","loops","orchestration","rust","sqlite"],"created_at":"2026-07-19T17:34:03.659Z","updated_at":"2026-07-19T17:34:04.580Z","avatar_url":"https://github.com/quangdang46.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# looper — Autonomous AI Dev Team for Your GitHub Repos\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"looper_rust_illustration.webp\" alt=\"looper — Autonomous AI Dev Team for Your GitHub Repos\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n![Release](https://img.shields.io/github/v/release/quangdang46/looper_rust?logo=github\u0026label=release)\n![CI](https://img.shields.io/github/actions/workflow/status/quangdang46/looper_rust/ci.yml?branch=main\u0026logo=github\u0026label=CI)\n![License](https://img.shields.io/badge/License-MIT-green.svg)\n![Rust](https://img.shields.io/badge/Rust-37K%20LOC-orange)\n\n\u003c/div\u003e\n\n**Autonomous AI Dev Team for Your GitHub Repos.**  \nMonitor repos, plan features, write code, review PRs, and merge — all automated via 5 agent roles. Worktree isolation, multi-vendor support, REST API + daemon.\n\n\u003cdiv align=\"center\"\u003e\n\n```bash\ncurl -fsSL \"https://github.com/quangdang46/looper_rust/releases/latest/download/install.sh\" | bash\n```\n\n\u003c/div\u003e\n\n---\n\n## 🤖 Agent Quickstart (Daemon Mode)\n\n```bash\n# Start the daemon\nlooper daemon start\n\n# Add a project\nlooper projects add my-project --path /path/to/repo --repo-url owner/repo\n\n# Label a GitHub issue `looper:plan` — the loop begins\n```\n\n**Daemon mode:** runs in background, polls GitHub for `looper:plan` issues, orchestrates Plan → Review → Work → Fix → Merge cycle automatically.\n\n---\n\n## TL;DR\n\n**The Problem** — Feature implementation is a multi-turn loop: plan → review → work → fix → merge. Each turn requires context-switching, code writing, PR pushing, and CI babysitting. Human developers burn mental bandwidth on the loop instead of the architecture.\n\n**The Solution** — `looper` monitors GitHub repositories, and when an issue is labeled `looper:plan`, it coordinates a team of AI agents to implement the feature end-to-end: planning, reviewing, fixing, and iterating until every check passes. Unlike CI/CD pipelines that only veto broken code, looper *writes* and *fixes* code.\n\n**Why `looper` over manual feature implementation?**\n\n| Dimension | Looper | Manual |\n|---|---|---|\n| Plan → Review → Work → Fix → Merge | Automated by 5 agent roles | Must hand-crank each turn |\n| Agent vendors | Claude Code, Codex, OpenCode, Cursor, Custom | Single CLI |\n| Multi-node coordination | loopernet cloud coordinator | — |\n| Persistent daemon with REST API | `looperd` (background) | — |\n| Worktree isolation | ✓ (via `git2`) | Manual |\n| Price | Your agent subscription | Your hourly rate |\n\n---\n\n## Quick Example\n\n```bash\n# 1. Start the daemon\nlooper daemon start\n\n# 2. Add a project with a resolvable GitHub repo\nlooper projects add my-project \\\n  --path /path/to/repo \\\n  --repo-url owner/repo \\\n  --default-branch main\n\n# 3. Label a GitHub issue `looper:plan` — the loop begins\n```\n\nThat's it. Looper handles the rest: issue detection, agent orchestration, PR creation, review iteration, and merge.\n\n---\n\n## Design Philosophy\n\n| Principle | Rationale |\n|---|---|\n| **Disposable agent processes** | Each step (plan, review, work) invokes a fresh agent process. No long-running agent state to leak or corrupt. |\n| **Configurable vendors** | Swap agent backends per run or globally — Claude Code, Codex CLI, OpenCode, Cursor CLI, or any custom binary. |\n| **Git worktree isolation** | Looper never touches your primary checkout. All operations happen in disposable git worktrees. |\n| **Tick-loop scheduler** | The daemon polls GitHub or receives webhooks. No polling delay on label events; configurable poll interval otherwise. |\n| **SQLite persistence** | All state is in a local SQLite database. Stop and restart the daemon — interrupted runs resume cleanly. |\n\n---\n\n## Installation\n\n```bash\n# macOS / Linux — curl pipe\ncurl -fsSL \"https://github.com/quangdang46/looper_rust/releases/latest/download/install.sh\" | bash\n\n# Windows PowerShell\nirm \"https://raw.githubusercontent.com/quangdang46/looper_rust/main/install.ps1\" | iex\n\n# From source\ncargo build --release -p looperd -p looper-cli\ncp target/release/looperd target/release/looper ~/.local/bin/\n```\n\nThe installer detects your platform, fetches the matching binary from GitHub Releases, and atomically installs three binaries to `~/.local/bin/`:\n\n| Binary | Role |\n|---|---|\n| `looper` | CLI client (talks to the daemon REST API on port 7391) |\n| `looperd` | Daemon (long-running background process) |\n| `loopernet` | Cloud coordination server (multi-node mode) |\n\n---\n\n## Quick Start\n\n```bash\n# Start daemon in the background\nlooper daemon start\n\n# Health check\nlooper health\n\n# Add a project\nlooper projects add my-project \\\n  --path /path/to/repo \\\n  --repo-url owner/repo \\\n  --default-branch main\n\n# Label a GitHub issue with `looper:plan` — the pipeline fires\n```\n\nThe daemon opens a REST API on `http://127.0.0.1:7391`. All CLI commands are REST calls.\n\n---\n\n## How It Works\n\n### 1. Issue Detection\n\nThe daemon polls GitHub (or receives webhooks). When an issue is labeled `looper:plan`, a new loop begins.\n\n### 2. Agent Loop\n\nLooper runs a multi-agent workflow on every accepted issue:\n\n```\n┌─────────┐    ┌──────────┐    ┌────────┐    ┌────────────┐\n│ Plan    │───▶│ Review   │───▶│ Work   │───▶│ Review     │\n│ Agent   │    │ Agent    │    │ Agent  │    │ / Fix      │\n└─────────┘    └──────────┘    └────────┘    └────────────┘\n     │              │              │               │\n     ▼              ▼              ▼               ▼\n  Writes        Checks         Implements      Iterates\n  a spec        the plan       the code        until green\n```\n\nEach step runs a **disposable agent process** — invoked, given context, captured, committed. If review fails, a fixer agent patches the PR and the loop repeats.\n\n### 3. Agent Vendors\n\n| Vendor | Identifier | Notes |\n|---|---|---|\n| Claude Code | `claude-code` | Anthropic's official CLI |\n| Codex CLI | `codex` | OpenAI Codex CLI |\n| OpenCode | `opencode` | Open-source agent CLI |\n| Cursor CLI | `cursor` | Cursor editor CLI mode |\n| Custom | `custom` | Any executable conforming to the agent protocol |\n\n### 4. Priority Queues\n\n| Queue | Type | Description |\n|---|---|---|\n| Auto | From config | Auto-discovered repos matched by label/author |\n| Planned | `looper:plan` label | Issues explicitly tagged for Looper |\n| Manual | CLI / API | Ad-hoc queue items via `looper queue enqueue` |\n\n---\n\n## Architecture\n\n```\n                    ┌──────────────────────┐\n                    │     GitHub Issues     │\n                    │  (labeled looper:plan)│\n                    └──────────┬───────────┘\n                               │ webhook / poll\n                               ▼\n┌─────────────────────────────────────────────────────┐\n│                   looperd (daemon)                   │\n│                                                      │\n│  ┌──────────┐  ┌──────────┐  ┌──────────────────┐   │\n│  │ Scheduler │─▶│  Runner  │──▶  Agent Executor  │   │\n│  │ (tick)    │  │  (5 roles)│  │  (5 vendors)    │   │\n│  └──────────┘  └──────────┘  └──────────────────┘   │\n│         │            │                │              │\n│         ▼            ▼                ▼              │\n│  ┌──────────┐  ┌──────────┐  ┌──────────────────┐   │\n│  │ Storage   │  │ Service  │  │ GitHub / Git     │   │\n│  │ (SQLite)  │  │ (logic)  │  │ Gateway          │   │\n│  └──────────┘  └──────────┘  └──────────────────┘   │\n│         ▲                                            │\n│  ┌──────┴──────┐                                     │\n│  │  REST API   │  port 7391                          │\n│  │  + SSE      │                                     │\n│  └─────────────┘                                     │\n└─────────────────────────────────────────────────────┘\n         │                              │\n         ▼                              ▼\n┌─────────────────┐          ┌─────────────────────┐\n│  looper (CLI)   │          │  loopernet (cloud)  │\n│  health / projects│         │  multi-node coord.  │\n│  loops / queue    │          │  claim routing      │\n└─────────────────┘          └─────────────────────┘\n```\n\n---\n\n## CLI Usage\n\nThe `looper` CLI is a REST client for `looperd` (default `http://127.0.0.1:7391`).\n\n### Daemon lifecycle\n\n```bash\nlooper daemon start              # start background daemon\nlooper daemon stop               # stop it\nlooper daemon status              # is it running?\nlooper daemon logs [N]            # tail recent logs\nlooper daemon install             # launchd / systemd\n```\n\n### Health \u0026 version\n\n```bash\nlooper health\nlooper health --json\nlooper version\nlooper shutdown\n```\n\n### Projects\n\n```bash\nlooper projects add myapp --path /path/to/checkout --repo-url owner/repo\nlooper projects list\nlooper projects get myapp\nlooper projects sync myapp\nlooper projects remove myapp\n```\n\n### Loops, runs, queue\n\n```bash\nlooper loops list \u003cproject\u003e\nlooper loops create \u003cproject\u003e --type \u003ctype\u003e\nlooper runs list \u003cproject\u003e \u003cseq\u003e\nlooper runs start \u003cproject\u003e \u003cseq\u003e --step \u003cstep\u003e\nlooper queue enqueue \u003cproject\u003e --type \u003ctype\u003e\n```\n\n### Config\n\n```bash\nlooper config get                        # daemon config\nlooper config-local set server.host 0.0.0.0\n```\n\n---\n\n## Configuration\n\nLooper uses a layered config system: embedded defaults → config file → environment → CLI overrides.\n\nSearch paths for `looper.toml` / `.yaml` / `.json`:\n\n1. `$LOOPER_CONFIG/\u003cfile\u003e`\n2. `$XDG_CONFIG_HOME/looper/\u003cfile\u003e`\n3. `~/.config/looper/` (Linux) or `~/Library/Application Support/com.looper.looper/` (macOS)\n4. `~/.looper/` (legacy)\n\n### Minimal example\n\n```toml\n[server]\nhost = \"127.0.0.1\"\nport = 7391\n\n[daemon]\npoll-interval-secs = 30\n\n[agent]\nvendor = \"claude-code\"\ntimeout-secs = 300\n```\n\nSee [docs/configuration.md](docs/configuration.md) for the full reference.\n\n---\n\n## Troubleshooting\n\n| Symptom | Likely Cause | Fix |\n|---|---|---|\n| `looper health` fails | Daemon not running | `looper daemon start` |\n| Daemon won't start | Port 7391 in use | Check for another process; set `server.port` |\n| Agent loop hangs | Timeout too low | Increase `agent.timeout-secs` |\n| Worktree operations fail | Missing `gh` CLI | Install GitHub CLI and authenticate |\n| Config warning on startup | File permissions too open | `chmod 600 ~/.looper/looper.toml` |\n\n---\n\n## FAQ\n\n**Does Looper need API keys for every vendor?** No. You provide the agent binary (Claude Code, Codex CLI, etc.) with its own auth; Looper only invokes it.\n\n**Can I run Looper on a single repo?** Yes — works on any number of repos. Configure which repos to watch.\n\n**What happens if an agent hangs or crashes?** Agent processes have a configurable timeout (default 5 min per role). On timeout/crash, the run fails and the daemon logs the error. Normal operation continues.\n\n**Is the SQLite database safe to delete?** Yes — it stores run history and queue state. Deleting it loses that history, but the daemon re-creates it on next start.\n\n**Does Looper modify my local git state?** No — looper uses git worktrees (via `git2`) for all operations. Your primary checkout is never touched.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquangdang46%2Flooper_rust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquangdang46%2Flooper_rust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquangdang46%2Flooper_rust/lists"}