/api/log and the GitHub Actions run logs in the target repo for additional detail.
A configured stage cannot resolve
A configured stage cannot resolve
WORKFLOW.md or disabling planning does not repair an unresolved configured stage. See Agent settings per stage.Account readiness is unknown or the API key is not set
Account readiness is unknown or the API key is not set
A ChatGPT plan needs sign-in again
A ChatGPT plan needs sign-in again
reauth_required. A managed run cannot use that sign-in.The saved session is no longer usable. A changed encryption secret can also make an existing record unreadable.On Models & providers, use Connect ChatGPT plan on an active plan profile and complete a new sign-in. Use the OpenAI guide for pairing and status checks.Copying Codex’s auth.json does not repair the account. Do not refresh a laptop copy of a sign-in already held by the orchestrator.ChatGPT plan refresh failed transiently
ChatGPT plan refresh failed transiently
RUNNER_TOKEN_SECRET is still set to its existing value. See Stored credentials.Rotating the secret is not a refresh fix. It makes stored credentials unreadable and requires new keys or sign-ins.The ChatGPT pairing code is not valid
The ChatGPT pairing code is not valid
logout can revoke a sign-in the orchestrator already received.GitHub Actions agent opt-in is refused
GitHub Actions agent opt-in is refused
unsupported_backend response can mean GHA delivery readiness could not be confirmed; it does not establish that every GHA configuration is unsupported.Use Sync workflows on the project, merge its target-repository PR, and retry opt-in. Check GitHub App access and the selected profiles if readiness remains unavailable. See Readiness.Changing a prompt model or adding model secrets to Extra Env does not update workflow capabilities.A Codex invocation reached its elapsed timeout
A Codex invocation reached its elapsed timeout
Managed Restate review-fix is refused on Fly or local Docker
Managed Restate review-fix is refused on Fly or local Docker
An issue is triggered but no PR appears
An issue is triggered but no PR appears
POLL_INTERVAL_MS). If a triggered issue does not produce a PR after a few minutes, check the following in order:- The issue is blocked. An issue is skipped while any issue linked as blocking it is still open. Resolve the blockers and the orchestrator will pick it up on the next poll. On Jira this check can miss silently — see A Jira issue ran despite an open blocker.
- No team/repo mapping exists. Open the admin UI at
/adminand confirm that a mapping exists for the team that owns the issue. If not, add one. - The concurrency cap is reached. Each project mapping has a
maxInProgressAiIssueslimit (default3). If the project already has that many issues in progress (AI-Workingon Linear, orAI-Implement Statusset toImplementingon Jira), new issues are held until a slot opens. You can raise the cap from the admin UI or viaPATCH /api/mappings/:teamKey. - The orchestrator is not running or not polling. Health-check the orchestrator with
curl https://your-orchestrator/. If it does not respond, check the Fly logs withfly logs --app your-app. - The orchestrator has stopped picking it up. After repeated failed dispatches or runs it holds an issue back until someone intervenes, and the fix depends on which mechanism did it — see An eligible issue stopped being dispatched.
- Check the dispatch log. The log at
/api/logshows whether the orchestrator attempted to dispatch the issue and what the outcome was.
An eligible issue stopped being dispatched
An eligible issue stopped being dispatched
dedup — reported as waiting for an in-flight job, though the run it refers to has already ended. Overdue run recovery covers how that budget is counted.To release it, remove the issue’s entry from the Audit log. Unparking does nothing here — the issue was never parked.A Jira issue ran despite an open blocker
A Jira issue ran despite an open blocker
Blocks link type, matched by that name — unlike Linear, whose blocking relation is structural and cannot be renamed away. A Jira instance that renamed the link type gets no blocker check at all.To restore the check, have a Jira administrator rename the link type back to Blocks. To stop depending on it instead, leave the issue in any status other than the two the poll picks up, Ready and Plan Approved.Your mapping’s JQL cannot stand in for the check. It can exclude an issue from the query, but Jira’s query language cannot test whether the issue on the other end of a link is still open — that needs a marketplace app.The run failed
The run failed
- A
setup:script declared inWORKFLOW.mdexited non-zero, which aborts the run before Claude starts. - The push was blocked because the diff touched sensitive files. See sensitive file patterns for what the guard covers and how to tune it per project.
- The run errored before pushing, leaving the branch incomplete.
The run hit the time limit
The run hit the time limit
- The job timeout, which limits a GitHub Actions run. The default is 90 minutes. A run that passes it without finishing is detected as overdue and recovered, not left to hang.
- The machine timeout, which ends a Fly Machine session 60 minutes after it is dispatched. This bound is fixed and cannot be configured.
- A configured invocation timeout, which can stop a stage before the whole job ends. See Codex elapsed timeout.
/ai-implement comment-triggered runs as well.The automated review flagged the pull request
The automated review flagged the pull request
[NEEDS REVIEW — unapproved] instead. The post-push review is skipped.If a post-push review finds blockers on an already-open pull request, it reports them in the review and its merge-readiness comment. It does not convert the pull request to a draft. A normal pull request is not proof of approval.The post-push review also checks continuous integration. It reports CI check failing when a non-review check fails on the current commit, and CI check status could not be verified when it cannot read the check status.Address the remaining findings, or comment /ai-implement with a specific instruction for a follow-up on the same branch. Complete the required review before merging.PR opened but no automated review comment appears
PR opened but no automated review comment appears
- The run’s own review never approved the diff. The pull request still opens, but as a draft — or, on a repo whose plan does not allow drafts, as a normal pull request titled
[NEEDS REVIEW — unapproved]. Either way no post-push review follows, because the review budget was already spent. - The run was a gap-fill. A
/ai-implementpass updates a pull request that has already been through this, and never starts a second review cycle. - No pull request was opened. If Claude pushed commits without opening one, there is nothing for the review to run against.
- Dependencies did not install. The run is not verified — build and tests never ran — so its draft pull request is left for a person rather than reviewed automatically. See Dependencies did not install.
claude-implement.yml workflow, and fix any earlier failure first.The review cannot read check runs
The review cannot read check runs
🔒 Post-push review could not verify check runs., with the merge-readiness line Manual review required; check runs could not be read. On the issue you see 🔒 The GitHub App cannot read check runs on this repo.The cause is a missing permission. The GitHub App does not have the Checks read permission, or the installation has not accepted an updated permission set.Grant the permission, then re-dispatch. Grant the App Checks: Read-only and accept the permission change on the installation — see Install the GitHub App. Re-dispatch the issue after you accept the change.Re-dispatching before you grant it does not help. The review reads check runs on every run, so it fails the same way until the permission is in place.The external review did not complete
The external review did not complete
⚠️ Internal review passed, but the external review did not complete within the wait budget. Not auto-approving. or ⚠️ Internal review passed, but the external review verdict was unavailable or incomplete. Not auto-approving. The merge-readiness line asks for manual review.The cause is the external review tool. The post-push review waits up to five minutes for the external review check on the current commit. The check did not finish in that time, or it reported without a verdict the review could read.Make the external review finish in time and report a verdict. Check that the external review check runs and finishes within five minutes, and that the reviewer posts a valid findings block. See External code reviewers.provider=bedrock but workflow hard-fails with a model error
provider=bedrock but workflow hard-fails with a model error
provider is set to bedrock in a team mapping, the WORKFLOW.md (and PLANNING.md if planning is enabled) in the target repo must have a model: field in the front matter set to a valid Bedrock model ID or inference-profile ARN. There is no safe default for Bedrock.Open the target repo’s WORKFLOW.md and add or update the front matter:"AWS_BEDROCK_ROLE_ARN is not set" error in the workflow
"AWS_BEDROCK_ROLE_ARN is not set" error in the workflow
claude-implement.yml workflow requires AWS_BEDROCK_ROLE_ARN to be set as a repository secret when provider=bedrock.Add the IAM role ARN in the target repo at Settings → Secrets and variables → Actions → New repository secret. The secret name must be exactly AWS_BEDROCK_ROLE_ARN. The role must trust the GitHub OIDC provider for the target repo and grant bedrock:InvokeModel on the inference profiles you need.See the AWS Bedrock setup instructions for the full IAM trust policy shape./ai-implement comment does nothing
/ai-implement comment does nothing
/ai-implement comment on a PR has no effect (no 👀 reaction, no new run), check the following:- The GitHub App isn’t subscribed to PR comments. The App’s webhook settings must include the
issue_commentevent. Without this subscription, GitHub never delivers the comment to the orchestrator in the first place. GITHUB_WEBHOOK_SECRETisn’t set, or doesn’t match. The orchestrator verifies every delivery’s signature against this value; it must be set to the same secret on both the GitHub App’s webhook configuration and the orchestrator’s environment, or deliveries are rejected. SeeGITHUB_WEBHOOK_SECRET.- The orchestrator isn’t publicly reachable. GitHub needs to reach the orchestrator’s webhook endpoint over HTTPS. For local development this needs a tunnel.
- The target repo hasn’t synced current workflow templates. Run Sync workflows on the project’s row in the admin UI and merge the pull request it opens — repos still on older templates aren’t recognized by the orchestrator’s webhook.
- The repo has no project mapping, or its project is paused. The comment is matched against the configured projects; one that matches nothing, or matches a paused project, is dropped without a reply.
- The PR wasn’t opened by AI-Implement. The trigger only works against PRs the orchestrator has a dispatch record for. PRs created by hand won’t match.
- Bedrock isn’t configured for the mapping. If the repo uses Bedrock, set Provider to
bedrockand AWS Region on the project’s mapping in the admin UI — comment-triggered runs use the same mapping as orchestrator-initiated runs. - The commenter does not have write access. The webhook checks that the commenter has
write,maintain, oradminpermission on the repo. Comments from users with lower permissions are silently ignored. - The comment does not start with
/ai-implement. The trigger matches comments that begin with/ai-implement. Anything you write after it is passed to the run as an operator instruction, so/ai-implement also update the testsworks and is often more useful than the bare command. A comment that merely mentions/ai-implementmid-sentence does not trigger.
Admin UI returns 401
Admin UI returns 401
401 Unauthorized when the bearer token is missing, invalid, or expired.- Confirm that
ADMIN_ACCESS_CODEor a sign-in provider is configured on the orchestrator. With neither, the admin UI is disabled entirely. - Session tokens expire after 24 hours. Re-authenticate by
POSTing to/api/authwith your access code to obtain a new token. - If you are accessing the UI through a browser, clearing your browser’s local storage for the admin origin and logging in again will resolve a stale token.
No notifications are being sent
No notifications are being sent
NOTIFY_WEBHOOK_URL is not set. Check:NOTIFY_WEBHOOK_URLis set as a secret or environment variable on the orchestrator.NOTIFY_TYPEmatches your provider (slackorteams). If unset,slackis the default.- The webhook URL is valid and the destination channel or Teams connector is still active.
The same issue is being picked up repeatedly
The same issue is being picked up repeatedly
- Open the admin UI and go to the Audit log, or call
GET /api/dedup. - If the issue is not in the dedup window, its entry was cleared and the orchestrator is treating the issue as new.
- If the issue should not be redispatched, clear its trigger — remove the
AI-Implementlabel on Linear, or moveAI-Implement Statusaway fromReadyon Jira. Adding an issue back into the dedup window by hand is not supported through the UI, so clearing the trigger is the simpler path.
Fly Machine session stuck or not terminating
Fly Machine session stuck or not terminating
started state long after the implementation should have finished:Open the sessions panel
/admin and open the Active Sessions panel, or call GET /api/sessions.Destroy the stuck session
DELETE /api/sessions/:machineId.Destroying the session also clears the in-progress marker on the associated issue (AI-Working on Linear, or AI-Implement Status set to Implementing on Jira) and clears its dedup entry.Let it retry, or stop it
Reached max turns
Reached max turns
Reached max turns before finishing its work.- What a turn is. Each run gives Claude a fixed number of turns, where one turn is a single step in its work loop — it reads or edits something, runs a command, then decides what to do next. The run stops once it uses up the budget, even if the work is not done. The default budget is 50 turns.
- Why it happened. The task needed more steps than the budget allowed — usually a large issue, or one that touches many files, though a run can also use up turns retrying the same thing.
- How to fix it. Raise the budget with the Max Turns field, on the new-project stepper’s Capacity step or afterward from the project’s Edit dialog. The setting covers
/ai-implementcomment-triggered runs as well. A higher budget lets one run do more work before it stops.
Dependencies did not install
Dependencies did not install
package.jsonand the lockfile are out of sync. The install printsMissing: … from lock file. Runnpm installand commit the updated lockfile, or file an issue asking the agent to do it — the agent is told the install failed and may fix it within scope.- A peer-dependency conflict, or a dependency behind a private registry the install can’t reach. Set
packageManager: nonein.ai-implement/config.ymlto turn off the built-in install, then run the real install from asetup:hook. See Install dependencies from your setup hook.