Phase 4 – Editing from the command line, and a skill (2026-09-30)#

seamm.edit (seamm 9cde481): set_parameters, insert (after, before, or into a loop’s body or a step’s sub-steps), remove, move, tree and validate.

  • Steps are addressed by position (3.2), by name (ORCA/Energy) or both. A name matches the extension name or description name first, and only then the default title, since finding titles makes a node of every kind of step (slow, and some plug-ins log their whole bibliography at DEBUG). A name also finds a uniquely named step nested deeper – but only when no step at the level has it: an ambiguous name is an error (a first version removed a nested Table when the top level had three).

  • Every edit rebuilds the step from a fresh node through the builder’s checks, then re-reads the flowchart, so the digest, tables and layout are current; unconnected steps are kept.

  • validate reports the flowchart-level checks, loops with empty bodies, code steps with no sub-steps, and stored values of strict choices that today’s plug-ins no longer accept.

seamm-flowchart gains tree, set, insert, remove, move and validate. name=value values are read as YAML. Edits write back unless -o. The command now keeps plug-ins’ logging quiet unless --log-level asks for it.

Checked with the real plug-ins in ~/SEAMM_DEV: a built flowchart edited by name and position (a Loop parameter, MOPAC/Energy found inside the loop, an Optimization inserted before it, a Table inserted and moved), a rejected choice with suggestions, the ambiguous-name error, and validate/show afterwards. Each command takes about 10 s, nearly all of it loading the plug-ins. 18 new unit tests; 194 in all.

The build-seamm-flowchart skill (~/Work/SEAMM/.claude/skills/, the workspace’s project skills): when to use the tools, the spec format, addresses, the Python API, and the pitfalls found in this campaign (undescribed list/dict parameters, = expressions with bare names, placeholder choices, loops hiding failures, stale values, get_nodes() stopping at loops). Its example spec builds and validates.

Not done: pointing the editor’s clean_layout/place_unpositioned at seamm.layout (D8’s last part); an MCP server (phase 6, optional).