Claude Launchpad

CI Integration

Gate pull requests on coding-agent config quality with claude-launchpad doctor in GitHub Actions — plus a weekly canary that tests generated config against the live harness.

Add this GitHub Action to your repo. Every pull request that touches agent config files will be checked automatically. Score below threshold = PR blocked. --min-score gates each detected harness separately and never averages Claude with Cursor.

.github/workflows/agent-config.yml
name: Agent Config Quality
on:
  pull_request:
    paths:
      - 'CLAUDE.md'
      - '.claude/**'
      - '.claudeignore'
      - 'AGENTS.md'
      - '.cursor/**'
      - '.cursorignore'
jobs:
  config-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with: { node-version: '22' }
      - run: npx claude-launchpad@latest doctor --min-score 80 --json

The --min-score 80 flag returns exit code 1 if either harness is below 80. The --json flag outputs structured JSON for programmatic consumption. Pin --harness claude or --harness cursor if you only want one report.

The canary pattern (how launchpad guards itself)

Generated configs can rot silently: the harness evolves, and a hook that was correct last quarter may no longer fire at all — with no error anywhere. Unit tests can't catch this because they validate what a tool emits, not what the agent executes.

Launchpad's own repo runs a weekly Claude canary that scaffolds a fresh project with init -y, installs the latest Claude Code release, and asserts real behavior in live headless sessions:

  • the destructive-command hook actually blocks rm -rf /...
  • the .env guard actually fires (and the seeded secret stays out of the transcript)
  • the PostToolUse auto-format hook actually rewrites a just-written file
  • memory install actually registers the MCP server (claude mcp list)
  • SessionStart memory context injection actually produces output

Failures open a canary-failure issue automatically. It needs an ANTHROPIC_API_KEY secret and costs a few cents per run (short haiku sessions). If you maintain your own hook library, steal this pattern — it's in scripts/canary.sh.

A separate Cursor Agent canary scaffolds init --harness cursor and runs live Agent checks (pnpm canary:cursor, pnpm canary:cursor:eval). It needs a CURSOR_API_KEY secret.

On this page