Symptoms: Issue opened, no comment, no reaction.
Diagnosis:
- Check Actions tab — did the workflow run?
- Check workflow
if:condition — are youOWNER/MEMBER/COLLABORATOR? - Check that
GITHUB_TOKENhasissues: writepermission - Run
bun run src/cli.ts doctorlocally
Solutions:
- If you're a
CONTRIBUTOR, add yourself as a collaborator in repo settings - If workflow didn't trigger, verify
on: issues: types: [opened]is inagent.yml - If permission denied, check
permissions:block in workflow
Symptoms: Comment posted with "
Diagnosis:
- Check audit log:
tail -5 state/audit.log | jq . - Look at workflow logs for the actual error
- Verify API key is set:
bun run src/cli.ts doctor
Common causes:
- API key invalid/expired: Regenerate and update secret
- Rate limit: Wait and retry, or use a different provider
- Model unavailable: Check provider's model list
- Network issue: Provider fallback chain will try next provider
Symptoms: git push failed in logs.
Diagnosis:
- Check if another run pushed first (race condition)
- Verify
GITHUB_TOKENhascontents: write
Solutions:
- The workflow auto-rebases and retries 3 times
- If still failing, manually rebase:
git pull --rebase origin main && git push - Consider enabling
concurrency:groups (already in default workflow)
Symptoms: Comment ends with "
Cause: Response exceeded maxCommentLength (default 60000 chars).
Solutions:
- The full response is in the session JSONL (uploaded as artifact)
- Increase
maxCommentLengthin config (max 65536, GitHub limit) - Tell the agent to be more concise
Symptoms: Warning: no session file found to map.
Cause: Pi failed to create a session file (likely provider error).
Solutions:
- Check that the agent actually ran successfully
- Verify provider config is valid:
bun run src/cli.ts config validate - Check API key is set
Symptoms: Agent forgets things between sessions.
Diagnosis:
- Check
state/memory.mdexists and has content - Check
state/personality.mdis not "TBD" - Verify git commits include state changes
Solutions:
- If
memory.mdis empty, the agent never wrote to it (prompt the agent to remember) - If file exists but not committed, check git push didn't fail
- If file is committed but agent doesn't read it, verify
buildPromptincludes it
Symptoms: 👀 stays on issue forever.
Cause: finally block in main.ts failed, or workflow was cancelled.
Solutions:
- Manually remove via GitHub UI
- The reaction state is in
/tmp/reaction-state.json— if workflow is restarted, it can clean up - Check
state/audit.logforreaction_cleanup_failed
Set ISSUECLAW_LOG_LEVEL=debug (or trace for maximum verbosity):
env:
ISSUECLAW_LOG_LEVEL: debugOr via repo variables: Settings → Secrets and variables → Actions → Variables.
For log aggregation (Datadog, Splunk, etc.):
env:
ISSUECLAW_LOG_JSON: "true"# Generate a test event
bun run src/cli.ts test event issues.opened
# See the prompt that would be sent
bun run src/cli.ts test prompt
# Run in offline mock mode
bun run src/cli.ts test lifecycle
# Diagnose environment
bun run src/cli.ts doctorSolutions:
- Use a faster model (e.g.
claude-sonnet-4-5instead ofclaude-opus-4-6) - Reduce
thinkinglevel (e.g.mediuminstead ofhigh) - Disable unused tools:
"tools": ["read", "bash"] - Increase
timeoutMsif agent is being killed mid-run
Solutions:
- Reduce
timeout-minutesin workflow - Cache Bun deps (already in default workflow)
- Use smaller models for simple tasks
Solutions:
- The
ghCLI retries on 429 with backoff - Avoid opening many issues in rapid succession
- Use
concurrency:groups to serialize runs
- Run
bun run src/cli.ts doctorand include output - Check
state/audit.logfor recent errors - Check workflow logs in Actions tab
- Open an issue with the doctor output and audit log excerpt
Yes! In fact, recommended for anything sensitive. The workflow uses GITHUB_TOKEN which works for private repos.
Yes, but only OWNER/MEMBER/COLLABORATOR can trigger. Add them as collaborators in repo settings.
Yes:
bun run src/cli.ts run --dry-run --offlineThis won't actually call the LLM or post comments, but will show you what would happen.
Open an issue with the hatch label to bootstrap a new identity. Or edit state/personality.md directly.
rm -rf state/
bun run src/cli.ts doctorThen open an issue with the hatch label.
Yes, via the custom provider type. Any OpenAI-compatible endpoint works:
{
"type": "custom",
"model": "my-model",
"baseUrl": "https://your-endpoint.com/v1",
"apiKey": "${YOUR_API_KEY}"
}