Corezoid Process Optimizer logo

Corezoid Process Optimizer

Organization
corezoid
corezoid-process-optimizer

Optimizes a Corezoid process JSON — reduces tact consumption by merging nodes, cleans data flow, fills missing node titles, and adds resilience patterns. Activate when the user says "optimize", "improve", "reduce tacts", "merge nodes", "clean up process", "what can be improved", "show optimizations", or any phrase implying they want to make a process faster, cheaper, or more readable. Two modes: plan-only (analysis + report, no changes) and auto (plan + execute immediately).

Overview

Publishercorezoid
Repositorycorezoid-ai-plugin
Skill namecorezoid-process-optimizer
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 Process Optimizer 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-process-optimizer
  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-process-optimizer .claude/skills/corezoid-process-optimizer
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Corezoid Process Optimizer 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 Process Optimizer 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 Process Optimizer 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.

Corezoid Process Optimizer

Mode and scope detection

Determine mode and scope from the user's phrasing before doing anything else.

Mode

User intentMode
"optimize", "apply", "fix", "improve" — action verbAUTO — analyze, plan, execute
"show", "what can", "suggest", "check" — analysis verbPLAN — analyze, report, wait

In PLAN mode, after presenting the report ask:

"Apply all? Apply by group? (1 — tacts, 2 — data, 3 — naming, 4 — resilience)"

Scope

The user may request a specific optimization group. Detect from keywords:

Keyword(s) in requestScope — run only
"tacts", "tact", "state changes", "nodes", "merge"Group 1
"data", "payload", "cleanup", "garbage", "fields"Group 2
"names", "naming", "titles", "readability", "descriptions"Group 3
"resilience", "semaphors", "timeouts", "stability"Group 4
No group keyword — general requestAll groups

If scope is a single group — run Phase 1 analysis only for that group. Skip all others entirely. Still run lint-process first (its findings feed Group 1 regardless).

Examples:

  • "optimize by tacts" → AUTO + Group 1 only
  • "show tact optimizations" → PLAN + Group 1 only
  • "add missing semaphors" → AUTO + Group 4 only
  • "optimize" → AUTO + all groups

Step 0 — Resolve process

Resolve PROCESS_PATH before calling any tools:

  1. Check if the user provided a path, name, or ID.
  2. If not — ask: "Which process? Provide a file path, name, or ID."
  3. If name or ID — search locally: find . -name "*.conv.json".
  4. Read and parse the file.
  5. Call lint-process — record findings. They become Group 1 quick-wins.

Step 1 — Analyze

Build a node map: id → { title, obj_type, logics[], sems[], outgoing edges }.

Trace the execution graph from the Start node following go.to_node_id and err_node_id edges.

Collect candidates for all four groups below.


Group 1 — Tact Reduction

Formula: SC = (N – 1) × T. Every node transition costs one state change. Fewer nodes = fewer tacts.

1.1 Merge consecutive set_param nodes

Detect chains A → B → C where all nodes have type: "set_param", connected sequentially with no branching.

Merge condition: all nodes share the same err_node_id (or all have none). If err_node_id values differ — flag as candidate, do not merge automatically.

Merge action: combine all extra and extra_type objects into the first node. Remove subsequent nodes. Reconnect routing to where the chain ended.

Tacts saved: (chain length − 1) per task.


1.2 Merge consecutive code nodes

Detect chains of type: "api_code" nodes connected sequentially with no branching.

Merge condition: all share the same err_node_id. If different — flag only; note that error handling must be unified first.

Merge action: concatenate src fields in order, separated by \n// ---\n. Keep one err_node_id. Remove subsequent nodes. Reconnect routing.

Tacts saved: (chain length − 1) per task.


1.3 Merge consecutive condition nodes checking the same field

Detect chains of type: "go_if_const" nodes where all check the same arg field.

Merge action: combine all conditions[] arrays into the first node. Each original branch keeps its own to_node_id. Remove subsequent condition nodes.

Do NOT merge if conditions check different fields — different semantics, merging hurts readability.

After merging, add a note to the plan:

"Merged conditions on field '{{field}}'. Review combined node for readability."

