10. Troubleshooting
forbidden host, HTTPS required or forbidden origin from another computer.
forbidden host: add the name you typed to the allowed host names. HTTPS required: use the HTTPS
proxy and check that it sends X-Forwarded-Proto. forbidden origin behind a proxy: the proxy
changes Host (or drops its port), or does not send X-Forwarded-Proto: https. If the server exits
with "cannot listen on …", create the admin first with scf user create --admin.
Nothing is happening to an issue. First look at the health line under the top bar: it says when the Foundry itself is the problem. Then look at the Waiting card on the Dashboard — it says who has the next move (the badge at the start of the line), what to do and why. See also Why is nothing happening?.
A plan is waiting for approval. Its risk score is above 75, or the issue has
Factory_review_plan. Read the plan on the issue and reply /approve (with notes if you like)
or /reject with what to change.
The release pull request is a draft. The daily full test run or build failed on it; the
daily report or release check starts with **Nothing needed from you** — it stays a draft until the checks pass.
and has the failing output. It becomes ready again when a later report passes.
A run failed, or a watcher shows an error. The message says what happened, why, and what you can do first. Find yours in the table:
| Message | What you can do |
|---|---|
| The step … failed: its command ended with an error | Look at the output of the step and fix the cause |
| The step … failed: it ran longer than its time limit | Look at the output of the step to see what took so long |
| The step … failed: the agent stopped without a result | Look at the log of the step on the run page |
| The step … failed: the agent stopped with an error | Look at the log of the step on the run page |
| The step … failed: the agent used all its turns | Look at the log of the step on the run page |
| The step … failed: the repository has no token for runs; set one under My repositories | Set a token for the repository under My repositories |
| The step … failed: the repository's token is missing or refused; set it again under My repositories | Set the token of the repository again under My repositories |
| The step … failed: the repository signs in with a deploy key, which cannot use issues or pull requests | Choose a token or the GitHub App for the repository under My repositories |
| The step … failed: the repository's sign-in is missing or refused; reconnect it under My repositories | Reconnect the repository under My repositories |
| The step … failed: the repository's sign-in is missing or refused; reconnect it under My repositories | Reconnect the repository under My repositories, or ask the administrator |
| The step … failed: the GitHub App cannot sign in to this repository | Install the GitHub App on the repository, then press Test connection |
| The step … failed: the GitHub App cannot sign in to this repository | Ask the administrator to check the GitHub App settings |
| The step … failed: the repository's sign-in was not available for the step | Resume the run to try the step again |
| The step … failed: the repository's sign-in was not available for the step | Wait a while, then resume the run |
| The step … failed: a folder with the repository's sign-in was left in the run folder | Ask the administrator to delete the sign-in folder in the run folder, then resume the run |
| The step … failed: the account that owns the run is gone, so its commits have no name | Ask the administrator to set the bot name and e-mail in Settings, then resume the run |
| The step … failed: the agent hit an error while it worked | Look at the log of the step on the run page |
| The step … failed: the agent used up the budget of the step | Give the step a larger budget in the flow |
| The step … failed: the agent ended with an error | Look at the log of the step on the run page |
| The step … failed: it used all its attempts | Look at why the step keeps failing in its log on the run page |
| The run reached its budget: it used the amount the flow allows for one run | Allow a larger budget for one run in the flow |
| The step … failed: a person rejected it | Read the note of the person and change the work as asked |
| The step … failed: Codex is not installed on this computer | Install Codex on the computer that runs the Foundry |
| The step … failed: Codex is not logged in | Log in to Codex on the computer that runs the Foundry |
| The run failed: the Foundry hit an error of its own | Look at the steps and the log on the run page |
| The run failed: no reason was saved | Look at the steps and the log on the run page |
| The run failed: the error is not one the Foundry can explain | Look at Details on the run page |
| The watcher for … can't reach GitHub: GitHub did not answer or did not let it in | Check the network and gh auth status |
| GitHub's request limit is used up: the Foundry asked GitHub too much in the last hour | Nothing — GitHub lifts the limit within the hour, and the watcher continues by itself |
| The watcher for … cannot reach the repository: a call to GitHub failed | Check that gh is logged in and the repository is there |
| The watcher for … did not finish its check: it took too long and was given up | Press Check now on the Watchers page to try again |
| The watcher for … cannot start: its check interval is not a valid time | Change the check interval of the watcher to a time like 5m |
| The watcher for … cannot start: its check interval is outside what is allowed | Change the check interval of the watcher to a time like 5m |
| The watcher for … has an error: the error is not one the Foundry can explain | Look at Error details on the Watchers page |
Then the message adds how to try again. A failed run can be resumed on its page to continue at
the failed step, or (for an issue the Foundry watches) you remove the factory:failed label to
start over. When the fix is a change to the flow (a larger budget), only a new run counts: a
resumed run keeps the flow it started with. A change in Settings, such as the cost limits, also
counts for a resume.
The raw text is still there, as a detail: under Raw details in the failure card on the run page, and inside each
failed step of the Steps & transcripts list, under Error details on the watcher card,
and inside the collapsed Details of the failure comment on the issue. The settings behind
the messages are max_visits (attempts), limits.max_cost_usd (run budget), max_budget_usd
(step budget) and timeout_sec (time limit). If a step only needs more time, raise
timeout_sec and start over.
A watcher error names its repository and shows in the health line. For a
connection problem, check the network, and that gh auth status works in the terminal where the
Foundry runs and that you have access to the repository. Error details on the watcher card
shows gh's first output line too. Check now on the Watchers page retries
immediately. A "has not checked since …" line means no check finished for a long time (a check
that takes over 10 minutes is given up).
"Codex is not installed" or "Codex is not logged in". Install Codex (npm i -g
@openai/codex, or the ChatGPT desktop app) and run codex login. The Models page shows the
status.
A local model says it is done but changed nothing. The model is not good at tool use. Try a
coding model (qwen3-coder, gpt-oss) and use Try a model on the Models page.
A run stopped with "daily budget reached". It continues automatically the next day, or when you raise the budget and resume it.
The failure comment starts with what you need to do.
The Foundry failed, not the code. The run says so when an agent command was blocked, a marker could not be read, a push hit a protected branch or a setting is broken. Do what the sentence says (e.g. allow the command in the flow), then resume the run. The label stays the failed label.
A push was refused. Either the branch is protected, or the secret scan found something. A protected branch is a setting to change (Protected branches in Settings, or the flow's branch); the run then says the Foundry failed. A secret-scan finding is in the code: the step output lists the file, line and kind of secret.
Locked out. "This account is locked" after many wrong tries: wait 30 minutes, ask an admin to press Unlock on the Users page, or restart the server on the machine (the lock is in memory).
Reset password gave an error. The account may already have lost its password. If the Users page now reads "no password yet", use New link.
Change password gave an error. The password is not changed; your other sessions may be signed out. Try again.
Forgot the password. Ask an admin to use Reset password, or run scf user password <e-mail> on the machine. If no admin is left, run
scf user create --admin. A set-password link that ended is replaced the same way. If the page said
"sign-in is not working" after you sent the form, first try to sign in with the password you chose:
it may have been set already.
The credential store is not working. Run scf credential check. Unlock the login keychain if
it fails. If the key is gone (for example the data folder was copied from another Mac), delete
credentials.json and add the credentials again. "An old key is still in the Keychain" means a
removal failed after a delete or rotation; scf credential rotate-key clears it.
Tests fail for reasons unrelated to the change. Set the right command with the test_cmd
variable, per repository in <repo>/.claude-factory/config.yaml. If the tests already fail before
any change and the issue is meant to fix them, name them under ## Failing tests to fix; see
Stories that fix failing tests.