Corezoid Node Layout logo

Corezoid Node Layout

Organization
corezoid
corezoid-node-layout

Auto-arrange the nodes of a Corezoid process into a clean, readable layout — a vertical top-to-bottom business flow with error handling railed off to the right and no overlapping nodes. Use it AUTOMATICALLY on every process YOU built or assembled, as the last step before push-process — never hand-place coordinates by eye (eyeballed grids overlap the moment nodes are taller than the step). Also reach for it whenever the user says a process is unreadable, tangled, ugly, a mess, or that nodes sit on top of each other, or asks to "arrange", "lay out", "tidy up", "make readable", "fix positions", "clean the diagram", "remove the overlaps" — or their equivalents in any language the user speaks. Do NOT silently re-arrange a process the user already positioned — see the "When you MAY re-layout" rules in the body. It changes x/y coordinates only — never collapse/expand state, edges, logic, conv_id, aliases or node types.

Overview

Publishercorezoid
Repositorycorezoid-ai-plugin
Skill namecorezoid-node-layout
Stars
74
Forks
26
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by corezoid on GitHub. Read the source before you install it.

Installation

Install the Corezoid Node Layout AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/corezoid/corezoid-ai-plugin/tree/main/plugins/corezoid/skills/corezoid-node-layout
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/corezoid/corezoid-ai-plugin.git /tmp/corezoid-ai-plugin
mkdir -p .claude/skills
cp -r /tmp/corezoid-ai-plugin/plugins/corezoid/skills/corezoid-node-layout .claude/skills/corezoid-node-layout
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Corezoid Node Layout in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Corezoid Node Layout on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Corezoid Node Layout is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Auto-Layout Corezoid Process Nodes

You make a process readable: business logic as a clear vertical spine, error handling collected in a tidy right-hand rail, nothing overlapping. This is the mechanical companion to the positioning rules in ${CLAUDE_PLUGIN_ROOT}/docs/process/node-positioning-best-practices.md — that doc is the source of truth for why; this skill does it deterministically.

When you MAY re-layout — and when you MUST NOT

A process's layout is part of how its author reads it. Re-flowing someone's diagram without asking is destructive even though the logic is untouched — it throws away a mental map they are used to. So the rule is about authorship, not just readability:

  • A process YOU built this session, from scratch → always lay it out. You own its positions; arrange it cleanly before push-process. No need to ask.

  • An existing / pulled / user-authored process → do NOT re-layout by default. Preserve the author's x/y. This holds even if you just edited it — a user who is used to their arrangement must not find it rearranged.

  • When you add nodes to someone else's process (an edit, not a rebuild): leave the new nodes at x: 0, y: 0 — push-process auto-places them next to their graph neighbours while keeping every existing node where it was (preserve mode; see node-positioning-best-practices.md § Automatic Placement on Push). Do not run the whole-process auto-layout — that repositions everything. Full re-layout on a foreign process happens only on request.

  • The user explicitly asks ("tidy this up", "fix the positions", "make it readable" — in any language) → re-layout the whole process. This is the one case where rearranging a foreign process is wanted.

  • The process is genuinely unreadable (heavy node overlaps, a tangled mess) → don't silently fix it. Offer: briefly say it's hard to read and ask if they want it re-arranged. Re-layout only after a clear yes. If they decline, leave it exactly as is.

When in doubt, ask before touching an existing layout — a wrong guess costs the user their familiarity; asking costs one sentence.

Workflow (once the rules above say you may)

Run the layout after the process JSON is finalized and before push-process:

  1. finish building the process (nodes + edges correct),
  2. call the layout-process MCP tool on the .conv.json,
  3. lint-process, then push-process.

The tool rewrites the file in place, touching only x/y. The user's existing extra.modeForm state is immutable: expanded nodes stay expanded and collapsed nodes stay collapsed. extra, edges, logic, conv_id, aliases and node types are left intact.

How to run

Call the MCP tool (no auth needed — it works entirely on the local file):

layout-process(process_path="path/to/NNN_name.conv.json")

Preview without writing (the result lists the planned coordinates):

layout-process(process_path="path/to/NNN_name.conv.json", dry=true)

Control the spacing with density="compact"|"medium"|"roomy" (default medium). The density pass re-spaces rows and columns from the nodes' REAL sizes — a row of collapsed 48px IF-squares stops reserving a full block-row of air, so a process fits on screen without zooming out. roomy skips the pass and keeps the coarse block-sized rhythm (useful for presentations).

The same tool is available from a shell via the server's CLI mode:

bash
sh "${CLAUDE_PLUGIN_ROOT}/mcp-server/run.sh" layout-process process_path=<file> dry=true

The engine lives inside the plugin's Go MCP server — no extra runtime, no network, no server call.

What it does (the layout rules it enforces)

