Agent skill

Quint Lang

by quint-co in 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.

Apache-2.0Auto-check passedDevelopment

Install Quint Lang

skills CLI
$ npx skills add quint-co/quint-llm-kit --skill quint-lang -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install quint-co/quint-llm-kit quint-lang --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
quint-lang
GitHub stars
104
Token cost
~4.3k tokens
SKILL.md length
1,218 words
Files
8
Skills in repo
2
Repo updated
First seen
Licence
Apache-2.0

At a glance

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.

  • Debugging the contents of a .qnt file
  • SKILL.md covers Module structure, Types, Definitions and State variables, plus 16 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Fixing a typecheck/parse error

What it does

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.

When your agent uses it

  • Debugging the contents of a .qnt file
  • Fixing a typecheck/parse error
  • Looking up an operator
  • Analyzing an invariant violation

Example prompts

  • “/quint-lang”

What it can do on your machine

Read from SKILL.md and the folder at commit cc75369. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    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.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~221
When it runs · the whole SKILL.md, loaded when a task matches
~4.3k

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.

Safety

Auto-check passed

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.

SKILL.md

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.

Download SKILL.mdSave it as .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.
name
quint-lang
description
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 building a NEW model end-to-end from some source — including translating a TLA+ spec into Quint, or modeling code/requirements/an idea — use the quint-modeling skill, which owns that workflow and consults this reference for syntax. Keywords: quint, syntax, operators, typecheck, model checking, counterexample, basicSpells, CLI, specification language.

Quint Language Reference

Quint is an executable specification language for complex systems, developed by Informal Systems. It compiles to TLA+ and supports simulation and model checking.

Module structure

quint
module MyProtocol {
  // type aliases, constants, state, actions, properties
}

Modules can import others:

quint
import Voting.*              // all definitions
import Voting(quorum)        // specific definition
import Voting as V           // namespace alias

Types

TypeDescriptionExample
intIntegers-1, 0, 42
boolBooleanstrue, false
strStrings"hello"
Set[T]Finite setSet(1, 2, 3)
List[T]Ordered sequenceList(1, 2, 3)
K -> VKey-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 | USum (variant)(use type alias)

Type aliases:

quint
type NodeId = int
type Phase = Idle | Propose | Vote | Commit   // enum — prefer over string literals

Definitions

quint
// 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 + 1

const 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.


State variables

quint
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

Actions describe state transitions. They return bool — true if the action fires.

quint
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:

  • Every 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.

Non-determinism

quint
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 operators

quint
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 bindings

List operators

quint
List(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 operators

quint
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 → map

Records

Records group related fields into a named type. They are the primary tool for modelling structured state in Quint.

Type aliases for records
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,
}
Creating and accessing
quint
val n: NodeState = { phase: Idle, voted: false, log: List() }
n.phase                          // Idle
n.voted                          // false
Updating (immutable — returns a new record)
quint
{ ...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 literal
Records as state — when to group variables

TLA+ 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:

  • They represent the local state of a single actor (e.g. one node's phase + log + vote)
  • They are always passed together as function arguments
  • An invariant relates multiple fields of the same conceptual entity

Keep flat when:

  • The variables represent distinct concerns that change independently
  • The component is simple and grouping adds no clarity
  • The variables are intentionally in different ownership/lifecycle domains
Example: preferred grouped local state vs. anti-pattern

Preferred (cohesive local state):

quint
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: LocalState

Avoid for cohesive local state:

quint
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:

quint
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}),
  }
}
Nested records
quint
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)}
Records in sets (messages, events)
quint
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

Sum types (variants) represent a value that can be one of several distinct cases.

quint
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:

quint
val a: Action = Propose({ value: 1, proposer: 2 })

Pattern-match with match, binding the payload:

quint
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:

quint
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

Enum types are a special case of sum types where each case has no additional data.

quint
type Phase = Idle | Propose | Vote | Commit
var phase: Phase

if (phase == Propose) { ... }

Variable grouping — decision guide

Before writing var declarations, answer these questions for each candidate group:

QuestionGroup → record if...Keep flat if...
Do these vars always change together?Yes, in most actionsNo, they're independent
Do they describe the same entity?Same node / same message / same roundDifferent 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 entityInvariant uses vars independently

Boolean operators

quint
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 hold

and { } and or { } are the same operators as all { } and any { } in actions — use whichever reads more naturally in context.


Invariants and temporal properties

quint
// 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 => q

Assume

quint
assume nodeCountPositive = N > 0
assume quorumMajority = 2 * quorum > N

An 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):

quint
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.


Conditional and let

quint
if (x > 0) "positive" else "non-positive"

val result = {
  val doubled = x * 2
  doubled + 1
}

REPL usage

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 myExpression

Show full SKILL.md (484 more words)Show less

File layout

Split 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)
Module responsibilities

