Cat Factory
Home
Get Started
GitHub
Home
Get Started
GitHub
  • Start

    • Introduction
    • Core Concepts
    • Quick Start
    • Tutorial: Your First Task to a Merged Pull Request
  • Guides

    • Recipes

      • Cookbook
    • Plan the work

      • Design Your Board
      • Clarify Requirements
      • Author a Document
      • Plan an Initiative
    • Run pipelines

      • Choose and Edit a Pipeline
      • Run a Pipeline
      • Schedule Recurring Work
      • Review and Merge Pull Requests
      • Control Spend with Budgets
    • Connect

      • Connect a Repository
      • Connect Issue & Document Sources
      • Feed Design Context to Agents
      • Preview and Test a Frontend
    • Models & prompts

      • Connect a Model Provider
      • Apply Standards with Prompt Fragments
      • Run a Claude Skill as a Step
      • Compare Prompts and Models in the Sandbox
    • Collaborate

      • Invite and Manage Your Team
      • Share Services Across Workspaces
      • Register Foundational Services
  • Deploy

    • Run Locally
    • Deploy to Node.js
    • Deploy to Cloudflare
    • Deploy on Kubernetes
    • Lay Out a Kubernetes Cluster
    • Set Up a Local Kubernetes Cluster on Windows
    • Register the GitHub App
    • Set Up Enterprise SSO
    • Set Up Your Deployment Repository
    • Configuration
  • Operate

    • Observability
    • Set Up Notifications
    • Run Jobs on Your Own Runners
    • Provision Ephemeral Environments
    • Debug a Run from Outside the Browser
    • Troubleshooting
    • Upgrades & Data Retention
  • Extend

    • Add a Custom Agent Kind
    • Add a Custom Gate or Judge
    • Add a Custom Provider
    • Extend the App with Frontend Modules
    • Integration Manifests
    • Give Agents External Tools (MCP)
    • Package a Reusable Operation
    • Register an Initiative Preset
    • Public API
    • Official SDKs
    • MCP Server
    • Cloudflare OS Gatekeeper
  • Reference

    • Architecture
    • Agent Isolation Model
    • Security Model & Hardening
    • Packages & Repository Layout
    • GitHub and GitLab Support Matrix
    • Environment Variables
    • API Endpoint Reference
    • Glossary

GitHub and GitLab Support Matrix

Cat Factory acts on real code through a provider-neutral source-control layer, so a workspace's repositories can live on GitHub or GitLab. GitHub is the reference implementation every engine path is built against; GitLab is an opt-in provider implementing the same interfaces.

This page is for anyone choosing a provider or running both. It states what each one can actually do today, including where GitLab is behind and why.

Both providers can be configured on one deployment at the same time. A workspace's repositories only need to resolve to the right connection.

Setting each one up

  • GitHub: register a GitHub App. See Register the GitHub App.
  • GitLab: opt-in and off by default. The provider works on every runtime, but the token is named per runtime: set GITLAB_TOKEN (scope api) on Cloudflare and Node, or GITLAB_PAT in local mode. GITLAB_API_BASE is optional on all three and points at a self-managed instance (it defaults to gitlab.com). GITLAB_CONNECTION_ID and GITLAB_WEBHOOK_SECRET (webhook delivery) are optional and apply to Cloudflare and Node. See Configuration → GitLab.

Each provider's API base also decides the web host the app links repositories, merge and pull requests, and issues to. A base that names no recognisable host makes the app withhold those links rather than point at the provider's public instance, where the same namespace path is very likely somebody else's project.

Feature parity

CapabilityGitHubGitLab
Credential modelApp installation: one credential scope per workspaceA single shared token (group, personal, or OAuth PAT) per deployment
Multi-tenant credential isolationPer-installation tokenOne token for the whole deployment, mirroring local mode's PAT model
Self-managed or on-prem instanceYes (GitHub Enterprise Server, via a configurable API base)Yes (GITLAB_API_BASE, any self-managed instance)
Repository and branch readsYesYes
File and directory readsYesYes
Branch, commit, and pull/merge request writesYesYes
Merging a pull/merge requestYesYes
Updating a request branch with its targetServer-side branch mergeVia merge-request rebase: GitLab has no branch-merge endpoint
CI statusChecks APIPipelines
Requested reviewers and submitted reviewsYesYes, with approvals mapped onto reviews
Required approval countBranch protectionMerge-request approval rule
Review threads (resolve and reply)YesYes, as resolvable discussions
Changed files with patchesPull files APIMerge-request diffs. No per-file line counts, so they are counted off the hunk and reported as unreported (never 0) where GitLab withheld them
Request head branch and head SHAYesYes
Publishing review findings as inline commentsPer comment, with partial success reportedPer-comment diff discussions plus a summary note, same partial-success reporting
Issues: read, create, close, commentYesYes
Issue searchYesYes
Sub-issues (parent to child)YesNo native concept; callers degrade gracefully
Issues as a task sourceFullImports, searches, diagnoses, and backs both the recurring bug intake and the bug hunt. Issue type does not narrow the search (GitLab has no "bug" type, so use labels). Push intake and writeback are still open
Code searchYesNo. It needs GitLab Advanced Search, and the basic API cannot supply a usable repository and URL per hit
Webhooks: request, issue, push, CI statusHMAC-signedToken-header verified
Webhooks: connection lifecycle (removed or suspended)YesNot mapped: a removed or suspended connection is not pushed live
Periodic reconciliation (catches missed webhooks)YesYes, on the same provider-neutral path
Repository provisioningTwo-app tier, with permissions introspected before the createSingle token, optimistic: the capability is discovered by attempting the create
Sign-in with a pasted PATYesYes
Sign-in with an OAuth browser flowYesNo, PAT only
Sign-in allow-list by login or email domainYesYes
Sign-in allow-list by organization or groupAgainst organizationsAgainst group full paths
Listing pagination capAbout 1000 items, warns on truncationAbout 1000 items, warns on truncation

Reading this table before you choose

Three rows decide most deployments:

  • Credential isolation. On GitHub each workspace gets its own installation scope. On GitLab one deployment-wide token serves every workspace, so a multi-tenant GitLab deployment cannot isolate one team's repositories from another's at the credential layer.
  • Code search. Several agent kinds search code to orient themselves. On GitLab those searches return nothing rather than failing, so agents fall back on reading the checkout.
  • Connection-lifecycle webhooks. On GitLab, revoking access is not pushed to the platform. The periodic reconciliation still catches it, so the change lands late rather than never.

Next: Register the GitHub App to set up the reference provider, or Connect a Repository to link one to a board.

Edit this page on GitHub
Last Updated: 8/8/26, 10:33 PM
Prev
Packages & Repository Layout
Next
Environment Variables