polyviz
Turn Polygraph verification artifacts into clean, brand-consistent diagrams (SVG, optional PNG). polyviz is a DETERMINISTIC, artifact-derived renderer — same…
Author stateful code capture-ready BY CONSTRUCTION, in ANY language — so verification never needs an instrumentation retrofit. Apply whenever writing or substantially reshaping a state machine, workflow, reducer, store, or protocol handler in any session and any language
$ npx -y skills add cognitive-fab/polygraph --skill capture-ready --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/capture-readyContext preview
The summary Claude sees to decide when to auto-load this skill.
Author stateful code capture-ready BY CONSTRUCTION, in ANY language — so verification never needs an instrumentation retrofit. Apply whenever writing or substantially reshaping a state machine, workflow, reducer, store, or protocol handler in any session and any language
name: capture-ready description: Author stateful code capture-ready BY CONSTRUCTION, in ANY language — so verification never needs an instrumentation retrofit. Apply whenever writing or substantially reshaping a state machine, workflow, reducer, store, or protocol handler in any session and any language (Python, Go, Rust, Java, TS outside polygen, …): shape the module to the eight CR requirements (one named step boundary, declared observable projection, observable rejections, a step-listener seam from the first commit, injected non-determinism, effects declared not awaited, exported scenarios, one in-flight step) so a Polygraph trace corpus falls out of a listener registration instead of an after-the-fact patch. polygen enforces most of this structurally for JS/TS; this skill is how the same discipline reaches everything polygen cannot author. Trigger phrases: "capture-ready", "instrumented from the start", "make it traceable", "write it so we can verify it later", or any request to write stateful/transition logic where polygen is not being used.
The Polygraph toolchain starts working at code-generation time, not at verification time. Every other capture path in this repo answers "the code exists; how do I get traces out of it?" — instrument a copy, keep a patch, hope it doesn't rot. That retrofit is only ever necessary because the code was **shaped** without capture in mind. This skill states the rule for code an agent writes: get the shape right at authoring time and the corpus falls out of a listener registration — no patch, no seam hunt, nothing to re-derive when the code moves.
Source of truth (ships with the plugin — read it when detail is needed): `${CLAUDE_PLUGIN_ROOT}/docs/capture-ready.md`. The retrofit path for code we did NOT write is unchanged (`polygraph` skill Step 2 + `docs/capture-spec.md`) — never reshape someone else's target to make it easier to capture.
> Scope disclosure: capture-ready is not verified and not evidence — a module > can satisfy all eight requirements and be wrong. It is the precondition > that makes verification cheap and repeatable.
Any session where you are authoring or substantially reshaping stateful code — a state machine, workflow, reducer, store, saga, protocol handler — in ANY language, with or without polygen. Apply BEFORE the first commit: adding the listener seam to a well-shaped module later is a one-line change; adding a single step boundary to a module that grew three mutation paths is a rewrite. If polygen is in play (JS/TS), it enforces CR-1..CR-4 and CR-8 structurally; your job narrows to CR-5, CR-6, CR-7 as review points.
entry taking a named action and its data (`dispatch(action, data)`, `handle(msg)`, `next(state, action, data)`). No second mutation path, no transition logic in a route handler, view, or `useEffect`. A trace window is *defined* by this boundary.
exactly the contract's state keys — a **snapshot**, never references into a live model (aliasing makes `pre === post` and every window silently reads as a no-op).
produces an explicit `reject(reason)` and a window with `pre == post` — never a `throw` (the window is lost) and never a silent `return state` (deliberate no-op and unhandled become indistinguishable).
accepts an optional observer firing once per step, after the transition settles, with `{action, data, classification}`. Defaults to a no-op; costs nothing unused. This single requirement is what replaces the instrumentation patch forever.
reads, locale formatting are constructor/config ports so a scenario can pin them at a seed. Ambient reads make deterministic re-capture impossible without redacting the very fields the transition depends on.
returns/records effect intent; a caller performs the I/O. No `await fetch(...)` mid-transition. (Also the precondition for running under polyrun, whose journal is the strongest corpus in the system.)
not bodies buried in a test runner. The same drivers serve the test suite, the demo corpus, and any later capture run.
a transition settles before the next action presents. This is an observable serialization point, not a thread-safety claim — transactional handlers, queue consumers, actor mailboxes, and per-node apply loops all satisfy it.
Only the emitter changes per language. From the CR-4 listener, write one NDJSON line per step:
{"pre":{…},"action":"NAME","data":{…},"post":{…}}`pre`/`post` are the CR-2 projection. Everything downstream — `validate_corpus.mjs`, `replay.mjs`, `check.mjs`, polyvers' stimuli gate — consumes that shape unchanged, whatever language produced it. For JS the emitters already exist (`scripts/instrument/sam-emitter.mjs` for SAM v2, `tapReducer` in `scripts/instrument/trace-emitter.mjs` for reducer shapes); for anything else, write the few lines by hand at the listener.
Reference shapes for a reducer and a service/class (and the SAM v2 one-liner) are in `docs/capture-ready.md` §"What it looks like" — a store whose `dispatch` computes `pre`, applies the pure reducer, emits, and exposes `getState()` as the projection is the whole pattern in ~10 lines, in any language.
| you are about to write | instea
Your tests check the paths you thought of. Polygraph checks the ones you didn't.
Repo: cognitive-fab/polygraph
Turn Polygraph verification artifacts into clean, brand-consistent diagrams (SVG, optional PNG). polyviz is a DETERMINISTIC, artifact-derived renderer — same…
Write NEW stateful code that is verifiable from the moment it's written, instead of auditing code that already exists (that's the "polygraph" skill). Draft a…
A polygraph for your state machine. Audit a stateful piece of code end-to-end: YOU (the agent) instrument a copy, build any test doubles needed to run it, and…
Elicit the invariants for a state machine — the plugin takes the lead. Harvest candidate invariants from the contract's own vocabulary (terminal states, typed…
Check whether a state-machine version change is safe to ship against the live fleet, and produce the migration when the shape changed. Classifies the change…
Build an LLM-era feature as a WORKFLOW, not an agentic loop — the composition skill that drives the whole toolset end-to-end. Design the stages along the data…