All guides
IntegrationsBeginner15 min

Set up GitHub issue integration

Auto-create CodeCourier Issue Sessions from GitHub issues. Wire labels, sync states, and stay in sync without manual hand-off.

By Olivia Brandt
Integrations Engineer
Updated May 4, 2026

Prerequisites

  • A CodeCourier workspace connected to at least one repo
  • Repository admin access on GitHub
  • Permission to manage repo webhooks

The single highest-leverage automation in CodeCourier is the one that eliminates the manual step between "ticket exists in GitHub" and "agent is working on it". This 15-minute setup is the difference between a tool you have to remember to use and a tool that just shows up.

1. Install the GitHub app

In the CodeCourier dashboard, open Integrations → GitHub and click Install GitHub App. Choose the org you want to connect and grant the minimum scopes: repository contents (read + pull-request-create), issues (read + write), and webhook events.

On the GitHub side, select either "All repositories" or a specific list. Start with one or two repos for the first run; you can expand later without re-installing.

2. Pick a trigger label

CodeCourier listens for a label being applied. Pick a label name that is obviously not a regular triage label - we recommend codecourier:run. Create it in each connected repo.

# create the label on a repo
gh label create "codecourier:run" \
  --description "Hand this issue to CodeCourier" \
  --color "00CAE5"

The cyan colour is a small touch but matters: it makes the label visually distinct from priority and triage labels at a glance.

3. Map labels to personas

In the integration settings, define a mapping from GitHub label to CodeCourier persona. This is where you encode policy without writing code.

  • codecourier:run → default persona for that repo.
  • codecourier:frontend → Frontend Specialist persona.
  • codecourier:backend → Backend Specialist persona.
  • codecourier:investigate → Researcher persona (read-only session that emits a comment, no PR).

4. Wire the state sync

Enable two-way state sync in the integration settings. Now an Issue Session marked as in-progress in CodeCourier sets the GitHub issue to in progress, and a merged PR closes the issue automatically. Closing the issue manually on GitHub cancels any active session, so the human override always wins.

State sync is what makes the integration feel native rather than duct-taped. Without it your team will keep two open tabs.

5. Test with a known issue

Pick an existing open issue you have already triaged manually. Slap codecourier:runon it. Within a few seconds you should see an Issue Session appear in the CodeCourier dashboard, a comment on the GitHub issue linking back, and the issue's status flip to in progress.

Wait for the session to finish, review the resulting pull request, and merge. The issue should auto-close on merge.

6. Add a safety net

In the integration settings, set a per-day budget cap. New users should start at $50/day per repo. This caps the blast radius if someone accidentally bulk-labels a thousand issues at once - and someone will, eventually.

7. Next steps

Once the integration is humming, the obvious upgrades are: wire Sprint Chains to triggered runs so a single label can launch a multi-step pipeline, and read the operations handbook before enabling the integration across your full org.

Olivia Brandt
Integrations Engineer
Tags
#github#integrations#webhooks#automation
Share

Keep building

Free for 14 days · no credit card

Hire your first AI engineer.
Ship by lunchtime.

5 minutes to onboard. First PR within an hour. Cancel anytime.