Help us improve
Share bugs, ideas, or general feedback.
From corezoid
Documents Corezoid processes by generating human-readable Markdown files and enriching process JSON with descriptions for every node and parameter.
npx claudepluginhub corezoid/corezoid-ai-plugin --plugin corezoidHow this skill is triggered — by the user, by Claude, or both
Slash command
/corezoid:corezoid-process-tech-writerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Always produce **two outputs** for every process:
Audits Corezoid BPM processes for structural issues, hardcoded values, and optimization opportunities. Use when analyzing or reviewing `.conv.json` process definitions.
Generates downloadable PDF process briefing from detected patterns or workflows: visual flowchart, steps with apps/actions, stats, and automation suggestions. Useful for documenting real team processes.
Documents business processes into complete SOPs with RACI matrices, ASCII flowcharts, detailed steps, exceptions, metrics, and related docs. Use for formalizing informal workflows or handoffs.
Share bugs, ideas, or general feedback.
Always produce two outputs for every process:
.processes/<name>-docs.mddescription fields filled in) at .processes/<name>-enriched.jsonIf the user provides a file path, read it directly. If they provide a process name or ID, use
pull-process to fetch it first.
Read the params array. Each entry has:
name — parameter nametype — data typedescr — description (may be empty — infer from context)flags — "required" flag means mandatory; "input" = input param, "output" = output paramregex — validation pattern (document if non-empty)Find all nodes with api_rpc_reply logic in condition.logics:
throw_exception: false → success response — document res_data keys and typesthrow_exception: true → error response — document what triggers it (node title, exception_reason if present)Walk scheme.nodes following go entries from the Start node (obj_type: 1):
id matching the to_node_id in Start's go logicgo entries to map the happy pathgo_if_const entrieserr_node_id referencesapi logic): extract url, method, extra_headers{{env_var[@name]}} references: list all unique variable names usedapi_code): look for referenced services or data transformationsapi_rpc): extract conv_id values (called process IDs)Save to .processes/<process-name-in-snake-case>-docs.md.
Use this exact structure:
# <Process Title>
## Overview
<1-2 sentences: what this process does and when to call it. Be specific about the business purpose.>
## Input Parameters
| Name | Type | Required | Description |
|------|------|----------|-------------|
| field_name | string | Yes | Description from params.descr |
| optional_field | number | No | Description |
<If any field has regex validation, add a "Validation" subsection listing the rules.>
## Output
### Success response
| Field | Type | Description |
|-------|------|-------------|
| response | object | The API response body |
### Error cases
| Error | Trigger condition |
|-------|------------------|
| "Code node error" | JavaScript execution failed in the preparation step |
| "API call error" | External API returned an error or was unreachable |
## How to Call
Example `task_data` with realistic values:
```json
{
"field_name": "example_value",
"optional_field": 42
}
```
## Process Flow
1. **Start** — Entry point, receives the task
2. **<Code Node title>** — <plain English: what this step does>
3. **<API Call / Call Process title>** — <plain English: what is called and why>
4. **<Reply node title>** — <what is returned on success>
5. **Final** — Task stored, process complete
<For error paths, describe them after the happy path:>
**Error path (Code Node failure):** If the preparation step fails, an error reply is returned
with the exception description, and the task ends at the Error node.
## External Dependencies
| Dependency | Type | Variable / URL |
|-----------|------|----------------|
| <service name> | HTTP API | `{{env_var[@variable-name]}}` |
| <process name> | Corezoid process | ID: `<conv_id>` |
## Notes
- <Any timeouts configured via semaphors — e.g. "API call has a 30-second timeout">
- <Rate limiting (max_threads setting)>
- <Any other relevant technical notes>
Read the original process JSON, add description fields to every node, and write the result
to .processes/<name>-enriched.json.
What to fill:
description field on every node — one plain English sentence: what this node does in the context of this processparams[].descr — if empty, infer from the field name and process contextWhat NOT to change:
id, obj_type, condition, logics, semaphors — never touch thesex, y, extra, options — leave as-istitle — only fill if the field is completely empty ("")Description style:
Examples:
| Node type | Bad description | Good description |
|---|---|---|
| Code node | "Prepares data" | "Builds the request body with actor_name, form_id, and authorization_header for the Simulator API call" |
| API Call | "Makes API call" | "Sends POST request to Simulator API to create a new actor with the prepared parameters" |
| Reply Success | "Returns response" | "Returns the created actor data from the Simulator API back to the calling process" |
| Reply Error | "Returns error" | "Returns error reply with throw_exception:true when the actor creation API call fails" |
| Final | "Final" | "Stores the completed task with actor creation result and marks the process as successful" |
Do not produce one without the other. If the process JSON is very large, produce the Markdown first, then the enriched JSON.