← disinto.ai

Workflows

how nine agents collaborate — four contract diagrams
DEV AGENT BRIDGE (pr-lifecycle.sh) REVIEW AGENT entrypoint.sh while true; sleep $POLL_INTERVAL dev-poll.sh find ready backlog issue dev-agent.sh claim → implement → push pr_poll_ci() poll Woodpecker pipeline pr_walk_to_merge() CI ↔ review state machine pr_merge() merge + mirror_push review-poll.sh find PRs with green CI review-pr.sh checkout → analyze → verdict issue ready push CI pass awaits CI green verdict APPROVE CI fail → fix (max 3) REQUEST_CHANGES → fix (max 5)
Issue Underspecified
Trigger: dev-agent can't implement the issue
dev
Writes refusal JSON to IMPL_SUMMARY_FILE
{"status":"too_large","reason":"..."}
dev
Posts refusal comment, labels "underspecified"
Removes backlog + in-progress labels
dev
Releases claim, exits
No PR created — issue returns to pool
human
Splits issue or adds detail, re-labels backlog
CI Breaks
Trigger: pr_poll_ci() returns failure
bridge
Classify failure: infra or code
classify_pipeline_failure() checks heuristics
bridge
Infra? Retrigger once via empty commit
ci_retry_count < 1
bridge
Code? Invoke dev-agent with CI logs
agent_run --resume with error log
dev
Fix, test, rebase, push
ci_fix_count++ (max 3)
bridge
Budget exhausted? Block issue
_PR_WALK_EXIT_REASON="ci_exhausted"
Review: REQUEST_CHANGES
Trigger: review-agent posts REQUEST_CHANGES verdict
review
Posts review comment + formal review
<!-- reviewed: SHA --> marker
review
Keeps session & worktree for re-review
SID_FILE preserved for continuity
bridge
pr_poll_review() detects verdict
Invokes dev-agent --resume with feedback text
dev
Addresses feedback, pushes
review_round++ (max 5 rounds)
review
Re-review at new SHA
Incremental diff (prev_sha..new_sha)
dev-agent
review-agent
pr-lifecycle (bridge)
failure / feedback loop
PREDICTOR (sonnet, 24h) PLANNER (opus, 12h) preflight load prediction history scan weaknesses prereq tree, evidence, graph EXPLORE file prediction/unreviewed EXPLOIT prediction + vault dispatch read dismissed has anything changed? preflight load tree, graph, memory fetch unreviewed prediction/unreviewed issues triage: ACTION → backlog issue + close DISMISS comment + close update prereq tree mark resolved, add new low conf high conf prediction/unreviewed dismissed → re-file with stronger evidence? → Diagram 1 (Dev ↔ Review) budget: 5 actions/run exploit = 2 actions

The Contract: Label Taxonomy as Protocol

predictor files  →  prediction/unreviewed    (open issue)
planner actions  →  prediction/actioned      (closed, real issue created)
planner rejects  →  prediction/dismissed     (closed, reasoning in comment)

Memory: the forge issue tracker IS the predictor's memory.
        No separate memory file — history of actioned/dismissed
        informs focus next run.

Budget: predictor  = 5 actions/run (exploit counts as 2)
        planner    = (predictions_triaged + 1) new issues

Models: predictor  = sonnet  (fast, adversarial scanning)
        planner    = opus    (deep reasoning, strategic sequencing)
predictor
planner
actioned → dev pipeline
planner prerequisite tree → file at constraints gate backlog template-filled vision design forks gardener groom + validate architect sprint proposal PR human ACCEPT / REJECT → Diagram 1 Dev ↔ Review simple complex PR ACCEPT sub-issues as backlog every 12h · opus every 6h every 6h · sonnet

The Template-or-Vision Gate

Planner reads .codeberg/ISSUE_TEMPLATE/*.yaml and attempts to fill:

  IF  affected_files ≤ 3
  AND acceptance_criteria ≤ 5
  AND single clear approach (no design forks)
  THEN → file as "backlog" → gardener validates → dev picks up

  ELSE → label "vision" with problem statement
       → architect pitches sprint PR on ops repo
       → human ACCEPT/REJECT via PR comments
       → architect files sub-issues as "backlog"

The planner NEVER files issues past the bottleneck.
Only the top 5 constraints get filed.
Issues blocked on vault items are NOT filed.
planner (opus, 12h)
architect (6h)
gardener (sonnet, 6h)
dev pipeline
preflight.sh collect metrics (bash) health assess classify P0–P4 auto-fix remediate if possible vault item escalate to human journal write to ops can fix → can't fix → Monitors: dev-agent review-agent gardener planner predictor architect CI pipelines Vault approval flow: agent files vault item → vault PR on ops repo → review-agent checks → human approves → runner executes with injected secrets AD-006: agents NEVER hold external-action tokens. env.sh runs: unset GITHUB_TOKEN CLAWHUB_TOKEN Runs in: disinto-edge container (NOT disinto-agents) · Cadence: every 20 min · Model: sonnet · Timeout: 20 min
Alert Priority Levels
P0
Memory Crisis
RAM < 500MB or swap > 3GB
kill sessionsprune images
P1
Disk Pressure
Disk > 80%
rotate logsprune worktrees
P2
Factory Stopped
CI stuck >20min, dead locks, broken rebase
rm locksabort rebasecancel CI
P3
Factory Degraded
PRs stale >20min, circular deps
comment PRsalert planner
P4
Housekeeping
Old worktrees, expired sessions
clean worktreesprune branches
Full Vault Approval Flow
any agent
Detects human-blocked work
Needs external resource, decision, or secret
any agent
Files vault item on ops repo
$OPS_REPO_ROOT/vault/pending/<project>-<slug>.md
vault
Creates PR via vault_request()
Branch vault/<action-id>, file vault/actions/<id>.toml
review
Reviews vault PR
Checks: required sections, specific human action, dedup
human
Approves vault PR
Merges PR on ops repo
runner
Executes with injected secrets
docker/runner container: mounts secrets, runs formula, time-boxed
Who Files Vault Items?
planner
Human-blocked prerequisites
Needs external resource or decision
supervisor
Blocked issues it can't auto-fix
P2/P3 requiring human intervention
predictor
Exploit dispatches
Formula execution requiring secrets
gardener
Rarely — human grooming decisions
supervisor (sonnet, 20min)
vault / runner
review-agent
filing agents