git submodule

Nothing merges
until it's ready.

Label a PR merge/ready. Merge waits 24 hours, checks CI, then uses AI to approve or block with a written explanation.

How it works

1

Apply merge/ready to a PR

Done manually, or automatically by Council after an AI CTO review. The 24-hour window opens immediately. Remove the label at any time to cancel.

2

24-hour cooling window

Time for the team to review. Merge polls every 30 minutes and waits. CI must stay green and the branch must remain conflict-free throughout.

3

AI safety check runs

After 24 hours, Merge reads the diff and context, then either squash-merges the PR or applies merge/blocked with a written explanation. Remove the block label and re-apply merge/ready to retry.

Labels

merge/ready

PR is queued — the 24-hour review window begins. Remove to cancel at any point.

merge/blocked

AI blocked the merge. The explanation is posted as a PR comment. Remove the label and re-apply merge/ready to retry after addressing the concern.

Install

bash
# 1. Add Merge as a submodule
git submodule add https://github.com/derrybirkett/merge merge

# 2. Copy the workflow into your repo
cp merge/.github/workflows/merge.yml .github/workflows/merge.yml

# 3. One-time setup — creates labels, optionally patches Council
bash merge/scripts/setup.sh

# Required secret: ANTHROPIC_API_KEY
# (already set if you're using Delta or Council)

Configure

Set MERGE_STRATEGY as a GitHub Actions repository variable to control the merge method.

MERGE_STRATEGY: squash # squash (default) | rebase | merge

Changelog

v0.1.0 2026-05-21
  • Initial release
  • 24-hour review window enforced via polling workflow
  • AI safety check on diff and context before merge
  • merge/blocked with written explanation on rejection
  • Configurable merge strategy: squash, rebase, or merge
  • One-time setup script creates labels and optionally patches Council