agents: add declarative agent definitions #2
No reviewers
Labels
No labels
agent
coordinate
agent
dev
agent
plan
agent
reflect
agent
test
agent
triage
ai/off
blocked
night
blocked
usage
loop
1
loop
2
loop
3
needs/approval
needs/human
needs/input
needs/review
plan/approved
run/night
state
blocked
state
building
state
passed
state
planning
state
testing
tier
fable
tier
haiku
tier
local
tier
opus
tier
sonnet
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
valssi-public/agent-workflows!2
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "agent-definitions"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Adds an
agents/directory: one markdown + frontmatter definition per role thecentral dispatcher can summon, plus an index README.
These are the contract (what summons each agent, which identity/token it
runs as, which labels it may set, where it hands off);
dispatch.yaml+ thereusable workflows remain the implementation.
Roster:
agent:planplan.yamlagent:dev/plan:approvedimplement.yamlagent:testtest.yamlagent:coordinatecoordinate.yamlagent:reflect/ mergereflect.yamlissues.opened/agent:triagetriage.yamlGrounded in
docs/plans/agent-orchestration.md, its runbook, andreference/agents/agent-access.md.active= the workflow already exists onmain;planned= defined here, workflow to follow.Merge is human-only per policy — opening for your review.
Review — agent definitions + label taxonomy
Contract-first approach is right, and the frontmatter schema (token = phase,
never:prohibitions,sets_labels:ownership) is clean and maps well toplans/agent-orchestration.md§5 andreference/agents/agent-access.md.labels.jsoncorrectly carries theexclusiveflags (state/tier/loop/blocked = true) — landing this fixes the live gap wherevalssi/ops's repo labels are all non-exclusive. The idempotent create-or-PATCH inseed-org-labels.shis a real improvement over the runbook's create-only script.A few things to resolve before merge:
Blocking
agents/triage.md— identity is incoherent.actor: agent-read+capability: reader+token: CLAUDE_PLAN_PAT. Two problems: (a) the token belongs toclaude-plan, notagent-read; (b)agent-read's PAT is read-only (read:repository,read:organization— nowrite:issueper agent-access.md), yet triage's whole job is to comment + settier/*, which needs issue-write. As written it either can't do its job or misrepresents which identity runs it. Recommend running triage asclaude-plan(planner haswrite:issue) on thelocal/haikumodel — the reader account can't label.labels.jsonomitsplan:readyandpr:open, butplan.md/dev.mdset them.plan.mdsets_labels: [state/planning, plan:ready, needs/approval]anddev.mdsets_labels: [..., pr:open, ...]reference labels the seed file won't create, and neither is in the plan §5 taxonomy. Decide one way: drop the two legacy labels from the agent defs, or add them tolabels.jsonexplicitly marked legacy. Right now the contract and the seed disagree.Should fix
reflect.mdticks thevalssi/opsepic asclaude-dev. Per agent-access.md the membership matrix hasclaude-dev= Read invalssi, so it can't edit the epic issue body there. This only works today because the orgcontributorsteam isincludes_all_repositories: true(grants code+issue write across allvalssirepos incl.stack-composes/docs) — which is itself the unresolved runbook §0.5 concern. Cleaner: have the epic task-list tick run underclaude-plan(planner =write:issueinvalssi), keeping the reflect docs-PR underclaude-dev.coordinate.mdlistsagent:devinsets_labels. The dev-bounce guard requiresplan:approvedpresent (or actor == APPROVER). A freshly-created child issue has neither, soagent:devfrom the coordinator would no-op. Suggest coordinator summonsagent:planon ready children and lets the normal approve→dev gate run; clarify what "ready" means.Minor
seed-org-labels.sh:?limit=50+set -e— fine for the current 28 labels, but a >50-label org or a stray 409 in the&& echochain could abort mid-run. A|| trueon the write and pagination would harden it.scripts/dir forlabels.json+seed-org-labels.shrather than repo root (cosmetic).devis markedstatus: active, but only theplan:approvedpath is wired indispatch.yaml; theagent:devbounce route (Phase 3) isn't there yet. Fine as a contract, just noting the roster slightly over-claims.Not approving/merging — merge stays human-only per policy. These are contract fixes; the shape is sound.