dafthunk: Skill for Claude Code

.claude/skills/node-generator/SKILL.md

node-generator is a skill for Claude Code from dafthunk-com/dafthunk. It costs 15 tokens per session (2,320 once invoked), scanned A, original, MIT.

A workflow for adding a new node to Dafthunk. A node is a reusable step in a workflow; this process defines its inputs and outputs, writes its code and tests, and registers it so the system can find it.

In plain words
What is it for?
Use it to research a node's requirements, inspect similar nodes, choose its metadata and dependencies, and generate the implementation, tests, and registry entry.
Why use it?
It provides a consistent way to turn a requested capability into a tested, registered workflow step.

Skill for Claude Code

Written for Claude Code: installed under .claude/.

This is dafthunk-com/dafthunk's own configuration. It tells Claude Code how to work on dafthunk itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything dafthunk configures →

Needs its repository: it reads a path above its own folder, which exists only inside the repository. The line is import { ExecutableNode, NodeContext } from "../../runtime/node-types";.

Reuse

Borrowing it

Nothing to install: this file belongs to dafthunk-com/dafthunk. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/dafthunk-com/dafthunk/main/.claude/skills/node-generator/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/dafthunk-com/dafthunk

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for node-generator

README.md
[![agentmods](https://agentmods.dev/badge/skills/dafthunk-com/dafthunk/node-generator/github.svg)](https://agentmods.dev/skills/dafthunk-com/dafthunk/node-generator)
Your own site
<a href="https://agentmods.dev/skills/dafthunk-com/dafthunk/node-generator"><img src="https://agentmods.dev/badge/skills/dafthunk-com/dafthunk/node-generator/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for node-generator

Your own site · 80×15
<a href="https://agentmods.dev/skills/dafthunk-com/dafthunk/node-generator"><img src="https://agentmods.dev/badge/skills/dafthunk-com/dafthunk/node-generator.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 15 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 2,320 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe. Third-party audits
  • NVIDIA SkillSpector pass 7 Sept 2026
How audits are shown
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00015 $0.02320
Opus 5.5 $0.00006 $0.00928
Sonnet 5.5 $0.00003 $0.00464
Haiku 4.5 $0.00002 $0.00232

Measured 2mo ago against content hash a68a326c4a74, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

node-generator scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2mo ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/skills/node-generator/SKILL.md · 284 lines

How it starts

The opening of the file, as written. The whole thing — 284 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Node Generator Skill

Generate workflow nodes for Dafthunk: research requirements, create implementation and tests, register in the node registry.

Step 1: Research and Define Requirements

When a user requests a new node, research first, then present a complete specification for confirmation.

Research the functionality:

  • If based on a library/API: Use WebSearch or WebFetch to find official documentation
  • Look for function signatures, parameters, return types, and examples
  • Check if the package exists in apps/api/package.json or search npm for the latest version

Check existing patterns:

  • Search packages/runtime/src/nodes/<category>/ for similar nodes
  • Examine 2-3 similar implementations to understand input/output patterns and validation approaches

Draft complete requirements:

  • Node purpose, category, name, and kebab-case ID
  • Inputs: names, types, descriptions, required/optional, defaults, repeated (from function signature/docs)
  • Outputs: primary outputs and metadata outputs (hidden: true for counts, flags, etc.)
  • Icon: appropriate lucide icon name
  • Tags: category + relevant keywords
  • Dependencies: package name and version if needed

Present for confirmation:

Based on [library/API/functionality], here's the proposed node:

**Name**: [Node Name]
**ID**: `node-id`
**Category**: category
**Icon**: icon-name

**Inputs**:
- `inputName` (type, required/optional): Description

**Outputs**:
- `outputName` (type): Description
- `metadata` (type, hidden): Description

**Dependencies**:
- package-name@^version

**Tags**: Category, Tag1, Tag2

Does this match your requirements?

Only ask for information you cannot reasonably infer or research. The goal is to present a complete, research-backed specification that the user only needs to approve or tweak.

Step 2: Create Node Implementation

File: packages/runtime/src/nodes/<category>/<node-id>.ts

import { NodeExecution, NodeType } from "@dafthunk/types";
import { ExecutableNode, NodeContext } from "../../runtime/node-types";

export class [NodeClassName]Node extends ExecutableNode {
  public static readonly nodeType: NodeType = {
    id: "[node-id]",
    name: "[Node Display Name]",
    type: "[node-id]",
    description: "[One-line description]",
    tags: ["Category", "Tag1", "Tag2"],
    icon: "[icon-name]",
    documentation: "[Detailed documentation]",
    inlinable: false,
    asTool: false,
    inputs: [
      {
        name: "[inputName]",
        type: "[type]",
        description: "[Description]",
        required: true,
        repeated: false,
      },
    ],
    outputs: [
      {
        name: "[outputName]",
        type: "[type]",
        description: "[Description]",
      },
    ],
  };

  public async execute(context: NodeContext): Promise<NodeExecution> {
    try {
      const { input1, optionalInput = "default" } = context.inputs;

      // Validate required inputs
      if (input1 === null || input1 === undefined) {
        return this.createErrorResult("Missing required input: input1");
      }

      if (typeof input1 !== "expectedType") {
        return this.createErrorResult(
          `Invalid input type for input1: expected expectedType, got ${typeof input1}`
        );
      }

      // Handle repeated inputs (arrays)
      if (Array.isArray(input1)) {
        for (let i = 0; i < input1.length; i++) {
          if (typeof input1[i] !== "string") {
            return this.createErrorResult(
              `Invalid input at position ${i}: expected string, got ${typeof input1[i]}`
            );
          }
        }
      }

      // Main logic
      const result = processInput(input1);

      return this.createSuccessResult({ output1: result });
    } catch (err) {
      const error = err as Error;
      return this.createErrorResult(`Error in [NodeName]: ${error.message}`);
    }
  }
}

Read the full file on GitHub · 284 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2mo ago First seen · 284 lines · 15 tokens per session scan A a68a326c4a74

Subscribe to this mod's changes

node-generator is a skill published in the GitHub repository dafthunk-com/dafthunk (142 stars, last pushed 1mo ago), licensed MIT. It adds 15 tokens to every session and 2,320 once invoked, about $0.0001 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.

Related

Other skills, from other repositories

potpie-graph

Use when the task can read or write the project-memory graph through the potpie CLI: discover the contract with graph catalog, read named views with graph read, resolve entity identity with graph search-entities, create validated plans with graph propose, commit plans with graph commit --verify, inspect quality with…

potpie-ai/potpie · 107 tokens

potpie-source-ingestion

Use when the user explicitly asks to ingest, refresh, or deeply understand a repository, PR, issue, ticket, runbook, incident report, document, or web link into Potpie. The harness performs todo-driven discovery, uses local/GitHub/integration tools and read-only subagents when available, builds evidence-backed…

potpie-ai/potpie · 111 tokens

potpie-resource-markdown

Use when the user asks to ingest a markdown or HTML document — an exported doc, wiki or Confluence page, web page, runbook, spec, or RFC — into Potpie so agents can search and cite it. Teaches the extraction-script flow: split on the heading tree into sections and 4k-char chunks, import with potpie resource import…

potpie-ai/potpie · 106 tokens

potpie-resource-pdf

Use when the user asks to ingest a PDF (report, contract, paper, manual, slide export) into Potpie so agents can search and cite it. Teaches the extraction-script flow: resolve the document's identity, split on the PDF's own structure into sections and 4k-char chunks, import with potpie resource import, write…

potpie-ai/potpie · 101 tokens

potpie-resource-spreadsheet

Use when the user asks to ingest a spreadsheet or CSV (cost report, inventory, tracker, export) into Potpie so agents can search and cite it. Teaches the extraction-script flow: one section per sheet, header-repeated row chunks, potpie resource import, summaries that carry the key figures, and — critically — deriving…

potpie-ai/potpie · 106 tokens

potpie-cli

Use when the task is centered on running, explaining, configuring, or troubleshooting the potpie command: doctor, login, pot management, source registration, resolve/search/record, graph workbench reads/writes, resource (document payload) commands, and pot scope behavior.

potpie-ai/potpie · 60 tokens