Adds two new agent types to the autonomous system, bringing the total
from 11 to 13 supervisors launched by the product-builder via prompt_async.
New agents:
1. ca-test-infra-improver (12th supervisor — pool with N workers):
Dual-mode agent following the ca-bug-hunter pattern. In pool mode,
dispatches N parallel workers via prompt_async to analyze 8 aspects
of the testing infrastructure: CI execution time, coverage gaps, test
architecture (BDD quality), flaky tests, CI pipeline optimization,
test data quality, missing test levels (Behave/Robot/ASV per
CONTRIBUTING.md), and dependency security. Workers file actionable
Type/Testing or Type/Task issues. Hard constraint: never disables
or weakens existing checks — only proposes additions and optimizations.
Uses Gemini 2.5 Pro for large context. Follows all established patterns
(clone isolation, bash sleep, prompt_async dispatch, session resume,
bot signature).
2. ca-project-owner (13th supervisor — singleton, no pool):
Acts as autonomous project owner. Continuously triages State/Unverified
issues following CONTRIBUTING.md's 6-step triage process. Assigns
MoSCoW labels (Must Have / Should Have / Could Have) based on the
specification and milestone goals. Makes strategic priority decisions.
Tags specific developers with questions in Forgejo comments (discovers
expertise from git history and Forgejo assignments). Periodically
re-evaluates MoSCoW labels as the project evolves. Follows up on
unanswered questions after 48 hours. Single instance, not a pool —
one project owner is sufficient. Uses Opus for nuanced strategic
judgment. Launched via prompt_async like all other supervisors.
Modified files:
- product-builder.md: Updated from 11 to 13 supervisors in all locations
(architecture table, Phase C.2 launch list with entries #12 and #13,
validation count, checkpoint text, self-coordinate table). Added
test-infra-pool to pool supervisors list and project-owner to singletons.
- ca-human-liaison.md: Clarified MoSCoW responsibility split — the liaison
only adjusts MoSCoW labels when relaying explicit human feedback. The
ca-project-owner handles autonomous MoSCoW assignment.
Agents were failing when trying to run complex bash commands (curl with
pipes to python3, multi-command pipelines, etc.) because their bash
permissions were set to '"*": deny' with only specific simple patterns
allowed (e.g., "curl *": allow). Shell pipelines like:
curl -s http://localhost:4096/session | python3 -c "import json..."
don't match any single allow pattern and get denied.
Changed 17 agent files from restrictive bash permissions to '"*": allow'.
This includes all agents that need to:
- Run curl pipelines with python3 for prompt_async session management
- Create Forgejo dependency links via REST API curl calls
- Execute complex git operations with pipes
- Run bash sleep for polling loops
Only 3 truly read-only analysis agents remain restricted:
ca-difficulty-evaluator, ca-implementation-reviewer, ca-issue-analyzer.
These don't need bash access at all.
Both the spec-updater and agent-evolver previously skipped straight to
creating PRs with 'needs feedback' for proposed changes. The user needs
a two-step human-approval workflow:
Step 1: Agent creates a PROPOSAL ISSUE with 'needs feedback' label
describing what it wants to change and why. No branch, no code changes.
Step 2: Human reviews the issue and approves it (by removing 'needs
feedback', adding 'State/Verified', or commenting with approval).
Step 3: Agent detects approval, normalizes labels, creates branch + PR
(also with 'needs feedback') implementing the approved change.
Step 4: Human reviews the PR and merges it.
Changes across 3 agent definitions:
- ca-agent-evolver: Step 4 split into proposal issue creation (Step 4)
and approved-proposal implementation (Step 5). Added pending_proposals
and pending_prs state tracking. Approval detected via 3 signals:
label removal, State/Verified addition, or human approval comment.
- ca-spec-updater: Removed the minor/major classification and the
"commit directly to master" path. ALL spec changes now go through
proposal issues first (Step 6a creates issue, Step 7 monitors for
approval). Added pending_spec_proposals and rejected_proposals state.
Approval check runs every cycle before checking for new merged PRs.
- ca-human-liaison: Added Step 4 guard — issues with 'needs feedback'
label are NOT auto-verified. The liaison acknowledges them with a
comment but does not change state labels. Only issues WITHOUT 'needs
feedback' proceed to the normal auto-verify flow (now Step 5).
Four changes in one commit across 27 agent files:
1. POOL SUPERVISOR PROMPT_ASYNC: All 4 pool supervisors (issue-implementor,
ca-continuous-pr-reviewer, ca-uat-tester, ca-bug-hunter) now dispatch
their internal workers via the OpenCode Server's prompt_async endpoint
instead of the Task tool. This eliminates the wait_for_all bottleneck
at the supervisor level — workers run independently, and a 10-second
polling loop detects completions and immediately refills vacant slots.
Added curl/sleep bash permissions where needed. Each supervisor keeps
N workers running at all times with zero idle slots.
2. SESSION RESUME INSTEAD OF CLEANUP: The product-builder and all 4 pool
supervisors now RESUME existing sessions from a previous interrupted
run instead of aborting them. Phase C.0 queries the server for sessions
titled "[CA-AUTO] supervisor:*" and adopts any that are still active
into the monitoring loop. Pool supervisors similarly adopt existing
"[CA-AUTO] worker-*" sessions. This enables "continue where you left
off" — restarting the product-builder reconnects to running supervisors
and workers rather than duplicating them.
3. DEDICATED CLEANUP AGENT: New ca-session-cleanup.md primary agent for
explicit fresh-start cleanup. Run this BEFORE the product-builder when
you want to abort all previous sessions and start completely fresh. It
finds all "[CA-AUTO]" sessions, aborts them, and deletes them. This is
the ONLY way to kill old sessions — the product-builder never does it
automatically.
4. BOT SIGNATURES: All 26 agents that post content to Forgejo now include
a mandatory "Bot Signature" section requiring every comment, issue body,
PR description, and review to end with:
---
**Automated by CleverAgents Bot**
Supervisor: <category> | Agent: <agent-name>
24 agents have hardcoded categories. 2 shared agents (ca-new-issue-creator,
ca-epic-planner) use a parameter-based category from their caller's prompt.
Two fundamental architectural changes that solve the "supervisor exits and
never gets relaunched" problem:
1. PROMPT_ASYNC LAUNCH: The product-builder no longer uses the Task tool to
launch supervisors. The Task tool blocks until ALL parallel tasks return,
meaning if one supervisor exits, the product-builder can't relaunch it
until all 10 others also exit. Instead, supervisors are now launched via
the OpenCode Server HTTP API's POST /session/:id/prompt_async endpoint,
which returns 204 immediately (true fire-and-forget). The product-builder
then enters a bash-driven monitoring loop that checks session status
every 60 seconds via curl and relaunches any dead supervisor instantly
— independently of whether the other 10 are still running.
Requires: opencode started with --port 4096 (fixed known port).
Added curl and sleep to product-builder's bash allow list.
2. BASH SLEEP FOR GENUINE WAITING: All 11 supervisors now use the Bash
tool with "sleep N" (and explicit timeout > sleep duration) for real
blocking waits between polling cycles. Previously, pseudocode "wait N
minutes" was interpreted by the LLM as "I'm done, return to caller" —
causing supervisors to exit after their first idle cycle. The bash sleep
call genuinely blocks the agent for the specified duration, then the
agent resumes its loop. Every supervisor has a prominent instruction
block explaining this mechanism and warning against returning to caller.
All idle break/exit conditions removed across all 11 supervisors.
Supervisors now loop forever: poll Forgejo → do work → bash sleep → repeat.
Changes across 12 agent definitions:
- product-builder: Phase C.2 rewritten to use curl + prompt_async.
Phase C.3 rewritten as bash sleep + curl monitoring loop (checks every
60s, relaunches dead supervisors, checks convergence every 10 min).
Phase C.4 simplified to cleanup only.
- All 11 supervisors: Added "CRITICAL: Bash Sleep" instruction block.
Replaced all pseudocode "wait N" with bash("sleep N", timeout=N*1.5).
Removed all idle break/exit conditions — agents now sleep and re-poll
instead of exiting.
Overhauls the agent orchestration architecture to solve three systemic issues:
1. PARALLELISM: Replaces the N-instances-per-stream-type model with a
pool-supervisor pattern. Product-builder now launches ONE supervisor per
stream type, each managing N workers internally. Eliminates batch-and-wait
tail latency where 15 finished agents waited for 1 slow one. UAT tester
and bug hunter gain dual-mode operation (pool supervisor + worker) with
self-dispatch for parallel batches of narrow-scope workers.
2. PR MERGE LIFECYCLE: Fixes PRs being reviewed but never merged. PR self-
reviewer now uses force_merge (no approval count required), checks CI
status before merge, uses merge_when_checks_succeed for pending CI, and
retries 3x on failure. Continuous PR reviewer converted to pool supervisor
dispatching N parallel reviews, with approved-but-unmerged tracking and
5-attempt merge retry budget. Stale threshold increased from 5 to 25 min.
3. HUMAN INTERACTION: New ca-human-liaison agent continuously monitors
Forgejo for developer activity (comments, issues, reviews), responds
with context-aware replies, triages new issues with full authority,
decomposes epics into child issues, fills epic/legendary gaps, and
coordinates spec changes through human-approved PR workflow.
Additionally adds ca-agent-evolver for self-improvement: analyzes agent
performance patterns and proposes targeted modifications to agent
definitions via PRs with 'needs feedback' label (human must approve).
Backlog groomer gains epic/legendary completeness analysis (passes 9-10)
to proactively create missing child issues for parent tickets with gaps.
All agent permission cross-references verified consistent.