polygen

A tool for writing new stateful JavaScript or TypeScript code together with a machine-readable contract. The contract names accepted actions, their data rules, possible values, and how each action changes state.

In plain words
What is it for?
Use it to draft a contract from a feature description and author state machines, workflows, reducers, stores, or protocol handlers with checked inputs, state changes, and rejection reasons.
Why use it?
It makes the intended behavior explicit while the code is being created, so shape and contract errors can be caught at each stage. It is designed for code that can later be checked by the related verification tools.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/cognitive-fab/polygraph/polygen
Any agent
npx skills add cognitive-fab/polygraph --skill polygen
Clone the repo
git clone --depth 1 https://github.com/cognitive-fab/polygraph

Made for: Claude Code, Codex.

Per session 201 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 3,218 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
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 $0.00201 $0.03218
Opus 5 $0.00101 $0.01609
Sonnet 5 $0.00040 $0.00644
Haiku 4.5 $0.00020 $0.00322

Measured 2d ago against content hash b4e5306a2327, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

polygen 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 2d 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.

skills/polygen/SKILL.md · 222 lines

How it starts

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

polygen — author verifiable code, out of the box

Companion to the polygraph skill. That one AUDITS code that already exists. This one AUTHORS new code so it's verifiable from the start — closing the loop at creation time instead of retrofitting it later. v1 is JS/TS only: the generated module is directly usable only in a JS/TS codebase (porting a verified model to another language is a real, separate problem — the port itself would need its own differential check against the JS original — and is out of scope here).

The authored artifact (v0.7): by default a SAM v2 strict-profile module (module.exports = { instance, init, actions, getState, setState }, sam-lib 2.1.2 vendored in the plugin): named intents with schemas and finite domains, acceptors keyed by intent name, every not-applicable action an observable reject(reason) (never a throw), sealed model, and explicit next-state (prime) semantics — acceptors write the next draft and frame untouched variables with unchanged(...) (sam-lib 2.1, #25). Generated code must load strict-cleaninstance({}).validate() is a hard gate at every stage boundary, so schema/shape errors block instead of becoming report lines, and dead wiring cannot ship silently. The self-repair loop feeds back lastStep() classifications and determinism flags, not only windows and invariants. (House rule from sam-lib #29, fixed in 2.0.0-alpha.2: never rely on instance({}).state(); the pipeline uses getState()/setState() only.)

Same disclosure as polygraph. This is experimental, unproven technology and a consistency check, not a proof. A converged run means the authored code satisfies its OWN stated invariants over a bounded, explored state space — nothing more, and that space is finite only because the contract declares finite action/data domains; behavior at values outside the declared representatives is unchecked. The contract and the invariants are the model's reading of your intent; they need your review before either is trusted.

All scripts live under ${CLAUDE_PLUGIN_ROOT}/scripts/. polygen.mjs needs ANTHROPIC_API_KEY and an explicit --model (no default; recommend opus-5 with the self-repair loop on, which is the default — fable-5 only for one-shot runs with --repair-max 0, and opus-4.8 as the retry if the API refuses on policy grounds. Per-step source of truth: RECOMMENDED_MODELS in scripts/models.mjs).

Read the full file on GitHub · 222 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. 2d ago First seen · 222 lines · 0 tokens per session scan A b4e5306a2327

Subscribe to this mod's changes

polygen is a skill published in the GitHub repository cognitive-fab/polygraph (11 stars, last pushed 5d ago), licensed Apache-2.0. It adds 201 tokens to every session and 3,218 once invoked, about $0.0010 per session on Opus 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-31.

Related

Other skills, from other repositories

electron-node-upgrade

Guide for performing Node.js version upgrades in the Electron project. Use when working on the roller/node/main branch to fix patch conflicts during e sync --3. Covers the patch application workflow, conflict resolution, analyzing upstream Node.js changes, building, running the Node.js test suite, and proper commit…

electron/electron · 69 tokens

lint-js

Lint JS/TS code only. Use before opening a PR when only JavaScript or TypeScript files were changed (no Rust).

denoland/deno · 29 tokens

Shade dropdown surface contract

DropdownMenu, Select, and Popover share one visual recipe (bg-surface-elevated-2 + border-border/60 dark:border-border/30 + shadow-md). Change them together. Trigger when editing any of those three Shade files.

TryGhost/Ghost · 54 tokens

Shade ShadCN install

Guardrails for running pnpm dlx shadcn@latest add in Shade — never overwrite existing components, fresh branch first, swap raw colours for semantic tokens after integrating. Trigger when the user proposes a shadcn add, or when a fresh ShadCN-shaped file lands in apps/shade/src/components/ui.

TryGhost/Ghost · 72 tokens

Shade use primitives

Replace bare divs that only carry flex/grid/gap utilities with Shade primitives (Stack, Inline, Box, Grid, Container, Text). Use semantic gap="md" instead of gap-4. Trigger when editing TSX in Shade-consuming apps.

TryGhost/Ghost · 54 tokens

geometry-and-math

Use this skill when using Phaser 4 math and geometry utilities. Covers vectors, rectangles, circles, triangles, polygons, random number generation, angles, distance, interpolation, and snapping. Triggers on: Vector2, Rectangle, Circle, math, distance, angle, random, lerp.

phaserjs/phaser · 64 tokens