FixControl/Documentation

Admin Guide

GitHub

Connect GitHub so FixControl can open Pull Requests automatically from the Run-fix flow.

FixControl opens a Pull Request automatically when an agent produces a patch (the Run-fix → PR flow). FixControl needs a GitHub credential to do that write. You have two options — pick one.

Settings → Integrations
Settings → Integrations

Two options

GitHub AppPersonal Access Token
Recommended forProduction, multi-tenantSingle-repo setups
Token lifetime1 hour, rotated automaticallyStatic until you revoke it
PR attribution<app-slug>[bot]Your own account
Per-tenant scopingYes (per installation)No — one token, one repo
Webhook eventsYesNo

The App route is the recommended path for production.

Option 1: GitHub App (recommended)

Step 1 — Register the App

Go to github.com/settings/apps/new (or your organization settings) and use:

  • Callback URL: https://<your-host>/api/auth/github/callback
  • Request user authorization (OAuth) during installation: on
  • Enable Device Flow: on
  • Webhook URL: https://<your-host>/api/github/webhook
  • Webhook secret: a random string of 32+ characters — keep it
  • Permissions (Repository):

- Contents — Read & write - Pull requests — Read & write - Workflows — Read & write - Metadata — Read

  • Permissions (Account): Email addresses — Read

After saving, download the private key (.pem).

Safety: treat the private key as a password. Anyone holding the PEM can mint tokens as your App.

Step 2 — Install per tenant

A signed-in admin clicks Settings → Integrations → Connect GitHub. FixControl redirects to GitHub's "Install on selected repositories" page. After confirming, the installation is bound to the tenant and FixControl mints a fresh installation token per PR (1h TTL).

Step 3 — Validate the webhook

FixControl verifies every delivery with X-Hub-Signature-256. The secret in GitHub's App settings must match the secret FixControl was configured with. Without a match every delivery is rejected — by design: unsigned webhooks are never trusted.

Option 2: Personal Access Token

Use this for a single-repo install.

Mint a fine-grained PAT scoped to that one repo with Contents: read & write and Pull requests: read & write. A classic token works too, but grants more scope than needed.

PRs show up under your account. There's no webhook — events like pull_request.closed won't reach FixControl.

Webhook setup

App-route only:

  1. In App settings: Webhook URL = https://<your-host>/api/github/webhook.
  2. Webhook secret = the exact same string FixControl was configured with.
  3. Subscribe to the events you need — Pull request is the minimum set for the Run-fix flow.
  4. Test it from the Recent Deliveries tab in App settings. A 401 there usually means the secrets don't match.

FAQ

Can I configure both at once? Yes. FixControl picks per tenant: App installation first, then a stored user token, then the PAT. So you can run a production App alongside a single-user PAT setup.

Which repos can FixControl touch? For the App: only the repos you select during installation. For the PAT: only the configured default repo.

What if the installation is removed? The next PR call gets a 401. FixControl invalidates the cached token automatically and surfaces the error — re-enable by installing again from Settings → Integrations.

Are private keys or secrets logged? No. Audit events store the installation ID and GitHub username, never tokens or the PEM.

Anything unclear or wrong?Let us know →

FixControl is a trade name of FixControl B.V. i.o.