{"id":47115442,"url":"https://github.com/pulseengine/thrum","last_synced_at":"2026-03-12T18:58:25.363Z","repository":{"id":338093061,"uuid":"1154774492","full_name":"pulseengine/thrum","owner":"pulseengine","description":"Thrum — Gate-based pipeline orchestrator for autonomous AI-driven development","archived":false,"fork":false,"pushed_at":"2026-03-01T17:24:13.000Z","size":558,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-01T19:37:49.949Z","etag":null,"topics":["ai-development","automation","pipeline","pulseengine","rust"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pulseengine.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":null,"dco":null,"cla":null}},"created_at":"2026-02-10T19:03:54.000Z","updated_at":"2026-03-01T17:24:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pulseengine/thrum","commit_stats":null,"previous_names":["pulseengine/thrum"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/pulseengine/thrum","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulseengine%2Fthrum","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulseengine%2Fthrum/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulseengine%2Fthrum/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulseengine%2Fthrum/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pulseengine","download_url":"https://codeload.github.com/pulseengine/thrum/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulseengine%2Fthrum/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30439122,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T14:34:45.044Z","status":"ssl_error","status_checked_at":"2026-03-12T14:09:33.793Z","response_time":114,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["ai-development","automation","pipeline","pulseengine","rust"],"created_at":"2026-03-12T18:58:24.861Z","updated_at":"2026-03-12T18:58:25.355Z","avatar_url":"https://github.com/pulseengine.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# Thrum\n\n\u003csup\u003eGate-based pipeline orchestrator for AI-driven development\u003c/sup\u003e\n\n\u0026nbsp;\n\n![Rust](https://img.shields.io/badge/Rust-CE422B?style=flat-square\u0026logo=rust\u0026logoColor=white\u0026labelColor=1a1b27)\n![License: Apache-2.0](https://img.shields.io/badge/License-Apache--2.0-blue?style=flat-square\u0026labelColor=1a1b27)\n\n\u003c/div\u003e\n\n\u0026nbsp;\n\nA gate-based pipeline orchestrator for autonomous AI-driven development across one or more repositories.\n\n\u003e [!NOTE]\n\u003e Part of the PulseEngine toolchain. Orchestrates AI-assisted development pipelines across PulseEngine repositories.\n\nThrum manages a task queue where coding agents (Claude Code, OpenCode, Aider, or any CLI/API agent) implement changes that must pass through configurable verification gates before merging. Failed gates trigger automatic retries with memory of previous failures. Human approval is required between the proof gate and integration.\n\n## What It Does\n\n- Runs AI coding agents against a task backlog, one task at a time per repository (parallel across repos)\n- Enforces a 3-gate verification pipeline: Quality (fmt/clippy/test), Proof (Z3/Rocq), Integration (cross-repo)\n- Tracks tasks through a 9-state machine with retry logic and human approval checkpoints\n- Stores agent memory (error patterns, successful approaches) with semantic decay for context injection\n- Supports multiple repositories with per-repo concurrency limits\n- Provides a REST API for task management and status monitoring\n\n## Architecture\n\nFive crates in a Rust workspace:\n\n| Crate | Purpose |\n|-------|---------|\n| `thrum-core` | Domain types: Task state machine, gates, memory, roles, subsample config |\n| `thrum-db` | Persistence via redb (embedded key-value store, no external database) |\n| `thrum-runner` | Agent subprocess management, backend abstraction, sandbox isolation |\n| `thrum-api` | REST API server (axum) for task CRUD and status |\n| `thrum-cli` | CLI binary: `thrum run`, `thrum task`, `thrum status`, `thrum check` |\n\n### Task State Machine\n\n```\nPending -\u003e Claimed -\u003e Implementing -\u003e Gate1(Quality) -\u003e Reviewing -\u003e Gate2(Proof)\n  -\u003e AwaitingApproval -\u003e Approved -\u003e Integrating -\u003e Gate3(Integration) -\u003e Merged\n```\n\nFailed gates cycle back to Implementing with retry count incremented (max 3). Rejected tasks return to Implementing with human feedback.\n\n### Verification Gates\n\n| Gate | Checks | Configurable |\n|------|--------|-------------|\n| Gate 1 (Quality) | `cargo fmt --check`, `cargo clippy`, `cargo test` | Yes, per-repo in `repos.toml` |\n| Gate 2 (Proof) | Z3 SMT solver, Rocq proofs | Yes, optional per-repo |\n| Gate 3 (Integration) | Cross-repo pipeline (configurable step sequence) | Yes, in `pipeline.toml` |\n\n### Backend Swappability\n\nCoding agents are configured in `pipeline.toml`, not hardcoded:\n\n```toml\n[[backends]]\nname = \"claude-code\"\ntype = \"agent\"\ncommand = \"claude\"\nprompt_args = [\"-p\", \"{prompt}\", \"--output-format\", \"json\"]\n\n[[backends]]\nname = \"aider\"\ntype = \"agent\"\ncommand = \"aider\"\nprompt_args = [\"--message\", \"{prompt}\", \"--yes\"]\n```\n\nAny CLI tool that accepts a prompt and produces code changes can be used as a backend.\n\n## Quick Start\n\n```bash\n# Build\ncargo build --release\n\n# Configure repositories\ncp examples/minimal/repos.toml configs/repos.toml\ncp examples/minimal/pipeline.toml configs/pipeline.toml\n# Edit configs/repos.toml to point at your repository\n\n# Add a task\ncargo run --bin thrum -- task add --repo my-project \\\n  --title \"Implement feature X\" \\\n  --description \"Add support for X with tests\"\n\n# Run the pipeline (single task)\ncargo run --bin thrum -- run --once\n\n# Run with parallel agents (one per repo)\ncargo run --bin thrum -- run --agents 4\n```\n\n## Configuration\n\nAll configuration lives in `configs/`:\n\n- `configs/repos.toml` — repositories, build/test/lint commands, safety classification\n- `configs/pipeline.toml` — gates, backends, roles, sandbox, budget, subsampling\n\nSee `examples/` for ready-to-use configurations:\n- `examples/minimal/` — single-repo with Gate 1 only\n- `examples/pulseengine/` — multi-repo pipeline with formal verification\n\n## Development\n\n```bash\ncargo test --workspace           # All tests\ncargo bench --workspace          # All benchmarks\ncargo clippy --workspace --tests -- -D warnings\ncargo +nightly udeps --workspace # Unused dependency check\n```\n\n## License\n\nApache-2.0\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n\u003csub\u003ePart of \u003ca href=\"https://github.com/pulseengine\"\u003ePulseEngine\u003c/a\u003e \u0026mdash; formally verified WebAssembly toolchain for safety-critical systems\u003c/sub\u003e\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulseengine%2Fthrum","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpulseengine%2Fthrum","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulseengine%2Fthrum/lists"}