The engine picks a strategy automatically (the result reports which one and why):

  • Small and tree-like processes (fewer than ~25 nodes, or one main flow with branches) → a vertical "waterfall": the happy path runs straight down the central column, branches fan out to the sides (longer branches nearer the centre — a hub with rays reads as a star, cascaded IFs as a tree), and each error cluster is pinned tight to the right of the node it protects. Small processes always get the waterfall: the layered machinery below only pays off at scale, and on a small graph its spine drifts sideways.

  • Region composition — big processes routinely combine shapes, so region detection runs in a loop and each region gets its own geometry while the rest of the graph keeps the waterfall:

    • TABLE: a dispatcher fanning into 3+ structurally identical pipelines that reconverge (one sync pipeline per entity type is the canonical case) → parallel columns with row-aligned steps, and the shared tail (a DLQ, the columns' error clusters) in a side column;
    • STAR / sun: a hub fanning into 4+ chain-shaped rays of varying depth that reconverge → rays hang symmetrically around the hub→merge axis, deepest nearest the axis (a fir-tree silhouette);
    • DIAMOND: a compact two-way fork/rejoin → the primary branch stays on the hub axis, the short optional branch sits immediately to its right, and the merge returns to the original axis;
    • several regions in sequence — two tables, a star followed by a table — compose cleanly (each expansion makes its own room).
  • Large mesh processes (many independent flows, lots of error handling) → the graph is split into (1) the business flow, laid out as a clean layered top-to-bottom spine with edge-crossings minimised, (2) dedicated error clusters, pinned locally beside their single owner, (3) genuinely shared error clusters, placed on a clean right rail using their existing collapse/expand state, and (4) unreachable historical components, packed into a separate zone below the active Start flow. A high error-node percentage alone does not select this strategy; ownership topology does.

  • Recovery lanes — an err_node_id target is not automatically terminal error handling. If it enters a substantial compensating pipeline or rejoins the active flow, that pipeline is anchored beside its owner/merge as business logic while retaining its current mode. Callback entrypoints are treated like Start roots; a component goes to the archive zone only when it has no attachment to the active graph in either direction.

Both strategies guarantee: no node overlaps, top-to-bottom flow with Start at the top and the deepest success Final sunk to the bottom of the active flow (early success exits remain local), every node's existing collapse/expand state preserved, and the diagram re-centred on the origin so it sits in the middle of the canvas instead of drifting off one edge.

Note what that last point is not: there is no hard ±10000 clamp. The vertical step does shrink for deep processes, but it has a floor, so a very deep process (roughly 125+ layers) legitimately extends past ±10000. That is fine — the node schema allows ±100000 precisely because real processes reach about ±25500.

Example — a typical result on a freshly built process:

strategy: waterfall  (21 nodes, 4 flow(s), 5% error-handling nodes)  density=medium  engine=recovery-v6-preserve-modes
nodes=21 width=1000px height=4070px overlaps=0 collapsed=0
readability: estimated-crossings=0 max-dedicated-error-span=376px long-dedicated-errors=0
edges: max-span=420px p95-span=310px long=0 upward=0
layout applied: 042_payment.conv.json (21 nodes, 21 moved)
Next: lint-process, then push-process.

overlaps=0 is the number to check; anything else means a bug worth reporting. Full re-layout is idempotent: running it again over its own output must preserve the same coordinates. Every input extra.modeForm must be identical after the run; collapsed=0 and mode-passes=1 are mandatory. The engine revision makes stale runtime tests visible.

Honest limits

Some graphs cannot be made beautiful because the graph itself is tangled — a node called from a dozen places is an unavoidable fan of edges no layout can remove. When a process is this big and knotty, the real fix is to split it into smaller, repeatable sub-processes; the layout only makes an unavoidable monster as readable as it can be, never magically simple.

Verifying a change to the engine

The engine's test suite lives with the server code (plugins/corezoid/mcp-server/layout_*_test.go — synthetic topologies: chains, stars, loops, fractals, tables, and an error-heavy process):

bash
cd "${CLAUDE_PLUGIN_ROOT}/mcp-server" && go test -run 'TestLayout' ./...

It asserts the invariants that make a layout clean: all nodes placed, zero overlaps, deterministic output (so adding a node re-flows rather than piles up), coordinates within canvas, top-to-bottom flow, correct strategy routing, table/star/diamond region geometry, dedicated-vs-shared error ownership, detached component zoning, local early exits, and golden coordinate files that freeze every fixture against unintended churn.

Frequently asked questions

What does the Corezoid Node Layout AI skill do?

Auto-arrange the nodes of a Corezoid process into a clean, readable layout — a vertical top-to-bottom business flow with error handling railed off to the right and no overlapping nodes. Use it AUTOMATICALLY on every process YOU built or assembled, as the last step before push-process — never hand-place coordinates by eye (eyeballed grids overlap the moment nodes are taller than the step). Also reach for it whenever the user says a process is unreadable, tangled, ugly, a mess, or that nodes sit on top of each other, or asks to "arrange", "lay out", "tidy up", "make readable", "fix positions"...

Why use Corezoid Node Layout on TypingMind?

Because you install it once and use it with any model. Corezoid Node Layout is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Corezoid Node Layout in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/corezoid/corezoid-ai-plugin/tree/main/plugins/corezoid/skills/corezoid-node-layout. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Corezoid Node Layout?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Corezoid Node Layout?

As many as you like. As long as a model supports skills, you can use Corezoid Node Layout with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Corezoid Node Layout AI skill free?

Yes. It is published on GitHub by corezoid under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