What happens
Fullsend's six default agents (triage, code, review, fix, prioritize, retro) are delivered through a different mechanism than custom agents:
- Their workflow files, harness configs, agent definitions, skills, scripts, and policies are embedded in the fullsend binary via
internal/scaffold/fullsend-repo/
- They are layered at runtime via ADR 0035 (upstream defaults overlaid with
customized/ overrides)
- Their roles are hardcoded in
ValidRoles() and DefaultAgentRoles()
- Each has a dedicated workflow file with a
# fullsend-stage: marker and a dedicated reusable workflow (reusable-triage.yml, reusable-code.yml, etc.)
This means default agents and custom agents use fundamentally different delivery and configuration paths. An org admin looking at their .fullsend repo sees no trace of the default agents in their config — they're invisible infrastructure that "just exists."
What should happen
Default agents should be configured using the same mechanism as custom agents. When an org admin looks at their config.yaml, they should see entries for triage, code, review, etc. that look exactly like an entry for a third-party agent — harness references pointing to fullsend-ai/fullsend (or fullsend-ai/library) with the same URL+SHA256 format.
This means:
- An admin can remove a default agent by deleting its config entry, not by understanding the scaffold layering model
- An admin can add a default agent the same way they'd add any other agent
- The scaffold for a fresh install produces a
config.yaml with explicit harness references for each default agent, not an implicit "you get all six"
- Installing with no agents and enabling one at a time becomes the natural default path
Context
Depends on #1985 (harness-driven dispatch routing) being implemented first.
This is the "eat your own dogfood" step: if the custom agent installation path is good enough for third parties, it should be good enough for fullsend's own agents.
Related:
What happens
Fullsend's six default agents (triage, code, review, fix, prioritize, retro) are delivered through a different mechanism than custom agents:
internal/scaffold/fullsend-repo/customized/overrides)ValidRoles()andDefaultAgentRoles()# fullsend-stage:marker and a dedicated reusable workflow (reusable-triage.yml,reusable-code.yml, etc.)This means default agents and custom agents use fundamentally different delivery and configuration paths. An org admin looking at their
.fullsendrepo sees no trace of the default agents in their config — they're invisible infrastructure that "just exists."What should happen
Default agents should be configured using the same mechanism as custom agents. When an org admin looks at their
config.yaml, they should see entries for triage, code, review, etc. that look exactly like an entry for a third-party agent — harness references pointing tofullsend-ai/fullsend(orfullsend-ai/library) with the same URL+SHA256 format.This means:
config.yamlwith explicit harness references for each default agent, not an implicit "you get all six"Context
Depends on #1985 (harness-driven dispatch routing) being implemented first.
This is the "eat your own dogfood" step: if the custom agent installation path is good enough for third parties, it should be good enough for fullsend's own agents.
Related: