Moonbit Docs Maintainer
moonbitlang/moonbit-docs
A skill your agent uses when maintaining the moonbitlang/moonbit-docs repository, including Sphinx docs under next/, MoonBit examples under next/sources/, error-code documentation, gettext…
Quint language and CLI reference — the expert on Quint syntax, operators, types, basicSpells, the toolchain (typecheck/run/test/verify), and how to read simulation and counterexample output.
$ npx skills add quint-co/quint-llm-kit --skill quint-lang -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install quint-co/quint-llm-kit quint-lang --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/quint-co/quint-llm-kit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/quint-llm-kit-plugin/skills/quint-lang .claude/skills/quint-lang && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "quint-lang" agent skill from https://github.com/quint-co/quint-llm-kit/tree/main/quint-llm-kit-plugin/skills/quint-lang into .claude/skills/quint-lang/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "quint-lang", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/quint-co/quint-llm-kit/tree/main/quint-llm-kit-plugin/skills/quint-langType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add quint-co/quint-llm-kit --skill quint-lang -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install quint-co/quint-llm-kit quint-lang --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/quint-co/quint-llm-kit.git skills-src && mkdir -p .agents/skills && cp -r skills-src/quint-llm-kit-plugin/skills/quint-lang .agents/skills/quint-lang && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "quint-lang" agent skill from https://github.com/quint-co/quint-llm-kit/tree/main/quint-llm-kit-plugin/skills/quint-lang into .agents/skills/quint-lang/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "quint-lang", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add quint-co/quint-llm-kit --skill quint-lang -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install quint-co/quint-llm-kit quint-lang --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/quint-co/quint-llm-kit.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/quint-llm-kit-plugin/skills/quint-lang .cursor/skills/quint-lang && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "quint-lang" agent skill from https://github.com/quint-co/quint-llm-kit/tree/main/quint-llm-kit-plugin/skills/quint-lang into .cursor/skills/quint-lang/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "quint-lang", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/quint-co/quint-llm-kit.git --path quint-llm-kit-plugin/skills/quint-lang--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add quint-co/quint-llm-kit --skill quint-lang -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install quint-co/quint-llm-kit quint-lang --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/quint-co/quint-llm-kit.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/quint-llm-kit-plugin/skills/quint-lang .gemini/skills/quint-lang && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "quint-lang" agent skill from https://github.com/quint-co/quint-llm-kit/tree/main/quint-llm-kit-plugin/skills/quint-lang into .gemini/skills/quint-lang/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "quint-lang", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install quint-co/quint-llm-kit quint-langInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add quint-co/quint-llm-kit --skill quint-lang -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/quint-co/quint-llm-kit.git skills-src && mkdir -p .github/skills && cp -r skills-src/quint-llm-kit-plugin/skills/quint-lang .github/skills/quint-lang && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "quint-lang" agent skill from https://github.com/quint-co/quint-llm-kit/tree/main/quint-llm-kit-plugin/skills/quint-lang into .github/skills/quint-lang/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "quint-lang", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add quint-co/quint-llm-kit --skill quint-lang -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install quint-co/quint-llm-kit quint-lang --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/quint-co/quint-llm-kit.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/quint-llm-kit-plugin/skills/quint-lang .opencode/skills/quint-lang && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "quint-lang" agent skill from https://github.com/quint-co/quint-llm-kit/tree/main/quint-llm-kit-plugin/skills/quint-lang into .opencode/skills/quint-lang/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "quint-lang", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
quint-langQuint language and CLI reference — the expert on Quint syntax, operators, types, basicSpells, the toolchain (typecheck/run/test/verify), and how to read simulation and counterexample output.
Quint Lang is an agent skill from quint-co/quint-llm-kit. Quint language and CLI reference — the expert on Quint syntax, operators, types, basicSpells, the toolchain (typecheck/run/test/verify), and how to read simulation and counterexample output. Use when writing or debugging the contents of a .qnt file, fixing a typecheck/parse error, looking up an operator or idiom, analyzing an invariant violation or counterexample trace, or optimizing state-space exploration. This is for working IN Quint at the language level — not for analyzing or running TLA+/TLC itself. For…
Its SKILL.md is about 4.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files (for example `guidelines/choreo.md`, `guidelines/cli.md` and `guidelines/constraints.md`).
It sits in Development, covering Translation. The repository describes itself as: Agents and tools for using Quint with LLMs. The licence is Apache-2.0.
Read from SKILL.md and the folder at commit cc75369. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are quint).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Quint Lang loads about 4.3k tokens when it runs. Until then it costs about 221 tokens; SKILL.md has 1,218 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from quint-co/quint-llm-kit at commit cc75369, republished under its Apache-2.0 licence (© quint-co). 1,218 words, ~4,263 tokens.
.claude/skills/quint-lang/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.Quint is an executable specification language for complex systems, developed by Informal Systems. It compiles to TLA+ and supports simulation and model checking.
module MyProtocol {
// type aliases, constants, state, actions, properties
}Modules can import others:
import Voting.* // all definitions
import Voting(quorum) // specific definition
import Voting as V // namespace alias| Type | Description | Example |
|---|---|---|
int | Integers | -1, 0, 42 |
bool | Booleans | true, false |
str | Strings | "hello" |
Set[T] | Finite set | Set(1, 2, 3) |
List[T] | Ordered sequence | List(1, 2, 3) |
K -> V | Key-value map (type is K -> V, not Map[K, V]) | value: Map("a" -> 1) |
(T1, T2) | Tuple | (1, "x") |
{ f: T, g: U } | Record | { x: 1, ok: true } |
T | U | Sum (variant) | (use type alias) |
Type aliases:
type NodeId = int
type Phase = Idle | Propose | Vote | Commit // enum — prefer over string literals// Module parameter — fixed at instantiation, not a state variable
const N: int
const Nodes: Set[str]
// Pure function — no state access, usable anywhere
pure def max(a: int, b: int): int = if (a > b) a else b
// Stateful operator — can read vars, takes arguments (unlike val)
def isActive(n: str): bool = active.contains(n)
// State-reading value — can read vars, no arguments
val quorum: bool = votes.size() * 2 > nodes.size()
// Compile-time constant
pure val N: int = 4
val threshold: int = N / 2 + 1const vs pure val: const is a module parameter bound at instantiation (import A(N = 3)); pure val is a fixed expression computed once. def vs val: def takes arguments; val does not.
type LocalState = {
leader: int,
phase: Phase, // enum (see Type aliases) — prefer over a bare str
votes: Set[int],
log: List[str],
}
var localState: LocalState // cohesive local protocol state
var peers: int -> str // independent concern (peer metadata)State variables can only be read in val definitions and actions; they cannot be read in pure def.
Actions describe state transitions. They return bool — true if the action fires.
action init: bool = all {
leader' = 0,
phase' = Idle,
votes' = Set(),
log' = List(),
state' = Map(),
}
action propose(node: int): bool = all {
phase == Idle,
node > 0,
leader' = node,
phase' = Propose,
votes' = votes,
log' = log,
state' = state,
}Key rules:
var must be assigned in every action (use x' = x to leave unchanged).all { ... } — all sub-expressions must hold (conjunction). Guards are plain boolean expressions inside all { }.any { ... } — at least one must hold (disjunction); the REPL picks non-deterministically.action step: bool = any {
propose(1),
propose(2),
vote,
timeout,
}
// Non-deterministic choice from a set
action deliverMessage: bool = {
nondet msg = pending.oneOf()
all {
pending.size() > 0,
delivered' = delivered.union(Set(msg)),
pending' = pending.exclude(Set(msg)),
// ... other vars unchanged
}
}Set(1, 2, 3).contains(2) // true
Set(1, 2).union(Set(2, 3)) // Set(1, 2, 3)
Set(1, 2, 3).intersect(Set(2, 3)) // Set(2, 3)
Set(1, 2, 3).exclude(Set(2)) // Set(1, 3)
Set(1, 2, 3).filter(x => x > 1) // Set(2, 3)
Set(1, 2, 3).map(x => x * 2) // Set(2, 4, 6)
Set(1, 2, 3).fold(0, (acc, x) => acc + x) // 6
Set(1, 2, 3).size() // 3
Set(1, 2, 3).forall(x => x > 0) // true
Set(1, 2, 3).exists(x => x > 2) // true
1.to(5) // Set(1, 2, 3, 4, 5)
nondet x = Set(1, 2, 3).oneOf() // non-deterministic pick — only valid in nondet bindingsList(1, 2, 3).head() // 1
List(1, 2, 3).tail() // List(2, 3)
List(1, 2, 3).length() // 3
List(1, 2, 3).nth(1) // 2 (0-indexed)
List(1, 2, 3).append(4) // List(1, 2, 3, 4)
List(1, 2).concat(List(3, 4)) // List(1, 2, 3, 4)
List(1, 2, 3).foldl(0, (acc, x) => acc + x) // 6
List(1, 2, 3).select(x => x > 1) // List(2, 3)Map("a" -> 1, "b" -> 2).get("a") // 1
Map("a" -> 1).put("b", 2) // Map("a" -> 1, "b" -> 2)
Map("a" -> 1, "b" -> 2).keys() // Set("a", "b")
Set(1, 2, 3).mapBy(k => k * 2) // Map(1 -> 2, 2 -> 4, 3 -> 6) — set of keys → mapRecords group related fields into a named type. They are the primary tool for modelling structured state in Quint.
type NodeState = {
phase: Phase, // enum: Idle | Propose | Vote | Commit
voted: bool,
log: List[int],
}
type Message = {
from: int,
to: int,
round: int,
payload: str,
}val n: NodeState = { phase: Idle, voted: false, log: List() }
n.phase // Idle
n.voted // false{ ...n, phase: Propose } // ✅ preferred — idiomatic, handles multiple fields
{ ...n, voted: true, phase: Vote } // ✅ multiple fields at once
n.with("phase", Propose) // ⚠️ valid but non-idiomatic — field name is a string literalTLA+ specs typically flatten all state into independent top-level variables. Quint's type system lets you group them. When fields describe one cohesive local state, make a record type and use a single state variable of that type.
Group into a record when:
Keep flat when:
Preferred (cohesive local state):
type LocalState = {
id: int,
phase: Phase,
est1: int,
est2: Option[int], // Option is from basicSpells, not built in — see Basic spells below
round: int,
crashed: bool,
leader: int,
received_messages: Set[Message],
}
var localState: LocalStateAvoid for cohesive local state:
var id: int
var phase: Phase
var est1: int
var est2: Option[int]
var round: int
var crashed: bool
var leader: int
var received_messages: Set[Message]For N actors, use a map of grouped records:
type LocalState = { phase: Phase, votedFor: int, log: List[int] }
var nodes: int -> LocalState
action commit(id: int): bool = {
val node = nodes.get(id)
all {
node.phase == Vote,
nodes' = nodes.put(id, {...node, phase: Commit}),
}
}type ClusterState = {
nodes: int -> NodeState,
leader: int,
epoch: int,
}
var cluster: ClusterState
// Read nested field:
cluster.nodes.get(1).phase
// Update nested field (must rebuild from the inside out):
val updated = {...cluster.nodes.get(1), phase: Commit}
cluster' = {...cluster, nodes: cluster.nodes.put(1, updated)}var inFlight: Set[Message]
action send(src: int, dst: int, r: int, p: str): bool = all {
inFlight' = inFlight.union(Set({ from: src, to: dst, round: r, payload: p })),
// ...
}
// Filter by field:
inFlight.filter(m => m.to == nodeId)
inFlight.exists(m => m.round == currentRound and m.payload == "vote")Sum types (variants) represent a value that can be one of several distinct cases.
type Action =
| Propose({ value: int, proposer: int })
| Vote({ value: int, voter: int })
| Decide({ value: int })Each variant has a named constructor and carries one payload. A constructor takes exactly one argument — wrap multiple fields in a record (as above) or a tuple.
Construct a value by calling the constructor:
val a: Action = Propose({ value: 1, proposer: 2 })Pattern-match with match, binding the payload:
pure def describeAction(a: Action): str =
match a {
| Propose(p) => "proposal"
| Vote(v) => "vote"
| Decide(d) => "decision"
}Use _ to ignore the payload when you only care which variant it is:
match a {
| Propose(_) => "proposal"
| _ => "other"
}Use sum types when a message, event, or state can take structurally different forms — not just different values of the same type.
Enum types are a special case of sum types where each case has no additional data.
type Phase = Idle | Propose | Vote | Commit
var phase: Phase
if (phase == Propose) { ... }Before writing var declarations, answer these questions for each candidate group:
| Question | Group → record if... | Keep flat if... |
|---|---|---|
| Do these vars always change together? | Yes, in most actions | No, they're independent |
| Do they describe the same entity? | Same node / same message / same round | Different concerns |
| Is there one instance or N instances? | Either one or N (group if cohesive; for N use Id -> RecordType) | Flat only when concerns are truly independent |
| Do invariants relate them? | Invariant spans multiple fields of one entity | Invariant uses vars independently |
not(p) // negation — Quint has no ! operator
p and q // conjunction
p or q // disjunction
p implies q // p => q (not(p) or q)
p iff q // p == q for booleans
and { p1, p2, p3 } // block form — equivalent to p1 and p2 and p3
or { p1, p2, p3 } // block form — at least one must holdand { } and or { } are the same operators as all { } and any { } in actions — use whichever reads more naturally in context.
// Safety invariant — must hold in every reachable state
// @invariant
val noDuplicateLeader: bool =
leaders.size() <= 1
// Temporal property — evaluated over traces
// @temporal
temporal eventualProgress: bool =
eventually(committed.size() > 0)
// Temporal operators
eventually(p) // p holds in some future state
always(p) // p holds in all future states
p.implies(q) // p => qassume nodeCountPositive = N > 0
assume quorumMajority = 2 * quorum > NAn assume states a premise about constants, but it is not enforced — a violated assume
is silently ignored by quint typecheck, quint run, and quint verify (none of them flags
it). It is documentation, not a checked constraint. To actually check a condition on
constants, write a run test that asserts it (it executes and fails when the condition is
false):
run quorumAssumptionTest = all {
2 * quorum > N,
N > 0,
}Run it with quint test; the test fails (reporting which conjunct broke) if a constant
assignment violates the condition.
if (x > 0) "positive" else "non-positive"
val result = {
val doubled = x * 2
doubled + 1
}Prefer CLI commands (quint typecheck, quint run, quint test, quint verify) for all validation and execution tasks. Open the REPL (quint or quint -r spec.qnt::ModuleName) only when you need expression-level interaction the CLI does not provide.
Type inspection:
>>> :type myExpressionSplit specs across two files:
<protocol-name>.qnt # main module — step, init, vars, invariants
<protocol-name>_test.qnt # test module — run tests and scenario witnesses (imports main)Main module (<protocol-name>.qnt):
init, actions, and safety invariantsstep must live in the main module — it is the entry point for quint run simulationmodule myProtocol in myProtocol.qntTest module (<protocol-name>_test.qnt):
import myProtocol.*)run tests and scenario witnesses invoked via quint test or quint runstep from the main module through the import--main to pass for quint runquint run must receive the module that owns the property being checked:
| Property location | Correct --main |
|---|---|
| Invariant defined in main module | main module name |
Witness / run test defined in test module | test module name (it imports step from main) |
The primitive's module_name field (set during indexing) always holds the correct value. Use it directly — do not derive from the filename.
Many useful operators are not built into Quint but are available in basicSpells.qnt, a standard library shipped with most Quint projects. Import it with:
import basicSpells.* from "./basicSpells"Key definitions it provides:
| Definition | What it does |
|---|---|
type Option[a] = Some(a) | None | The option type — Quint has no built-in Option. Any spec field typed Option[T] depends on this import. |
unwrap(o) | The value inside Some; undefined on None |
require(cond) | Blocks the action if cond is false (cleaner than bare all { cond, ... }) |
values(m) | Set of all values in map m |
transformValues(m, f) | New map with f applied to every value |
has(m, key) | True if key is bound in m |
getOrElse(m, key, default) | m.get(key) if present, otherwise default |
mapRemove(m, key) / mapRemoveAll(m, ks) | Copy of m without key (or without the set of keys ks) |
setRemove(s, e) / setAdd(s, e) | Copy of set s without / with element e |
find(s, f) / findFirst(l, f) | First element of set / list satisfying f, as Option |
max(i, j) / min(i, j) / abs(i) | Max / min of two integers; absolute value |
When you see a spec using Option, require, values, or transformValues without an import, it is relying on basicSpells — check whether the project includes it. (Less common operators live in a sibling rareSpells.qnt.)
Detailed references — read these when you need more than the quick reference above:
| File | Contents |
|---|---|
guidelines/operators.md | Complete operator reference: extended set/list/map operators, run/then/expect/reps for tests and witnesses, temporal fairness, q::debug |
guidelines/simulations.md | Witnesses vs invariants, result interpretation, progressive increase protocol, trace analysis, coverage standard |
guidelines/constraints.md | Hard language limitations: no string ops, no nested match, no destructuring, no loops, no early returns |
guidelines/cli.md | Full CLI reference: quint run, quint test, quint verify flags, verbosity guide, reading output |
guidelines/patterns.md | 14 core patterns: State Type, Pure Functions, Thin Actions, Map Pre-population, Syntax Rules, Undefined Behavior, Witnesses, Nondeterministic Testing, Separate Test Files, REPL-First Debugging, Separate Concerns First, Extract System Model, Types-First Scaffolding, Logic Stubs |
guidelines/tests.md | Writing and debugging tests: run/then/expect/reps/fail, nondeterministic tests, error location ≠ failure point, frame counting, REPL-first debugging |
guidelines/choreo.md | Choreo framework for distributed protocols: two-file split, choreo::cue pattern, .with_cue().perform() testing, witness-based test discovery |
© quint-co, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 7 other files in quint-llm-kit-plugin/skills/quint-lang of quint-co/quint-llm-kit.
Open the folder on GitHubat commit cc75369
Quint Lang next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Quint Lang this skillquint-co/quint-llm-kit | 104 | — | ~4.3k | Automated safety check: Pass | Apache-2.0 | |
| Moonbit Docs Maintainermoonbitlang/moonbit-docs | 2.5k | — | ~1.1k | Automated safety check: Pass | Custom licence | |
| D2mcpp Authoringmcpp-community/d2mcpp | 1.8k | — | ~2.7k | Automated safety check: Pass | Custom licence | |
| Staticphp Documentation Synccrazywhalecc/static-php-cli | 1.9k | — | ~2.2k | Automated safety check: Pass | MIT | |
| Publish ReleaseAyuilos/Miffan | 217 | — | ~680 | Automated safety check: Pass | AGPL-3.0 | |
| Translate It Doc En Zhmxsm/rocketmq-rust | 1.5k | — | ~1.2k | Automated safety check: Pass | Apache-2.0 |
moonbitlang/moonbit-docs
A skill your agent uses when maintaining the moonbitlang/moonbit-docs repository, including Sphinx docs under next/, MoonBit examples under next/sources/, error-code documentation, gettext…
mcpp-community/d2mcpp
Authoring conventions, design principles, and file formats for the d2mcpp (D2X) Modern C++ tutorial project.
crazywhalecc/static-php-cli
Synchronize bilingual documentation when StaticPHP v3 user-facing or developer-facing documentation must change.
Ayuilos/Miffan
Publish a GitHub release for this fork, with a bilingual changelog that separates fork-owned changes from changes introduced by upstream merges.
mxsm/rocketmq-rust
Translate English IT and software engineering documents into professional, accurate Chinese.
jaywcjlove/awesome-swift-macos-apps
Maintains app entries in the awesome-swift-macos-apps lists, keeping README.md and README.zh.md in step with one-sentence descriptions and correct category placement.
quint-co/quint-llm-kit
Implement code against an existing Quint specification. An agent skill from quint-co/quint-llm-kit.
Categories
Quint language and CLI reference — the expert on Quint syntax, operators, types, basicSpells, the toolchain (typecheck/run/test/verify), and how to read simulation and counterexample output. Quint Lang is an agent skill from quint-co/quint-llm-kit. Quint language and CLI reference — the expert on Quint syntax, operators, types, basicSpells, the toolchain (typecheck/run/test/verify), and how to read simulation and counterexample output.
Quint Lang fits situations like: debugging the contents of a .qnt file; fixing a typecheck/parse error; looking up an operator; analyzing an invariant violation.
Run `npx skills add quint-co/quint-llm-kit --skill quint-lang -a claude-code`. Or copy the skill folder (quint-llm-kit-plugin/skills/quint-lang in quint-co/quint-llm-kit) into .claude/skills/quint-lang in your project. Claude Code loads it when a task matches its description.
Run `npx skills add quint-co/quint-llm-kit --skill quint-lang -a codex`. Or copy the skill folder (quint-llm-kit-plugin/skills/quint-lang in quint-co/quint-llm-kit) into .agents/skills/quint-lang in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add quint-co/quint-llm-kit --skill quint-lang -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/quint-lang, .gemini/skills/quint-lang, .github/skills/quint-lang and .opencode/skills/quint-lang in your project.
SKILL.md names no scripts, command-line tools or credentials: Quint Lang is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Quint Lang is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.3k tokens (SKILL.md is roughly 17k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Quint Lang: Moonbit Docs Maintainer (moonbitlang/moonbit-docs, 2.5k stars), D2mcpp Authoring (mcpp-community/d2mcpp, 1.8k stars), Staticphp Documentation Sync (crazywhalecc/static-php-cli, 1.9k stars) and Publish Release (Ayuilos/Miffan, 217 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
quint-co (a GitHub organization) maintains it in quint-co/quint-llm-kit, which has 104 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on July 1, 2026.
Source: quint-co/quint-llm-kit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.