docs: clarify mint role vs identity so custom agents work by default - #6772
docs: clarify mint role vs identity so custom agents work by default#6772waynesun09 wants to merge 1 commit into
Conversation
Users following the "customizing agents" guides hit an opaque 403 from the token mint because the docs conflated `role` and `slug` and implied any name works. Ground truth: the mint issues identity AND permissions from `role`; `slug` is an install-time hint the mint never reads; and the hosted mint serves only a fixed built-in role set. A made-up `role:` (e.g. the guides' own `role: my-agent`) returns 403. This pass makes the default-mint path succeed and draws a clear line between what works on the hosted mint vs what needs your own mint: - custom-agent-identity.md: rewritten UX-first — corrects the role/slug model, adds a default-vs-own-mint decision table, and shows that most customization (and even a brand-new agent) needs no custom identity, just a built-in `role:`. - bring-your-own-agent.md: canonical example now uses a served role (`role: triage`) with a "role is not the agent's name" callout; adds a 403 row to Troubleshooting. - customizing-overview.md / customizing-agents.md: note the hosted mint's fixed role set and that code/fix agents both run as `coder`. - harness-reference.md: `role` must be a served role (403 otherwise); `slug` is install-time only and not read by the mint; examples updated. - building-custom-agents.md (deprecated): example no longer 403s. Relates to #6563 (BYOA role selection). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014X4fMw1vDSNwXYVh4DN1FX Signed-off-by: Wayne Sun <gsun@redhat.com>
Code Review by Qodo🐞 Bugs (0) 📘 Rule violations (0) 📎 Requirement gaps (0)
Great, no issues found!Qodo reviewed your code and found no material issues that require reviewTip of the day💡 Did you know, you can group findings by type and pick your Finding display, from Minimal to Full |
PR Summary by QodoClarify mint roles and custom agent identity setup
AI Description
Diagram
High-Level Assessment
Files changed (6)
|
Site previewPreview: https://8f7d2d4c-site.fullsend-ai.workers.dev Commit: |
|
🤖 Finished Review · ✅ Success · Started 10:39 PM UTC · Completed 10:56 PM UTC Commit: Runtime: claude · Model: opus → claude-opus-4-6 · Effort: high · Cost: $7.13 |
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
|
Risk Assessment: moderate (2/5) DetailsDocs-only PR with no protected paths, no security-sensitive files, and no dependency changes, but Tier 2 churn analysis shows several changed files are documentation hotspots with high recent commit frequency (avg 13.67 commits/30d) and many distinct authors (avg 5.33/90d), justifying elevation from 1 to 2. |
ReviewFindingsMedium
Low
Next steps:
|
|
|
||
| > **`role` is not the agent's name.** The agent's name is `name:` in its `.md`; | ||
| > `role:` selects which GitHub App and permissions the mint issues. On the | ||
| > default (hosted) mint, `role:` must be one of the built-in roles it serves — |
There was a problem hiding this comment.
[medium] technical accuracy in documentation
The callout states role: must be one of the built-in roles triage, coder, review, retro, prioritize, fullsend — omitting fix. A user with a fix-like agent who sets role: fix would believe this is invalid based on the docs, when fix is a canonical built-in role that the hosted mint accepts.
Suggested fix: Add fix to the enumerated list.
| Most fields are self-explanatory from the inline comments above. This section expands on fields where additional context helps. | ||
|
|
||
| **`role`** — The agent's identity within fullsend. Dispatch uses the role to match config-registered agents to built-in defaults (same-name config agents take precedence). The role also determines which GitHub App credentials the mint service issues. | ||
| **`role`** — The agent's identity within fullsend. Dispatch uses the role to match config-registered agents to built-in defaults (same-name config agents take precedence). The role also determines which GitHub App credentials **and permissions** the mint service issues. It must be a role the mint serves: on the hosted mint that is the fixed built-in set (`triage`, `coder`, `review`, `retro`, `prioritize`, `fullsend`); custom roles require your own mint. An unserved role returns `403`. See [Custom Agent Identity](../guides/user/custom-agent-identity.md). |
There was a problem hiding this comment.
[medium] technical accuracy in documentation
The role field description lists the hosted mint's built-in set without fix. Since fix is a canonical built-in role and the existing fix agent harness uses role: fix, this reference doc would incorrectly tell users that role: fix requires a custom mint.
Suggested fix: Add fix to the built-in role list.
| Each agent role has its own identity, permissions, and purpose: | ||
| On the hosted mint, agents run as one of a **fixed** set of built-in roles. | ||
| Each role is a GitHub App identity with a fixed permission ceiling. An agent's | ||
| name is separate from its role — the `code` and `fix` agents both run as the |
There was a problem hiding this comment.
[low] technical accuracy in documentation
The new text states 'the code and fix agents both run as the coder role.' While fix shares the coder GitHub App and PEM, fix is a distinct entry in canonicalRolePermissions with a different permission ceiling (fix lacks checks:read). The built-in fix harness uses role: fix, not role: coder.
Suggested fix: Consider rewording to 'the code and fix agents both authenticate as the coder GitHub App' to avoid implying they share the same role entry.
| | "role field is required" | Add `role:` to harness | | ||
| | `403` / "role not allowed" from the mint | Your `role:` is not one the mint serves. On the hosted mint use a built-in role (`triage`, `coder`, `review`, `retro`, `prioritize`, `fullsend`); for a custom role, point `FULLSEND_MINT_URL` at your own mint — see [Custom Agent Identity](custom-agent-identity.md) | | ||
| | Agent can't find input files | Pre-script output paths must match `host_files` entries | | ||
| | Provider blocks requests | Check that the required provider profile is listed in `providers:` and exists in the `providers/` directory | |
There was a problem hiding this comment.
[low] internal consistency
The troubleshooting table 403 row lists the same incomplete built-in role set without fix.
Suggested fix: Add fix to the parenthetical list of valid built-in roles.
|
|
||
| # ── Identity & metadata ────────────────────────────────────── | ||
| slug: my-org-my-role # GitHub App identity (convention: <org>-<role>) | ||
| slug: my-org-my-role # install-time App discovery (convention: <org>-<role>); not read by the mint |
There was a problem hiding this comment.
[low] inline comment capitalization
The inline YAML comment for slug starts with a lowercase letter (install-time App discovery). Every other inline comment in this reference YAML block starts with an uppercase letter.
Suggested fix: Capitalize the first word: Install-time App discovery ...
| > mint. To use a *new* role or your *own* identity, you need your own mint — | ||
| > see [Custom Agent Identity](custom-agent-identity.md). | ||
|
|
||
|
|
There was a problem hiding this comment.
[low] trailing whitespace / blank lines
Double blank line after the role blockquote callout. Codebase convention is a single blank line between elements.
Suggested fix: Remove one of the two blank lines.
Problem
Users following the Customizing agents guides hit an opaque
403from the token mint. The docs conflated two harness fields and implied any name works:custom-agent-identity.mdopened with "agents authenticate ... via theslugfield" and "setslugin your harness and go."bring-your-own-agent.md's canonical example usedrole: my-agent(a name the mint doesn't serve → 403), withslugcommented as "GitHub App identity."Ground truth (verified against the mint code): the mint issues identity and permissions from
role;slugis an install-time hint the mint never reads; and the hosted mint serves only a fixed built-in role set. A made-uprole:returns 403.What this changes
Makes the default-mint path succeed and draws a clear line between the hosted mint and your own mint:
custom-agent-identity.md— rewritten UX-first: corrects the role/slug model, adds a default-vs-own-mint decision table, and shows that most customization — and even a brand-new agent — needs no custom identity, just a built-inrole:. Custom identity / permissions / roles require your own (standalone) mint.bring-your-own-agent.md— canonical example now uses a served role (role: triage) with a "role is not the agent's name" callout; adds a403row to Troubleshooting.customizing-overview.md/customizing-agents.md— note the hosted mint's fixed role set and that thecode/fixagents both run as thecoderrole.harness-reference.md—rolemust be a role the mint serves (403 otherwise);slugis install-time only and not read by the mint; field examples updated.building-custom-agents.md(deprecated) — example no longer 403s.Docs-only. Relates to #6563 (BYOA role selection).
🤖 Generated with Claude Code