Git Providers

Coder Agents leverages your existing external authentication configuration to power the in-chat diff viewer. Self-hosted GitHub Enterprise deployments require one additional setting (API_BASE_URL) for this feature to work.

GitHub Enterprise configuration

For public github.com, no additional configuration is needed.

For self-hosted GitHub Enterprise, add API_BASE_URL to your existing configuration:

CODER_EXTERNAL_AUTH_0_ID="primary-github" CODER_EXTERNAL_AUTH_0_TYPE=github CODER_EXTERNAL_AUTH_0_CLIENT_ID=xxxxxx CODER_EXTERNAL_AUTH_0_CLIENT_SECRET=xxxxxxx CODER_EXTERNAL_AUTH_0_AUTH_URL="https://github.example.com/login/oauth/authorize" CODER_EXTERNAL_AUTH_0_TOKEN_URL="https://github.example.com/login/oauth/access_token" CODER_EXTERNAL_AUTH_0_VALIDATE_URL="https://github.example.com/api/v3/user" CODER_EXTERNAL_AUTH_0_API_BASE_URL="https://github.example.com/api/v3" CODER_EXTERNAL_AUTH_0_REGEX=github\.example\.com

Without API_BASE_URL, Coder defaults to https://api.github.com. Clone and push still work (they use AUTH_URL and TOKEN_URL directly), but the diff viewer silently fails because Coder builds its URL-matching patterns from the API base URL.

Note

If you have both a github.com and a GHE external auth config, only the GHE config needs API_BASE_URL.

GitLab configuration

For gitlab.com, no additional API_BASE_URL is needed. Coder automatically derives it from your AUTH_URL for self-hosted instances.

Required scopes

The default GitLab scopes (read_user) are sufficient for basic authentication. To use merge request features (diffs, status checks) with Coder Agents, configure:

CODER_EXTERNAL_AUTH_0_ID="primary-gitlab" CODER_EXTERNAL_AUTH_0_TYPE=gitlab CODER_EXTERNAL_AUTH_0_CLIENT_ID=xxxxxx CODER_EXTERNAL_AUTH_0_CLIENT_SECRET=xxxxxxx CODER_EXTERNAL_AUTH_0_SCOPES="write_repository read_api"

The read_api scope grants read access to the API (needed for fetching merge request metadata and diffs). The write_repository scope allows pushing commits and creating merge requests.

Self-hosted GitLab

For self-hosted GitLab, set AUTH_URL and TOKEN_URL to your instance. Coder derives API_BASE_URL automatically from AUTH_URL:

CODER_EXTERNAL_AUTH_0_ID="primary-gitlab" CODER_EXTERNAL_AUTH_0_TYPE=gitlab CODER_EXTERNAL_AUTH_0_CLIENT_ID=xxxxxx CODER_EXTERNAL_AUTH_0_CLIENT_SECRET=xxxxxxx CODER_EXTERNAL_AUTH_0_AUTH_URL="https://gitlab.example.com/oauth/authorize" CODER_EXTERNAL_AUTH_0_TOKEN_URL="https://gitlab.example.com/oauth/token" CODER_EXTERNAL_AUTH_0_SCOPES="write_repository read_api" CODER_EXTERNAL_AUTH_0_REGEX=gitlab\.example\.com

Note

You may also set API_BASE_URL explicitly if needed (e.g., https://gitlab.example.com/api/v4), but this is usually unnecessary.

Known limitations

GitLab

The GitLab provider has some semantic differences compared to the GitHub provider:

  • Approved uses GitLab's threshold-based approval (e.g., "all required approvals met") rather than GitHub's "at least one approval and no changes requested" model.
  • Changes requested has no GitLab equivalent. This field is always reported as false.
  • Reviewer count only counts users who have approved, not all assigned reviewers.

These gaps are tracked internally and may be refined in future releases.

Troubleshooting

Diffs not appearing on GHE

Add API_BASE_URL to your GHE external auth config and restart Coder. Diffs should appear within a couple of minutes.

Users not seeing diffs

The chat owner must have linked their account through the relevant external auth provider.

Checking logs

Look for gitsync warnings such as no provider for origin or resolve token errors.