- PRD #5: Dedicated Forgejo user for Claude bot (dedicated identity, scoped token) - PRD #6: E2E test all 5 untested Forgejo trigger scenarios - PRD #7: Senior developer review of all Forgejo platform support code - Defined 5, 7, and 6 milestones respectively - All three can be parallelized (#7 is read-only, runs alongside #5) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
4.4 KiB
4.4 KiB
PRD #5: Dedicated Forgejo User for Claude Bot
Issue: #5 Priority: High Created: 2026-02-25
Problem
Claude currently runs under the human operator's personal Forgejo token (FORGEJO_TOKEN / github_token). This causes:
- Attribution confusion: Commits and comments appear as the human user, not as a bot
- Over-privileged access: The bot inherits all permissions of the human account
- Audit trail: No clear separation between human actions and bot actions in repo history
- Security: If the action is compromised, the human's full token is exposed
On GitHub, this is solved by the GitHub App OIDC token exchange (bot gets its own claude[bot] identity). On Forgejo, there's no such mechanism — we need a manual equivalent.
Solution
Create a dedicated claude-bot user on the Forgejo instance (git.wxs.ro), generate a scoped API token for it, and configure the action workflow to use that token. This gives Claude its own identity for commits, comments, and API operations.
Milestones
Phase 1: Forgejo Admin Setup
-
M1: Create dedicated
claude-botuser on git.wxs.ro- Create user via Forgejo admin panel or API (
POST /admin/users) - Set appropriate display name (e.g., "Claude Bot")
- Set avatar to distinguish from human users
- User should NOT have admin privileges
- Validation: User exists and can log in
- Create user via Forgejo admin panel or API (
-
M2: Configure bot user permissions and token
- Add
claude-botto theactionsorg (and any other orgs where the action runs) - Grant
writepermission on repos where Claude needs to operate - Generate a scoped API token for the bot user with minimal required permissions:
repo(read/write issues, PRs, comments, branches, commits)packages(if needed for container operations)- NO admin scope, NO user scope beyond what's needed
- Validation: Token can create comments and push branches on a test repo
- Add
Phase 2: Action Configuration
-
M3: Update workflow to use bot token
- Store the bot token as a Forgejo Actions secret (e.g.,
CLAUDE_BOT_TOKEN) - Update
claude.ymlworkflow to passgithub_token: ${{ secrets.CLAUDE_BOT_TOKEN }}instead of the human token - Update
bot_idandbot_nameinputs to match the new Forgejo user's ID and username - Document the token rotation procedure
- Validation: Action runs with bot token, comments appear as
claude-bot
- Store the bot token as a Forgejo Actions secret (e.g.,
-
M4: Verify git commit attribution
- Ensure
git config user.nameanduser.emailuse the bot user's identity - Verify that
src/github/operations/git-config.tscorrectly picks up the bot user info from the token - Test that pushed commits show the bot user as author in Forgejo UI
- Validation: A tag-mode response that creates a branch shows
claude-botas commit author
- Ensure
Phase 3: Documentation & Hardening
- M5: Update documentation and test across repos
- Update
docs/forgejo.mdwith bot user setup instructions - Document token rotation procedure (tokens expire, need renewal plan)
- Test the bot user setup on at least one additional repo beyond
claude-code-action - Update
CLAUDE.mdif any workflow changes affect development - Validation: Another developer can follow the docs to set up the bot user on a new Forgejo instance
- Update
Dependencies
- Forgejo admin access to git.wxs.ro (to create the user)
- Understanding of Forgejo's permission model (org membership, repo access)
Risks
| Risk | Mitigation |
|---|---|
| Token expiration | Document rotation procedure, set long-lived token or calendar reminder |
| Bot user locked out | Keep admin access to reset password/token |
| Permission too narrow | Start with write on repos, expand only if needed |
| Bot user confused with human in reviews | Set clear display name and avatar |
Success Criteria
- All Claude comments and commits on Forgejo repos appear as
claude-bot, not the human user - The bot token has minimal scoped permissions (no admin access)
- Documentation allows reproducing the setup on a fresh Forgejo instance