|
|
||
|---|---|---|
| .cargo | ||
| .claude | ||
| .config | ||
| .github | ||
| apps | ||
| arc/workflows | ||
| bin | ||
| docker | ||
| docs | ||
| lib | ||
| skills/develop-web-game | ||
| test | ||
| .env.example | ||
| .gitignore | ||
| AGENTS.md | ||
| arc.toml | ||
| bun.lock | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CLAUDE.md | ||
| LICENSE.md | ||
| package.json | ||
| README.md | ||
The software factory for small teams of expert engineers
Arc replaces the prompt-wait-review loop with version-controlled workflow graphs that orchestrate AI agents, shell commands, and human decisions into repeatable, long-horizon coding processes.
Define workflows in Graphviz DOT, route tasks to the right model with CSS-like stylesheets, and let the engine handle orchestration, parallelism, checkpointing, and verification -- all from a single Rust binary.
Table of Contents
- Key Features
- Quick Start
- Example Workflow
- Supported Models
- Architecture
- System Requirements
- Help or Feedback
- Contributing
- License
Key Features
What Arc Does
| Feature | Description | |
|---|---|---|
| 🤖 | Multi-model orchestration | Route tasks to the right model per node -- cheap for boilerplate, frontier for hard reasoning |
| 💠 | Declarative workflows | Define pipelines in Graphviz DOT -- diffable, reviewable, composable |
| ✋ | Human-in-the-loop | Approval gates, interviews, and real-time steering let you intervene at the right moments |
| 🔄 | Checkpoint and resume | Git-native checkpointing after every stage -- inspect, revert, or fork from any point |
| 🛡️ | Adaptive verification | Combine LLM-as-judge, test suites, and human review into quality gates |
| 📊 | Full observability | Every tool call, agent turn, and decision point captured in a unified event stream |
How Arc Does It
| Feature | Description | |
|---|---|---|
| 🎨 | Model stylesheets | CSS-like selectors (*, .class, #id) assign models, providers, and reasoning effort |
| 🌳 | Git-native checkpoints | Every stage commits to a branch -- resume interrupted runs exactly where they left off |
| 📦 | Sandbox isolation | Run agent tools in local, Docker, Daytona cloud VMs, or exe.dev ephemeral VMs |
| 🔌 | MCP integration | Extend agents with any Model Context Protocol server (Playwright, databases, APIs) |
| 🔁 | Loops and fan-out | Implement-test-fix cycles, parallel code reviews, and ensemble multi-provider patterns |
| 🦀 | Written in Rust | Single compiled binary with minimal dependencies -- no Python runtime, no npm install |
| ⚙️ | CLI and API modes | arc run for local dev, arc serve for production with a React web UI |
Read the full documentation for details.
Quick Start
Warning
Arc is in private research preview. Contact bryan@qlty.sh if you're interested in trying it.
Prerequisites
- Rust (latest stable)
- At least one LLM API key (
ANTHROPIC_API_KEY,OPENAI_API_KEY, orGEMINI_API_KEY)
Clone and build
git clone https://github.com/qltysh/arc.git
cd arc
cargo build --release
Configure API keys
cp .env.example .env
# Edit .env and add at least one provider key
Run the setup wizard
./target/release/arc install
Verify your installation
./target/release/arc doctor --live
Run your first workflow
./target/release/arc run docs-internal/demo/01-hello.dot
Or try a multi-step workflow with a human approval gate:
./target/release/arc run docs-internal/demo/10-plan-implement.dot
Example Workflow
A plan-approve-implement workflow where a human reviews the plan before the agent writes code:
digraph PlanImplement {
graph [goal="Plan, approve, implement, and simplify a change"]
start [shape=Mdiamond, label="Start"]
exit [shape=Msquare, label="Exit"]
plan [label="Plan", prompt="Analyze the goal and codebase. Write a step-by-step plan.", reasoning_effort="high"]
approve [shape=hexagon, label="Approve Plan"]
implement [label="Implement", prompt="Read plan.md and implement every step."]
simplify [label="Simplify", prompt="Review the changes for clarity and correctness."]
start -> plan -> approve
approve -> implement [label="[A] Approve"]
approve -> plan [label="[R] Revise"]
implement -> simplify -> exit
}
Node types at a glance
| Shape | Type | What it does |
|---|---|---|
Mdiamond |
Start | Workflow entry point |
Msquare |
Exit | Workflow terminal |
box (default) |
Agent | Multi-turn LLM with tool access |
tab |
Prompt | Single LLM call, no tools |
parallelogram |
Command | Runs a shell script |
hexagon |
Human gate | Pauses for human input |
diamond |
Conditional | Routes based on conditions |
component |
Parallel | Fans out to concurrent branches |
tripleoctagon |
Merge | Collects parallel branch results |
Multi-model routing with stylesheets
graph [
model_stylesheet="
* { llm_model: claude-haiku-4-5; reasoning_effort: low; }
.coding { llm_model: claude-sonnet-4-5; reasoning_effort: high; }
#review { llm_model: gemini-3.1-pro-preview; llm_provider: gemini; }
"
]
Selectors follow CSS specificity: * (0) < shape (1) < .class (2) < #id (3).
Supported Models
| Model | Provider | Aliases |
|---|---|---|
claude-opus-4-6 |
Anthropic | opus |
claude-sonnet-4-5 |
Anthropic | sonnet |
claude-haiku-4-5 |
Anthropic | haiku |
gpt-5.2 |
OpenAI | gpt5 |
gpt-5.3-codex |
OpenAI | codex |
gpt-5.4 |
OpenAI | gpt54 |
gemini-3.1-pro-preview |
Gemini | gemini-pro |
gemini-3-flash-preview |
Gemini | gemini-flash |
kimi-k2.5 |
Kimi | kimi |
glm-4.7 |
Zai | glm |
minimax-m2.5 |
MiniMax | minimax |
mercury-2 |
Inception | mercury |
Run arc model list for the full catalog. Provider fallback chains are configurable per-run.
Architecture
Arc provides two interfaces backed by the same workflow engine:
| Feature | CLI mode (arc run) |
API mode (arc serve) |
|---|---|---|
| Execution | Synchronous, single run | Async, queued with scheduler |
| Human-in-the-loop | Terminal prompts | HTTP endpoints + web UI |
| Events | Printed to stderr | SSE stream |
| Concurrency | One run per process | Configurable (default 5) |
| Best for | Development, one-off runs | Production, integrations |
Rust crates
| Crate | Purpose |
|---|---|
arc-cli |
CLI entry point (run, exec, serve, doctor, install) |
arc-workflows |
Core workflow engine -- DOT parsing, stage execution, checkpoints |
arc-agent |
AI coding agent with tool use (Bash, Read, Write, Edit, Grep) |
arc-api |
Axum HTTP server with SSE event streaming |
arc-llm |
Unified LLM client -- Anthropic, OpenAI, Gemini, and more |
arc-types |
Auto-generated types from OpenAPI spec |
arc-github |
GitHub App auth, PR creation, checkpoint pushing |
arc-db |
SQLite with WAL mode and schema migrations |
arc-mcp |
Model Context Protocol client/server |
TypeScript
| Package | Purpose |
|---|---|
apps/arc-web |
React 19 + React Router + Vite + Tailwind frontend |
arc-api-client |
Auto-generated TypeScript client from OpenAPI spec |
System Requirements
- macOS or Linux (x86_64 or ARM)
- Rust (latest stable) for building from source
- At least one LLM provider API key (Anthropic, OpenAI, or Gemini)
- Git (for checkpoint and resume)
- Docker (optional, for Docker sandbox mode)
Help or Feedback
- Read the documentation
- Bug reports via GitHub Issues
- Feature requests via GitHub Issues
- Email bryan@qlty.sh for access or questions
Contributing
Developing the CLI
Arc requires a working Rust toolchain:
git clone https://github.com/qltysh/arc.git
cd arc
cargo build --workspace
cargo test --workspace
Developing the web UI
cd apps/arc-web
bun install
bun run dev
Useful commands
| Command | Description |
|---|---|
cargo build --workspace |
Build all crates |
cargo test --workspace |
Run all tests |
cargo test -p arc-api |
Test a single crate |
cargo fmt --check --all |
Check formatting |
cargo clippy --workspace -- -D warnings |
Lint |
cd apps/arc-web && bun run typecheck |
Type check the frontend |
License
Arc is licensed under the MIT License.