Flow from objective
Produce a canvas-loadable .flw for the user's stated objective.
Superseded by the
flow-makingskill. Preferflow-making: it drives the FlowCreator engine (full 89-agent catalog + connection contracts) and emits a validated, schemaVersion-2.flw. This skill is kept as an alias/entry point — do NOT hand-author the.flwJSON, because you do not carry the agent catalog in context and a hand-written flow hallucinates agent types and will not load.
Procedure (delegate)
- Invoke the
flow-makingskill with the same inputs:invoke_skill('flow-making', { "objective": "${input.objective}", "out_path": "${input.out_path}" }). - Return its result verbatim:
{ flw_path, agent_count, connection_count }.
If you must run it directly
Use the shipped driver — it copies the FlowCreator template to an isolated dir,
runs it, and writes the .flw:
python Tlamatini/agent/skills_pkg/flow_making/scripts/make_flow.py \
--objective "${input.objective}" --out "${input.out_path}"
The last stdout line is agent_count=<N> connection_count=<M> flw_path=<path>.
Correct .flw shape (schemaVersion 2)
If you ever emit .flw JSON by hand, it MUST match the loader contract
(acp-file-io.js::loadDiagram / flow_spec.py) — NOT a {version, agents, connections:[{from,to,kind}]} shape (that is obsolete and will not load):
{
"schemaVersion": 2,
"nodes": [
{"id": "starter-1", "text": "Starter", "left": "50px", "top": "50px",
"agentPurpose": "", "configData": {"target_agents": ["monitor_log_1"]}}
],
"connections": [
{"sourceIndex": 0, "targetIndex": 1, "inputSlot": 0, "outputSlot": 0}
],
"artifacts": {}
}
See agent/skills_pkg/flow_making/references/flw_schema.md for the full contract.
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.
Model choices in generated flows
Preserve quoted "@config" and missing registered model fields so generated agents
follow Config → Models. Keep a literal model/engine/voice only when an explicit
override is intended; never fill inheritance with a guessed tag. The registry in
agent/agents/model_settings.py maps all 21 model-backed agents to 38 global
settings. Wrapped-chat globals are seeded before explicit tool arguments, so do
not manufacture model arguments when translating a request into a flow. Optional
empty Whisperer cloud model and LaTeXer repair model values have distinct meanings.
Video analysis_type remains a per-agent task choice; its local audio model is
separate from Whisperer's engine. See docs/model_configuration.md and the current
generated flow catalog for exact field paths and defaults.