- On the orchestrator service itself
- As GitHub Actions secrets on the orchestrator’s own repo (for CI auto-deploy)
- As GitHub Actions secrets on each target repo (read by the synced workflow files when Claude runs).
- Orchestrator runtime
- GitHub Actions CI (orchestrator repo)
- Target-repo workflow secrets
Variables the AI-Implement Node service reads at startup.
- For local development, set on the orchestrator’s
.envfile. - For Fly.io deployment, set on the Fly.io app via
fly secrets set(for sensitive values) or infly.toml’s[env]block (for non-sensitive defaults).
Required
The orchestrator needs the GitHub App credentials plus at least one ticketing provider’s credentials to start.Numeric ID of the GitHub App the orchestrator uses to authenticate with GitHub and dispatch workflows. Find this on the app’s settings page under General → App ID.
RSA private key (PEM format) for the GitHub App, used to generate installation tokens. When passing this as an environment variable, newlines in the PEM file must be replaced with literal
\n characters.The private key PEM file contains real newlines. When you set it as an environment variable (e.g. with
fly secrets set), those newlines must be expressed as the two-character sequence \n. Example: "-----BEGIN RSA PRIVATE KEY-----\nMIIE...\n-----END RSA PRIVATE KEY-----".Ticketing
The orchestrator can use Linear, Jira, or both. Expand the provider(s) you use:Linear
Linear
Required when any project mapping uses
ticketingProvider: linear.Linear personal API key used to poll for issues and update status, labels, and comments. Generate one in Linear under Settings → API → Personal API keys.The key must have access to every Linear team you intend to map. Polling filters only by the AI-Implement label, not by team, so issues in teams the key cannot see are never picked up.
User-facing Linear workspace URL, used to render issue links in dispatch logs and comments. Optional.
Jira
Jira
Required when any project mapping uses
ticketingProvider: jira.Atlassian API token (Bearer auth). Create from your Atlassian account under Security → API tokens.Required when any mapping uses Jira.Jira Cloud tenant ID. Find at
https://<your-site>.atlassian.net/_edge/tenant_info (the cloudId field).Required when any mapping uses Jira.User-facing Atlassian site URL, e.g.
https://acme.atlassian.net. Used to render issue links in dispatch logs and comments.Service
Password for the admin UI at
/admin. If this variable is not set, the admin UI is disabled entirely and all /admin and /api/ routes return 404.HTTP port the orchestrator listens on. The Fly.io internal proxy routes traffic to this port automatically, so you typically do not need to change it.
How often the orchestrator polls for new AI-Implement issues, in milliseconds. Lower values increase ticketing-API usage; values below
10000 are not recommended.Absolute path to the SQLite file used for deduplication, dispatch logging, and project-mapping storage. Defaults to
/data/dedup.sqlite in production (the Fly.io volume mount point) and ./dedup.sqlite when running locally. Change this only if you are mounting the volume at a different path.HMAC-SHA256 secret used to validate incoming GitHub webhook payloads. Configure a webhook in each target repo (or at the org level) pointing to
https://<orchestrator-host>/api/github/webhook with this secret. If unset, the orchestrator’s webhook endpoint rejects all requests.Notifications
Notification provider to use when a dispatch succeeds or fails. Accepted values:
slack (default) or teams. Has no effect if NOTIFY_WEBHOOK_URL is not also set.Incoming webhook URL for the notification provider. Notifications are skipped silently if this variable is unset. For Slack, this is the URL from your Incoming Webhooks app configuration. For Teams, use the connector webhook URL.
Runner mode
Global override for runner execution mode. Accepted values:
default(per-mapping setting wins)gha(force GitHub Actions for all mappings)fly(force Fly Machines)local(force local Docker — for local development)shadow(dispatch via GHA and additionally boot a shadow Fly Machine for testing).
Required when
RUNNER_MODE=fly or any mapping uses executionMode: fly-machines.Fly.io app name that hosts the session runners.Default Fly.io region for new session machines.
Required when
RUNNER_MODE=fly or any mapping uses Fly Machines.Fly API token scoped to the sessions app. Used to create and destroy Fly Machines for runs.Default container image for Fly Machine sessions. Per-repo overrides via
.ai-implement/image.yml take precedence.Container image to use when
RUNNER_MODE=local. Built locally via npm run build:runner:local.Base URL the local Docker runner uses to call back to the orchestrator. Typically
http://host.docker.internal:8080 on macOS/Windows or the host’s IP on Linux.Runner callbacks (advanced)
Runner callbacks (advanced)
These configure how Fly Machine and local-Docker runners authenticate their callbacks to the orchestrator. Defaults are correct for most setups.
Public base URL the runner uses to call back to the orchestrator (e.g.
https://your-orchestrator.fly.dev). Required for Fly Machines and local Docker runner modes.Secret used to mint and validate short-lived runner-callback tokens. Required when
RUNNER_CALLBACK_BASE_URL is set.Gap-fill trigger
Gap-fill trigger
Shared bearer secret for the
/trigger/gap-fill endpoint that synced comment-trigger.yml workflows POST to when a user comments /ai-implement on a PR. If unset, the gap-fill trigger endpoint is disabled.Reaper (operational)
Reaper (operational)
Controls the reconciliation sweep that cleans up stale Fly Machine sessions.
When
true, the reaper logs what it would destroy but takes no action. Useful for verifying rules before enabling live cleanup.Number of destructions in a 24-hour window above which the reaper emits an alert notification (via the configured
NOTIFY_TYPE). Helps catch runaway destruction bugs.Multi-tenant deploys
Multi-tenant deploys
Identifiers used when deploying multiple AI-Implement instances as separate Fly apps from a single repo. Most single-client deployments leave these unset.
The client identifier matching this app’s
clients/<slug>.toml file. Used in logs and notifications to disambiguate multi-tenant deployments.Fly.io app name for this instance. Read for logging only; the actual Fly deployment binds this automatically.
Claude provider forwarding (Fly Machines / local Docker only)
Claude provider forwarding (Fly Machines / local Docker only)
These are read by the orchestrator and forwarded to runner sessions when
RUNNER_MODE is fly or local.For GitHub Actions runner mode, the synced workflow uses its own repo secrets directly (see the Target-repo workflow secrets tab); these runtime values are unused.Anthropic API key, forwarded to the runner session as the Claude auth fallback. Required when
RUNNER_MODE=fly or local and no OAuth token is configured.Claude Code OAuth token, forwarded to the runner session. Preferred over
ANTHROPIC_API_KEY when both are set.Credentials at a glance
The same credential often has a different name depending on where it’s used. The table below maps each logical credential to its name in each environment.| Credential | Runtime env var (orchestrator) | GitHub Actions secret (CI) | Lives on |
|---|---|---|---|
| GitHub App ID | GITHUB_APP_ID | AI_IMPLEMENT_APP_ID | Orchestrator + each target repo |
| GitHub App private key | GITHUB_APP_PRIVATE_KEY | AI_IMPLEMENT_PRIVATE_KEY | Orchestrator + each target repo |
| Linear API key | LINEAR_API_KEY | LINEAR_API_KEY | Orchestrator + Linear target repos |
| Jira API token | JIRA_TOKEN | JIRA_TOKEN | Orchestrator + Jira target repos |
| Jira Cloud ID | JIRA_CLOUD_ID | JIRA_CLOUD_ID | Orchestrator + Jira target repos |
| Jira site URL | JIRA_SITE_URL | JIRA_SITE_URL | Orchestrator + Jira target repos |
| Claude auth — preferred | CLAUDE_CODE_OAUTH_TOKEN | CLAUDE_CODE_OAUTH_TOKEN | Orchestrator (Fly/local only) + each target repo |
| Claude auth — fallback | ANTHROPIC_API_KEY | ANTHROPIC_API_KEY | Orchestrator (Fly/local only) + each target repo |
| Fly token — spawn session machines | FLY_SESSIONS_TOKEN | — | Orchestrator only (Fly Machines runner mode) |
| Fly token — CI auto-deploy | — | FLY_API_TOKEN | Orchestrator repo only |