4.8 KiB
status, created, owner
| status | created | owner |
|---|---|---|
| shipped | 2026-04-28 | cfl |
Agent Roles — Security, QA, and DevOps
Why
Four roles exist today: ceo, worker, specialist, assistant. There is no first-class role for agents that audit code security, own test quality, or manage deployments. These responsibilities are currently folded into generic worker agents, which means:
- No role-specific instruction templates to bootstrap correct agent behavior.
- No permission defaults that reflect the actual authority these agents need (e.g., a security agent blocking merges via
can_approve, a QA agent creating regression tasks). - The role selector in agent creation shows four options;
reviewerwas referenced in earlier code but never became a constant, leaving teams to improvise withspecialistoverrides.
Kandev should close the gap for the three roles with clear, distinct responsibilities.
What
1. New role constants
Add three role constants to internal/office/models/models.go:
| Constant | Value |
|---|---|
AgentRoleSecurity |
"security" |
AgentRoleQA |
"qa" |
AgentRoleDevOps |
"devops" |
2. Default permissions per new role
Add cases to defaultPermsForRole in internal/office/shared/permissions.go:
| Role | can_create_tasks |
can_assign_tasks |
can_approve |
can_create_agents |
can_manage_own_skills |
max_subtask_depth |
|---|---|---|---|---|---|---|
security |
false | true | true | false | true | 1 |
qa |
true | false | false | false | true | 1 |
devops |
true | false | false | false | true | 1 |
Rationale:
- security gets
can_approve: true— it must be able to block or unblock work at approval gates.can_create_tasks: falsebecause security findings are reported, not decomposed into owned subtasks. - qa gets
can_create_tasks: true— it creates regression tasks and bug reports. No approval authority. - devops gets
can_create_tasks: true— it schedules deployment tasks and infra work. No approval authority.
3. Bundled instruction templates
Add AGENTS.md files alongside the existing ceo/, worker/, reviewer/ templates in internal/office/configloader/instructions/:
security/AGENTS.md — Security review focus:
- OWASP Top 10 checklist for code changes
- Dependency audit (known CVEs, outdated packages)
- Secrets and credential leak detection
- Authentication and authorization pattern review
- When to approve vs. request changes at
task_reviewapproval gates
qa/AGENTS.md — Test quality focus:
- Test strategy: unit, integration, E2E coverage targets
- Edge case identification methodology
- Regression test creation on every bug fix
- Test flakiness triage
- Reporting format for test failures (task comment with failure summary)
devops/AGENTS.md — Infrastructure and deployment focus:
- CI/CD pipeline conventions (job names, artifact paths)
- Deployment runbook steps (pre-flight checks, rollout, rollback triggers)
- Monitoring and alerting setup
- Infrastructure-as-code change review
4. UI — role selector and agent cards
- The agent creation dialog role selector lists all seven roles (existing four + three new).
- Each role entry shows a one-line description (provided by a
/metaendpoint, not hardcoded in the frontend per the thin-client principle). - Agent cards display a role badge. The three new roles each get a distinct color token:
security— amberqa— tealdevops— indigo
The badge color mapping is returned by the /meta endpoint as display.variant alongside display.label, keeping color logic on the backend.
Scenarios
-
GIVEN agent creation, WHEN the user selects the
securityrole, THEN the agent is created withcan_approve: true,can_assign_tasks: true, and thesecurity/AGENTS.mdtemplate loaded as its entry instruction file. -
GIVEN a security agent assigned to a task review, WHEN it finds a vulnerability, THEN it can call
ApproveRequest(or reject) at thetask_reviewapproval gate becausecan_approve: true. -
GIVEN a QA agent, WHEN a test run surfaces a regression, THEN it can call
CreateOfficeTaskto open a bug task (can_create_tasks: true), but cannot reassign it to another agent without an explicit override. -
GIVEN the agent creation dialog, WHEN rendered, THEN all seven roles appear with labels and descriptions fetched from
/meta, not hardcoded in the frontend.
Out of scope
- A dedicated
reviewerrole constant (thegranular-permissionsspec notes that reviewer behavior is covered byworker+can_assign_tasks: trueoverride; this spec does not change that). - Enforcing
can_approveon the approvals endpoints (tracked ingranular-permissions). - Custom permission UI per-role beyond what the existing permission override panel provides.