Individual skill
statechart
Model-check a TLA+ spec with TLC and turn the result into a reader-labeled Mermaid state diagram plus a report of the shortest path to every violated rule. Use on /statechart, to explain a bug as a walk through states, or to read any TLA+ result (formal verify skills route here).
plugins/requie/endostack/skills/statechart/SKILL.md
Source commit d780783eba4ecc7c8b9429f95c9362df95f07c61
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- Yes
- Repository scan complete
- No
- Skill scan complete
- No
- Observed behavior
- Network or broad shell
- Last checked
- Nov 4, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 1,537
- Repository last updated
- Nov 7, 2026
- License
- Apache-2.0
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- ai-coding Repository topic
- awesome Repository topic
- awesome-list Repository topic
- codex Repository topic
- codex-plugins Repository topic
- openai Repository topic
- codex-skill Repository topic
- codex-skills Repository topic
- marketplace Repository topic
- codex-marketplace Repository topic
- engineering Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
SKILL.mdcore · 11,468 bytesSKILL.mdcore · 11,468 bytesreferences/render.mddoc · 5,584 bytesscripts/README.mddoc · 4,337 bytesscripts/lib/chart.mjsruns · 22,050 bytesscripts/lib/config.mjsruns · 13,335 bytesscripts/lib/dot.mjsruns · 2,888 bytesscripts/lib/files.mjsruns · 685 bytesscripts/lib/graph.mjsruns · 12,745 bytesscripts/lib/mermaid.mjsruns · 7,968 bytesscripts/lib/pipeline.mjsruns · 7,748 bytesscripts/lib/release.mjsruns · 1,360 bytesscripts/lib/replay.mjsruns · 2,857 bytesscripts/lib/report.mjsruns · 6,871 bytesscripts/lib/sany.mjsruns · 3,250 bytesscripts/lib/tlc-output.mjsruns · 9,170 bytesscripts/lib/toolchain.mjsruns · 6,974 bytesscripts/lib/values.mjsruns · 9,975 bytesscripts/lib/verdicts.mjsruns · 6,559 bytesscripts/lib/view.mjsruns · 7,757 bytesscripts/package.jsonruns · 351 bytesscripts/statechartruns · 649 bytesscripts/statechart.mjsruns · 10,137 bytesscripts/test/chart.test.mjsruns · 9,963 bytesscripts/test/cli.test.mjsruns · 13,055 bytesscripts/test/config.test.mjsruns · 3,944 bytesscripts/test/corpus.test.mjsruns · 10,983 bytesscripts/test/corpus/big/Grid.cfgasset · 88 bytesscripts/test/corpus/big/Grid.tlaasset · 250 bytesscripts/test/corpus/big/expected/chart.mmdasset · 2,682 bytesscripts/test/corpus/big/expected/exit.txtdoc · 2 bytesscripts/test/corpus/big/expected/report.mddoc · 1,708 bytesscripts/test/corpus/big/expected/tlc.outasset · 1,327 bytesscripts/test/corpus/big/recordings/sany.jsonasset · 8,258 bytesscripts/test/corpus/big/recordings/verdict-1.jsonasset · 2,682 bytesscripts/test/corpus/big/recordings/verdict-2.jsonasset · 11,161 bytesscripts/test/corpus/commit/Commit.cfgasset · 64 bytesscripts/test/corpus/commit/Commit.tlaasset · 800 bytesscripts/test/corpus/commit/expected/chart.mmdasset · 2,221 bytesscripts/test/corpus/commit/expected/exit.txtdoc · 2 bytesscripts/test/corpus/commit/expected/report.mddoc · 493 bytesscripts/test/corpus/commit/expected/tlc.outasset · 1,421 bytesscripts/test/corpus/commit/recordings/draw.jsonasset · 11,012 bytesscripts/test/corpus/commit/recordings/sany.jsonasset · 4,386 bytesscripts/test/corpus/commit/recordings/verdict-1.jsonasset · 2,804 bytesscripts/test/corpus/commit/recordings/verdict-2.jsonasset · 3,005 bytesscripts/test/corpus/commit/view.mjsruns · 435 bytesscripts/test/corpus/counter/Counter.cfgasset · 41 bytesscripts/test/corpus/counter/Counter.tlaasset · 164 bytesscripts/test/corpus/counter/expected/chart.mmdasset · 454 bytesscripts/test/corpus/counter/expected/exit.txtdoc · 2 bytesscripts/test/corpus/counter/expected/report.mddoc · 248 bytesscripts/test/corpus/counter/expected/tlc.outasset · 1,291 bytesscripts/test/corpus/counter/recordings/draw.jsonasset · 4,640 bytesscripts/test/corpus/counter/recordings/sany.jsonasset · 7,350 bytesscripts/test/corpus/counter/recordings/verdict-1.jsonasset · 2,607 bytesscripts/test/corpus/counter/recordings/verdict-2.jsonasset · 2,980 bytesscripts/test/corpus/cut/Wide.cfgasset · 62 bytesscripts/test/corpus/cut/Wide.tlaasset · 213 bytesscripts/test/corpus/cut/expected/chart.mmdasset · 301 bytesscripts/test/corpus/cut/expected/exit.txtdoc · 2 bytesscripts/test/corpus/cut/expected/report.mddoc · 526 bytesscripts/test/corpus/cut/expected/tlc.outasset · 1,044 bytesscripts/test/corpus/cut/recordings/sany.jsonasset · 7,300 bytesscripts/test/corpus/cut/recordings/verdict-1.jsonasset · 2,216 bytesscripts/test/corpus/cut/recordings/verdict-2.jsonasset · 3,052 bytesscripts/test/corpus/deadlock-constraint/Stack.cfgasset · 53 bytesscripts/test/corpus/deadlock-constraint/Stack.tlaasset · 229 bytesscripts/test/corpus/deadlock-constraint/expected/chart.mmdasset · 345 bytesscripts/test/corpus/deadlock-constraint/expected/exit.txtdoc · 2 bytesscripts/test/corpus/deadlock-constraint/expected/report.mddoc · 417 bytesscripts/test/corpus/deadlock-constraint/expected/tlc.outasset · 1,225 bytesscripts/test/corpus/deadlock-constraint/recordings/draw.jsonasset · 3,784 bytesscripts/test/corpus/deadlock-constraint/recordings/sany.jsonasset · 7,653 bytesscripts/test/corpus/deadlock-constraint/recordings/verdict-1.jsonasset · 2,505 bytesscripts/test/corpus/deadlock-constraint/recordings/verdict-2.jsonasset · 3,007 bytesscripts/test/corpus/depths/Depths.cfgasset · 96 bytesscripts/test/corpus/depths/Depths.tlaasset · 301 bytesscripts/test/corpus/depths/expected/chart.mmdasset · 1,087 bytesscripts/test/corpus/depths/expected/exit.txtdoc · 2 bytesscripts/test/corpus/depths/expected/report.mddoc · 715 bytesscripts/test/corpus/depths/expected/tlc.outasset · 1,255 bytesscripts/test/corpus/depths/recordings/draw.jsonasset · 8,255 bytesscripts/test/corpus/depths/recordings/sany.jsonasset · 8,971 bytesscripts/test/corpus/depths/recordings/verdict-1.jsonasset · 2,565 bytesscripts/test/corpus/depths/recordings/verdict-2.jsonasset · 3,282 bytesscripts/test/corpus/depths/recordings/verdict-3.jsonasset · 3,270 bytesscripts/test/corpus/depths/recordings/verdict-4.jsonasset · 3,678 bytesscripts/test/corpus/excluded/Gate.cfgasset · 87 bytesscripts/test/corpus/excluded/Gate.tlaasset · 252 bytesscripts/test/corpus/excluded/expected/chart.mmdasset · 450 bytesscripts/test/corpus/excluded/expected/exit.txtdoc · 2 bytesscripts/test/corpus/excluded/expected/report.mddoc · 388 bytesscripts/test/corpus/excluded/expected/tlc.outasset · 1,219 bytesscripts/test/corpus/excluded/recordings/draw.jsonasset · 4,349 bytesscripts/test/corpus/excluded/recordings/sany.jsonasset · 7,969 bytesscripts/test/corpus/excluded/recordings/verdict-1.jsonasset · 2,513 bytesscripts/test/corpus/first-fails/Typo.cfgasset · 34 bytesscripts/test/corpus/first-fails/Typo.tlaasset · 117 bytesscripts/test/corpus/first-fails/expected/error.txtdoc · 58 bytesscripts/test/corpus/first-fails/expected/exit.txtdoc · 2 bytesscripts/test/corpus/first-fails/recordings/sany.jsonasset · 6,672 bytesscripts/test/corpus/first-fails/recordings/verdict-1.jsonasset · 2,309 bytesscripts/test/corpus/halt/Halt.cfgasset · 61 bytesscripts/test/corpus/halt/Halt.tlaasset · 150 bytesscripts/test/corpus/halt/expected/chart.mmdasset · 291 bytesscripts/test/corpus/halt/expected/exit.txtdoc · 2 bytesscripts/test/corpus/halt/expected/report.mddoc · 318 bytesscripts/test/corpus/halt/expected/tlc-ReachesFive.outasset · 1,437 bytesscripts/test/corpus/halt/expected/tlc.outasset · 1,437 bytesscripts/test/corpus/halt/recordings/draw.jsonasset · 3,615 bytesscripts/test/corpus/halt/recordings/sany.jsonasset · 7,001 bytesscripts/test/corpus/halt/recordings/verdict-1.jsonasset · 2,858 bytesscripts/test/corpus/hidden-clock/Clock.cfgasset · 46 bytesscripts/test/corpus/hidden-clock/Clock.tlaasset · 335 bytesscripts/test/corpus/hidden-clock/expected/chart.mmdasset · 133 bytesscripts/test/corpus/hidden-clock/expected/exit.txtdoc · 2 bytesscripts/test/corpus/hidden-clock/expected/report.mddoc · 333 bytesscripts/test/corpus/hidden-clock/expected/tlc.outasset · 1,186 bytesscripts/test/corpus/hidden-clock/recordings/draw.jsonasset · 3,905 bytesscripts/test/corpus/hidden-clock/recordings/sany.jsonasset · 8,287 bytesscripts/test/corpus/hidden-clock/recordings/verdict-1.jsonasset · 2,275 bytesscripts/test/corpus/initial/Depths.cfgasset · 118 bytesscripts/test/corpus/initial/Depths.tlaasset · 301 bytesscripts/test/corpus/initial/expected/chart.mmdasset · 989 bytesscripts/test/corpus/initial/expected/exit.txtdoc · 2 bytesscripts/test/corpus/initial/expected/report.mddoc · 329 bytesscripts/test/corpus/initial/expected/tlc.outasset · 719 bytesscripts/test/corpus/initial/recordings/draw.jsonasset · 7,730 bytesscripts/test/corpus/initial/recordings/sany.jsonasset · 8,971 bytesscripts/test/corpus/initial/recordings/verdict-1.jsonasset · 1,414 bytesscripts/test/corpus/initial/recordings/verdict-2.jsonasset · 3,259 bytesscripts/test/corpus/instance/Light.tlaasset · 417 bytesscripts/test/corpus/instance/Wrapped.cfgasset · 40 bytesscripts/test/corpus/instance/Wrapped.tlaasset · 181 bytesscripts/test/corpus/instance/expected/chart.mmdasset · 269 bytesscripts/test/corpus/instance/expected/exit.txtdoc · 2 bytesscripts/test/corpus/instance/expected/report.mddoc · 393 bytesscripts/test/corpus/instance/expected/tlc-ReachesBlue.outasset · 1,552 bytesscripts/test/corpus/instance/expected/tlc.outasset · 1,552 bytesscripts/test/corpus/instance/recordings/draw.jsonasset · 3,993 bytesscripts/test/corpus/instance/recordings/sany.jsonasset · 9,812 bytesscripts/test/corpus/instance/recordings/verdict-1.jsonasset · 2,986 bytesscripts/test/corpus/jugs/Jugs.cfgasset · 38 bytesscripts/test/corpus/jugs/Jugs.tlaasset · 552 bytesscripts/test/corpus/jugs/expected/chart.mmdasset · 1,964 bytesscripts/test/corpus/jugs/expected/exit.txtdoc · 2 bytesscripts/test/corpus/jugs/expected/report.mddoc · 462 bytesscripts/test/corpus/jugs/expected/tlc.outasset · 1,657 bytesscripts/test/corpus/jugs/recordings/draw.jsonasset · 14,905 bytesscripts/test/corpus/jugs/recordings/sany.jsonasset · 9,796 bytesscripts/test/corpus/jugs/recordings/verdict-1.jsonasset · 3,144 bytesscripts/test/corpus/jugs/recordings/verdict-2.jsonasset · 2,954 bytesscripts/test/corpus/later-fails/Later.cfgasset · 61 bytesscripts/test/corpus/later-fails/Later.tlaasset · 157 bytesscripts/test/corpus/later-fails/expected/chart.mmdasset · 347 bytesscripts/test/corpus/later-fails/expected/exit.txtdoc · 2 bytesscripts/test/corpus/later-fails/expected/report.mddoc · 873 bytesscripts/test/corpus/later-fails/expected/tlc.outasset · 1,029 bytesscripts/test/corpus/later-fails/recordings/draw.jsonasset · 4,037 bytesscripts/test/corpus/later-fails/recordings/sany.jsonasset · 7,003 bytesscripts/test/corpus/later-fails/recordings/verdict-1.jsonasset · 2,194 bytesscripts/test/corpus/later-fails/recordings/verdict-2.jsonasset · 3,538 bytesscripts/test/corpus/light/Light.cfgasset · 81 bytesscripts/test/corpus/light/Light.tlaasset · 417 bytesscripts/test/corpus/light/expected/chart.mmdasset · 264 bytesscripts/test/corpus/light/expected/exit.txtdoc · 2 bytesscripts/test/corpus/light/expected/report.mddoc · 588 bytesscripts/test/corpus/light/expected/tlc-EventuallyBlue.outasset · 2,314 bytesscripts/test/corpus/light/expected/tlc.outasset · 1,425 bytesscripts/test/corpus/light/recordings/draw.jsonasset · 3,824 bytesscripts/test/corpus/light/recordings/sany.jsonasset · 4,085 bytesscripts/test/corpus/light/recordings/verdict-1.jsonasset · 2,899 bytesscripts/test/corpus/light/recordings/verdict-2.jsonasset · 4,011 bytesscripts/test/corpus/light/recordings/verdict-3.jsonasset · 3,874 bytesscripts/test/corpus/light/recordings/verdict-4.jsonasset · 2,977 bytesscripts/test/corpus/login-regions/Session.cfgasset · 46 bytesscripts/test/corpus/login-regions/Session.tlaasset · 418 bytesscripts/test/corpus/login-regions/expected/chart.mmdasset · 443 bytesscripts/test/corpus/login-regions/expected/exit.txtdoc · 2 bytesscripts/test/corpus/login-regions/expected/report.mddoc · 133 bytesscripts/test/corpus/login-regions/expected/tlc.outasset · 1,078 bytesscripts/test/corpus/login-regions/recordings/draw.jsonasset · 4,503 bytesscripts/test/corpus/login-regions/recordings/sany.jsonasset · 3,446 bytesscripts/test/corpus/login-regions/recordings/verdict-1.jsonasset · 2,164 bytesscripts/test/corpus/login-regions/view.mjsruns · 354 bytesscripts/test/corpus/login/Login.cfgasset · 90 bytesscripts/test/corpus/login/Login.tlaasset · 632 bytesscripts/test/corpus/login/expected/chart.mmdasset · 763 bytesscripts/test/corpus/login/expected/exit.txtdoc · 2 bytesscripts/test/corpus/login/expected/report.mddoc · 662 bytesscripts/test/corpus/login/expected/tlc.outasset · 1,712 bytesscripts/test/corpus/login/recordings/draw.jsonasset · 6,120 bytesscripts/test/corpus/login/recordings/sany.jsonasset · 9,285 bytesscripts/test/corpus/login/recordings/verdict-1.jsonasset · 3,242 bytesscripts/test/corpus/login/recordings/verdict-2.jsonasset · 3,006 bytesscripts/test/corpus/login/view.mjsruns · 714 bytesscripts/test/corpus/merge/Count.cfgasset · 38 bytesscripts/test/corpus/merge/Count.tlaasset · 197 bytesscripts/test/corpus/merge/expected/chart.mmdasset · 752 bytesscripts/test/corpus/merge/expected/exit.txtdoc · 2 bytesscripts/test/corpus/merge/expected/report.mddoc · 336 bytesscripts/test/corpus/merge/expected/tlc.outasset · 1,285 bytesscripts/test/corpus/merge/recordings/draw.jsonasset · 5,522 bytesscripts/test/corpus/merge/recordings/sany.jsonasset · 7,651 bytesscripts/test/corpus/merge/recordings/verdict-1.jsonasset · 2,599 bytesscripts/test/corpus/merge/recordings/verdict-2.jsonasset · 2,963 bytesscripts/test/corpus/merge/view.mjsruns · 376 bytesscripts/test/corpus/no-init/Empty.cfgasset · 35 bytesscripts/test/corpus/no-init/Empty.tlaasset · 91 bytesscripts/test/corpus/no-init/expected/exit.txtdoc · 2 bytesscripts/test/corpus/no-init/expected/report.mddoc · 183 bytesscripts/test/corpus/no-init/expected/tlc.outasset · 951 bytesscripts/test/corpus/no-init/recordings/draw.jsonasset · 3,057 bytesscripts/test/corpus/no-init/recordings/sany.jsonasset · 1,799 bytesscripts/test/corpus/no-init/recordings/verdict-1.jsonasset · 1,969 bytesscripts/test/corpus/nodeadlock-name/Finish.cfgasset · 41 bytesscripts/test/corpus/nodeadlock-name/Finish.tlaasset · 138 bytesscripts/test/corpus/nodeadlock-name/expected/chart.mmdasset · 364 bytesscripts/test/corpus/nodeadlock-name/expected/exit.txtdoc · 2 bytesscripts/test/corpus/nodeadlock-name/expected/report.mddoc · 339 bytesscripts/test/corpus/nodeadlock-name/expected/tlc.outasset · 1,239 bytesscripts/test/corpus/nodeadlock-name/recordings/draw.jsonasset · 3,785 bytesscripts/test/corpus/nodeadlock-name/recordings/sany.jsonasset · 6,698 bytesscripts/test/corpus/nodeadlock-name/recordings/verdict-1.jsonasset · 2,506 bytesscripts/test/corpus/nodeadlock-name/recordings/verdict-2.jsonasset · 3,194 bytesscripts/test/corpus/odd-names/Odd.cfgasset · 36 bytesscripts/test/corpus/odd-names/Odd.tlaasset · 253 bytesscripts/test/corpus/odd-names/expected/chart.mmdasset · 446 bytesscripts/test/corpus/odd-names/expected/exit.txtdoc · 2 bytesscripts/test/corpus/odd-names/expected/report.mddoc · 267 bytesscripts/test/corpus/odd-names/expected/tlc.outasset · 1,135 bytesscripts/test/corpus/odd-names/recordings/draw.jsonasset · 3,942 bytesscripts/test/corpus/odd-names/recordings/sany.jsonasset · 1,784 bytesscripts/test/corpus/odd-names/recordings/verdict-1.jsonasset · 2,406 bytesscripts/test/corpus/odd-names/recordings/verdict-2.jsonasset · 2,940 bytesscripts/test/corpus/partial/Guard.cfgasset · 54 bytesscripts/test/corpus/partial/Guard.tlaasset · 160 bytesscripts/test/corpus/partial/expected/chart.mmdasset · 344 bytesscripts/test/corpus/partial/expected/exit.txtdoc · 2 bytesscripts/test/corpus/partial/expected/report.mddoc · 313 bytesscripts/test/corpus/partial/expected/tlc.outasset · 1,023 bytesscripts/test/corpus/partial/recordings/draw.jsonasset · 4,442 bytesscripts/test/corpus/partial/recordings/sany.jsonasset · 7,323 bytesscripts/test/corpus/partial/recordings/verdict-1.jsonasset · 2,181 bytesscripts/test/corpus/past/Tank.cfgasset · 59 bytesscripts/test/corpus/past/Tank.tlaasset · 212 bytesscripts/test/corpus/past/expected/chart.mmdasset · 427 bytesscripts/test/corpus/past/expected/exit.txtdoc · 2 bytesscripts/test/corpus/past/expected/report.mddoc · 411 bytesscripts/test/corpus/past/expected/tlc.outasset · 1,373 bytesscripts/test/corpus/past/recordings/draw.jsonasset · 4,193 bytesscripts/test/corpus/past/recordings/sany.jsonasset · 7,650 bytesscripts/test/corpus/past/recordings/verdict-1.jsonasset · 2,757 bytesscripts/test/corpus/past/recordings/verdict-2.jsonasset · 2,967 bytesscripts/test/corpus/player/Player.cfgasset · 105 bytesscripts/test/corpus/player/Player.tlaasset · 787 bytesscripts/test/corpus/player/expected/chart.mmdasset · 951 bytesscripts/test/corpus/player/expected/exit.txtdoc · 2 bytesscripts/test/corpus/player/expected/report.mddoc · 971 bytesscripts/test/corpus/player/expected/tlc-StopsForever.outasset · 2,300 bytesscripts/test/corpus/player/expected/tlc.outasset · 1,077 bytesscripts/test/corpus/player/recordings/draw.jsonasset · 5,847 bytesscripts/test/corpus/player/recordings/sany.jsonasset · 5,100 bytesscripts/test/corpus/player/recordings/verdict-1.jsonasset · 2,369 bytesscripts/test/corpus/player/recordings/verdict-2.jsonasset · 4,008 bytesscripts/test/corpus/player/recordings/verdict-3.jsonasset · 3,895 bytesscripts/test/corpus/player/recordings/verdict-4.jsonasset · 3,963 bytesscripts/test/corpus/player/recordings/verdict-5.jsonasset · 2,998 bytesscripts/test/corpus/player/view.mjsruns · 399 bytesscripts/test/corpus/sany-error/Broken.cfgasset · 20 bytesscripts/test/corpus/sany-error/Broken.tlaasset · 54 bytesscripts/test/corpus/sany-error/expected/error.txtdoc · 56 bytesscripts/test/corpus/sany-error/expected/exit.txtdoc · 2 bytesscripts/test/corpus/sany-error/recordings/sany.jsonasset · 666 bytesscripts/test/corpus/symmetry/Pool.cfgasset · 82 bytesscripts/test/corpus/symmetry/Pool.tlaasset · 299 bytesscripts/test/corpus/symmetry/expected/chart.mmdasset · 399 bytesscripts/test/corpus/symmetry/expected/exit.txtdoc · 2 bytesscripts/test/corpus/symmetry/expected/report.mddoc · 409 bytesscripts/test/corpus/symmetry/expected/tlc.outasset · 1,571 bytesscripts/test/corpus/symmetry/recordings/draw.jsonasset · 4,238 bytesscripts/test/corpus/symmetry/recordings/sany.jsonasset · 37,654 bytesscripts/test/corpus/symmetry/recordings/verdict-1.jsonasset · 2,890 bytesscripts/test/corpus/symmetry/recordings/verdict-2.jsonasset · 2,996 bytesscripts/test/graph.test.mjsruns · 3,426 bytesscripts/test/index.jsruns · 721 bytesscripts/test/live.test.mjsruns · 7,612 bytesscripts/test/package.jsonruns · 41 bytesscripts/test/support/corpus.mjsruns · 1,804 bytesscripts/test/support/record.mjsruns · 2,429 bytesscripts/test/tlc-output.test.mjsruns · 4,934 bytesscripts/test/values.test.mjsruns · 4,491 bytesscripts/test/view.test.mjsruns · 5,022 bytes
Read excerpt
# statechart
Run TLC on a TLA+ spec of anything with discrete states (a signup flow, a network protocol, a job queue) and present the result in the terms of the person who has to judge it. The tool writes a Mermaid state diagram and a markdown report that gives, for every violated rule, the shortest sequence of steps that reaches the violation.
Verify skills produced by the `create-formal-verification-skill` skill ([../create-formal-verification-skill/SKILL.md](../create-formal-verification-skill/SKILL.md)) send their TLA+ results here. Do not use this skill for other formalisms or for systems with no meaningful discrete state.
The CLI is `scripts/statechart`. Its flags, environment variables, and exit codes are documented in [scripts/README.md](scripts/README.md) and in its usage text; this file covers how to use it well.
## Running it
1. Copy the spec and its config into a throwaway directory outside the repo (`mktemp -d`), so generated files never land in a commit.
2. Run `scripts/statechart <spec.tla>`, adding the config, view, and output-folder flags from the README as needed. By default it reads the `.cfg` beside the spec and writes to a new `<spec>-chart` folder. The output folder must be absent or empty.
3. The first run downloads a pinned TLA+ tools jar (checked against a SHA-256), so it needs network access once. It never installs Java: you need Java 11 or later on `PATH`, or `JAVA` pointing at one. Read the README for the variables that point it at a jar you already have or block the download.