feat(workflows): grant codebase-memory MCP tools to code-intel stages

Explicit per-stage grants (least-privilege, invariant #5) for the mounted
codebase-memory MCP side-car:
- role_pipeline: discovery bootstraps the graph (index_repository) + grounds;
  analyst/architect/decomposer/implementer/reviewer get read-only query tools
  (search_code/search_graph/get_architecture/trace_path/get_code_snippet)
  scoped to each role. NOTE: architect flips from pure-reasoning to tool-calling.
- review_loop implement+review and task_planning planner get read-only queries.

Tools are approval-gated at T2 (server default in config.toml [[mcp]]).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-16 20:01:00 +04:00
parent 0a89fafd45
commit 3e31ebcc1e
3 changed files with 54 additions and 7 deletions
+11 -2
View File
@@ -20,7 +20,12 @@ start = "implement"
id = "implement" id = "implement"
prompt = "prompts/implement.md" prompt = "prompts/implement.md"
produces = [{ name = "patch", kind = "file_written" }] produces = [{ name = "patch", kind = "file_written" }]
allowed_tools = ["file_write", "task_create", "task_update", "task_context", "task_search"] allowed_tools = [
"file_write", "task_create", "task_update", "task_context", "task_search",
"mcp__codebase-memory__search_code",
"mcp__codebase-memory__get_code_snippet",
"mcp__codebase-memory__trace_path",
]
token_budget = 8192 token_budget = 8192
max_retries = 3 max_retries = 3
@@ -31,7 +36,11 @@ id = "review"
prompt = "prompts/review.md" prompt = "prompts/review.md"
needs = ["patch"] needs = ["patch"]
produces = [{ name = "review_report", kind = "review_report" }] produces = [{ name = "review_report", kind = "review_report" }]
allowed_tools = ["task_context", "task_update"] allowed_tools = [
"task_context", "task_update",
"mcp__codebase-memory__search_code",
"mcp__codebase-memory__trace_path",
]
token_budget = 8192 token_budget = 8192
max_retries = 3 max_retries = 3
+38 -4
View File
@@ -38,7 +38,15 @@ start = "discovery"
id = "discovery" id = "discovery"
prompt = "prompts/discovery.md" prompt = "prompts/discovery.md"
produces = [{ name = "discovery", kind = "discovery" }] produces = [{ name = "discovery", kind = "discovery" }]
allowed_tools = ["file_read", "list_dir", "shell"] # Bootstraps the code-intelligence graph (index_repository) so downstream stages can query it,
# plus grounds vetting against the real architecture. mcp__codebase-memory__* come from the
# [[mcp]] side-car in config.toml.
allowed_tools = [
"file_read", "list_dir", "shell",
"mcp__codebase-memory__index_repository",
"mcp__codebase-memory__search_code",
"mcp__codebase-memory__get_architecture",
]
token_budget = 16384 token_budget = 16384
max_retries = 2 max_retries = 2
@@ -49,7 +57,14 @@ max_retries = 2
id = "analyst" id = "analyst"
prompt = "prompts/analyst.md" prompt = "prompts/analyst.md"
produces = [{ name = "analysis", kind = "analysis" }] produces = [{ name = "analysis", kind = "analysis" }]
allowed_tools = ["file_read", "shell", "task_search", "task_context", "task_create"] allowed_tools = [
"file_read", "shell", "task_search", "task_context", "task_create",
"mcp__codebase-memory__search_code",
"mcp__codebase-memory__search_graph",
"mcp__codebase-memory__get_architecture",
"mcp__codebase-memory__trace_path",
"mcp__codebase-memory__get_code_snippet",
]
ground_references = true ground_references = true
token_budget = 16384 token_budget = 16384
max_retries = 2 max_retries = 2
@@ -60,6 +75,13 @@ id = "architect"
prompt = "prompts/architect.md" prompt = "prompts/architect.md"
needs = ["analysis"] needs = ["analysis"]
produces = [{ name = "design", kind = "design" }] produces = [{ name = "design", kind = "design" }]
# Read-only code intelligence to decide component boundaries against the real call graph.
# NOTE: this flips the architect from a pure-reasoning stage into a tool-calling one.
allowed_tools = [
"mcp__codebase-memory__get_architecture",
"mcp__codebase-memory__search_graph",
"mcp__codebase-memory__trace_path",
]
token_budget = 16384 token_budget = 16384
max_retries = 2 max_retries = 2
@@ -71,7 +93,11 @@ max_retries = 2
id = "decomposer" id = "decomposer"
prompt = "prompts/task_planner.md" prompt = "prompts/task_planner.md"
needs = ["design"] needs = ["design"]
allowed_tools = ["file_read", "shell", "task_search", "task_context", "task_decompose", "task_create"] allowed_tools = [
"file_read", "shell", "task_search", "task_context", "task_decompose", "task_create",
"mcp__codebase-memory__search_code",
"mcp__codebase-memory__search_graph",
]
require_task_decompose = true require_task_decompose = true
token_budget = 16384 token_budget = 16384
max_retries = 2 max_retries = 2
@@ -88,6 +114,9 @@ claim_task = true
allowed_tools = [ allowed_tools = [
"file_read", "file_write", "file_edit", "shell", "propose_scope", "file_read", "file_write", "file_edit", "shell", "propose_scope",
"task_create", "task_update", "task_context", "task_search", "task_create", "task_update", "task_context", "task_search",
"mcp__codebase-memory__search_code",
"mcp__codebase-memory__get_code_snippet",
"mcp__codebase-memory__trace_path",
] ]
token_budget = 32768 token_budget = 32768
max_retries = 3 max_retries = 3
@@ -100,7 +129,12 @@ id = "reviewer"
prompt = "prompts/reviewer.md" prompt = "prompts/reviewer.md"
needs = ["patch", "analysis"] needs = ["patch", "analysis"]
produces = [{ name = "review_report", kind = "review_report" }] produces = [{ name = "review_report", kind = "review_report" }]
allowed_tools = ["task_context", "task_update"] allowed_tools = [
"task_context", "task_update",
"mcp__codebase-memory__search_code",
"mcp__codebase-memory__trace_path",
"mcp__codebase-memory__get_code_snippet",
]
token_budget = 32768 token_budget = 32768
max_retries = 2 max_retries = 2
+5 -1
View File
@@ -9,7 +9,11 @@ start = "planner"
[[stages]] [[stages]]
id = "planner" id = "planner"
prompt = "prompts/task_planner.md" prompt = "prompts/task_planner.md"
allowed_tools = ["file_read", "shell", "task_search", "task_context", "task_decompose", "task_create"] allowed_tools = [
"file_read", "shell", "task_search", "task_context", "task_decompose", "task_create",
"mcp__codebase-memory__search_code",
"mcp__codebase-memory__search_graph",
]
require_task_decompose = true require_task_decompose = true
token_budget = 16384 token_budget = 16384
max_retries = 2 max_retries = 2