Delivery OS

GitHub Delivery OS

Sprints, QA and release approvals, built into your GitHub repo. Run it from any AI coding agent, or by hand.

New in 1.14: works with any AI coding agent, not just Claude Code.

★ Star on GitHub

Get started

1. Install

From your repo root. Pick how you work:

Codex, Cursor, GitHub Copilot, Cline, opencode and more
npx github-delivery-os install --with-templates --with-labels --with-agents .

Adds the instructions to AGENTS.md, which most agents read. A few, like Aider, need to be pointed at the file.

Claude Code
npx github-delivery-os install --with-templates --with-labels --with-skill .

Adds the delivery-ops skill to .claude/skills.

Terminal only
npx github-delivery-os install --with-templates --with-labels .

Workflows, forms and labels only. You create issues yourself.

One person or a small project? Add --bundle lite. Want a preview first? Add --dry-run. Lite or full →

2. Ask your agent

Open your agent in the repo and say what you want:

Create a sprint called Sprint 1 for the login revamp, running Oct 1 to Oct 14, with features: sign-in page, password reset.

It checks the repo, shows exactly what it will create, and waits for your yes. More things to ask →

3. Name your approvers

Set these repo variables (Settings → Secrets and variables → Actions → Variables), or ask your agent to:

  • Lite: nothing. The install sets RELEASE_APPROVER to you.
  • Full: RELEASE_APPROVER, QA_APPROVER and QA_ASSIGNEES (GitHub usernames, comma-separated for several).

Then check the install: npx github-delivery-os status .

Not sure which size? Let your agent guide you

Paste this into your agent. It asks a few questions, recommends lite or full, shows a preview and installs after you say yes.

Paste into your agent, from your repo root
Help me set up GitHub Delivery OS in this repo. First run "npx github-delivery-os list" to see what's available, then ask me a few plain questions (is it just me or a team? does anyone test before release?) and recommend the lite or full install. Show me a dry run ("npx github-delivery-os install ... --dry-run .") and only install after I say yes.

On Claude Code you can also add a permanent setup assistant that works in any repo: npx github-delivery-os setup-skill

Lite or full

Pick the size that fits today. You can add or remove pieces any time.

LiteFull (default)
Best forWorking alone, or a small projectA team with a QA step
Sprints, tasks, bugs, burn-down✓✓
Release approvalOne approver: youRelease approver + QA approver
Rolling QA issue and QA requestsAdd later✓
Telegram alertsAdd laterAdd later

Shipping with lite: open a Production Release issue, the approver comments approved, and it gets ready-for-deploy. declined holds it back.

Change it any time

Ask your agent. It previews first and waits for your yes.

Say thisWhat happens
"What do I have installed?"Lists what's on and what's off.
"Add QA sign-off."Adds the QA pieces. Releases then need a QA approver too, so set QA_APPROVER and QA_ASSIGNEES.
"Turn on Telegram alerts."Adds the alerts. You add the secrets TELEGRAM_BOT_TOKEN and TELEGRAM_CHAT_ID.
"Take QA sign-off out."Removes only files nothing else needs.

Your variables, secrets and labels are never touched, and a plain install --update keeps your choices.

Example: turning on Telegram, then QA
        
You:    I want Telegram alerts for this repo.

Agent: A dry run of `add telegram` shows it
        would add one workflow:
        .github/workflows/telegram-issues.yml.
        Nothing else changes.

        After it's added you create two repo
        secrets yourself (Settings → Secrets and
        variables → Actions):
          TELEGRAM_BOT_TOKEN  from @BotFather
          TELEGRAM_CHAT_ID    where alerts go

        Shall I run `add telegram .` for real?

You:    Yes, add it.

Agent: Added. `list` shows the telegram pack as
        installed. Two things for you: add the
        two secrets, and commit and push the new
        workflow, since it only runs once it's
        on the default branch.

You:    Now I also want QA sign-off before
        releases.

Agent: A dry run of `add qa` shows what comes
        in: QA assignment, the rolling QA issue,
        QA approval, the QA Request form, and
        QA-aware release workflows that replace
        lite's. What changes for you: a release
        then needs the QA approver's approval as
        well as yours. You'd set QA_APPROVER and
        QA_ASSIGNEES. Who should they be? I
        won't set them unless you tell me to,
        because they name a real person.

