.flw doctor
Statically validate a .flw file.
Checks:
- JSON parses; required keys present (
version,agents,connections). - Every node's
typeis a known agent type (mirrors the agent-folder list). - Every connection's
fromandtoreference real node ids. - No
target_agentsconnection points at Stopper / Ender / Cleaner — those useoutput_agentsper the agent contract. - Parametrizer nodes have at most one inbound and one outbound
target_agentsedge (single-lane queue invariant). - Terminal agents (Emailer / Notifier / RecMailer / Monitor-*)
have NO outbound
target_agents. - Logic gates: OR / AND have exactly 2 inbound source connections;
Barrier has N>=2; Asker / Forker have exactly 2 outbound branches
(
target_agents_a/target_agents_b); Counter has 2 (target_agents_l/target_agents_g).
Return { ok, problems: [{node_id, kind, message}, ...], summary }.
Current installed-agent contract — 2026-09-15
Use agent/agents/flowcreator/flow_catalog.json for canonical names, current config schemas, output/input slots, lifecycle flags and structured fields for all 89 installed types. GUI-Manager is design only. After changing a template/contract/reference, run python scripts/update_flow_catalog.py and its --check mode in the repository. Deployment refreshes runtime snapshots.
FlowCreator selects capabilities before detailed design, validates the generated plan, and uses bounded repair. Declare Ender input connections explicitly; Ender target_agents is a kill list. Counter uses L/G slots; source dependencies do not choose a conditional output branch. Generated Parametrizers require valid _parametrizer_mappings, one source and one target. Do not maintain a separate hardcoded Parametrizer producer list.
For desktop flows, use explicit physical/screenshot geometry and verified target windows. input_sent is input delivery only; errors may be partial and must not be blindly replayed. Read docs/desktop-input-and-flow-contracts.md and docs/agent-coverage.md for the full contract and verification scope.