Automation you don't have to babysit.

A deploy that sits in staging for a week, then asks before production. A nightly sync that retries the one record that failed instead of the whole batch. An order flow that waits days for a payment webhook. Hyperspool runs all of them the same way: every step's result is saved, so a failure picks up at that step, and a run that's waiting holds no machine.

release · run-7f3a started by a push to main · day 15 of the run
  1. Build and test (done)
    on a managed build machine, no runners to set up
    4m 12s
  2. Deploy to staging (done)
    the pushed commit, by its sha
    38s
  3. Soak for 14 days slept
    holds nothing while it waits, and a restart changes nothing
    14d
  4. Promote to production? waiting on you
    asked in the console, with a reason if you reject
    asked 2h ago
  5. Deploy to production (not started)
    only after the answer, with the approver on record
    next
  6. Add the release to the log (not started)
    a row in the team's Google Sheet, keyed so a retry writes it once
    next

Draw it on the canvas, keep it as a pipeline in your repo, or script it in whatever language you already use. The copilot can draft one from a sentence too (early access, so expect rough edges).

Where are you coming from?

  • A CI system

    Your pipeline, plus everything after green: deploys, soaks, approvals and rollbacks in the same run, on machines you don't have to look after.

    Coming from GitHub Actions

  • A durable workflow engine

    Durable runs without a worker fleet to host. Write YAML, draw it, or script it in any language, and approvals, schedules and a console are already there.

    Coming from Temporal

  • An automation tool

    Build it visually like you're used to, then get pinned versions, dry runs, reruns from the failed step and your own code steps on top.

    Coming from n8n

  • None of these

    Anything that waits on people, time or other tools. It runs start to finish and you can see where each one is.

    Read the tour

And it's all one system

A build can start a business workflow, a cron job can wait for an approval, and a webhook can wake a run that's been waiting for days. Same runs, same history, same console.

Why

Because CI and automation tools end up running everything. Builds, sure, but also cron jobs, syncs and the business automation nobody had anywhere else to put - it's the system you have. And they're rigid about it. Fail halfway and you start over from scratch. Anything that needs to wait turns into a sleep loop or a second job someone has to remember.

We wanted one system built for all of it, where a build and a business workflow are the same kind of thing and can start each other. That's Hyperspool.

So how does it remember?

Each finished step saves its result. When the process stops, the run replays from those results and carries on from the step it was on. A waiting run holds no agent and no machine, and it finishes on the definition it started with, so publishing a change leaves runs in flight alone.

The same random number, twice

durable.sh picks a random number in a saved step, sleeps, then adds one. The process exits at the sleep and starts again from the top, and you get the same number back because the step replayed from its record. Like so:

Running durable.sh: it prints a random number, sleeps on a timer, then replays from its checkpoint and prints the same number again before doing arithmetic on it.
spool run ./durable.sh
picked 21

  - replaying from checkpoint (completed steps are cached, not re-run)
picked 21
21 + 1 = 22

You can try this one without an account. Install the CLI, spool init writes a few starters, and spool run runs one on your machine:

curl -fsSL https://hyperspool.com/install.sh | sh

Getting started

Write it however you like

All three are the same workflow underneath, with the same checkpoints and history, so pick whatever suits the person who'll maintain it.

On the canvas

Wire steps together and fill each one in. Expressions complete against what earlier steps produced. Start from a template, or describe what you want and let the copilot draft the graph (early access).

Try it runs your unsaved draft as a dry run. Branches and transforms run for real, while shell, HTTP and connector steps get the last run's output, so nothing outside gets touched. Publish when it looks right.

The canvas

As a pipeline

YAML for build, test and deploy, with the waiting bits as job kinds: wait for an event, an approval, a timer, a child workflow. This one deploys to staging, waits up to two weeks for an alert, rolls back if one fires, and otherwise asks before production:

Pipeline reference

jobs:
  build:
    requires: [build]
    steps:
      - { name: compile, run: make release }
  deploy:
    depends_on: [build]
    steps:
      - { name: ship, run: ./deploy.sh staging }
  soak:
    depends_on: [deploy]
    wait_for_event: { event: alerts.fired, timeout: 14d }
  rollback:
    depends_on: [soak]
    if: ${{ !steps.soak.output.timed_out }}
    steps:
      - { name: undo, run: ./deploy.sh staging --rollback }
  promote:
    depends_on: [soak]
    if: ${{ steps.soak.output.timed_out }}
    approval:
      prompt: "Promote to production?"

As a script

A preview environment that deploys, stays up for a week, then tears down. A week later the teardown gets the same environment back from the saved step. Python has an SDK. Bash, and basically anything else that can run a command, uses spool step.

Writing scripts

from datetime import timedelta
from hyperspool import script

env = script.step_fn("deploy", lambda: deploy(host))
script.sleep(timedelta(days=7))
script.step_fn("teardown", lambda: teardown(env))
env="$(spool step deploy -- ./deploy.sh "$host")"
spool sleep 7d
spool step teardown -- ./teardown.sh "$env"

What starts a run?

A push, a schedule or a webhook. Connect a GitHub, Gitea or Forgejo repo with one command, paste the webhook URL and secret it prints into the forge, and every push runs the pipeline checked into the repo. The commit gets its status back.

  • Concurrency groups, throttles and cancel rules decide what runs when, so a new push can cancel the build it replaces.
  • Schedules use a cron expression in your time zone, or just every so often.
  • A canvas workflow can get its own webhook URL and signing secret, and a run can wait for an event as well as start from one.
spool repo connect https://github.com/acme/web \
  --repo-credential gh-read \
  --status-credential gh-status

CI from a repo

Where does it run?

On environments Hyperspool starts for each step. If a step needs something those don't have, run an agent of your own and the step goes there instead.

Managed environments

Started on demand.

  • Containers with bash, git, curl, make, Go, Node 22, and Python 3 with the Hyperspool SDK.
  • On Team and Business, jobs that ask for build get amd64 VMs with 16 cores, 32 GiB of memory, Nix and KVM.
  • Your plan sets how many run at once and how many vCPU-minutes a month you get.

Your own agents

spool agent run on a machine of yours.

  • For arm64 or macOS, a GPU, a private network, or tools the environments don't have.
  • It connects out and never accepts inbound connections, so it's fine behind a firewall, and it only picks up steps whose capabilities it matches.

Running your own agents

The console

Every run in one place. Anything it shows, the CLI can reach too.

A workflow open on its Canvas tab in the Hyperspool console, mid-run: build and test done, deploy running, a soak asleep on its timer and a promote approval waiting for a person.
  • Today

    Approvals waiting on you and things only you can fix come first. Then what's running, what's waiting and what broke.

  • Timeline

    Every run on one lane per workflow, with a line for now and what's scheduled next.

  • Workflow pages

    Each workflow gets its canvas, a plain-language Words view, its runs with step timings, its code and its settings.

  • Copilot

    Early access. Drafts or changes a workflow from a description and answers questions from the docs. It only proposes - you save and publish.

The Today page of the console: a line saying two things need you, counts of runs working, needing you, failed and done, a chart of today's runs coloured by state, then the two approvals waiting for you beside a timer and a schedule due to fire.
The copilot drafting a workflow from a one-line description, with the proposed steps shown on the canvas before anything is saved.

Start with one workflow

It's an invited preview and still early days, so expect some rough edges. It already runs production work though, its own CI included. Sign in, create an organization on the Free plan, and you'll have a project ready for a first run.

Ask for an invite

Tell us who you are and what you'd like to automate. A person reads every request and answers by email.

Rather write? Mail support@hyperspool.com.