ShiftLabs Start free

Runbook automation in TypeScript or Python, with approvals

ShiftLabs runs your runbooks as workflows written in TypeScript or Python. Each step is saved as it finishes, so a run picks up where it stopped. Commands run on a runner inside your network. A step that changes production waits for a person to approve it, in the dashboard or in Slack.

Start free · Read the runbook docs

How a runbook run works

  1. A trigger starts the run.

    A webhook, a schedule, Run now in the dashboard, the API, or an agent's tool call.

  2. Steps do the work.

    step.run calls an API. step.exec runs a command on your runner. Steps retry on failure.

  3. A person approves the risky step.

    step.waitForApproval holds the run until an approver answers. Nobody answers in 72 hours by default, and the request counts as denied.

  4. The run records what happened.

    Each step, command output, approval and outbound request shows on the run.

A runbook in code

This workflow lists the pods, asks an admin, then restarts a deployment. Both commands run on your runner.

TypeScript
import { workflow } from "shiftlabs";

export default workflow<{ deployment: string }>(async ({ payload, step }) => {
  await step.exec("list pods", { command: ["kubectl", "get", "pods", "-n", "apps"] });
  const decision = await step.waitForApproval("restart", {
    message: `Restart ${payload.deployment}?`,
    approvers: ["role:admin"],
  });
  if (!decision.approved) return { restarted: false, note: decision.note };
  await step.exec("restart", {
    command: ["kubectl", "rollout", "restart", `deployment/${payload.deployment}`, "-n", "apps"],
  });
  return { restarted: true };
});

The same workflow can be written in Python with ctx.step.exec and ctx.step.wait_for_approval. See Workflows.

Commands run inside your network

ShiftLabs is hosted. The runner is the one part you run.

Approvals in the dashboard or in Slack

Schedules

A schedule starts a workflow on a cron, in your time zone, such as 0 3 * * * in America/Detroit. Schedules deploy with your workflows. See Schedules.

Runbooks in GitHub Actions

The github-actions-runbook template starts a script in your repository's GitHub Actions after an approver says yes, then waits for its signed result. The credentials your script uses stay in GitHub. See Run tools in GitHub Actions.

Limits

FreePro
Price$0, no card$49 a month
Runs1,000 a day250,000 a month included
Runs at once10100
Runner tokens220
Longest command30 minutes12 hours
Commands waiting for a runner20500

Commands run on your machines, so they use no CPU time or outbound requests of your plan. Every limit is on Pricing.

Not a fit yet

Start with one runbook

Pick the runbook your team runs most by hand. Write the read-only steps first, then put the change behind an approval.

Start free · See the templates