Add `.gitea/workflows/issue-agent.yaml` + `tools/issue-agent/PROTOCOL.md`.
On issue label/comment/close events a cheap filter step decides whether to
act (anti-loop: ignores the bot's own actions; honours assigned-to-developer
+ `ready` / comment-on-`claude/blocked` / `closed`+`claude/*`), then runs
Claude (opus, effort=max) to work the issue per the protocol, or cleans up a
cancelled issue's branch/PR. Claude — and its API cost — only runs on
actionable events.
The agent can only ever open a PR (never merges, never pushes to
development/main); on cancel (issue closed) the matching feature branch/PR
is removed deterministically without the LLM.
Requires repo Actions secrets ANTHROPIC_API_KEY + AGENT_GITEA_TOKEN
(the `developer` PAT). Optional vars ISSUE_AGENT_MODEL / ISSUE_AGENT_EFFORT.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>