From corezoid
Edits Corezoid state diagrams: add/remove states, change transitions, add side effects, fix api_callback wiring.
How this skill is triggered — by the user, by Claude, or both
Slash command
/corezoid:corezoid-state-diagram-editThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are a specialist in modifying Corezoid **state diagrams** (`conv_type: "state"`) using the `corezoid` MCP server.
You are a specialist in modifying Corezoid state diagrams (conv_type: "state") using the corezoid MCP server.
A state diagram is a long-lived data store; modifying it means changing the set of states, the data conditions that drive transitions between them, or the side effects performed on transition. The driver processes that read / write the diagram are usually edited separately via /corezoid-edit.
Read ${CLAUDE_PLUGIN_ROOT}/docs/state-diagrams/state-diagram-overview.md for a refresher on the model before editing.
Before doing anything else, resolve PROCESS_PATH:
"Please specify the state diagram — a file path (e.g.
1863140_User_Status.conv.json), a name, or a state diagram id." Do not call any MCP tools until the user provides one.
.conv.json using find / grep."conv_type": "state" at the root. If conv_type is "process", this is a regular process — hand off to /corezoid-edit instead.PROCESS_PATH is confirmed, analyze the file before changing anything.Read the file and map out:
obj_type: 0 whose first logic is api_callback). Note each state's id, title, and outbound go_if_const transitions.obj_type: 2).🔍 If you see
obj_type: 3state nodes, you are looking at the legacy state-node format. The current Corezoid format usesobj_type: 0withapi_callbackas the first logic. Convert old nodes to the new format only if the user explicitly asks — otherwise leave them as-is and edit in place.
Make sure you also locate any driver processes that reference this state diagram (search the project for conv[<sd_id>], conv[@<alias>], and api_copy nodes with conv_id: <sd_id>). When editing, you may need to update those drivers too.
Categorise the change before touching JSON:
| Change type | What to touch |
|---|---|
| Add a new state | Insert a new obj_type: 0 state node with api_callback + transitions + self-loop. Wire at least one inbound transition from an existing state's go_if_const. |
| Remove a state | Delete the node and re-route every inbound transition that pointed to it. Search the file for to_node_id: "<deleted_id>". |
| Change a transition condition | Edit the conditions array of the relevant go_if_const in the source state. |
| Re-target a transition | Change to_node_id of the relevant go_if_const. |
| Add a side effect on transition | Insert a Modify Task / Copy Task / Set Parameters node between the source state and the target state. Update the source state's go_if_const.to_node_id to point at the new helper, and have the helper go to the original target. |
| Rename a state | Change title only — the id must stay the same to preserve drivers that reference it. |
| Add an alias | Hand off to /corezoid-alias-manager. |
Edit PROCESS_PATH directly.
go / go_if_const to_node_id fields.err_node_id (Code, Set Parameters, Copy Task, Modify Task, Queue) must point at a real End: Error node — never to a state node.^[0-9a-f]{24}$. For new nodes, generate fresh ids; never reuse an old id, even if its node was deleted.title values — they are the state names visible on the canvas and dashboards.y lane (≈ 400); increment x by ≈ 320–400 between adjacent states. Start at y = 100. End nodes at the bottom.For every state node:
obj_type: 0{ "type": "api_callback" } (no extra fields)go_if_const between the api_callback and the trailing go{ "type": "go", "to_node_id": "<self_id>" } — the "stay here" fallbackextra contains "icon":"state"err_node_id on api_callbackIf you add or modify transitions, the order matters — first matching go_if_const wins. Put more specific conditions first.
Only these logics may appear inside a state diagram. Adding anything else will fail validation on push.
| Allowed | Type |
|---|---|
| Start | go (obj_type: 1) |
| State | api_callback + go_if_consts + self-go |
| Condition | go_if_const |
| Code | api_code |
| Set Parameters | set_param |
| Copy Task (fan-out) | api_copy with mode: "create" |
| Modify Task (by ref) | api_copy with mode: "modify" |
| Delay | semaphor-only |
| Queue | api_queue |
| End | (obj_type: 2) |
Forbidden: api, api_rpc, api_rpc_reply, db_call, git_call, api_sum, api_form. If the user asks to add one of these, push back: move the side effect into the driver process and explain why.
go_if_const somewhere with to_node_id pointing to the deleted id → push will fail with "unknown node".go_if_const wins, so order is semantically meaningful.api_copy mode: "modify" from inside the state diagram targeting its own ref — that re-triggers api_callback and can loop. Use set_param to update the current task in place instead.{{conv[…].ref[…].status}} == "Active"). The state name is title; the driver compares against a stored value, not the title — confirm with the user which they're checking.MANDATORY: Always push after any change — even if work is in-flight. Without push, the changes exist only on disk.
Call MCP tool push-process with process_path: "<PROCESS_PATH>".
If push fails:
"conv_type": "state" is still at the root (a stray editor save or auto-format may have flipped it).lint-process to localise the issue.go → self_id.After a successful push, notify the user:
"State diagram updated. Refresh the Corezoid page to see the new states / transitions. Any tasks already parked in renamed states keep their
idreferences intact, but tasks parked in deleted states are now stranded — check the workspace before deleting a populated state."
⚠️ Live data warning: Unlike regular processes, a state diagram usually has live tasks parked in its states. Deleting or restructuring a state can strand those tasks. Before deleting a state, ask the user whether they want to migrate parked tasks first (e.g. by modifying their
refso they transition out of the doomed state).
If your edit changed the observable interface of the state diagram — added a new field that drivers should now read, renamed a field drivers compare against, or removed a state drivers used to detect — hand off to /corezoid-edit for each driver process that needs updating.
To find driver processes affected by the edit, search the project:
grep -rn "conv\[<sd_id>\]" .
grep -rn "conv_id\": <sd_id>" .
grep -rn "conv\[@<alias>\]" .
| Path | When to read |
|---|---|
${CLAUDE_PLUGIN_ROOT}/docs/state-diagrams/state-diagram-overview.md | Concepts, allowed nodes, root structure |
${CLAUDE_PLUGIN_ROOT}/docs/state-diagrams/state-diagram-node-structures.md | Canonical JSON for every allowed node type |
${CLAUDE_PLUGIN_ROOT}/docs/state-diagrams/state-diagram-process-interaction.md | How driver processes read / create / modify state tasks |
${CLAUDE_PLUGIN_ROOT}/docs/nodes/set-state-node.md | Background and the {{conv[...]}} template |
${CLAUDE_PLUGIN_ROOT}/docs/nodes/copy-task-node.md | Error catalogue for api_copy |
${CLAUDE_PLUGIN_ROOT}/docs/nodes/condition-node.md | go_if_const reference |
${CLAUDE_PLUGIN_ROOT}/docs/variables-guide.md | Variables ({{env_var[@…]}}) |
| Path | Description |
|---|---|
${CLAUDE_PLUGIN_ROOT}/samples/state-diagrams/user-status-state-diagram.conv.json | Minimal two-state diagram (Active ⇄ Inactive) |
${CLAUDE_PLUGIN_ROOT}/samples/state-diagrams/user-status-driver-process.conv.json | Companion driver process |
npx claudepluginhub corezoid/corezoid-ai-plugin --plugin corezoidCreates Corezoid state diagrams (conv_type: 'state') for tracking entity lifecycles, status stores, and state machines. Guides through requirements gathering and diagram creation.
Manages business process graphs, flowcharts, and actor-link structures in Simulator.Company. Supports creating, editing, querying nodes/edges and layers.
Builds 3-swimlane activity diagrams for business processes in Neo4j, modeling workflow steps, performers, documents, and decisions. Use when decomposing a process into steps with a graph.