steps — pipeline runner stepsci.dev

Open source · Go · single binary

CI that runs your pipeline
and your agents 

steps runs Concourse-style YAML pipelines — get, task, put — out of one Go binary, with no server to stand up and nothing to host. An agent step is a first-class step type — an LLM with tool calls, sub-agent delegation, and MCP servers — and any task can attach one as its fix:, so a green build never constructs an agent at all and a red one gets repaired and re-run before the step reports. Every step is content-addressed and cached in SQLite, so a rerun skips what hasn't changed — and assert: plus steps test make a pipeline self-verifying like the code it builds.

Get the launch email One note when it ships. Nothing else.

cat pipeline.yml

pipeline.ymlyaml
defaults:
  model: openrouter/anthropic/claude-haiku-4.5

# No resource_types: block — `git` is built in. Only a resource steps has no
# transport for (an artifact store, an issue tracker) needs one defined.
resources:
- name: repo
  type: git
  source:
    uri: https://github.com/you/app.git
    branch: main

agents:
- name: fixer
  system: |
    You repair a failing build with the smallest change that makes it pass.
    Fix the cause in the code under test. Never delete, skip, or weaken a
    test to make it green.
  tools: [read_file, list_dir, run_shell]

tasks:
- name: unit
  run: cd repo && go test ./...
  inputs: [repo]
  fix: fixer          # constructed only when the command exits non-zero

jobs:
- name: test
  plan:
  - get: repo
    trigger: true
  - task: unit

steps run pipeline.yml — the day a test breaks

$ steps run pipeline.yml
get: repo (version: map[ref:b9de920])
task: unit
[unit] --- FAIL: TestSum (0.00s)
[unit]     mathx_test.go:7: Sum([1 2 3]) = 5, want 6
[unit] FAIL
task "unit" failed (exit 1); invoking fix agent "fixer"
[fixer] ok  	example.com/mathx	0.309s
[unit] ok  	example.com/mathx
note: unit makes this chain uncacheable (fix: agent)
usage: 21,385 tokens across 1 agent step(s)

The task is the honest step. It failed, so the fixer was constructed, handed the failure output and the task itself as a rerun tool; then the command ran once more, and that exit code is the verdict. Had the tests passed, no agent would exist and the run would cost nothing.

steps watch pipeline.yml --interval 30s

Early access

steps is being built in the open. Leave an email and you get one message when it ships — a release you can download and a pipeline you can run. No newsletter, no drip.

Your address is stored for this one announcement and nothing else.