gh fills the {owner}/{repo} placeholders from the repository’s git remote.
A comment did not trigger a run
A comment did not trigger a run
Signal: the comment received no 🚀 reaction. That usually means parsing or authorization declined before the agent job started.PRFlow’s commands are split across two workflow files, so list the right one. The filenames deliberately keep the older The review, review-and-fix and pr-description commands run from An empty list for the workflow you expected means the trigger never fired at all. Confirm all of these:
devflow prefix.The implement command runs from devflow-implement.yml:devflow.yml:- The command is the first recognized standalone command in the comment.
- It is not quoted, fenced, indented as code or wrapped in prose.
/prflow:implementis on a regular issue, not on a pull request./prflow:reviewis on the pull request’s Conversation tab.- The comment does not contain
@claude. workflows.prflowis true in the committed configuration.
Model authentication fails
Model authentication fails
Signal: on a provider route, the run stops with an error of the form On the default route, confirm
::error::.prflow/config.json section '<section>' selects provider '<name>' but the DEVFLOW_PROVIDER_API_KEY repository secret is empty.List the secrets the workflow can see:CLAUDE_CODE_OAUTH_TOKEN is present in the repository or environment secrets. On a provider route, confirm the section names a valid provider and that DEVFLOW_PROVIDER_API_KEY is present.A partly routed installation can need both credentials. A fully provider-routed installation can omit the OAuth token only when every section that runs a model is routed.The job is queued indefinitely
The job is queued indefinitely
Signal: the run sits in Queued with no error. GitHub queues an unmatched runner label set without raising a configuration error. An invalid JSON array fails earlier instead, with a visible Every label in the JSON array must appear on one self-hosted runner that is registered, online and eligible for this repository.
fromJSON error.Compare the DEVFLOW_RUNNER label array against the labels of your registered runners:Setup fails before the agent starts
Setup fails before the agent starts
Signal: a provisioning step before the agent step is the first failure in the run.Read only the failing steps’ logs:Confirm the runner has bash,
git, gh, jq, Python 3.11 or newer, and Docker when services need it. Check the setup values and commands in their documented order.On a self-hosted Windows runner, preinstall Claude Code and set setup.claude_code_executable. If Python exists without a python3 command, install the supported shim on the runner — see Installation Problems.A tool is installed but denied
A tool is installed but denied
Signal: the run’s execution diagnostics, in the job log and the run summary, report a nonzero permission-denial count while the tool itself is present on the runner.Read the count and the denied names:Provisioning and command authorization are separate concerns. Installing a tool does not permit it. Add a narrow tool entry to the allowlist for the path that needs it:
prflow_implement.allowed_tools for an implementation run, prflow.allowed_tools for the light command path. The two do not inherit from each other.Plugin vendoring fails
Plugin vendoring fails
Signal: the run stops with an error of the form In thin mode,
::error::incomplete vendor: missing after materialization: <files>, or an earlier loud failure naming an empty prflow_version.Read the pin the run used:prflow_version must be nonempty and must resolve to a tag, branch or commit in The01Geek/prflow. An empty pin fails loudly, to stop the installation drifting with a moving branch. A stale pin can also omit a helper that newer workflow bytes call.Re-run the installer with a current release tag and apply the update, so the workflow files and the runtime pin move together. If a locally edited workflow was preserved, merge its .prflow-new sidecar by hand — then re-run the installer once more in apply mode (--apply, or DEVFLOW_APPLY=1 for a curl | bash invocation). Merging the sidecar changes the workflow’s bytes, and for .github/workflows/devflow-implement.yml (or the setup-project-env action, or .prflow/lint-manifest.json) a stale .prflow/install-state.json marker makes the implement run refuse to start on every run until that re-apply rebinds the marker to the merged bytes.The run stopped without finishing
The run stopped without finishing
Signal: the workpad or the review-progress comment shows a status that is not Complete, or the run ended with no verdict.Read the failing steps and the execution diagnostics:Use the workpad or the review-progress comment to tell Blocked, Failed, Cancelled and still-running apart. Look at the execution diagnostics for permission denials. Correct the cause before you post the command again.An implementation retry reuses the workpad and any pushed branch checkpoint. A review retry targets the current pushed head. See Cloud Recovery for the full sequence.