Tacts saved: (chain length − 1) per task.


1.4 Replace api_rpc with api_copy when reply is unused

Detect api_rpc nodes where no downstream node references any field that could only originate from the called process's reply.

Check: scan all downstream extra, condition arg/val, and src fields for parameter names not present in the task before the call. If none found — candidate for api_copy.

This change requires confirmation even in AUTO mode. Present:

"Node '[title]' calls process but does not use the reply. Replace with api_copy (fire-and-forget)? [yes/no]"

If confirmed: change type: "api_rpc" → type: "api_copy". Switch extra/extra_type to data/data_type per the api_copy schema (see ${CLAUDE_PLUGIN_ROOT}/docs/node-structures.md).


1.5 Remove dead nodes

Apply lint findings:

  • Orphaned nodes — remove from scheme.nodes.
  • No-op conditions — re-route the incoming edge to the single destination; remove the condition node.
  • Unused set_params — if the node sets only unused variables, remove the node. If mixed, remove only the unused keys from extra/extra_type.

Group 2 — Data Cleanup

2.1 Inline payload cleanup after API calls

After each type: "api" node, identify response fields not referenced by any downstream node.

Do NOT add a new cleanup node — inline the cleanup into the nearest existing downstream node:

  • code node: prepend delete data.<field>; at the top of src.
  • set_param node: set_param cannot delete keys. Find the next code node and add the delete there. If no downstream code node exists — flag for the user, do not create a new node.

2.2 Remove dead code inside code nodes

Inside each api_code node's src, detect:

  • data.x = data.x — self-assignment, remove.
  • Variables declared but never read after declaration — flag for user review.
  • Large commented-out blocks — flag for user review.

Group 3 — Readability

Run this group when:

  • User explicitly requested it, OR
  • AUTO mode is active.

Critical nodes always get titles filled regardless of mode:

Node typeAlways fill title if empty
api_codeYes
apiYes
api_rpcYes
api_copyYes
obj_type: 2 (End/Error)Yes

Title inference rules

Node typeInference
api"[METHOD] [hostname][path]" from the url field
api_rpc"Call @[alias]" or "Call [conv_id]"
api_copy"Copy → @[alias]" or "Copy → [conv_id]"
api_codeFirst meaningful line of src (strip data., max 40 chars)
set_param"Set [key1], [key2], ..." (first 3 keys)
go_if_const"Check [arg field]"
obj_type: 2, icon error"Error"
obj_type: 2"Final"

Never overwrite an existing non-empty title.

3.1 Fill process params array

If params: [] and the Start node clearly receives input (inferred from downstream references to fields never set internally) — propose a params array.

Always ask for confirmation before applying — field types cannot be reliably inferred.


Group 4 — Resilience

4.1 Add missing time semaphors

Node typeSeverityDefault timeout
api_callback (Waiting for Callback)🔴 Critical — always add3600 sec
api (API Call)🟡 Important — add without asking30 sec
api_rpc (Call a Process)🟢 Recommended — add without asking60 sec

Semaphor to_node_id must point to a valid error node. If no suitable error node exists — create one at x + 300, same y as the parent node. Use obj_type: 2 with title: "Timeout" and connect the semaphor to it.

Semaphor JSON:

json
{
  "type": "time",
  "value": 30,
  "dimension": "sec",
  "to_node_id": "<error_node_id>"
}

Step 2 — Plan report

Present findings in this format before executing anything:

## Optimization Plan: <Process Title> (<ID>)

### Group 1 — Tact Reduction
| # | Type               | Nodes                                 | Tacts saved |
|---|--------------------|---------------------------------------|-------------|
| 1 | Merge set_param    | "Set ref" → "Set amount" → "Set cur"  | 2/task      |
| 2 | Merge code         | "Parse" → "Validate"                  | 1/task      |
| 3 | Remove orphaned    | "Old handler" (abc123)                | 1/task      |
| 4 | rpc→copy ⚠️ confirm | "Send notification"                   | wait saved  |

Total nodes removed: N | Tacts saved: X/task

