v1αPortable pipeline platform

Workflows for what’s next.

  • CI/CD
  • Agents
  • Orchestration
  • Higher together

Define task graphs once. Run them locally or on your own fleet of rigs with identical semantics. Logs, artifacts, retries and reruns stay rooted in one coherent history.

Install the CLImacOS and Linux · arm64 and amd64
curl -fsSL https://cuttlefish.sh/install.sh | sh
Built onconnect-gopostgress3
Starter workflowstarter-hello-artifacts
Succeeded
echo0.8s
write0.6s
run 951fd838…a6e21.7s · 1 artifact · hello.txt 12 B
Illustration: arms reach from one control plane to a network of task nodes, above a card showing a succeeded run of the hello-artifacts starter workflow.

Built to these targets

Non-functional targets from the Cuttlefish product requirements, not measured production figures.

10K+runs per day on one control plane
<2 minfrom blank slate to first run of a 3-node workflow
200+nodes per DAG, UI stays responsive
1:1local and remote semantic parity

Capabilities

Calm deployments
in deep water.

Cuttlefish keeps workflow intent, rig supply and run evidence in one operator-grade control room.

See a run up close

Task portability

Author once as a task package. Ship it as OCI or zip. Run it on your laptop or a rig with the same semantics.

Event-history first

Every run is a timeline you can replay. Retries, backoff and wait reasons stay indexed and queryable.

Artifacts as first class

Typed outputs, downloadable artifacts, logs and inputs stay rooted in one coherent run history.

Remote runners, on tap

Connect rigs, observe heartbeats, drain capacity and see queue depth the moment it changes.

n8n-grade editor

Drag-and-drop DAG editing with a YAML escape hatch. Jump straight to the first causal failure.

Built on Go

A connect-go control plane, pluggable storage, OpenTelemetry traces and mockable interfaces throughout.

How it works

Four steps from author to audit.

The console and the cuttle CLI call the same API, so every step here is also a command you can script.

  1. 01

    Author

    Describe a DAG in YAML or drag nodes on the canvas.

    cuttle workflows create workflow.yaml
  2. 02

    Pack

    Build a task package with typed inputs and outputs.

    cuttle task-packages publish task-package.yaml
  3. 03

    Run

    Dispatch locally or to your rigs with the same semantics.

    cuttle run start --workflow ci.yaml --wait
  4. 04

    Audit

    Inspect logs, artifacts, events and rerun paths.

    cuttle run diagnose <run-id>
Product preview with sample data: the fanout-three-files example mid-run, with one node open in the inspector.
Product preview with sample data. Rig states are the runner states Cuttlefish reports: idle, busy, draining and offline, plus stale once a heartbeat is more than 10s old.

Rigs

Rigs on tap,
instrumented by default.

Connect a Mac, a Linux box or a build server with one command. Heartbeats, capacity, queue depth and draining states stream back without glue.

  • Capacity-aware schedulingLoad, memory and disk pressure
  • Graceful drainFinish in-flight, reject new
  • Token-scoped enrollmentOrg, project and pool boundaries
  • Observability out of the boxOpenTelemetry traces and metrics

Desktop Agent for macOS

A menu bar app that runs pipelines on your own hardware and streams status back to Cuttlefish. Requires macOS 13 or later.

Download for MacApple Silicon

How we compare

The small
orchestrator.

No external broker, no scheduler sidecar, no DSL that fights you at 2am.

Cuttlefish compared with a heavy orchestrator and with using CI as an orchestrator
CapabilityCuttlefishHeavy orchestratorCI-as-orchestrator
Single binaryYesBroker + schedulerRunners only
Typed I/O contractsYesPartialNo
Local parityIdenticalPartialNo
Schema-driven UIGeneratedCustom ReactNo
Audit and event historyYesYesLog tail
Time to first workflowUnder 5 minHoursMinutes

5-minute setup

Less YAML misery.
More graph, run anywhere.

Sign in, create an org and a project, connect a rig and get your first successful run of the starter workflow.

  1. 01Create or join an org
  2. 02Create or join a project
  3. 03Connect a rig
  4. 04Seed the starter workflow
  5. 05Get a successful run