Skip to content
Join free
waynesutton

State Machines skill

Finds the implicit state machines in an app: status, state, stage, phase, and step fields, groups of booleans that act like one status, and flows spread across UI, mutations, webhooks, and scheduled jobs. Reports every state, every function that moves it, who can trigger each move, and the problems, then proposes an explicit transition map. Report only by default.

$npx alyn-cli add state-machines
View this skill on GitHubwaynesutton/builder-skills/skills/state-machines/SKILL.md
Pack stars
404
Pack installs
38k
Alyn Score
64/99
Updated
2 days ago
License
Apache-2.0

waynesutton

State Machines

What is the State Machines skill?

State Machines is a coding skill by waynesutton for Claude Code, Cursor, Codex and other AI coding agents. Finds the implicit state machines in an app: status, state, stage, phase, and step fields, groups of booleans that act like one status, and flows spread across UI, mutations, webhooks, and scheduled jobs. Reports every state, every function that moves it, who can trigger each move, and the problems, then proposes an explicit transition map. Report only by default.

An implicit state machine is a field, or a group of fields, that moves through stages with no written list of allowed moves. The list exists anyway. It is spread across every function that writes the field, and nobody has read it in one place.

What the SKILL.md covers

  • What counts
  • Run the audit
  • Report format
  • 1. orders.status
  • Fixing a machine
  • Hand offs
  • Never
Author
waynesutton
Pack
waynesutton/builder-skills (23 skills)
Category
Coding, #875 of 1763
Alyn Score
64 / 99
Files
5, includes references
License
Apache-2.0
Last updated
2 days ago
Works with
Claude Code, Claude, Cursor, Codex, Gemini CLI, Copilot

State Machines compared to similar skills

SkillAlyn ScoreGitHub starsUpdated
State Machines · waynesutton644042 days ago
Dsh Find Simplifications · qufei1993451.9k2 days ago
Steve Jobs Perspective · alchaincyf599816 days ago
Find State Machines · dzhng581.5k2 days ago

Install State Machines

Pick your agent. Every command is ready to paste.

$npx alyn-cli add state-machines

Detects your agents (Claude Code, Cursor, Codex and 70+ more) and installs to the right folder. Add -g to install globally.

$npx skills add waynesutton/builder-skills --skill state-machines

Or use the open skills CLI directly.

01

Install it

Run the command above, or upload the folder in Claude.

02

Ask naturally

Describe the task. Your agent loads state-machines when the request matches its description.

03

Name it if needed

If it does not trigger, say “use the state-machines skill”. In Codex, type $state-machines.

The skill itself

SKILL.md

FolderGitHub

State machines

An implicit state machine is a field, or a group of fields, that moves through stages with no written list of allowed moves. The list exists anyway. It is spread across every function that writes the field, and nobody has read it in one place.

This skill reads it in one place. It writes a report. It changes no code until the user picks a machine to fix.

Most of what it finds is product design and bugs. The part an attacker can use belongs to sec-check rule 21.

What counts

  • A field named status, state, stage, phase, or step (draft, pending, paid, shipped, refunded).
  • A group of booleans that act like one status: isPaid, isApproved, isRejected, isPublished.
  • A timestamp that doubles as a flag: paidAt, deletedAt, completedAt, verifiedAt.
  • A flow spread across UI, mutations, webhooks, and scheduled jobs: onboarding, checkout, invites, approvals, AI jobs, uploads.

Run the audit

Work at the repo root with the whole repo open. On a Convex app, start with convex/schema.ts, then convex/**/*.ts, convex/http.ts, and convex/crons.ts.

  1. Find the fields. Search the schema and types:

    rg -n "\b(status|state|stage|phase|step)\b\s*[:=]" convex src --glob '!**/_generated/**'
    rg -n "\bis[A-Z]\w+:\s*v\.(boolean|optional)" convex/schema.ts
    rg -n "\w+At:\s*v\.(number|optional)" convex/schema.ts
    

    Group booleans and timestamps on the same table that describe one lifecycle. Each group is one machine.

  2. List the states. Read the validator (v.union(v.literal(...))) and every literal written in code. A value written in code but missing from the validator, or the reverse, is a finding.

  3. Find every writer. For each machine, list every ctx.db.patch, ctx.db.insert, and ctx.db.replace that sets the field. Search by field name, not by table. Include webhooks, crons, scheduled functions, and migrations. For each writer record the move: from which states (what it checks before writing, or "any" when it checks nothing) and to which state.

  4. Find who can trigger each move. Public, signed in, owner, admin, verified webhook, or internal. A public function that calls an internal one makes the move public.

  5. Find the side effects. Emails, payments, payouts, AI calls, and scheduled jobs tied to a move. Note whether each one runs in the mutation that makes the move, before it, or from the client.

  6. Check for problems. Use references/problems.md. It lists each problem, how to spot it, and the fix.

  7. Write the report. Use the format below. Order machines by risk: money, access, and one time moves first.

  8. Stop. Do not edit code. Ask which machine to fix first.

