fix(claws): point per-mission workspace at /mission/repo + tool-inventory preamble
ci / gates (push) Successful in 18s
ci / frontend (push) Successful in 53s
ci / rust (push) Successful in 3m30s
ci / e2e (push) Skipped
ci / publish (push) Successful in 4m6s

Two stacked issues after risk_profile was fixed:

1. Claws had file_edit + 46 other tools available, but the templates
   trained the agents to expect file_read/file_write (older ZeroClaw
   tool names). Result: agent output kept saying "I only have file_read"
   and dumped implementations into the context window as text.

2. Even with file_edit, the sandbox pointed at
   /zeroclaw-data/.zeroclaw/agents/<alias>/workspace/ — NOT
   /mission/repo where the checked-out mission repo actually lives.
   unrestricted_filesystem=false blocked agents from reaching it.

Fixes:
- provision_claw now takes workspace_path. mission_orchestrator passes
  /mission/repo — pins the per-claw workspace via
  agents.<alias>.workspace.path to the bind-mount path so file_edit /
  content_search / glob_search operate on the mission's git checkout.
- phase_task_text prepends an explicit tool inventory (file_edit,
  content_search, glob_search, git_operations, git_forge, ...) plus a
  WORKSPACE line pinned at /mission/repo. Each phase directive is
  rewritten to reference file_edit / git_operations explicitly and to
  call out "do NOT paste code in your reply expecting the platform to
  save it."
This commit is contained in:
Omar Sobh
2026-07-24 13:14:30 -07:00
parent 84572186e9
commit 6d5e7c87d7
4 changed files with 73 additions and 15 deletions
+11 -1
View File
@@ -333,8 +333,18 @@ async fn mint_team_from_template(
// etc.). Passing "toolfree" — the old default — left every
// agent with zero tools regardless of what its prompt asked for.
if let Some(p) = provisioner {
// /mission/repo is the bind-mount path inside the per-mission
// runtime container (see mission_runtime::ensure_container).
// Pinning workspace.path there lets file_edit / glob_search /
// content_search actually operate on the mission's checked-out
// repo instead of the empty per-agent sandbox.
if let Err(e) = p
.provision_claw(claw_id, default_model, &template.template.risk_profile)
.provision_claw(
claw_id,
default_model,
&template.template.risk_profile,
Some("/mission/repo"),
)
.await
{
eprintln!(