Skip to content

Repository files navigation

SODA — Session-Orchestrated Development Agent

CIGo 1.25License: Apache 2.0

A programmable pipeline that turns tickets into PRs — one phase at a time. SODA is a Go CLI/TUI that orchestrates AI coding sessions through configurable pipelines to implement GitHub Issues end-to-end. Each phase runs in a fresh, sandboxed Claude Code session with structured output — no shared context, no prompt bleed. Use the default 9-phase pipeline out of the box, or compose your own from scratch.

Build Your Pipeline

SODA ships three built-in pipelines. Pick one, or compose your own.

Want to…Use
Run everything end-to-endsoda run 42 (default pipeline)
Skip triage and planningsoda run 42 --pipeline quick-fix
Update docs only (Sonnet)soda run 42 --pipeline docs-only
Build a custom pipelinesoda pipelines new my-pipeline
Design phases interactivelyAsk the pipeline-architect agent

Minimal custom pipeline (3 phases)

Create phases-my-pipeline.yaml in your project root:

phases:
- name: implementtools: [Read, Write, Edit, Glob, Grep, Bash]timeout: 25m
- name: verifytools: [Read, Glob, Grep, Bash]timeout: 8m
- name: submittools: ["Bash(git:*)", "Bash(gh:*)"]timeout: 3m

Then run it:

soda run 42 --pipeline my-pipeline

See docs/pipelines.md for the full tutorial, conditional phases, and model routing cookbooks.

Default Pipeline

Ticket → Triage → Plan → Implement → Verify → Review → Submit → Monitor → PR
PhaseWhat it doesToolsTimeoutModel
TriageClassifies the ticket, identifies relevant files, routes the default pipelineRead-only3mglobal
PlanDesigns the approach, breaks work into atomic tasksRead-only8mglobal
ImplementWrites code, runs tests, commitsFull25mglobal
VerifyRuns tests, checks acceptance criteria, reviews code qualityRead + Bash8mglobal
ReviewParallel specialist review (Go, AI harness, SRE)Read + Bash12mglobal
SubmitPushes branch, opens pull requestgit + gh/glab3mglobal
MonitorPolls PR for comments and CI, responds and fixesFull10m/roundglobal

Conditional phases: Patch runs when verify fails (targeted fixes, Sonnet); Follow-up runs when review passes with minor findings (creates follow-up tickets). All phases, tools, timeouts, and models are configurable in phases.yaml.

Per-Phase Control

Every knob in the default pipeline is configurable per phase in phases.yaml:

KnobScopeExample
ModelPer phaseSonnet for triage, Opus for implement
ToolsPer phaseRead-only for triage, full write for implement
TimeoutPer phase3m for triage, 25m for implement
Skip conditionPer phase{{ ne .Complexity "low" }}
Retry policyPer phase, per error type2 transient, 1 parse, 0 semantic

See docs/pipelines.md and docs/configuration.md for the full reference.

Status

Status (v0.5.0): 185+ default pipeline runs across 6 releases. 67% first-pass success rate on medium-complexity tickets. Average cost $5–11 per session. SODA is used to develop itself.

Cost

Ticket typeTypical cost
Simple fix (1–3 tasks)$2–6
Medium feature (4–8 tasks)$8–15
Full default pipeline$5–11 average

Set max_cost_per_ticket in soda.yaml as a hard safety net. Per-phase and per-generation limits are also available.

Quick Start

soda init # generate soda.yaml for this project
soda doctor # verify prerequisites are installed
soda run <issue-number># run the default pipeline for a GitHub issue
soda run <issue-number> --pipeline quick-fix # or choose a named pipeline
soda status # check active and recent pipelines
soda history<issue-number># inspect phase-by-phase results

See docs/quickstart.md for a step-by-step walkthrough including pipeline selection.

Prerequisites

PrerequisiteWhyInstall
Claude Code CLIAI agent backend (paid subscription required)claude.ai/code
gh CLIGitHub integrationcli.github.com
Git 2.9+Worktree supportgit-scm.com
Go 1.25+For go install (or use a binary release)go.dev

Installation

Via go install (recommended):

go install github.com/decko/soda/cmd/soda@latest

Binary download — copy-paste for your platform:

# Linux (amd64, with sandbox)
curl -L https://github.com/decko/soda/releases/latest/download/soda-linux-amd64-sandbox -o soda && chmod +x soda
# Linux (arm64)
curl -L https://github.com/decko/soda/releases/latest/download/soda-linux-arm64 -o soda && chmod +x soda
# macOS (Apple Silicon)
curl -L https://github.com/decko/soda/releases/latest/download/soda-darwin-arm64 -o soda && chmod +x soda
# macOS (Intel)
curl -L https://github.com/decko/soda/releases/latest/download/soda-darwin-amd64 -o soda && chmod +x soda

Move to your PATH: sudo mv soda /usr/local/bin/

See docs/install.md for build-from-source, CGO/sandbox builds, and checksum verification.

Note: Sandbox features (Landlock, seccomp, cgroups) require the -sandbox binary (Linux amd64 only). All other binaries work without sandbox — it's optional.

Configuration

SODA uses three config layers:

LayerFilePurpose
Project configsoda.yamlTicket source, model, budget limits, repo settings
Pipeline configphases.yamlAdd, remove, or reorder phases; set tools, timeouts, and models
Prompt overrides~/.config/soda/prompts/<phase>.mdCustomize phase prompts without forking

Run soda init to generate a soda.yaml auto-detected from your project. See config.example.yaml for a fully annotated reference and docs/configuration.md for the full guide.

CLI Reference

CommandPurpose
soda run <ticket>Run the default pipeline for a ticket
soda run <ticket> --pipeline quick-fixUse a named pipeline
soda run <ticket> --from lastResume from last failed phase
soda run <ticket> --mode checkpointPause after each phase for confirmation
soda statusShow active and recent pipelines
soda history <ticket>Show phase details for a ticket
soda log <ticket> -fTail live pipeline events
soda attach <ticket>Stream live output of a running pipeline
soda clean <ticket>Remove worktree and branches
soda costShow cost breakdown across all sessions
soda doctorCheck prerequisites
soda validateCheck config, phases, and prompts for errors
soda spec "description"Generate a ticket specification
soda pickInteractive ticket picker
soda pipelinesList available named pipelines
soda pipelines new <name>Scaffold a custom pipeline
soda initGenerate soda.yaml config

How It Works

  • Worktree isolation — a Git worktree is created before any phase runs; all phases execute inside it, never in the main checkout
  • Fresh context per phase — each phase starts a new Claude Code session; context resets between phases, no prompt bleed
  • Structured JSON artifact handoff — each phase writes a validated JSON artifact to .soda/<ticket>/; the next phase reads it as structured input
  • Rework loop — when Review flags critical or major findings, the default pipeline routes back to Implement (max 2 cycles); prior findings are injected to prevent the whack-a-mole pattern
  • Corrective loop — when Verify fails, a targeted Patch phase runs before re-verification; on exhaustion, the policy escalates or stops

Sandbox

OS-level isolation for each Claude Code session (Landlock, seccomp, cgroups). See docs/sandbox.md for setup, configuration, and platform requirements.

Plugin

Embedded plugin that gives Claude Code knowledge of SODA pipelines and quick access to soda commands. See docs/plugin.md for install instructions and what the plugin provides.

Contributing

See CONTRIBUTING.md for setup instructions, pre-commit hooks, and code style guidelines. All contributions must follow TDD: write failing tests before writing implementation code.

License

Apache-2.0 — see LICENSE

About

Session-Orchestrated Development Agent

Resources

Contributing

Stars

2 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages