/admin is the control panel for your AI-Implement orchestrator. It is protected by the ADMIN_ACCESS_CODE environment variable — if that variable is not set, the UI is disabled and all /admin and /api/* routes return 404. Every panel below is also reachable programmatically through the JSON API at the bottom of this page.
The sidebar organizes panels into four groups:
- Work — Overview, Issues, Pipelines, Pull requests, Blockers
- Configure — Projects, Pipelines & steps, Models & providers
- Platform — Runners, Sessions, Reaper, Secrets, Settings
- Developer — Audit log, Customizations
Work
Overview
The main dashboard. Shows real-time orchestrator health:- Running jobs (with duration)
- Failed jobs in the last 24 hours
- Capacity utilization across all projects
- Projects at concurrency cap
- Stale workflow templates in target repos
- A 24-hour dispatch trend chart
Issues
The AI-Implement inbox. Shows every issue matched by the configured project mappings, its current state (started / completed / cancelled), and whether each is ready for implementation or still has planning pending. A second table breaks down in-progress counts by project mapping for real-time visibility into which scopes are currently working.Pipelines (jobs)
The dispatch log under its real internal name (jobs in the sidebar).
Shows the last ~500 dispatch entries (timestamped) across all teams with full execution history:
- Issue ID
- Repo
- Team (the
teamKeyshown in the row) - Runner mode (GitHub Actions or Fly Machines)
- Session image
- Combined planning-and-implementation statuses
- Pull-request links
- Dispatch number (for re-dispatches)
Pull requests
Lists every bot-opened pull request the orchestrator is tracking, with the following information:- Issue link
- Repo
- Current job status (
running/completed/failed/review_failed) - Iteration count (the dispatch number)
- Time since last dispatch
- Direct links to GitHub
Blockers
Surfaces issues that are currently not being picked up despite being eligible. KPI cards show:- Total blocked issues
- Teams affected (distinct teams with at least one blocked issue)
- Count blocked by concurrency cap
- Count blocked by dedup window
- Issue identifier
- Project mapping
- Blocking reason
- Direct link back to the ticket
Configure
Projects (team/repo mappings)
The Projects panel is where you connect ticketing scopes (Linear teams or Jira JQL clauses) to GitHub repositories and control exactly how AI-Implement dispatches runs for each scope.See Configure project mappings for the full field reference and defaults.
Create a new project mapping
1
Open the stepper
Click Configure → Projects → + New project. The stepper walks through 8 configuration steps.
2
Fill in Ticketing System and Source
Pick Linear or Jira as the ticketing system, fill in the provider-specific config (Linear team key, or Jira JQL + repo-field value), then enter GitHub Owner and Repository Name — these are the target repository, not the orchestrator repo.
3
Step through the remaining configuration
Runner, Provider, Capacity, Secrets, and Review steps follow. For a first run, defaults are reasonable.
4
Create the project
Click Create project. The new mapping appears in the Projects table automatically — if it does not, reload the page.
Pipelines & steps
Shows the pipeline YAML definitions (the built-insrc/pipeline/*.yml plus any custom/pipelines/*.yml overrides) as collapsible details, each listing the steps that run and their module IDs.
A second table lists every step module with:
- Built-in path
- Custom override path (if present)
- Status (
built-in/override/additive)
Models & providers
Read-only summary of model provider and region per project mapping.Model IDs themselves live in each target repo’s
WORKFLOW.md and PLANNING.md front matter — this page doesn’t edit them.- Projects (total)
- Anthropic (count of projects using the Anthropic provider)
- Bedrock (count of projects using the Bedrock provider)
- Bedrock regions (count of distinct regions in use)
- Team (the
teamKey) - Repo
- Provider badge (
anthropicorbedrock) - Bedrock region (or a “missing” badge if required and unset)
- Planning status
- Runner mode
Platform
Runners
High-level runner-infrastructure dashboard. KPI cards show:- Current runner-mode override (
default/gha/fly/shadow) - Live Fly session count
- Capacity utilization (in-progress runs vs. total cap across mappings)
- 24-hour reaper destructions
- Configured execution mode
- Effective mode (after applying any global override)
- Capacity-utilization meter
Sessions
Lists every Fly Machine session currently instarted, starting, or created state.
Each row shows:
- Machine ID and name
- Current state
- Uptime duration
- Associated issue identifier (linked to the ticketing system), where available
- Target repo, where available
- Removes the in-progress marker from the associated issue (the
AI-Workinglabel on Linear, orImplementingstatus on Jira) - Clears it from the deduplication window, so the orchestrator can pick it up again on the next poll
Reaper
The reconciliation-sweep dashboard. The top of the page hosts the runner mode toggle (default / gha / fly / shadow).
If the
RUNNER_MODE environment variable is set on the orchestrator process, it takes precedence over this database value and the UI flags that an env-var lock is active.orphanstale-terminal-jobmax-age-exceededissue-terminal
- Timestamp
- Rule matched
- Machine ID
- Tenant
- Associated issue
- Age at destruction (in seconds)
dry-runordestroyedbadge (indicating whether the action was a no-op or executed)
If you change runner mode via the UI or API while
RUNNER_MODE is set in the environment, the new value is persisted to the database but has no effect until the env var is removed and the orchestrator is restarted.Secrets
The dedicated Secrets sidebar item is not yet active — it shows a placeholder page. Secret management is split between the Settings panel and the Projects panel.
-
Per-team secrets — each project row in the Projects panel has a Secrets button that opens an inline form. Secrets are stored as Fly app secrets prefixed by the team key (for example, a secret named
MY_TOKENfor projectENGis stored asENG_MY_TOKEN). Secret names must contain only letters, digits, and underscores. - Global secrets — listed, created, and deleted from the Settings panel. Global secrets are Fly app secrets injected into every session machine and are not scoped to any specific project. Their names must not start with any project key prefix.
Settings
The Settings panel has two sections: Fly sessions infrastructure and global machine secrets. Fly Sessions AppflySessionsApp— the Fly.io app name used for Fly Machine sessions.flySessionsRegion— the default region for new Fly Machine sessions.
FLY_SESSIONS_APP and FLY_SESSIONS_REGION. When an env override is active, the UI shows the runtime value alongside the database value and flags that the env var is winning.
Changes to the sessions app or region that differ from the running process take effect after a restart.
Developer
Audit log
Shows the dispatch-deduplication ledger for the last 24 hours. Each row includes:- Issue identifier and title
- When the issue was dispatched
- A delete button to remove it from the dedup window
The roadmap calls for richer audit-log content here over time; the current implementation is focused on the dedup window.
Customizations
Lists every file under thecustom/ directory in the orchestrator’s working tree that overrides a built-in.
The table shows each file’s:
- Path
- Category (
pipeline/step/provider/other) - Status (
override/additive/—for theothercategory) - Upstream counterpart path it shadows
- File size
- Last-modified time
A CI workflow (
protect-custom.yml) flags upstream PRs that modify files under custom/ outside the allowed paths (custom/README.md and .gitkeep files). The check is currently advisory — it won’t hard-block a merge but will surface a warning in CI. The team has it tracked to restore as a hard fail.See Add custom pipeline steps for the resolution rules.Admin API reference
All/api/* endpoints except /api/auth require a Bearer token obtained from /api/auth. Tokens expire after 24 hours.
Authentication
1
Obtain a bearer token
POST your access code to The response contains a
/api/auth:token field. Store it for subsequent requests.2
Pass the token on subsequent requests
Include the token as a
Bearer header:Endpoint reference
/api/auth is the only endpoint that does not require a bearer token. All other /api/* routes return 401 Unauthorized if the token is missing or expired.