Skip to content
Back to skills

Document Node

ASecurity

Generate comprehensive {node_name}.example.json files that showcase real-world usage of Workscript workflow nodes. Use when asked to document a node, create node documentation, generate node examples, or produce usage examples for workflow nodes. Also use when a subagent needs to create node documentation as part of node development or review.

  • 666 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added February 8, 2026
developmenttypescriptgonodedatabasedocumentation

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill document-node --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Document Node?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Document Node
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-document-node/badge)](https://www.skillsdirectory.com/skills/majiayu000-document-node)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: document-node
description: Generate comprehensive {node_name}.example.json files that showcase real-world usage of Workscript workflow nodes. Use when asked to document a node, create node documentation, generate node examples, or produce usage examples for workflow nodes. Also use when a subagent needs to create node documentation as part of node development or review.
---

# Document Node Skill

Generate production-quality `{node_name}.example.json` workflow files demonstrating correct usage of Workscript nodes.

## Required Context

Before generating documentation, you MUST:

1. **Read the node source file** (`.ts` file) to understand:
   - `metadata.id` - The node type identifier
   - `metadata.inputs` - Expected configuration parameters
   - `metadata.outputs` - Output data structure
   - `metadata.ai_hints` - Purpose, when_to_use, expected_edges, post_to_state
   - `execute()` method - All conditional logic and edge returns

2. **Locate the node** in `/packages/nodes/src/` or subdirectories:
   - Core nodes: `/packages/nodes/src/{NodeName}.ts`
   - Data nodes: `/packages/nodes/src/data/{NodeName}.ts`
   - Custom nodes: `/packages/nodes/src/custom/{integration}/{NodeName}.ts`

## Output Format

Create file: `{node_name}.example.json` in same directory as the node source.

```json
{
  "id": "{node-id}-examples",
  "name": "{NodeName} Examples",
  "version": "1.0.0",
  "description": "Comprehensive examples demonstrating all {NodeName} capabilities",
  "initialState": { /* Realistic test data */ },
  "workflow": [ /* Inline nested configuration examples */ ]
}
```

## Critical Rules

### Rule 1: Sequential Feature Showcase (NOT Deep Nesting)

**For documentation examples**, use a **flat sequential array** where each step demonstrates a different feature of the node being documented. This makes examples clear and easy to understand.

**DO NOT** create deeply nested workflows - even if they are technically correct, they obscure the features being demonstrated.

```json
// WRONG - Deeply nested (hard to read, obscures individual features)
{
  "workflow": [
    {
      "extractText": {
        "method": "extractAll",
        "extractType": "email",
        "success?": {
          "extractText": {
            "method": "extractAll",
            "extractType": "url",
            "success?": {
              "extractText": {
                "method": "regex",
                "pattern": "...",
                "success?": {
                  "log": { "message": "Done" }
                }
              }
            }
          }
        }
      }
    }
  ]
}

// CORRECT - Sequential steps showcasing each feature clearly
{
  "workflow": [
    {
      "extractText": {
        "method": "extractAll",
        "field": "emailText",
        "extractType": "email",
        "outputField": "allEmails",
        "success?": "log"
      }
    },
    {
      "extractText": {
        "method": "extractSpecific",
        "field": "emailText",
        "extractType": "email",
        "occurrence": 0,
        "outputField": "primaryEmail",
        "success?": "log"
      }
    },
    {
      "extractText": {
        "method": "regex",
        "field": "productData",
        "pattern": "Product: ([A-Z0-9]+)",
        "flags": "g",
        "outputField": "productIds",
        "success?": "log"
      }
    },
    {
      "log": {
        "message": "All examples completed!",
        "results": "$.allEmails"
      }
    }
  ]
}
```

**Key principles for documentation examples:**
- Each workflow step = one feature/operation demonstration
- Use simple edge terminations (`"success?": "log"`) not deep nesting
- Group related examples by operation type in sequence
- End with a summary log showing all collected results
- Edges CAN use string references like `"log"` in documentation examples

### Rule 2: Realistic Initial State

Create domain-appropriate test data:

```json
{
  "initialState": {
    "products": [
      { "id": 1, "name": "Laptop", "price": 999.99, "inStock": true, "category": "Electronics" },
      { "id": 2, "name": "Mouse", "price": 29.99, "inStock": false, "category": "Electronics" }
    ],
    "users": [
      { "id": 1, "name": "Alice", "email": "alice@example.com", "role": "admin" }
    ]
  }
}
```

### Rule 3: Demonstrate ALL Edges

For each node, show workflows that trigger each possible edge:

```json
// Node with success/error/found/not_found edges
{
  "database": {
    "operation": "find",
    "table": "users",
    "query": { "id": "$.userId" },
    "found?": { /* next node inline */ },
    "not_found?": { /* handle missing */ },
    "error?": { /* handle error */ }
  }
}
```

### Rule 4: Show All Operations

If the node supports multiple operations, demonstrate each:

```json
// Math node - show add, subtract, multiply, divide
// Filter node - show equals, contains, gt, lt, between, regex
// Transform node - show stringify, parse, uppercase, lowercase
```

### Rule 5: Edge Naming with `?` Suffix

Edges always end with `?`:
- `success?`, `error?`, `found?`, `not_found?`
- `true?`, `false?`, `valid?`, `invalid?`
- `exists?`, `not_exists?`, `passed?`, `filtered?`

## Generation Process

1. **Read node source file** - Extract metadata and execute logic
2. **Identify all operations** - List every operation/mode the node supports
3. **Identify all edges** - List every edge the node can return
4. **Design initial state** - Create realistic test data matching node inputs
5. **Create examples** - One workflow section per major use case
6. **Add documentation logs** - Include log nodes showing results

## Example Structure Template

```json
{
  "id": "{node-id}-examples",
  "name": "{NodeName} Examples",
  "version": "1.0.0",
  "description": "Comprehensive examples demonstrating all {NodeName} capabilities",
  "initialState": {
    "/* Realistic domain data matching node inputs - provide multiple data sources to showcase different features */"
  },
  "workflow": [
    {
      "{node-id}": {
        "/* Example 1: Basic usage - simplest configuration */",
        "outputField": "example1Result",
        "success?": "log"
      }
    },
    {
      "{node-id}": {
        "/* Example 2: Different operation/mode */",
        "outputField": "example2Result",
        "success?": "log"
      }
    },
    {
      "{node-id}": {
        "/* Example 3: Advanced usage with all options */",
        "outputField": "example3Result",
        "success?": "log"
      }
    },
    {
      "{node-id}": {
        "/* Example 4: Edge case or alternative configuration */",
        "outputField": "example4Result",
        "success?": "log"
      }
    },
    {
      "log": {
        "message": "All {NodeName} examples completed successfully!",
        "example1Result": "$.example1Result",
        "example2Result": "$.example2Result",
        "example3Result": "$.example3Result",
        "example4Result": "$.example4Result"
      }
    }
  ]
}
```

**Template guidelines:**
- Add one workflow step per feature/operation you want to demonstrate
- Each step should have a unique `outputField` to store results
- Use `"success?": "log"` as a simple edge terminator (not deep nesting!)
- Final log step summarizes all results using state references

## State References

Use `$.` syntax for state access:
- `$.products` - Access state.products
- `$.user.name` - Access nested state.user.name
- `$.filterPassed` - Access node output stored in state

## State Keys Written by Nodes

Common node state outputs (reference from node's `ai_hints.post_to_state`):
- math: `mathResult`
- logic: `logicResult`
- filter: `filterPassed`, `filterFiltered`, `filterStats`
- sort: `sortedItems`
- validateData: `validationResult`, `validationErrors`
- editFields: `editFieldsResult`, `fieldsModified`
- database: `dbInserted`, `dbRecord`, `dbUpdated`, `dbDeleted`, `dbRecords`
- filesystem: `fileContent`, `fileWritten`, `fileExists`

## Quality Checklist

Before finalizing, verify:

- [ ] Read the actual node source file
- [ ] Used **sequential flat array** pattern (NOT deeply nested workflows)
- [ ] Each workflow step showcases ONE feature/operation of the node
- [ ] Created realistic initialState with multiple data sources for different features
- [ ] Demonstrated all operations/modes the node supports
- [ ] Showed all edge paths (success, error, and conditional edges)
- [ ] Used correct edge naming with `?` suffix
- [ ] Used `"success?": "log"` as simple terminators (not deep nesting)
- [ ] Referenced correct state keys (from ai_hints.post_to_state)
- [ ] Each step writes to unique outputField for clear result tracking
- [ ] Final summary log shows all collected results
- [ ] File saved as `{node_id}.example.json` in node's directory

## Quick Reference: Workflow JSON Schema

```json
{
  "id": "string (required, pattern: ^[a-zA-Z0-9_-]+$)",
  "name": "string (required)",
  "version": "string (required, pattern: ^\\d+\\.\\d+\\.\\d+$)",
  "description": "string (optional)",
  "initialState": "object (optional)",
  "workflow": "array (required, min: 1 item)"
}
```

## Reference: Reading Node Source

When reading a node's `.ts` file, extract:

```typescript
metadata = {
  id: 'node-id',           // Use this in workflow
  name: 'Node Name',       // Use in description
  inputs: ['param1'],      // Config parameters
  outputs: ['result'],     // Edge data keys
  ai_hints: {
    purpose: '...',
    when_to_use: '...',
    expected_edges: ['success', 'error'],  // All possible edges
    example_config: '...',
    post_to_state: ['stateKey']            // State keys written
  }
};
```

Analyze the `execute()` method to understand:
- All `return { edgeName: () => ({...}) }` statements
- Conditional logic that determines which edge is returned
- Required vs optional configuration parameters

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.