Cat-Factory
Home
  • Introduction
  • Core Concepts
  • Quick Start
  • Designing Your Board
  • Shared Services
  • Requirements
  • Running Pipelines
  • Recurring Pipelines
  • Pull Requests & Merging
  • Repositories
  • Issue & Document Sources
  • Budgets & Spend
  • Prompt Fragments
  • Deploy to Cloudflare
  • Deploy to Node.js
  • Configuration
  • Self-Hosted Runner Pools
  • Ephemeral Environments
  • Architecture
  • Integration Manifests
  • Packages & Repository Layout
GitHub
Home
  • Introduction
  • Core Concepts
  • Quick Start
  • Designing Your Board
  • Shared Services
  • Requirements
  • Running Pipelines
  • Recurring Pipelines
  • Pull Requests & Merging
  • Repositories
  • Issue & Document Sources
  • Budgets & Spend
  • Prompt Fragments
  • Deploy to Cloudflare
  • Deploy to Node.js
  • Configuration
  • Self-Hosted Runner Pools
  • Ephemeral Environments
  • Architecture
  • Integration Manifests
  • Packages & Repository Layout
GitHub
  • Deploy & Operate

    • Deploy to Cloudflare
    • Deploy to Node.js
    • Configuration
    • Self-Hosted Runner Pools
    • Ephemeral Environments

Configuration

This page is the reference for every environment variable and toggle you'll set when deploying Cat-Factory. Secrets are grouped by concern: authentication, model providers, infrastructure, service wiring, and feature toggles.

Authentication

GitHub is the identity provider and the source of repository access.

VariablePurpose
GITHUB_CLIENT_IDOAuth provider client ID.
GITHUB_CLIENT_SECRETOAuth provider client secret.
GitHub App IDIdentifies the GitHub App used for repository operations.
GitHub App private keySigns GitHub App requests.
GitHub App webhook secretVerifies inbound webhook payloads.

LLM providers

Supply credentials for the providers you want to use. With none set, Cat-Factory falls back to the free Cloudflare Workers AI tier.

VariableProvider
ANTHROPIC_API_KEYClaude API access.
OPENAI_API_KEYOpenAI model access.
QWEN_API_KEY / DEEPSEEK_API_KEY / MOONSHOT_API_KEYOpenAI-compatible vendors.
CLOUDFLARE_ACCOUNT_ID + CLOUDFLARE_API_TOKENCloudflare Workers AI over REST (default cost-free tier; optional CLOUDFLARE_AI_GATEWAY).
BEDROCK_REGION + AWS credentials + BEDROCK_MODELSAWS Bedrock, via @cat-factory/provider-bedrock.

Unconfigured providers simply aren't registered. Default routing is tunable with AGENT_DEFAULT_PROVIDER, AGENT_DEFAULT_MODEL, AGENT_DEFAULT_TEMPERATURE, and AGENT_MAX_OUTPUT_TOKENS; a workspace can override the model per agent kind at runtime (see Choosing models).

Infrastructure

VariablePurpose
DATABASE_URLPostgreSQL connection string (Node.js deployment only).
Container image registry + pull credentialsSource of the executor-harness image.
Runner pool manifestDeclarative description of your self-hosted execution pool (see Manifests).

Node container execution

On the Node.js runtime, repo-operating agent kinds run on a runner pool, and that path only activates once the deployment can mint per-run GitHub tokens and dispatch jobs securely. All of the following must be set; otherwise inline kinds still work and container kinds fail loudly instead of faking success:

VariablePurpose
GITHUB_APP_ID + GITHUB_APP_PRIVATE_KEYMint short-lived per-run GitHub installation tokens.
PUBLIC_URLThe backend's externally reachable URL (runners call back to it).
AUTH_SESSION_SECRETSession secret (also required for real auth).
RUNNERS_ENCRYPTION_KEYEncrypts the runner-pool credentials stored at rest.

Service configuration

VariablePurpose
NUXT_PUBLIC_API_BASEFrontend → backend URL. Build-time for the SPA.
Workspace / account identity providersIdentity resolution settings.
Organization membership resolutionDetermines workspace access.

Web search

Web search is opt-in and no-op until configured. It comes in two independent surfaces, and no provider key ever enters the per-run container: container agents reach search through a backend proxy.

VariablePurpose
WEB_SEARCH_BRAVE_API_KEYBrave Search key for the backend proxy (recommended).
WEB_SEARCH_SEARXNG_URL (+ WEB_SEARCH_SEARXNG_API_KEY)Reverse-proxy to a self-hosted SearXNG instead.
INLINE_WEB_SEARCH_ENABLEDEnables provider-hosted search for the inline architect/researcher agents.
INLINE_WEB_SEARCH_KINDS / INLINE_WEB_SEARCH_MAX_USESTune the allow-list and per-run cap.

Inline search only takes effect on providers with a hosted search tool (Anthropic / OpenAI).

Issue tracker & task sources

The tech-debt recurring pipeline files a ticket through the workspace's chosen tracker. GitHub Issues rides the per-tenant GitHub App installation (no env). Jira is opt-in and stores each tenant's own credentials encrypted at rest:

VariablePurpose
TASKS_ENABLEDTurns on the task-source integration.
TASKS_ENCRYPTION_KEYBase64 key (≥ 32 bytes) encrypting tenant tracker credentials. Fail-closed: no key, no integration.
TASK_SOURCESComma-separated sources to enable (Node supports jira today).

Feature toggles

Enable optional integrations and providers:

  • Document source integrations: Confluence and Notion APIs, plus GitHub repo docs (see Issue & Document Sources).
  • Environment provider manifest, for ephemeral preview environments (see Environments).
  • Prompt-fragment library source repository, to version prompt fragments in Git.

Treat all of these as secrets

Provider keys, the GitHub App private key, and the webhook secret are sensitive. On Cloudflare, set them as secret bindings (wrangler secret put …); on Node.js, keep them in your .env/secret manager and never commit them.


Scaling execution? Continue to Runner Pools and Ephemeral Environments.

Edit this page on GitHub
Last Updated: 6/20/26, 6:44 PM
Prev
Deploy to Node.js
Next
Self-Hosted Runner Pools