veritas-kanban/docs/security/permission-coverage.json

1759 lines
64 KiB
JSON

{
"version": 1,
"lastReviewed": "2026-07-24",
"notes": "Authority surface manifest for v6. The REST route-map entry is backed by shared/src/utils/api-permissions.ts, and CI compares it against server/src/routes/v1/index.ts.",
"surfaces": [
{
"id": "rest:v1-route-map",
"kind": "rest",
"classification": "authenticated-write",
"permissions": ["route-map"],
"source": "shared/src/utils/api-permissions.ts",
"denialReason": "REST requests are denied by explicit route permission guards or by the client preflight map."
},
{
"id": "websocket:task:changed",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/services/broadcast-service.ts",
"denialReason": "Task change events require task read access in the event workspace."
},
{
"id": "websocket:chat:delta",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/services/broadcast-service.ts",
"denialReason": "Chat delta events require task read access in the event workspace."
},
{
"id": "websocket:chat:message",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/services/broadcast-service.ts",
"denialReason": "Chat message events require task read access in the event workspace."
},
{
"id": "websocket:chat:error",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/services/broadcast-service.ts",
"denialReason": "Chat error events require task read access in the event workspace."
},
{
"id": "websocket:squad:message",
"kind": "websocket",
"classification": "agent-scoped",
"permissions": ["agent:read"],
"source": "server/src/services/broadcast-service.ts",
"denialReason": "Squad messages require agent read access."
},
{
"id": "websocket:telemetry:event",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["telemetry:read"],
"source": "server/src/services/broadcast-service.ts",
"denialReason": "Telemetry events require telemetry read access."
},
{
"id": "websocket:broadcast:new",
"kind": "websocket",
"classification": "agent-scoped",
"permissions": ["agent:read"],
"source": "server/src/services/broadcast-service.ts",
"denialReason": "Agent broadcast notifications require agent read access."
},
{
"id": "websocket:workflow:status",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["workflow:read"],
"source": "server/src/services/broadcast-service.ts",
"denialReason": "Workflow status events require workflow read access."
},
{
"id": "websocket:run-session:event",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/services/broadcast-service.ts",
"denialReason": "Shared run session events require task read access in the event workspace."
},
{
"id": "websocket:run-approval:changed",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/services/broadcast-service.ts",
"denialReason": "Run approval changes require task read access in the approval workspace."
},
{
"id": "websocket:tasks:subscribed",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/server.ts",
"denialReason": "Task channel subscription confirmations are only sent after task read authorization."
},
{
"id": "websocket:workflow:subscribed",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["workflow:read"],
"source": "server/src/server.ts",
"denialReason": "Workflow subscription confirmations are only sent after workflow read authorization."
},
{
"id": "websocket:run-session:subscribed",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/server.ts",
"denialReason": "Shared run session subscription confirmations are only sent after task read authorization."
},
{
"id": "websocket:agent:status",
"kind": "websocket",
"classification": "agent-scoped",
"permissions": ["agent:read"],
"source": "server/src/routes/agent-status.ts",
"denialReason": "Agent status events require agent read access."
},
{
"id": "websocket:agent:status:subscribed",
"kind": "websocket",
"classification": "agent-scoped",
"permissions": ["agent:read"],
"source": "server/src/server.ts",
"denialReason": "Agent status subscription confirmations are only sent after agent read authorization."
},
{
"id": "websocket:agent:event",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/server.ts",
"denialReason": "Durable agent event subscriptions require task read access."
},
{
"id": "websocket:agent:output",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/server.ts",
"denialReason": "Agent output subscriptions require task read access."
},
{
"id": "websocket:agent:complete",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/server.ts",
"denialReason": "Agent completion subscriptions require task read access."
},
{
"id": "websocket:agent:error",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/server.ts",
"denialReason": "Agent error subscriptions require task read access."
},
{
"id": "websocket:chat:subscribed",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/server.ts",
"denialReason": "Chat subscription confirmations are only sent after task read authorization."
},
{
"id": "websocket:subscribed",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/server.ts",
"denialReason": "Task output subscription confirmations are only sent after task read authorization."
},
{
"id": "websocket:error",
"kind": "websocket",
"classification": "authenticated-read",
"permissions": ["workspace:read"],
"source": "server/src/server.ts",
"denialReason": "WebSocket denial errors are only sent on an authenticated connection."
},
{
"id": "websocket-inbound:chat:subscribe",
"kind": "websocket-inbound",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/server.ts",
"denialReason": "Chat subscriptions require task read access in the requested workspace."
},
{
"id": "websocket-inbound:subscribe:tasks",
"kind": "websocket-inbound",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/server.ts",
"denialReason": "Task event channel subscriptions require task read access in the requested workspace."
},
{
"id": "websocket-inbound:workflow:subscribe",
"kind": "websocket-inbound",
"classification": "authenticated-read",
"permissions": ["workflow:read"],
"source": "server/src/server.ts",
"denialReason": "Workflow event channel subscriptions require workflow read access in the requested workspace."
},
{
"id": "websocket-inbound:run-session:subscribe",
"kind": "websocket-inbound",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/server.ts",
"denialReason": "Shared run session subscriptions require task read access in the requested workspace."
},
{
"id": "websocket-inbound:subscribe",
"kind": "websocket-inbound",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "server/src/server.ts",
"denialReason": "Agent output subscriptions require task read access in the requested workspace."
},
{
"id": "workflow-step:agent",
"kind": "workflow-step",
"classification": "agent-scoped",
"permissions": ["workflow:execute", "agent:read"],
"source": "shared/src/types/workflow.ts",
"denialReason": "Agent workflow steps require workflow execution permission and an allowed agent."
},
{
"id": "workflow-step:loop",
"kind": "workflow-step",
"classification": "agent-scoped",
"permissions": ["workflow:execute", "agent:read"],
"source": "shared/src/types/workflow.ts",
"denialReason": "Loop workflow steps require workflow execution permission and an allowed agent."
},
{
"id": "workflow-step:gate",
"kind": "workflow-step",
"classification": "authenticated-write",
"permissions": ["workflow:execute"],
"source": "shared/src/types/workflow.ts",
"denialReason": "Gate workflow steps require workflow execution permission."
},
{
"id": "workflow-step:parallel",
"kind": "workflow-step",
"classification": "agent-scoped",
"permissions": ["workflow:execute", "agent:read"],
"source": "shared/src/types/workflow.ts",
"denialReason": "Parallel workflow steps require workflow execution permission and allowed agents."
},
{
"id": "transition-gate:require-agent",
"kind": "transition-gate",
"classification": "internal-only",
"permissions": [],
"source": "shared/src/types/transition-hooks.types.ts",
"justification": "Transition gates execute inside an already authorized task status change."
},
{
"id": "transition-gate:require-plan",
"kind": "transition-gate",
"classification": "internal-only",
"permissions": [],
"source": "shared/src/types/transition-hooks.types.ts",
"justification": "Transition gates execute inside an already authorized task status change."
},
{
"id": "transition-gate:require-verification-complete",
"kind": "transition-gate",
"classification": "internal-only",
"permissions": [],
"source": "shared/src/types/transition-hooks.types.ts",
"justification": "Transition gates execute inside an already authorized task status change."
},
{
"id": "transition-gate:require-time-tracked",
"kind": "transition-gate",
"classification": "internal-only",
"permissions": [],
"source": "shared/src/types/transition-hooks.types.ts",
"justification": "Transition gates execute inside an already authorized task status change."
},
{
"id": "transition-gate:require-closing-comment",
"kind": "transition-gate",
"classification": "internal-only",
"permissions": [],
"source": "shared/src/types/transition-hooks.types.ts",
"justification": "Transition gates execute inside an already authorized task status change."
},
{
"id": "transition-gate:require-subtasks-complete",
"kind": "transition-gate",
"classification": "internal-only",
"permissions": [],
"source": "shared/src/types/transition-hooks.types.ts",
"justification": "Transition gates execute inside an already authorized task status change."
},
{
"id": "transition-gate:require-blocker-reason",
"kind": "transition-gate",
"classification": "internal-only",
"permissions": [],
"source": "shared/src/types/transition-hooks.types.ts",
"justification": "Transition gates execute inside an already authorized task status change."
},
{
"id": "transition-action:auto-start-timer",
"kind": "transition-action",
"classification": "internal-only",
"permissions": [],
"source": "shared/src/types/transition-hooks.types.ts",
"justification": "Transition actions execute only after the initiating task transition is authorized."
},
{
"id": "transition-action:auto-stop-timer",
"kind": "transition-action",
"classification": "internal-only",
"permissions": [],
"source": "shared/src/types/transition-hooks.types.ts",
"justification": "Transition actions execute only after the initiating task transition is authorized."
},
{
"id": "transition-action:send-webhook",
"kind": "transition-action",
"classification": "workspace-admin",
"permissions": ["admin:manage"],
"source": "shared/src/types/transition-hooks.types.ts",
"denialReason": "Webhook transition actions can only be configured through admin-guarded transition hook settings."
},
{
"id": "transition-action:send-notification",
"kind": "transition-action",
"classification": "workspace-admin",
"permissions": ["admin:manage"],
"source": "shared/src/types/transition-hooks.types.ts",
"denialReason": "Notification transition actions can only be configured through admin-guarded transition hook settings."
},
{
"id": "transition-action:prompt-lessons-learned",
"kind": "transition-action",
"classification": "internal-only",
"permissions": [],
"source": "shared/src/types/transition-hooks.types.ts",
"justification": "Transition actions execute only after the initiating task transition is authorized."
},
{
"id": "transition-action:log-activity",
"kind": "transition-action",
"classification": "internal-only",
"permissions": [],
"source": "shared/src/types/transition-hooks.types.ts",
"justification": "Transition actions execute only after the initiating task transition is authorized."
},
{
"id": "command-palette:new-task",
"kind": "command-palette",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "web/src/components/layout/CommandPalette.tsx",
"denialReason": "Creating a task through the command palette requires task write access."
},
{
"id": "command-palette:toggle-theme",
"kind": "command-palette",
"classification": "internal-only",
"permissions": [],
"source": "web/src/components/layout/CommandPalette.tsx",
"justification": "Theme switching is a client-local preference and does not call a privileged API."
},
{
"id": "command-palette:open-search",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["task:read", "work_product:read"],
"source": "web/src/components/layout/CommandPalette.tsx",
"denialReason": "Opening semantic search leads to task and work product read APIs."
},
{
"id": "command-palette:move-todo",
"kind": "command-palette",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "web/src/components/layout/CommandPalette.tsx",
"denialReason": "Moving a task to To Do requires task write access."
},
{
"id": "command-palette:move-inprogress",
"kind": "command-palette",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "web/src/components/layout/CommandPalette.tsx",
"denialReason": "Moving a task to In Progress requires task write access."
},
{
"id": "command-palette:move-blocked",
"kind": "command-palette",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "web/src/components/layout/CommandPalette.tsx",
"denialReason": "Moving a task to Blocked requires task write access."
},
{
"id": "command-palette:move-done",
"kind": "command-palette",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "web/src/components/layout/CommandPalette.tsx",
"denialReason": "Moving a task to Done requires task write access."
},
{
"id": "command-palette:nav-up",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "web/src/components/layout/CommandPalette.tsx",
"denialReason": "Task selection shortcuts are only useful after task read access is granted."
},
{
"id": "command-palette:nav-down",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "web/src/components/layout/CommandPalette.tsx",
"denialReason": "Task selection shortcuts are only useful after task read access is granted."
},
{
"id": "command-palette:open-task",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "web/src/components/layout/CommandPalette.tsx",
"denialReason": "Opening a selected task requires task read access."
},
{
"id": "command-palette:go-board",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "web/src/lib/views.ts",
"denialReason": "Board navigation leads to task read APIs."
},
{
"id": "command-palette:go-activity",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["telemetry:read"],
"source": "web/src/lib/views.ts",
"denialReason": "Activity navigation leads to activity and telemetry read APIs."
},
{
"id": "command-palette:go-backlog",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "web/src/lib/views.ts",
"denialReason": "Backlog navigation leads to task read APIs."
},
{
"id": "command-palette:go-archive",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "web/src/lib/views.ts",
"denialReason": "Archive navigation leads to task read APIs."
},
{
"id": "command-palette:go-templates",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "web/src/lib/views.ts",
"denialReason": "Template navigation leads to settings read APIs."
},
{
"id": "command-palette:go-workflows",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["workflow:read"],
"source": "web/src/lib/views.ts",
"denialReason": "Workflow navigation leads to workflow read APIs."
},
{
"id": "command-palette:go-operations",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["task:read", "telemetry:read", "workflow_run:read"],
"source": "web/src/lib/views.ts",
"denialReason": "Operations digest navigation leads to task, telemetry, and scheduled deliverable read APIs."
},
{
"id": "command-palette:go-evidence",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["report:read", "task:read", "telemetry:read", "work_product:read"],
"source": "web/src/lib/views.ts",
"denialReason": "Evidence navigation leads to source-backed task, telemetry, and work-product report APIs."
},
{
"id": "command-palette:go-time",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["report:read", "task:read", "telemetry:read"],
"source": "web/src/lib/views.ts",
"denialReason": "Time navigation leads to source-backed task and telemetry report APIs."
},
{
"id": "command-palette:go-drift",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["telemetry:read"],
"source": "web/src/lib/views.ts",
"denialReason": "Drift navigation leads to telemetry read APIs."
},
{
"id": "command-palette:go-decisions",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "web/src/lib/views.ts",
"denialReason": "Decision navigation leads to task-linked decision read APIs."
},
{
"id": "command-palette:go-scoring",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["report:read"],
"source": "web/src/lib/views.ts",
"denialReason": "Scoring navigation leads to report read APIs."
},
{
"id": "command-palette:go-policies",
"kind": "command-palette",
"classification": "authenticated-read",
"permissions": ["policy:read"],
"source": "web/src/lib/views.ts",
"denialReason": "Policy navigation leads to policy read APIs."
},
{
"id": "background-job:agent-registry-stale-check",
"kind": "background-job",
"classification": "internal-only",
"permissions": [],
"source": "server/src/services/agent-registry-service.ts",
"justification": "Agent stale checks are server-owned maintenance and are not caller-triggered."
},
{
"id": "background-job:github-sync-poll",
"kind": "background-job",
"classification": "internal-only",
"permissions": [],
"source": "server/src/services/github-sync-service.ts",
"justification": "GitHub sync polling runs from configured server state and is not caller-triggered."
},
{
"id": "background-job:prometheus-event-loop-lag",
"kind": "background-job",
"classification": "internal-only",
"permissions": [],
"source": "server/src/services/metrics/prometheus.ts",
"justification": "Event loop lag sampling records process metrics and is not caller-triggered."
},
{
"id": "background-job:task-github-reconcile",
"kind": "background-job",
"classification": "internal-only",
"permissions": [],
"source": "server/src/services/task-service.ts",
"justification": "Task GitHub reconciliation runs from configured server state and is not caller-triggered."
},
{
"id": "background-job:websocket-heartbeat",
"kind": "background-job",
"classification": "internal-only",
"permissions": [],
"source": "server/src/server.ts",
"justification": "WebSocket heartbeats maintain authenticated connections and do not expose data."
},
{
"id": "cli:agent-status:agent",
"kind": "cli",
"classification": "public/setup",
"permissions": [],
"source": "cli/src/commands/agent-status.ts",
"justification": "Parent command only; subcommands carry authorization."
},
{
"id": "cli:agent-status:status",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["agent:read"],
"source": "cli/src/commands/agent-status.ts",
"denialReason": "Agent status reads require agent read access."
},
{
"id": "cli:agent-status:working",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["telemetry:write"],
"source": "cli/src/commands/agent-status.ts",
"denialReason": "Agent status writes require telemetry write access."
},
{
"id": "cli:agent-status:idle",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["telemetry:write"],
"source": "cli/src/commands/agent-status.ts",
"denialReason": "Agent status writes require telemetry write access."
},
{
"id": "cli:agent-status:sub-agent",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["telemetry:write"],
"source": "cli/src/commands/agent-status.ts",
"denialReason": "Agent status writes require telemetry write access."
},
{
"id": "cli:agents:start",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Starting an agent requires task read and task write access."
},
{
"id": "cli:agents:launch-preview",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:read", "agent:read"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Previewing effective launch evidence requires task and agent read access."
},
{
"id": "cli:agents:workspace-trust",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read", "agent:read"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Workspace trust command discovery requires task and agent read access."
},
{
"id": "cli:agents:scan",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read", "agent:read"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Scanning workspace execution configuration requires task and agent read access."
},
{
"id": "cli:agents:decide",
"kind": "cli",
"classification": "owner-admin",
"permissions": ["task:read", "admin:manage"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Recording a workspace execution trust decision requires administrator authority."
},
{
"id": "cli:agents:revoke",
"kind": "cli",
"classification": "owner-admin",
"permissions": ["task:read", "admin:manage"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Revoking workspace execution trust requires administrator authority."
},
{
"id": "cli:agents:stop",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Stopping an agent requires task read and task write access."
},
{
"id": "cli:agents:agent:recovery",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read", "agent:read"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Reading a task recovery decision requires task and agent read access."
},
{
"id": "cli:agents:agent:cancel-recovery",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Cancelling an exact pending recovery requires task read and task write access."
},
{
"id": "cli:agents:agent:phase",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read", "agent:read"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Reading active phase state requires task and agent read access."
},
{
"id": "cli:agents:agent:transition-phase",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Requesting a compare-and-set phase transition requires task read and write access; expansions still require exact approval."
},
{
"id": "cli:agents:agent:decide-phase-approval",
"kind": "cli",
"classification": "owner-admin",
"permissions": ["task:read", "admin:manage"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Approving or rejecting an authority expansion requires administrator authority."
},
{
"id": "cli:agents:agent:resume",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:read", "agent:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Resuming a provider conversation requires task read and agent write access."
},
{
"id": "cli:agents:agent:follow-up",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:read", "agent:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Starting a follow-up turn requires task read and agent write access."
},
{
"id": "cli:agents:agent:fork",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:read", "agent:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Forking provider history requires task read and agent write access."
},
{
"id": "cli:agents:agent:steer",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Steering an active provider turn requires task read and task write access."
},
{
"id": "cli:agents:agent:interrupt",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:read", "agent:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Interrupting an active provider turn requires task read and agent write access."
},
{
"id": "cli:agents:agent:compact",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:read", "agent:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Compacting a provider conversation requires task read and agent write access."
},
{
"id": "cli:agents:agent:archive",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:read", "agent:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Archiving a provider conversation requires task read and agent write access."
},
{
"id": "cli:agents:agent:close",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:read", "agent:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Closing a provider conversation requires task read and agent write access."
},
{
"id": "cli:agents:profiles",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Profile package command discovery requires settings read access."
},
{
"id": "cli:agents:list",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Listing agent profile packages requires settings read access."
},
{
"id": "cli:agents:validate",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Validating an agent profile package uses settings-scoped profile schema access."
},
{
"id": "cli:agents:import",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["settings:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Importing an agent profile package modifies workspace settings."
},
{
"id": "cli:agents:export",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Exporting an agent profile package requires settings read access."
},
{
"id": "cli:agents:agents:pending",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["agent:read"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Listing pending agent requests requires agent read access."
},
{
"id": "cli:agents:agents:complete",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["task:write"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Completing an agent request requires task write access."
},
{
"id": "cli:agents:agents:status",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["agent:read"],
"source": "cli/src/commands/agents.ts",
"denialReason": "Agent request status requires agent read access."
},
{
"id": "mcp:control_agent_conversation",
"kind": "mcp-tool",
"classification": "agent-scoped",
"permissions": ["agent:write", "task:write"],
"source": "mcp/src/tools/agents.ts",
"denialReason": "Conversation lifecycle controls require agent or task write access according to the selected action."
},
{
"id": "cli:automation:automation:pending",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "cli/src/commands/automation.ts",
"denialReason": "Automation task reads require task read access."
},
{
"id": "cli:automation:automation:running",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "cli/src/commands/automation.ts",
"denialReason": "Automation task reads require task read access."
},
{
"id": "cli:automation:automation:start",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/automation.ts",
"denialReason": "Starting automation requires task read and task write access."
},
{
"id": "cli:automation:automation:complete",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/automation.ts",
"denialReason": "Completing automation requires task read and task write access."
},
{
"id": "cli:backlog:backlog",
"kind": "cli",
"classification": "public/setup",
"permissions": [],
"source": "cli/src/commands/backlog.ts",
"justification": "Parent command only; subcommands carry authorization."
},
{
"id": "cli:backlog:list",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "cli/src/commands/backlog.ts",
"denialReason": "Backlog reads require task read access."
},
{
"id": "cli:backlog:add",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "cli/src/commands/backlog.ts",
"denialReason": "Adding backlog items requires task write access."
},
{
"id": "cli:backlog:promote",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "cli/src/commands/backlog.ts",
"denialReason": "Promoting backlog items requires task write access."
},
{
"id": "cli:backlog:demote",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "cli/src/commands/backlog.ts",
"denialReason": "Demoting tasks requires task write access."
},
{
"id": "cli:backlog:delete",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "cli/src/commands/backlog.ts",
"denialReason": "Deleting backlog items requires task write access."
},
{
"id": "cli:backlog:count",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "cli/src/commands/backlog.ts",
"denialReason": "Backlog counts require task read access."
},
{
"id": "cli:comments:comment",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "comment:write"],
"source": "cli/src/commands/comments.ts",
"denialReason": "Adding comments requires task read and comment write access."
},
{
"id": "cli:github:github",
"kind": "cli",
"classification": "public/setup",
"permissions": [],
"source": "cli/src/commands/github.ts",
"justification": "Parent command only; subcommands carry authorization."
},
{
"id": "cli:github:sync",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "cli/src/commands/github.ts",
"denialReason": "GitHub sync mutates task state and requires task write access."
},
{
"id": "cli:github:status",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "cli/src/commands/github.ts",
"denialReason": "GitHub sync status requires task read access."
},
{
"id": "cli:github:config",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/github.ts",
"denialReason": "GitHub sync config reads and writes require task route access."
},
{
"id": "cli:github:mappings",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "cli/src/commands/github.ts",
"denialReason": "GitHub mappings require task read access."
},
{
"id": "cli:notifications:notify",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["comment:write"],
"source": "cli/src/commands/notifications.ts",
"denialReason": "Creating notifications requires comment write access."
},
{
"id": "cli:notifications:notify:check",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["comment:write"],
"source": "cli/src/commands/notifications.ts",
"denialReason": "Notification checks can create notifications and require comment write access."
},
{
"id": "cli:notifications:notify:pending",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["agent:read"],
"source": "cli/src/commands/notifications.ts",
"denialReason": "Pending notification reads require agent read access."
},
{
"id": "cli:notifications:notify:list",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["agent:read"],
"source": "cli/src/commands/notifications.ts",
"denialReason": "Notification lists require agent read access."
},
{
"id": "cli:notifications:notify:clear",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["comment:write"],
"source": "cli/src/commands/notifications.ts",
"denialReason": "Clearing notifications requires comment write access."
},
{
"id": "cli:projects:project",
"kind": "cli",
"classification": "public/setup",
"permissions": [],
"source": "cli/src/commands/projects.ts",
"justification": "Parent command only; subcommands carry authorization."
},
{
"id": "cli:projects:list",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "cli/src/commands/projects.ts",
"denialReason": "Project reads require settings read access."
},
{
"id": "cli:projects:create",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["settings:write"],
"source": "cli/src/commands/projects.ts",
"denialReason": "Project creation requires settings write access."
},
{
"id": "cli:setup:setup",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/setup.ts",
"denialReason": "Setup can create a sample task and requires task write access unless skipped."
},
{
"id": "cli:sqlite:sqlite",
"kind": "cli",
"classification": "public/setup",
"permissions": [],
"source": "cli/src/commands/sqlite.ts",
"justification": "Parent command only; subcommands carry authorization."
},
{
"id": "cli:sqlite:journal",
"kind": "cli",
"classification": "public/setup",
"permissions": [],
"source": "cli/src/commands/sqlite.ts",
"justification": "Parent command only; subcommands carry authorization."
},
{
"id": "cli:sqlite:preview",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["backup:write"],
"source": "cli/src/commands/sqlite.ts",
"denialReason": "Journal maintenance previews require backup write access because the API uses an authenticated POST."
},
{
"id": "cli:sqlite:apply",
"kind": "cli",
"classification": "owner-admin",
"permissions": ["admin:manage"],
"source": "cli/src/commands/sqlite.ts",
"denialReason": "Scheduling restart-time journal maintenance requires admin management access."
},
{
"id": "cli:sqlite:status",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["backup:read"],
"source": "cli/src/commands/sqlite.ts",
"denialReason": "Reading journal maintenance status requires backup read access."
},
{
"id": "cli:sqlite:override",
"kind": "cli",
"classification": "public/setup",
"permissions": [],
"source": "cli/src/commands/sqlite.ts",
"justification": "Parent command only; subcommands carry authorization."
},
{
"id": "cli:sqlite:revoke",
"kind": "cli",
"classification": "owner-admin",
"permissions": ["admin:manage"],
"source": "cli/src/commands/sqlite.ts",
"denialReason": "Revoking a journal compatibility or override policy requires admin management access."
},
{
"id": "cli:sprints:sprint",
"kind": "cli",
"classification": "public/setup",
"permissions": [],
"source": "cli/src/commands/sprints.ts",
"justification": "Parent command only; subcommands carry authorization."
},
{
"id": "cli:sprints:list",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "cli/src/commands/sprints.ts",
"denialReason": "Sprint reads require settings read access."
},
{
"id": "cli:sprints:create",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["settings:write"],
"source": "cli/src/commands/sprints.ts",
"denialReason": "Sprint creation requires settings write access."
},
{
"id": "cli:sprints:update",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["settings:write"],
"source": "cli/src/commands/sprints.ts",
"denialReason": "Sprint updates require settings write access."
},
{
"id": "cli:sprints:delete",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["settings:write"],
"source": "cli/src/commands/sprints.ts",
"denialReason": "Sprint deletion requires settings write access."
},
{
"id": "cli:sprints:suggestions",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "cli/src/commands/sprints.ts",
"denialReason": "Archive suggestions require task read access."
},
{
"id": "cli:sprints:close",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "cli/src/commands/sprints.ts",
"denialReason": "Closing a sprint mutates tasks and requires task write access."
},
{
"id": "cli:tool-servers:tool-servers",
"kind": "cli",
"classification": "public/setup",
"permissions": [],
"source": "cli/src/commands/tool-servers.ts",
"justification": "Parent command only; subcommands carry authorization."
},
{
"id": "cli:tool-servers:list",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "cli/src/commands/tool-servers.ts",
"denialReason": "Tool-server definition lists require settings read access."
},
{
"id": "cli:tool-servers:get",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "cli/src/commands/tool-servers.ts",
"denialReason": "Tool-server definition reads require settings read access."
},
{
"id": "cli:tool-servers:create",
"kind": "cli",
"classification": "owner-admin",
"permissions": ["admin:manage"],
"source": "cli/src/commands/tool-servers.ts",
"denialReason": "Creating executable tool-server definitions requires admin management access."
},
{
"id": "cli:tool-servers:update",
"kind": "cli",
"classification": "owner-admin",
"permissions": ["admin:manage"],
"source": "cli/src/commands/tool-servers.ts",
"denialReason": "Updating executable tool-server definitions requires admin management access."
},
{
"id": "cli:tool-servers:delete",
"kind": "cli",
"classification": "owner-admin",
"permissions": ["admin:manage"],
"source": "cli/src/commands/tool-servers.ts",
"denialReason": "Deleting executable tool-server definitions requires admin management access."
},
{
"id": "cli:tool-servers:enable",
"kind": "cli",
"classification": "owner-admin",
"permissions": ["admin:manage"],
"source": "cli/src/commands/tool-servers.ts",
"denialReason": "Enabling executable tool-server definitions requires admin management access."
},
{
"id": "cli:tool-servers:disable",
"kind": "cli",
"classification": "owner-admin",
"permissions": ["admin:manage"],
"source": "cli/src/commands/tool-servers.ts",
"denialReason": "Disabling executable tool-server definitions requires admin management access."
},
{
"id": "cli:tool-servers:version",
"kind": "cli",
"classification": "owner-admin",
"permissions": ["admin:manage"],
"source": "cli/src/commands/tool-servers.ts",
"denialReason": "Changing tool-server version identity requires admin management access."
},
{
"id": "cli:tool-servers:discover",
"kind": "cli",
"classification": "owner-admin",
"permissions": ["admin:manage"],
"source": "cli/src/commands/tool-servers.ts",
"denialReason": "Starting tool-server discovery requires admin management access."
},
{
"id": "cli:tool-servers:catalog",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["agent:read"],
"source": "cli/src/commands/tool-servers.ts",
"denialReason": "Reading an attempt-bound tool catalog requires agent read access."
},
{
"id": "cli:tool-servers:call",
"kind": "cli",
"classification": "agent-scoped",
"permissions": ["agent:write"],
"source": "cli/src/commands/tool-servers.ts",
"denialReason": "Mediated run-tool invocation requires agent write access."
},
{
"id": "cli:summary:summary",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["report:read"],
"source": "cli/src/commands/summary.ts",
"denialReason": "Summary output requires report read access."
},
{
"id": "cli:summary:standup",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["report:read"],
"source": "cli/src/commands/summary.ts",
"denialReason": "Standup reports require report read access."
},
{
"id": "cli:summary:memory",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["report:read"],
"source": "cli/src/commands/summary.ts",
"denialReason": "Memory summaries require report read access."
},
{
"id": "cli:tasks:list",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "cli/src/commands/tasks.ts",
"denialReason": "Task lists require task read access."
},
{
"id": "cli:tasks:show",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "cli/src/commands/tasks.ts",
"denialReason": "Task details require task read access."
},
{
"id": "cli:tasks:create",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "cli/src/commands/tasks.ts",
"denialReason": "Task creation requires task write access."
},
{
"id": "cli:tasks:update",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/tasks.ts",
"denialReason": "Task updates require task read and task write access."
},
{
"id": "cli:tasks:archive",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/tasks.ts",
"denialReason": "Task archive operations require task read and task write access."
},
{
"id": "cli:tasks:delete",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/tasks.ts",
"denialReason": "Task deletion requires task read and task write access."
},
{
"id": "cli:time:time",
"kind": "cli",
"classification": "public/setup",
"permissions": [],
"source": "cli/src/commands/time.ts",
"justification": "Parent command only; subcommands carry authorization."
},
{
"id": "cli:time:start",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/time.ts",
"denialReason": "Starting timers requires task read and task write access."
},
{
"id": "cli:time:stop",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/time.ts",
"denialReason": "Stopping timers requires task read and task write access."
},
{
"id": "cli:time:entry",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/time.ts",
"denialReason": "Manual time entries require task read and task write access."
},
{
"id": "cli:time:show",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "cli/src/commands/time.ts",
"denialReason": "Time entry display requires task read access."
},
{
"id": "cli:usage:usage",
"kind": "cli",
"classification": "authenticated-read",
"permissions": ["report:read"],
"source": "cli/src/commands/usage.ts",
"denialReason": "Usage reports require report read access."
},
{
"id": "cli:workflow:begin",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write", "telemetry:write"],
"source": "cli/src/commands/workflow.ts",
"denialReason": "Workflow begin mutates task, timer, and agent status state."
},
{
"id": "cli:workflow:done",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write", "comment:write", "telemetry:write"],
"source": "cli/src/commands/workflow.ts",
"denialReason": "Workflow completion mutates task, timer, comment, and agent status state."
},
{
"id": "cli:workflow:block",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write", "comment:write"],
"source": "cli/src/commands/workflow.ts",
"denialReason": "Blocking a task mutates task and comment state."
},
{
"id": "cli:workflow:unblock",
"kind": "cli",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "cli/src/commands/workflow.ts",
"denialReason": "Unblocking a task requires task write access."
},
{
"id": "mcp:start_agent",
"kind": "mcp",
"classification": "agent-scoped",
"permissions": ["task:read", "task:write"],
"source": "mcp/src/tools/agents.ts",
"denialReason": "Starting an agent requires task read and task write access."
},
{
"id": "mcp:stop_agent",
"kind": "mcp",
"classification": "agent-scoped",
"permissions": ["task:read", "task:write"],
"source": "mcp/src/tools/agents.ts",
"denialReason": "Stopping an agent requires task read and task write access."
},
{
"id": "mcp:cancel_agent_recovery",
"kind": "mcp",
"classification": "agent-scoped",
"permissions": ["task:read", "task:write"],
"source": "mcp/src/tools/agents.ts",
"denialReason": "Cancelling an exact pending recovery requires task read and task write access."
},
{
"id": "mcp:list_tool_servers",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "mcp/src/tools/tool-control-plane.ts",
"denialReason": "Tool-server definition lists require settings read access."
},
{
"id": "mcp:discover_tool_server",
"kind": "mcp",
"classification": "owner-admin",
"permissions": ["admin:manage"],
"source": "mcp/src/tools/tool-control-plane.ts",
"denialReason": "Starting tool-server discovery requires admin management access."
},
{
"id": "mcp:get_run_tool_catalog",
"kind": "mcp",
"classification": "agent-scoped",
"permissions": ["agent:read"],
"source": "mcp/src/tools/tool-control-plane.ts",
"denialReason": "Reading an attempt-bound tool catalog requires agent read access."
},
{
"id": "mcp:call_run_tool",
"kind": "mcp",
"classification": "agent-scoped",
"permissions": ["agent:write"],
"source": "mcp/src/tools/tool-control-plane.ts",
"denialReason": "Mediated run-tool invocation requires agent write access."
},
{
"id": "mcp:list_pending_automation",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "mcp/src/tools/automation.ts",
"denialReason": "Listing pending automation requires task read access."
},
{
"id": "mcp:list_running_automation",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "mcp/src/tools/automation.ts",
"denialReason": "Listing running automation requires task read access."
},
{
"id": "mcp:start_automation",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "mcp/src/tools/automation.ts",
"denialReason": "Starting automation requires task read and task write access."
},
{
"id": "mcp:complete_automation",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "mcp/src/tools/automation.ts",
"denialReason": "Completing automation requires task read and task write access."
},
{
"id": "mcp:add_comment",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["comment:write"],
"source": "mcp/src/tools/comments.ts",
"denialReason": "Adding comments requires comment write access."
},
{
"id": "mcp:list_comments",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "mcp/src/tools/comments.ts",
"denialReason": "Listing comments requires task read access."
},
{
"id": "mcp:delete_comment",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["comment:write"],
"source": "mcp/src/tools/comments.ts",
"denialReason": "Deleting comments requires comment write access."
},
{
"id": "mcp:create_notification",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["comment:write"],
"source": "mcp/src/tools/notifications.ts",
"denialReason": "Creating notifications requires comment write access."
},
{
"id": "mcp:get_pending_notifications",
"kind": "mcp",
"classification": "agent-scoped",
"permissions": ["agent:read"],
"source": "mcp/src/tools/notifications.ts",
"denialReason": "Pending notification reads require agent read access."
},
{
"id": "mcp:check_notifications",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["comment:write"],
"source": "mcp/src/tools/notifications.ts",
"denialReason": "Notification checks can create notifications and require comment write access."
},
{
"id": "mcp:list_projects",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "mcp/src/tools/projects.ts",
"denialReason": "Project listing requires settings read access."
},
{
"id": "mcp:get_project",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "mcp/src/tools/projects.ts",
"denialReason": "Project details require settings read access."
},
{
"id": "mcp:create_project",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["settings:write"],
"source": "mcp/src/tools/projects.ts",
"denialReason": "Creating projects requires settings write access."
},
{
"id": "mcp:update_project",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["settings:write"],
"source": "mcp/src/tools/projects.ts",
"denialReason": "Updating projects requires settings write access."
},
{
"id": "mcp:delete_project",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["settings:write"],
"source": "mcp/src/tools/projects.ts",
"denialReason": "Deleting projects requires settings write access."
},
{
"id": "mcp:get_project_stats",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "mcp/src/tools/projects.ts",
"denialReason": "Project stats require task read access."
},
{
"id": "mcp:reorder_projects",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["settings:write"],
"source": "mcp/src/tools/projects.ts",
"denialReason": "Reordering projects requires settings write access."
},
{
"id": "mcp:list_sprints",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "mcp/src/tools/sprints.ts",
"denialReason": "Sprint listing requires settings read access."
},
{
"id": "mcp:get_sprint",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "mcp/src/tools/sprints.ts",
"denialReason": "Sprint details require settings read access."
},
{
"id": "mcp:create_sprint",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["settings:write"],
"source": "mcp/src/tools/sprints.ts",
"denialReason": "Creating sprints requires settings write access."
},
{
"id": "mcp:update_sprint",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["settings:write"],
"source": "mcp/src/tools/sprints.ts",
"denialReason": "Updating sprints requires settings write access."
},
{
"id": "mcp:delete_sprint",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["settings:write"],
"source": "mcp/src/tools/sprints.ts",
"denialReason": "Deleting sprints requires settings write access."
},
{
"id": "mcp:can_delete_sprint",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["settings:read"],
"source": "mcp/src/tools/sprints.ts",
"denialReason": "Sprint deletion checks require settings read access."
},
{
"id": "mcp:reorder_sprints",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["settings:write"],
"source": "mcp/src/tools/sprints.ts",
"denialReason": "Reordering sprints requires settings write access."
},
{
"id": "mcp:get_archive_suggestions",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "mcp/src/tools/sprints.ts",
"denialReason": "Archive suggestions require task read access."
},
{
"id": "mcp:close_sprint",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "mcp/src/tools/sprints.ts",
"denialReason": "Closing a sprint mutates tasks and requires task write access."
},
{
"id": "mcp:get_summary",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["report:read"],
"source": "mcp/src/tools/summary.ts",
"denialReason": "Summary tools require report read access."
},
{
"id": "mcp:get_memory_summary",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["report:read"],
"source": "mcp/src/tools/summary.ts",
"denialReason": "Memory summary tools require report read access."
},
{
"id": "mcp:list_tasks",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "mcp/src/tools/tasks.ts",
"denialReason": "Task listing requires task read access."
},
{
"id": "mcp:get_task",
"kind": "mcp",
"classification": "authenticated-read",
"permissions": ["task:read"],
"source": "mcp/src/tools/tasks.ts",
"denialReason": "Task details require task read access."
},
{
"id": "mcp:create_task",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["task:write"],
"source": "mcp/src/tools/tasks.ts",
"denialReason": "Task creation requires task write access."
},
{
"id": "mcp:update_task",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "mcp/src/tools/tasks.ts",
"denialReason": "Task updates require task read and task write access."
},
{
"id": "mcp:archive_task",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "mcp/src/tools/tasks.ts",
"denialReason": "Task archive operations require task read and task write access."
},
{
"id": "mcp:delete_task",
"kind": "mcp",
"classification": "authenticated-write",
"permissions": ["task:read", "task:write"],
"source": "mcp/src/tools/tasks.ts",
"denialReason": "Task deletion requires task read and task write access."
}
]
}