build(agents): force prompt_async by removing supervisors from task permissions
CI / build (push) Successful in 17s
CI / lint (push) Failing after 19s
CI / helm (push) Successful in 30s
CI / quality (push) Successful in 35s
CI / security (push) Failing after 52s
CI / unit_tests (push) Failing after 1m46s
CI / typecheck (push) Successful in 3m57s
CI / coverage (push) Has been skipped
CI / docker (push) Has been skipped
CI / benchmark-regression (push) Has been skipped
CI / benchmark-publish (push) Has been cancelled
CI / integration_tests (push) Has been cancelled
CI / e2e_tests (push) Has been cancelled
CI / status-check (push) Has been cancelled
CI / build (push) Successful in 17s
CI / lint (push) Failing after 19s
CI / helm (push) Successful in 30s
CI / quality (push) Successful in 35s
CI / security (push) Failing after 52s
CI / unit_tests (push) Failing after 1m46s
CI / typecheck (push) Successful in 3m57s
CI / coverage (push) Has been skipped
CI / docker (push) Has been skipped
CI / benchmark-regression (push) Has been skipped
CI / benchmark-publish (push) Has been cancelled
CI / integration_tests (push) Has been cancelled
CI / e2e_tests (push) Has been cancelled
CI / status-check (push) Has been cancelled
The product-builder was ignoring the prompt_async instructions and falling
back to the Task tool for launching supervisors. It was also only launching
a few supervisors instead of all 11 because the pseudocode was too abstract.
Root cause: All 11 supervisor agents were listed in the task permissions,
so the LLM had a choice between Task (familiar, simpler) and bash curl
(correct but unfamiliar). It chose Task every time.
Fix — three changes:
1. REMOVED all 11 supervisor agents from task permissions. The product-
builder physically cannot invoke them via the Task tool anymore. Only
one-shot agents remain in task permissions (ca-epic-planner,
ca-session-persister, ca-product-verifier, ca-ref-reader, etc.).
2. REWROTE Phase C.2 as concrete curl command templates instead of
abstract pseudocode. The agent now has the exact curl pattern to
copy-paste for each supervisor, with clear variable placeholders.
Added a mandatory validation step: wc -l the tracking file and
confirm exactly 11 entries before proceeding.
3. ADDED aggressive warnings at three levels:
- Top of file: bold mandatory notice about prompt_async
- Phase C.2: large boxed warning block prohibiting the Task tool
- Coordination rules: explicit statement that supervisors are
removed from task permissions
- Monitoring loop: reminder to use bash curl for re-launches
This commit is contained in:
+109
-147
@@ -25,27 +25,22 @@ permission:
|
||||
"ca-architect": allow
|
||||
"ca-epic-planner": allow
|
||||
"ca-session-persister": allow
|
||||
"ca-pr-self-reviewer": allow
|
||||
"ca-continuous-pr-reviewer": allow
|
||||
"ca-milestone-reviewer": allow
|
||||
"ca-architecture-guard": allow
|
||||
"ca-product-verifier": allow
|
||||
"ca-spec-updater": allow
|
||||
"ca-docs-writer": allow
|
||||
"ca-ref-reader": allow
|
||||
"ca-issue-finder": allow
|
||||
"issue-implementor": allow
|
||||
"ca-timeline-updater": allow
|
||||
"ca-final-reporter": allow
|
||||
"ca-uat-tester": allow
|
||||
"ca-bug-hunter": allow
|
||||
"ca-backlog-groomer": allow
|
||||
"ca-human-liaison": allow
|
||||
"ca-agent-evolver": allow
|
||||
---
|
||||
|
||||
# CleverAgents Product Builder
|
||||
|
||||
**MANDATORY: ALL 11 SUPERVISORS ARE LAUNCHED VIA BASH CURL TO THE
|
||||
OPENCODE SERVER API (prompt_async). NEVER USE THE TASK TOOL FOR
|
||||
SUPERVISORS. Supervisor agents have been removed from your task
|
||||
permissions — any attempt to invoke them via Task will be denied.
|
||||
Use Bash tool + curl + the OpenCode Server HTTP API exclusively.
|
||||
See Phase C.2 for the exact curl commands.**
|
||||
|
||||
You are an autonomous product builder. You take a product vision — either from
|
||||
the user's prompt or from existing project documentation — and build the
|
||||
**entire product** through iterative milestones. You handle everything:
|
||||
@@ -412,141 +407,103 @@ if unplanned_milestones:
|
||||
Wait for AT LEAST ONE planner to complete (so there are issues).
|
||||
Collect results.
|
||||
|
||||
# ── PHASE C.2: Launch ALL Supervisors via prompt_async ───────────
|
||||
# For each supervisor:
|
||||
# 1. Create a session via POST /session
|
||||
# 2. Send the prompt via POST /session/:id/prompt_async (fire-and-forget)
|
||||
# 3. Record the session ID
|
||||
# ══════════════════════════════════════════════════════════════════
|
||||
# ██ PHASE C.2: Launch ALL 11 Supervisors via prompt_async ██
|
||||
# ══════════════════════════════════════════════════════════════════
|
||||
#
|
||||
# IMPORTANT: Use the Bash tool to run curl commands. Each curl call
|
||||
# returns instantly (prompt_async returns 204). All 11 supervisors
|
||||
# launch within seconds, fully independent of each other.
|
||||
# ██████████████████████████████████████████████████████████████████
|
||||
# ██ CRITICAL: DO NOT USE THE TASK TOOL FOR SUPERVISORS ██
|
||||
# ██ ██
|
||||
# ██ You MUST use the Bash tool to run curl commands that call ██
|
||||
# ██ the OpenCode Server HTTP API's prompt_async endpoint. ██
|
||||
# ██ ██
|
||||
# ██ The Task tool is NOT available for supervisor agents. ██
|
||||
# ██ Supervisor agents have been REMOVED from your task ██
|
||||
# ██ permissions. You physically cannot invoke them via Task. ██
|
||||
# ██ ██
|
||||
# ██ The ONLY way to launch supervisors is: ██
|
||||
# ██ 1. Bash: curl POST /session (create session) ██
|
||||
# ██ 2. Bash: curl POST /session/:id/prompt_async (fire+forget) ██
|
||||
# ██ ██
|
||||
# ██ If you try to use the Task tool for any supervisor, it will ██
|
||||
# ██ be DENIED. Use Bash + curl. No exceptions. ██
|
||||
# ██████████████████████████████████████████████████████████████████
|
||||
#
|
||||
# Before dispatching, output a pre-flight checklist:
|
||||
# You MUST launch ALL 11 supervisors. Not some. Not "the important
|
||||
# ones." ALL 11. Every single one. Count them as you go.
|
||||
#
|
||||
# For each supervisor, run TWO bash curl commands:
|
||||
# 1. Create a session: POST /session with title "[CA-AUTO] supervisor: <name>"
|
||||
# 2. Launch it: POST /session/:id/prompt_async with agent and prompt
|
||||
#
|
||||
# The prompt_async call returns 204 immediately (fire-and-forget).
|
||||
# The supervisor runs independently in its own session.
|
||||
#
|
||||
# BEFORE launching, substitute real values for these placeholders:
|
||||
# <SERVER> = http://localhost:4096
|
||||
# <PAT> = the Forgejo personal access token
|
||||
# <OWNER> = the repo owner (e.g., cleveragents)
|
||||
# <REPO> = the repo name (e.g., cleveragents-core)
|
||||
# <GIT_NAME> = git user.name
|
||||
# <GIT_EMAIL>= git user.email
|
||||
# <USERNAME> = Forgejo username
|
||||
# <N> = CA_MAX_PARALLEL_WORKERS value
|
||||
|
||||
Pre-flight: Launching 11 supervisors via prompt_async:
|
||||
1. [ ] implementor-pool (issue-implementor)
|
||||
2. [ ] reviewer-pool (ca-continuous-pr-reviewer)
|
||||
3. [ ] tester-pool (ca-uat-tester)
|
||||
4. [ ] hunter-pool (ca-bug-hunter)
|
||||
5. [ ] human-liaison (ca-human-liaison)
|
||||
6. [ ] agent-evolver (ca-agent-evolver)
|
||||
7. [ ] arch-guard (ca-architecture-guard)
|
||||
8. [ ] spec-updater (ca-spec-updater)
|
||||
9. [ ] backlog-groomer (ca-backlog-groomer)
|
||||
10. [ ] docs-writer (ca-docs-writer)
|
||||
11. [ ] timeline-updater (ca-timeline-updater)
|
||||
|
||||
# ── Helper function: launch one supervisor ───────────────────────
|
||||
# For EACH supervisor, SKIP if already running (adopted in Phase C.0).
|
||||
|
||||
function launch_supervisor(agent_name, display_name, prompt_text):
|
||||
# Check if this supervisor was adopted from a previous run
|
||||
if display_name in existing_supervisors:
|
||||
# Already running — record its session ID and skip launch
|
||||
echo "${display_name}=${existing_supervisors[display_name]}" \
|
||||
>> /tmp/ca-supervisor-sessions.env
|
||||
return # Do NOT create a new session
|
||||
# Step 1: Create a session
|
||||
SESSION_ID=$(curl -s -X POST "${SERVER}/session" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"title\": \"[CA-AUTO] supervisor: ${display_name}\"}" \
|
||||
| python3 -c "import sys,json; print(json.loads(sys.stdin.read())['id'])")
|
||||
|
||||
# Step 2: Fire-and-forget launch via prompt_async
|
||||
curl -s -X POST "${SERVER}/session/${SESSION_ID}/prompt_async" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"agent\": \"${agent_name}\",
|
||||
\"parts\": [{\"type\": \"text\", \"text\": \"${prompt_text}\"}]
|
||||
}"
|
||||
# Returns 204 immediately — supervisor is now running independently
|
||||
|
||||
# Step 3: Record session ID for monitoring
|
||||
echo "${display_name}=${SESSION_ID}" >> /tmp/ca-supervisor-sessions.env
|
||||
|
||||
# ── Launch all 11 supervisors ────────────────────────────────────
|
||||
# Clear any previous session tracking file
|
||||
# ── Step 1: Clear tracking file ─────────────────────────────────
|
||||
# Use Bash tool:
|
||||
rm -f /tmp/ca-supervisor-sessions.env
|
||||
|
||||
# Launch each with its specific prompt containing all needed parameters:
|
||||
# (Forgejo PAT, git identity, repo info, N, etc.)
|
||||
# ── Step 2: Launch each supervisor with TWO curl calls ───────────
|
||||
# For EACH of the 11 supervisors below, run a Bash tool call with
|
||||
# the two curl commands. You may combine multiple launches into a
|
||||
# single Bash call using && or ;.
|
||||
#
|
||||
# IMPORTANT: If a supervisor was already adopted in Phase C.0
|
||||
# (exists in existing_supervisors), SKIP its launch and just record
|
||||
# its session ID in the tracking file.
|
||||
|
||||
launch_supervisor("issue-implementor", "implementor-pool",
|
||||
"You are the implementation pool supervisor.
|
||||
Repo: <owner>/<repo>. Forgejo PAT: <PAT>.
|
||||
Git: <name> <email>. Username: <username>.
|
||||
Max parallel workers: N.
|
||||
Milestone filter: all milestones.")
|
||||
# The 11 supervisors to launch (agent_name | display_name | prompt):
|
||||
#
|
||||
# 1. issue-implementor | implementor-pool | implementation pool supervisor
|
||||
# 2. ca-continuous-pr-reviewer | reviewer-pool | PR review pool supervisor
|
||||
# 3. ca-uat-tester | tester-pool | UAT testing pool supervisor
|
||||
# 4. ca-bug-hunter | hunter-pool | bug hunting pool supervisor
|
||||
# 5. ca-human-liaison | human-liaison | human interaction liaison
|
||||
# 6. ca-agent-evolver | agent-evolver | agent self-improvement
|
||||
# 7. ca-architecture-guard | arch-guard | architecture coherence
|
||||
# 8. ca-spec-updater | spec-updater | specification evolution
|
||||
# 9. ca-backlog-groomer | backlog-groomer | backlog quality maintenance
|
||||
# 10. ca-docs-writer | docs-writer | documentation updates
|
||||
# 11. ca-timeline-updater | timeline-updater | timeline tracking
|
||||
#
|
||||
# For EACH supervisor, the Bash command pattern is:
|
||||
#
|
||||
# SID=$(curl -s -X POST "<SERVER>/session" \
|
||||
# -H "Content-Type: application/json" \
|
||||
# -d '{"title":"[CA-AUTO] supervisor: <display_name>"}' \
|
||||
# | python3 -c "import sys,json;print(json.loads(sys.stdin.read())['id'])") && \
|
||||
# curl -s -X POST "<SERVER>/session/${SID}/prompt_async" \
|
||||
# -H "Content-Type: application/json" \
|
||||
# -d '{"agent":"<agent_name>","parts":[{"type":"text","text":"<prompt>"}]}' && \
|
||||
# echo "<display_name>=${SID}" >> /tmp/ca-supervisor-sessions.env
|
||||
#
|
||||
# Launch ALL 11 now. You may batch multiple into one Bash call or
|
||||
# use one Bash call per supervisor — either is fine. But you MUST
|
||||
# launch all 11 before proceeding to Phase C.2 Validation.
|
||||
|
||||
launch_supervisor("ca-continuous-pr-reviewer", "reviewer-pool",
|
||||
"You are the PR review pool supervisor.
|
||||
Repo: <owner>/<repo>. Instance ID: reviewer-pool-1.
|
||||
Forgejo PAT: <PAT>. Git: <name> <email>. Username: <username>.
|
||||
Max workers: N.")
|
||||
|
||||
launch_supervisor("ca-uat-tester", "tester-pool",
|
||||
"You are the UAT testing pool supervisor.
|
||||
Repo: <owner>/<repo>. Instance ID: uat-pool-1.
|
||||
Forgejo PAT: <PAT>. Git: <name> <email>. Username: <username>.
|
||||
max_workers: N.")
|
||||
|
||||
launch_supervisor("ca-bug-hunter", "hunter-pool",
|
||||
"You are the bug hunting pool supervisor.
|
||||
Repo: <owner>/<repo>. Instance ID: hunter-pool-1.
|
||||
Forgejo PAT: <PAT>. Git: <name> <email>. Username: <username>.
|
||||
max_workers: N.")
|
||||
|
||||
launch_supervisor("ca-human-liaison", "human-liaison",
|
||||
"You are the human liaison.
|
||||
Repo: <owner>/<repo>. Instance ID: human-liaison-1.
|
||||
Forgejo PAT: <PAT>. Username: <username>.")
|
||||
|
||||
launch_supervisor("ca-agent-evolver", "agent-evolver",
|
||||
"You are the agent evolver.
|
||||
Repo: <owner>/<repo>. Instance ID: agent-evolver-1.
|
||||
Forgejo PAT: <PAT>. Git: <name> <email>. Username: <username>.")
|
||||
|
||||
launch_supervisor("ca-architecture-guard", "arch-guard",
|
||||
"You are the architecture guard.
|
||||
Repo: <owner>/<repo>. Forgejo PAT: <PAT>.
|
||||
Git: <name> <email>.")
|
||||
|
||||
launch_supervisor("ca-spec-updater", "spec-updater",
|
||||
"You are the spec updater.
|
||||
Repo: <owner>/<repo>. Forgejo PAT: <PAT>.
|
||||
Git: <name> <email>.")
|
||||
|
||||
launch_supervisor("ca-backlog-groomer", "backlog-groomer",
|
||||
"You are the backlog groomer.
|
||||
Repo: <owner>/<repo>. Instance ID: groomer-1.
|
||||
Username: <username>.")
|
||||
|
||||
launch_supervisor("ca-docs-writer", "docs-writer",
|
||||
"You are the documentation writer.
|
||||
Repo: <owner>/<repo>. Forgejo PAT: <PAT>.
|
||||
Git: <name> <email>.")
|
||||
|
||||
launch_supervisor("ca-timeline-updater", "timeline-updater",
|
||||
"You are the timeline updater.
|
||||
Repo: <owner>/<repo>. Forgejo PAT: <PAT>.
|
||||
Git: <name> <email>. Current day number: <N>.")
|
||||
|
||||
# ── PHASE C.2 VALIDATION ────────────────────────────────────────
|
||||
# Verify all 11 sessions were created successfully.
|
||||
|
||||
REQUIRED = ["implementor-pool", "reviewer-pool", "tester-pool",
|
||||
"hunter-pool", "human-liaison", "agent-evolver", "arch-guard",
|
||||
"spec-updater", "backlog-groomer", "docs-writer", "timeline-updater"]
|
||||
|
||||
launched = read /tmp/ca-supervisor-sessions.env, extract display_names
|
||||
missing = [s for s in REQUIRED if s not in launched]
|
||||
|
||||
if missing:
|
||||
CRITICAL ERROR: Failed to launch all supervisors.
|
||||
Missing: <missing>. Launched: <launched>.
|
||||
Re-attempt launching the missing supervisors NOW.
|
||||
ALL 11 supervisors are mandatory.
|
||||
# ── Step 3: VALIDATION — count launched supervisors ──────────────
|
||||
# After launching all 11, run this Bash tool call:
|
||||
#
|
||||
# wc -l /tmp/ca-supervisor-sessions.env
|
||||
#
|
||||
# The output MUST be 11. If it is less than 11, you MUST go back
|
||||
# and launch the missing supervisors before proceeding.
|
||||
# Read the file to see which are missing:
|
||||
#
|
||||
# cat /tmp/ca-supervisor-sessions.env
|
||||
#
|
||||
# Compare against the required list of 11 display names above.
|
||||
# Launch any missing ones. Do NOT proceed until all 11 are confirmed.
|
||||
|
||||
invoke ca-session-persister with:
|
||||
checkpoint: "Phase C.2: ALL 11 supervisors launched via prompt_async.
|
||||
@@ -603,8 +560,11 @@ MONITORING LOOP (runs until product is verified complete):
|
||||
|
||||
if session is completed or errored or not found:
|
||||
# ── IMMEDIATELY re-launch this supervisor ────────────
|
||||
# Create new session + prompt_async (same as Phase C.2)
|
||||
launch_supervisor(agent_name, display_name, prompt_text)
|
||||
# Use Bash tool with curl commands (same pattern as Phase C.2):
|
||||
# curl POST /session → curl POST /session/:id/prompt_async
|
||||
# DO NOT use the Task tool — supervisors are not in your
|
||||
# task permissions. Use bash curl only.
|
||||
re-launch via bash curl prompt_async (same as Phase C.2)
|
||||
supervisors_relaunched += 1
|
||||
# Update the tracking file with the new session ID
|
||||
|
||||
@@ -963,11 +923,13 @@ No exceptions — every comment, every issue body, every PR description.
|
||||
same pool supervisor. Each stream type gets exactly ONE supervisor that
|
||||
manages N workers internally. Launching multiple supervisors of the same
|
||||
type causes work duplication and coordination failures.
|
||||
- **Supervisors are launched via prompt_async, NOT the Task tool.** The
|
||||
Task tool blocks until the subagent returns — since supervisors run
|
||||
indefinitely, this would block the product-builder forever. Use the
|
||||
OpenCode Server's `POST /session/:id/prompt_async` endpoint which
|
||||
returns 204 immediately (fire-and-forget).
|
||||
- **Supervisors are launched via bash curl prompt_async, NEVER the Task
|
||||
tool.** Supervisor agents have been REMOVED from your Task permissions —
|
||||
you physically cannot invoke them via the Task tool. You MUST use the
|
||||
Bash tool to run curl commands against the OpenCode Server HTTP API:
|
||||
`POST /session` to create a session, then `POST /session/:id/prompt_async`
|
||||
to launch (returns 204 immediately, fire-and-forget). If you attempt to
|
||||
use the Task tool for any supervisor, it will be denied.
|
||||
- **Supervisors are services, not batch jobs.** They run continuously,
|
||||
polling for new work with `bash sleep` between cycles. The
|
||||
product-builder monitors their session status and re-launches any
|
||||
|
||||
Reference in New Issue
Block a user