/api/log and the GitHub Actions run logs in the target repo for additional detail.
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.
- 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. - Check the dispatch log. The log at
/api/logshows whether the orchestrator attempted to dispatch the issue and what the outcome was.
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 ends a GitHub Actions run. The default is 90 minutes.
- The maximum session age, which applies to Fly Machine runs. Sessions older than 4 hours are destroyed by the reconciliation sweep. This bound is fixed and cannot be configured.
/ai-implement comment-triggered runs on a repo synced to the current workflow templates. AI_IMPLEMENT_MAX_JOB_MINUTES on the target repository only has effect on repos still running the older, pre-sync comment-trigger.yml workflow.The automated review flagged the pull request
The automated review flagged the pull request
/ai-implement with a specific instruction to send Claude back over the same branch. Mark the pull request ready for review once you are satisfied.PR opened but no automated review comment appears
PR opened but no automated review comment appears
- Confirm that the Claude run succeeded and that a PR was actually opened. Check the GitHub Actions run logs for the
claude-implement.ymlworkflow. - If Claude ran but did not open a PR (e.g. it pushed commits to an existing branch without creating a new PR), the review is skipped by design.
- If the workflow run failed before reaching the review step, fix the underlying failure first.
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 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_CODEis set on the orchestrator. If the variable is unset, 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
- A failed or timed-out run clearing its own entry
- A session being destroyed
- An operator clearing it
- Open the admin UI and go to the Deduplication panel, or call
GET /api/dedup. - If the issue is not in the dedup window, it means the dedup entry was cleared (manually or by a session-destroy action) 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.Re-trigger the issue if needed
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: open the project under Configure → Projects, choose Edit, and set it there — the new-project stepper does not expose it. This covers both orchestrator-initiated and
/ai-implementcomment-triggered runs on a repo synced to the current workflow templates;AI_IMPLEMENT_MAX_TURNSon the target repository only has effect on repos still running the older, pre-synccomment-trigger.ymlworkflow. A higher budget lets one run do more work before it stops.