In one real task the AI built an inpaint branch with 9 add_node and 16
connect_nodes calls. add_nodes takes the whole group in ComfyUI's API form, the
format models know best:
- links inside the group, and to canvas nodes as "#12", with outputs by slot
or name;
- a node's wire_to feeds canvas nodes the way add_node does.
All of it is checked before anything changes. The page lays the group out as
one block in a free spot (canvas_build.placedBlock) and applies it in one
transaction: one Ctrl+Z step, and a failure takes every new node out again
(applyWires now takes several nodes). The answer maps the AI's keys to node ids
and lists what is spliced and what is still unwired.
A splice now uses only an input that nothing else in the plan feeds. A node
whose latent comes from the group, or from wire_from, replaces the sampler's
empty latent instead (replace:true) rather than being fed twice. It is in the
daily tool set.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A daily run took six or seven calls (find the workflow, open it, read
the canvas, set the prompt, the seed...), each a decision a small model
could get wrong. run_workflow now takes workflow (a saved one, opened in
the task's tab the first time and reused after: the page marks the tab
with the workflow's file) and blanks: prompt, negative, seed, width,
height and image (image_node when there are several LoadImage nodes),
planned by mcp_fill.js and checked before anything changes; the rest
stays as saved. A run with blanks asks as the stricter of the GPU's and
the canvas's gate. get_situation sends an AI whose run failed on a
missing model to check_workflow_models instead of other choices.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The AI records what was settled with log_decision (a card on the timeline:
what, why, what was left out, who decided, the steps it is about); the
user's own choices in Anomalous count as decisions too (panel answers,
gates, materials, the canvas mode, stops). A Decisions view in the side
column lists them all, links each to its step and notes work done since
the AI's last one; begin_task repeats them to an AI picking the task up.
A step's words move to ui_ai_step_body.js.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Each run keeps its shape read from the prompt ComfyUI queued (ai_run_map.py): boxes by role
with their settings, typed links, plumbing wired through, and what changed since the task's
run before. The run step shows a one-line summary, the changes as chips and the boxes (top
down, fitted to the column, each locating its node); show_run_map puts it on the stage.
- By default the AI works in a tab of the task's own (ai_task_canvas.py, mcp_task_tab.js): the
open workflow is copied before its first change, the tab is brought back (a click on
ComfyUI's tab) before later changes, reads and runs, and the user's tab stays untouched.
Per-task switch in the header, default in the Gates window; the AI is told once.
- Output pictures can be handed to the task an AI is on (gallery card menu, the inspector's
✦), with the user's words: the AI gets them attached with what made them (ai_pictures.py).
search_images(with_pictures) attaches the first six.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>