### Group 2 — Data Cleanup
| # | After node          | Fields to remove          | Inline into          |
|---|---------------------|---------------------------|----------------------|
| 1 | "Call Stripe API"   | payment_method_details... | "Parse response"     |

### Group 3 — Readability
| # | Node (id)      | Suggested title                        |
|---|----------------|----------------------------------------|
| 1 | api (abc123)   | "POST api.stripe.com/v1/charges"       |
| 2 | api_rpc (def)  | "Call @payment-process"                |

### Group 4 — Resilience
| # | Node                    | Issue                         | Action             |
|---|-------------------------|-------------------------------|--------------------|
| 1 | "Call SMS API"          | Missing timeout semaphor      | Add 30sec          |
| 2 | "Wait callback" 🔴      | Missing timeout semaphor      | Add 3600sec        |

### Requires action outside this process
- Hardcoded URL in "Call Stripe API" → use /corezoid-variable-manager
- Numeric conv_id 1307813 (×3 nodes)  → use /corezoid-alias-manager

Step 3 — Execute

Execution order

Always apply in this sequence:

  1. Group 1 — tact reduction (graph changes first)
  2. Group 4 — resilience (semaphors reference the now-clean graph)
  3. Group 2 — data cleanup (inline into final node set)
  4. Group 3 — naming (operates on final nodes)

Confirmation rules

ChangeConfirm in AUTOConfirm in PLAN
Merge set_param / code / conditionNoYes per group
api_rpc → api_copyAlwaysAlways
Add semaphorsNoYes per group
Fill titles (critical nodes)NoNo
Fill titles (other nodes)NoYes per group
Fill params arrayAlwaysAlways
Create variable for hardcoded valueAlwaysAlways

After all changes

  1. Write updated JSON to PROCESS_PATH.
  2. Call lint-process — fix any errors before proceeding.
  3. Call push-process.
  4. Notify the user: "Deployed. Please refresh the page in Corezoid to see the updated process."

Boundaries — what the optimizer does not do

FindingAction
Hardcoded URLs / tokensFlag + point to /corezoid-variable-manager
Numeric conv_id without aliasFlag + point to /corezoid-alias-manager
Full Markdown documentationPoint to /corezoid-process-tech-writer
Cross-process auditPoint to /corezoid-project-review
Extract subprocess (architecture)Discuss with user + point to /corezoid-create

Reference Documents

PathWhen to read
${CLAUDE_PLUGIN_ROOT}/docs/node-structures.mdJSON schemas for all node types
${CLAUDE_PLUGIN_ROOT}/docs/nodes/set-parameters-node.mdset_param merge rules
${CLAUDE_PLUGIN_ROOT}/docs/nodes/code-node.mdCode node structure
${CLAUDE_PLUGIN_ROOT}/docs/nodes/api-call-node.mdAPI Call semaphor configuration
${CLAUDE_PLUGIN_ROOT}/docs/nodes/call-process-node.mdapi_rpc vs api_copy decision
${CLAUDE_PLUGIN_ROOT}/docs/nodes/copy-task-node.mdapi_copy structure
${CLAUDE_PLUGIN_ROOT}/docs/nodes/waiting-for-callback-node.mdapi_callback critical semaphor
${CLAUDE_PLUGIN_ROOT}/docs/process/error-handling.mdError node patterns
${CLAUDE_PLUGIN_ROOT}/docs/process/node-positioning-best-practices.mdPositioning new nodes

Frequently asked questions

What does the Corezoid Process Optimizer AI skill do?

Optimizes a Corezoid process JSON — reduces tact consumption by merging nodes, cleans data flow, fills missing node titles, and adds resilience patterns. Activate when the user says "optimize", "improve", "reduce tacts", "merge nodes", "clean up process", "what can be improved", "show optimizations", or any phrase implying they want to make a process faster, cheaper, or more readable. Two modes: plan-only (analysis + report, no changes) and auto (plan + execute immediately).

Why use Corezoid Process Optimizer on TypingMind?

Because you install it once and use it with any model. Corezoid Process Optimizer 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 Process Optimizer 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-process-optimizer. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Corezoid Process Optimizer?

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 Process Optimizer?

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

Is the Corezoid Process Optimizer 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 👇