Main module (<protocol-name>.qnt):

  • Declares all state variables, init, actions, and safety invariants
  • step must live in the main module — it is the entry point for quint run simulation
  • The module name matches the file stem: module myProtocol in myProtocol.qnt

Test module (<protocol-name>_test.qnt):

  • Imports the main module (import myProtocol.*)
  • Contains run tests and scenario witnesses invoked via quint test or quint run
  • Inherits step from the main module through the import
Which --main to pass for quint run

quint run must receive the module that owns the property being checked:

Property locationCorrect --main
Invariant defined in main modulemain module name
Witness / run test defined in test moduletest 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.



Basic spells

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:

quint
import basicSpells.* from "./basicSpells"

Key definitions it provides:

DefinitionWhat it does
type Option[a] = Some(a) | NoneThe 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.)


Guidelines

Detailed references — read these when you need more than the quick reference above:

FileContents
guidelines/operators.mdComplete operator reference: extended set/list/map operators, run/then/expect/reps for tests and witnesses, temporal fairness, q::debug
guidelines/simulations.mdWitnesses vs invariants, result interpretation, progressive increase protocol, trace analysis, coverage standard
guidelines/constraints.mdHard language limitations: no string ops, no nested match, no destructuring, no loops, no early returns
guidelines/cli.mdFull CLI reference: quint run, quint test, quint verify flags, verbosity guide, reading output
guidelines/patterns.md14 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.mdWriting and debugging tests: run/then/expect/reps/fail, nondeterministic tests, error location ≠ failure point, frame counting, REPL-first debugging
guidelines/choreo.mdChoreo 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

Files

SKILL.md and 7 other files in quint-llm-kit-plugin/skills/quint-lang of quint-co/quint-llm-kit.

  • SKILL.md
  • guidelines/choreo.md
  • guidelines/cli.md
  • guidelines/constraints.md
  • guidelines/operators.md
  • guidelines/patterns.md
  • guidelines/simulations.md
  • guidelines/tests.md

Open the folder on GitHubat commit cc75369

Compare with similar skills

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.

Quint Lang compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Quint Lang this skillquint-co/quint-llm-kit104—~4.3kAutomated safety check: PassApache-2.0
Moonbit Docs Maintainermoonbitlang/moonbit-docs2.5k—~1.1kAutomated safety check: PassCustom licence
D2mcpp Authoringmcpp-community/d2mcpp1.8k—~2.7kAutomated safety check: PassCustom licence
Staticphp Documentation Synccrazywhalecc/static-php-cli1.9k—~2.2kAutomated safety check: PassMIT
Publish ReleaseAyuilos/Miffan217—~680Automated safety check: PassAGPL-3.0
Translate It Doc En Zhmxsm/rocketmq-rust1.5k—~1.2kAutomated safety check: PassApache-2.0

Similar skills

  • 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…

    2.5k GitHub stars~1.1k tokensUpdated 19 days ago
    DevelopmentAuto-check passed
  • D2mcpp Authoring

    mcpp-community/d2mcpp

    Authoring conventions, design principles, and file formats for the d2mcpp (D2X) Modern C++ tutorial project.

    1.8k GitHub stars~2.7k tokensUpdated 2 mo ago
    DevelopmentAuto-check passed
  • Staticphp Documentation Sync

    crazywhalecc/static-php-cli

    Synchronize bilingual documentation when StaticPHP v3 user-facing or developer-facing documentation must change.

    1.9k GitHub stars~2.2k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Publish Release

    Ayuilos/Miffan

    Publish a GitHub release for this fork, with a bilingual changelog that separates fork-owned changes from changes introduced by upstream merges.

    217 GitHub stars~680 tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Translate It Doc En Zh

    mxsm/rocketmq-rust

    Translate English IT and software engineering documents into professional, accurate Chinese.

    1.5k GitHub stars~1.2k tokensUpdated today
    DevelopmentAuto-check passed
  • Awesome Swift macOS Apps Docs

    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.

    1.7k GitHub stars~1.3k tokensUpdated today
    DevelopmentAuto-check passed

More from quint-co/quint-llm-kit

  • Quint Execute Spec

    quint-co/quint-llm-kit

    Implement code against an existing Quint specification. An agent skill from quint-co/quint-llm-kit.

    104 GitHub stars~2.6k tokensUpdated 3 mo ago
    Auto-check passed

Questions about Quint Lang

What does Quint Lang do?

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.

When should I use Quint Lang?

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.

How do I install Quint Lang in Claude Code?

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.

How do I install Quint Lang in Codex?

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.

Can I use Quint Lang in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Quint Lang need to run?

SKILL.md names no scripts, command-line tools or credentials: Quint Lang is instructions for the agent only.

Does Quint Lang access the network?

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.

Is Quint Lang safe to install?

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.

What licence does Quint Lang use?

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.

How many tokens does Quint Lang use?

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.

What are the alternatives to Quint Lang?

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.

Who maintains Quint Lang?

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.