Ask your agent

Delivery Ops is the set of instructions your agent follows. It checks the repo first, shows what it will create, and acts only after you confirm. Claude Code gets it as a skill (--with-skill); other agents read it from AGENTS.md (--with-agents).

AskWhat happens
"Create a sprint called Sprint 14 for <goal>, running <start> to <end>, with features: …"Opens a sprint; each feature becomes a child issue
"Open a production release for <project> v2.4.1, sprint #N, summary: …"Opens a release issue and tags the approver
"Approve release #N" / "Decline release #N, <reason>"Checks you are the approver, then posts the right comment
"Open a QA request for <feature>, related to #N"Opens a QA request and assigns your QA team
"Mark QA #N as approved"Checks you are the QA approver, then comments
"File a bug: <summary>, severity <level>, steps: …"Opens a bug report
"Create a task to <summary>, owner <name>, priority P1"Opens a task
"How's Sprint 14 doing?" / "What releases are waiting?"Reads status; no issue number needed

It can also track tasks on its own as you work, or turn a spec into a phase-and-task breakdown (shown for confirmation first). See the full instructions or How To.

Example: a short session
          You:    Create a sprint called Sprint 14 for the checkout revamp, running
        Oct 1 to Oct 14, with features: guest checkout, saved cards,
        order confirmation email.

Agent: Checked acme/storefront: Delivery OS is installed and the sprint
        and planning labels exist. I'm about to create:

          Title:    SPRINT - Sprint 14
          Labels:   sprint, planning
          Goal:     Checkout revamp
          Dates:    2026-10-01 to 2026-10-14
          Features: guest checkout
                    saved cards
                    order confirmation email

        Create it?

You:    yes

Agent: Created acme/storefront#57. sprint-child-creator has opened
        #58 guest checkout, #59 saved cards and #60 order confirmation
        email. Closing each one moves the sprint's burn-down.

You:    Approve release #61

Agent: You're logged in as jkaweesi22, which matches RELEASE_APPROVER.
        Posting "approved" on #61. authorize-deployment will mark it
        ready to deploy.
Example: filing a bug and a task, step by step

Illustrative walkthrough against acme/storefront, a repo with Delivery OS installed (same example repo as the full walkthrough below).

Filing the bug:

  1. In your agent, inside (or pointed at, via --repo) the target repo, describe the bug in plain language:
    "File a bug on acme/storefront — the order request form submits with an empty phone number, severity high. Steps: fill in the form, leave phone blank, submit. Expected: should block submission. Actual: submits anyway, so there's no way to contact the customer. Tested on Chrome, desktop, production."
  2. The agent pre-flights the repo — confirms Delivery OS is installed and the bug/qa labels exist.
  3. The agent shows the exact issue it's about to create before doing anything: Title [BUG] Order request form submits with empty phone number; Labels bug, qa; body fields (Platform, Severity: High, Build/Version, Steps to Reproduce, Expected/Actual Result, Test Environment) filled in from what you said.
  4. Confirm ("yes") when asked to create it.
  5. The agent runs gh issue create and reports back the issue — e.g. acme/storefront#42. Nothing else happens automatically; bug reports don't trigger a workflow, they're just labeled and tracked.

