Inkcheck is a mechanical quality assurance (QA) tool for ink interactive fiction. It does not generate, rewrite, or send any prose content; instead, it compiles stories with the official ink compiler, explores choice paths within explicit limits, and reproduces failures before players find them. It can be used as a standalone CLI and offers optional CI and MCP integrations.
Main capabilities:
- Compile checks: compile stories with the official ink compiler.
- Bounded systematic branch exploration: deterministically explore reachable story states within explicit limits, report the exact reproduction path for discovered issues, and show where and why coverage is incomplete.
- Dead content detection: find unreachable nodes and dead content.
- Ending detection: find every distinct ending.
- Assertions: use typed data rules (not JavaScript or arbitrary Ink expressions), supporting ==, !=, <, <=, >, >= comparisons, as well as all, any, and not combined conditions; rules can run always, on terminal states, or when entering a named knot; violating a rule fails CI and provides observed values and an exact indexed replay witness.
- Goals: use the same non-executable condition syntax to guide exploration, but do not fail CI; goalMaxStates or --goal-states can be set to add deterministic goal-proximity slices.
- Staged goals: for late-stage composite dependencies, multiple ordered stages can be used.
- Persistent campaigns: MCP agents can start persistent campaigns in quick, balanced, deep, overnight, or campaign mode; humans can also use the same persistence strategy.
- Result window: returns stable policy IDs, allocation reasons, measured preferred output, throughput/resource evidence, empirical ranges with uncertainty markers, binding constraints, and report IDs.
- Rules (version 0.7): authors can declare invariants in managed checkers, local configuration, CI, and MCP, such as gold >= 0; the web flow detects declared Ink variables to assist selection, but the server remains authoritative.
- Private QA evidence pinning (0.7.2): approved runtime, assertion, or goal witnesses can be rechecked after edits without searching again.
Usage: Requires Node.js 18 or later, no global installation required. First runDownloads a pinned official ink compiler, verifies its SHA-256 hash, and processes stories locally.
- Project configuration: inkcheck.yml can be committed to pin the entry point and bounded CI settings; use inkcheck validate-config to check the configuration.
- New projects: for projects containing a single .ink file, inkcheck init creates a configuration; multi-file projects must specify the root file with --entrypoint; inkcheck agent-kit --format codex adds configuration when needed.
- Campaign mode: inkcheck campaign story.ink runs the balanced intent; --mode quick, deep, or overnight selects the outcome and time posture.
Applicable scenarios:
- Writers and teams performing mechanical QA and regression testing on ink stories.
- Compilation checks, branch exploration, and assertion verification in CI systems.
- Optional AI coding agents driving the same mechanical QA checks via MCP.
Limitations:
- This tool is a QA tool, not a writing tool; it does not generate or rewrite text.
- It does not itself use AI, machine learning, LLMs, or generative models.
- It cannot prove that a large interactive story is bug-free; combinatorial explosion, loops, variables, randomness, and host game code may produce states beyond what any tool can exhaustively visit.
- A bounded clean run only means "no violations observed"; only an exhaustive run reports that a rule has been exhaustively verified.
- When a target is not reached, it reports not_reached_within_limits, unless exhaustive exploration actually proves it unreachable.
- Partial coverage cannot be described as complete coverage.
- Dynamic allocation, long-tail expansion, rotation, and stopping are currently still experimental or shadow-only and have not been broadly rolled out.
Specific information such as pricing, fees, and platform support is not yet provided.