ShiftLabs
Runbooks and AI agents in code, with a person approving the risky steps
Write workflows in TypeScript or Python and start them from an alert, a cron schedule or an agent. Commands run inside your network through a runner you host, and the steps you mark as risky wait for a yes in Slack.
- Free1,000 runs a day. No card.
- Pro · $49 a month250,000 runs a month included.
import { workflow } from "shiftlabs";
export default workflow<{ deployment: string }>(async ({ payload, step }) => {
// Runs on your runner, inside your network.
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 };
});
from shiftlabs import workflow
@workflow
async def restart(ctx):
# Runs on your runner, inside your network.
await ctx.step.exec("list pods", command=["kubectl", "get", "pods", "-n", "apps"])
deployment = ctx.payload["deployment"]
decision = await ctx.step.wait_for_approval(
"restart",
message=f"Restart {deployment}?",
approvers=["role:admin"],
)
if not decision["approved"]:
return {"restarted": False, "note": decision["note"]}
await ctx.step.exec(
"restart",
command=["kubectl", "rollout", "restart", f"deployment/{deployment}", "-n", "apps"],
)
return {"restarted": True}
Start from a pack
See all packs- 01 · for NetDevOps
Network / AWX replacement
Keep your Ansible playbooks. Add approvals, HA-aware rollouts and config diffs.
- 02 · for SRE
SRE runbooks
From the alert to the fix, with a person approving the risky step.
- 03 · for platform teams
Glue automation
Webhooks between GitHub, Stripe, Slack and Jira, with every request recorded.
How it works
Write the runbook as a workflow
Start from a template with
npx shiftlabs init --template github-actions-runbook, or write one in TypeScript or Python. It lives in your repo like any other code.Deploy it and connect a trigger
npx shiftlabs deployships your workflows, agents and schedules together. Point an alert's webhook at the trigger URL, set a cron schedule, or hand the workflow to an agent as a tool.Approve the risky steps from Slack
The run stops at each approval step and posts Approve and Deny buttons in Slack. Once someone approves, the run carries on. Its timeline shows every step and outbound request.
Start with one runbook
Runs execute in US regions only.