Filing the follow-up task:

  1. Ask the agent to turn the bug into tracked work, referencing the bug's issue number:
    "Create a task to add phone number validation to the order form, owner @alex, priority P1, status Backlog, acceptance: form blocks submission until a valid phone number is entered. Link it to #42."
  2. The agent shows the constructed issue: Title TASK - Add phone number validation to order form; Labels task; body: Task Summary, Description (references #42), Owner → @alex, Priority → P1 - High, Status → Backlog, Acceptance Criteria, Artifacts/Links → Related bug: #42.
  3. Confirm ("yes") to create it.
  4. The agent runs gh issue create. Same as the bug — no workflow trigger, just labeled and tracked, now linked back to the bug it addresses.
Full example: shipping a feature end-to-end

A realistic session, run from inside the repo. RELEASE_APPROVER, QA_APPROVER, and QA_ASSIGNEES are already configured.

You: Create a sprint called "Sprint 14 - Checkout Revamp", running 2026-09-16 to
     2026-09-30, goal is shipping the new checkout flow, features:
     - Redesign cart summary
     - Add saved payment methods
     - Fix tax rounding bug

Agent: This will create an issue in acme/storefront:

          Title:  SPRINT - Sprint 14 - Checkout Revamp
          Labels: sprint, planning
          Body:
            ### Sprint Name
            Sprint 14 - Checkout Revamp
            ### Sprint Start
            2026-09-16
            ### Sprint End
            2026-09-30
            ### Sprint Goal
            Ship the new checkout flow
            ### Sprint Features (One Per Line)
            Redesign cart summary
            Add saved payment methods
            Fix tax rounding bug
            ### Sprint Approved
            Pending

        Create this issue?

You: yes

Agent: Created #52. sprint-child-creator will fire on open and create one child
        issue per feature — #53 "Redesign cart summary", #54 "Add saved payment
        methods", #55 "Fix tax rounding bug" — each labeled sprint-active and
        linked back with "Parent Sprint: #52".

  [ ... engineers do the work, close #53 and #54 as they land ... ]

You: How's Sprint 14 doing?

Agent: Reading #52... ## 🚦 Sprint Status: 67% complete (2/3 closed), 20% of
        sprint time elapsed, 🟢 on track.

You: QA found a rounding issue in the tax calc — file a bug. Severity high,
     repros on checkout with 3+ items, expected total matches line items,
     actual is off by $0.01.

Agent: This will create an issue in acme/storefront:

          Title:  [BUG] Tax rounding off by $0.01 with 3+ items
          Labels: bug, qa
          Body: (Platform, Severity: High, Steps to Reproduce, Expected vs.
                 Actual Result, Test Environment filled in from what you said)

        Create this issue?

You: yes

Agent: Created #56.

  [ ... #55 fixed, referencing #56 ... ]

You: Open a QA request for the tax rounding fix, related to #55, test on
     staging, acceptance: totals match to the cent for carts of 1-10 items.

Agent: This will create an issue in acme/storefront:

          Title:  QA REQUEST - Tax rounding fix
          Labels: qa-request
          Body: (Related Sprint Task Issue #55, What to Test, Environment +
                 Build Link: staging, Acceptance Criteria filled in)

        Create this issue?

You: yes

Agent: Created #57. auto-assign-qa will assign it to the configured
        QA_ASSIGNEES.

  [ ... QA tests it, comes back clean ... ]

You: Mark QA #57 as approved, looks good.

Agent: Checking gh auth status... authenticated as jane-qa, which matches this
        repo's QA_APPROVER. Posting:

          "looks good — verified on staging, totals match to the cent"

        on #57.

You: yes, post it

Agent: Posted. Now close #55 to update the sprint burn-down?

You: yes

Agent: Closed #55. Sprint 14 is now 100% complete — auto-close-sprint closed
        #52 and posted a completion comment.

You: Open a production release for storefront v2.4.1, sprint #52, summary
     "checkout revamp: new cart summary, saved payment methods, tax rounding
     fix", QA evidence: #57.

Agent: This will create an issue in acme/storefront:

          Title:  PRODUCTION RELEASE - storefront - v2.4.1
          Labels: release, production, approval
          Body:
            ### Sprint Reference (Sprint Planning Issue #)
            #52
            ### Version / Build Number
            v2.4.1
            ### Release Summary
            Checkout revamp: new cart summary, saved payment methods, tax
            rounding fix
            ### QA Summary + Evidence Links
            #57
            ### Overall QA Recommendation
            Approve for Production
            ### Deployment Authorized
            No

        Create this issue?

You: yes

Agent: Created #58. notify-release-approver posted a comment tagging this
        repo's RELEASE_APPROVER (john-lead).

  [ ... some time later, as john-lead ... ]

You: Approve release #58.

Agent: Checking gh auth status... authenticated as john-lead, which matches
        RELEASE_APPROVER. Posting "approved" on #58.

You: yes

Agent: Posted. authorize-deployment will add ready-for-deploy once both
        approvers (release + QA) have a qualifying comment on record.

Each "yes" above is a real confirmation gate — the agent shows the exact issue/comment content before it creates or posts anything, since it's a visible action in the repo.

What you get

Sprints that plan themselves One issue per sprint, one child per feature. Burn-down updates and the sprint closes at 100%.
Release approval gates Lite: one approver ships it. Full: release and QA approvers both sign off, and a decline stands until that person approves.
QA that doesn't get forgotten Every change to main lands on one rolling QA issue, assigned to your QA team.
Any AI agent Claude Code, Codex, Cursor, Copilot, Cline and more. Or no agent at all.

Workflows

Lite installs the five marked Lite. Packs add the rest. Details are in governance.

WorkflowTriggerWhat it does
sprint-child-creator
Lite + Full
Issue titled SPRINT - openedCreates one child issue per feature line
auto-close-sprint
Lite + Full
Child issue closed or reopenedUpdates the burn-down; closes the sprint at 100%
notify-release-approver
Lite + Full
Issue labeled production openedTags the approver and lists what's in the release
authorize-deployment
Lite + Full
Comment on a production issueAdds ready-for-deploy once approved, or declined
setup-labels
Lite + Full
ManualCreates the labels Delivery OS needs
auto-qa-request
Full · pack: qa
Push to mainAdds each change to one rolling QA issue (tune with DELIVERY_OS_AUTO_QA_MODE)
qa-rollup-approval
Full · pack: qa
Comment on the rolling QA issueQA approver approves (closes it) or declines (keeps it open)
auto-assign-qa
Full · pack: qa
Issue labeled qa or qa-requestAssigns QA_ASSIGNEES
telegram-issues
Opt-in · pack: telegram
Issue, comment and PR eventsSends Telegram alerts when the two secrets are set

Update

Ask your agent: "Check whether Delivery OS here is up to date, and show me what an update would change." Or from a terminal:

Update to latest
npx github-delivery-os@latest install --with-templates --with-labels --update .

Add the same --with-agents or --with-skill you installed with. An update keeps your bundle, packs and any workflows you added or removed. status . shows your version.

Command reference

Everything above is also available as plain commands, for people who prefer the terminal or want to script it.

Show every command

Install from a terminal

No clone, no config. From your repo root, just run:

From your repo root
npx github-delivery-os install --with-templates --with-labels --with-agents .

--with-labels needs gh auth. Add --with-agents (any AI agent) or --with-skill (Claude Code) for the instructions, and --dry-run to preview first.

Command When to run it
install --with-templates .First install — workflows + issue templates
install --with-templates --with-labels .Also create labels immediately via gh CLI
install --with-templates --with-agents .You'll operate this repo's Delivery OS from any AI coding agent that reads AGENTS.md
install --with-templates --with-skill .You'll operate this repo's Delivery OS from Claude Code
install --with-templates --with-labels --with-skill .Everything at once, in one command
install --bundle lite --with-templates --with-labels --with-skill .One person or a small project — sprints, tasks, bugs and a single-approver release, without the QA machinery. Sets you as the release approver
install --only a,b … / --skip a,bPick individual workflows (names from list) instead of a whole bundle
list .See every bundle, pack and workflow, and which are installed in this repo (--json for tools)
add qa . / add telegram . / add <workflow> .Add a pack or a single workflow later, without reinstalling (--dry-run to preview)
remove qa . / remove <workflow> .Take a pack or workflow away again; deletes only the files nothing else needs
setup-skillAdd the Claude Code skill that helps you choose what to install, before anything is installed
install --dry-run …Preview any combination above — nothing is written
install --update …Update an existing install, or add a flag you skipped earlier
status .Check what's installed, its version, and for broken installs
shell-hook --installGet a reminder in your terminal when you cd into an out-of-date repo
uninstall --with-templates --with-skill --with-agents .Remove everything, including templates, the skill and the AGENTS.md section

Check and update from a terminal

Check what's installed and whether a newer version is available:

Check status
npx github-delivery-os@latest status .

Then pull the latest workflows, templates, labels, and skill. --update replaces files that are already installed; without it, existing files are skipped:

Update to latest
npx github-delivery-os@latest install --with-templates --with-labels --with-skill --update .

For a reminder in any terminal whenever you cd into an out-of-date repo:

Terminal reminder (zsh or bash)
npx github-delivery-os@latest shell-hook --install

Resources