Report format

# State machines: PROJECT

Found N machines. M have problems. Date, commit.

## 1. orders.status

States: draft, pending, paid, cancelled, refunded
Lives in: `orders` (convex/schema.ts:42)

| Move | Function | Who can trigger | Checks current state | Side effects |
| --- | --- | --- | --- | --- |
| draft -> pending | orders:submit (public mutation) | owner | yes | none |
| any -> paid | orders:setStatus (public mutation) | any signed in user | no | receipt email, from the client |

Problems:
1. `orders:setStatus` takes the new status from args. Any signed in user can mark an order paid. Security: sec-check rule 21.
2. Nothing moves `pending` to `cancelled`. Abandoned orders stay pending forever.

Proposed transition map:

    draft: [pending]
    pending: [paid, cancelled]
    paid: [refunded]
    cancelled: []
    refunded: []

Fixes, in order:
1. Replace `setStatus` with named mutations. `markPaid` becomes internal, called by the verified webhook.
2. Add a cron that cancels orders pending for more than 24 hours.

Mark each problem as security, bug, or design. Say "none found" for a clean machine and keep it in the report, so the next run can compare.

Fixing a machine

Only after the user picks one. Fix one machine at a time.

  1. Type the field as a union of literals in the schema, so a typo cannot add a state.
  2. Put the allowed moves in one map with one helper that throws on a move not in the map. The helper and a full Convex example are in references/problems.md.
  3. Replace generic setters with named mutations that set a fixed status.
  4. Move the read, the check, and the write into one mutation. A Convex mutation is a transaction, so the check and the write cannot be split by another caller.
  5. Schedule side effects from the mutation that makes the move. A function scheduled from a mutation runs only if the mutation commits.
  6. If existing rows hold states the new map does not allow, plan a migration before tightening the validator. Use the official Convex migration skills for that.
  7. Add a test that calls a move out of order and expects it to throw.

For Convex APIs, check https://docs.convex.dev/llms.txt before relying on memory.

Hand offs

Found Goes to
A move an attacker can make with curl, or a one time move that runs twice sec-check rule 21, with the start state, the call, and the end state
A fix that touches three or more files or the schema create-prd
The fix landed update-project-docs
The audit turns up ideas beyond the machine being fixed avoid-feature-creep: list them, do not build them

Never

  • Change code during the audit. The report comes first.
  • Invent a state or a move the code does not show. Quote the file and line for every writer.
  • Call a design gap a security finding. It needs a reachable bad move.
  • Fix several machines in one change.

Tips for State Machines

  • • Start a fresh session after installing so your agent picks up the new skill.
  • • It bundles reference files. The agent reads them only when needed, so they cost no context until then.
  • • It is part of a pack with 23 skills. Install only the ones you need with --skill to keep triggers precise.
  • • If two skills overlap, mention the one you want by name.

Questions about State Machines

What does the State Machines skill do?

Finds the implicit state machines in an app: status, state, stage, phase, and step fields, groups of booleans that act like one status, and flows spread across UI, mutations, webhooks, and scheduled jobs. Reports every state, every function that moves it, who can trigger each move, and the problems, then proposes an explicit transition map. Report only by default.

How do I install State Machines?

Run "npx alyn-cli add state-machines" in your project. The Alyn CLI installs it for Claude Code, Cursor, Codex and 70+ other agents. In Claude on the web, upload the skill folder as a ZIP under Customize > Skills.

Does State Machines work in Cursor and Codex?

Yes. State Machines uses the open SKILL.md format, so it works in Claude Code, Claude, Cursor, OpenAI Codex, Gemini CLI, GitHub Copilot and other agents that support agent skills.

What is inside the State Machines skill?

The SKILL.md covers What counts, Run the audit, Report format, 1. orders.status, Fixing a machine, Hand offs, and the skill folder has 5 files.

What is a good alternative to State Machines?

Dsh Find Simplifications by qufei1993 is the highest-ranked similar skill from another creator, with an Alyn Score of 45 compared to 64 for State Machines.

Is State Machines free?

State Machines is open source on GitHub under the Apache-2.0 license. It is free to install; check the license before commercial use.

Who made State Machines?

State Machines is published by waynesutton in the waynesutton/builder-skills repository, together with 22 other skills.

Similar skills. From other creators.