Agent skill

Writing Kontrol Lemmas

by runtimeverification in runtimeverification/kontrol

A skill your agent uses when kontrol prove leaves pending leaves in the KCFG, times out during simplification, or fails to reduce bitwise, keccak, Map, or bool2Word terms — and the fix needs a new K…

BSD-3-ClauseAuto-check passed

Install Writing Kontrol Lemmas

skills CLI
$ npx skills add runtimeverification/kontrol --skill writing-kontrol-lemmas -a claude-code

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

GitHub CLI
$ gh skill install runtimeverification/kontrol writing-kontrol-lemmas --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/runtimeverification/kontrol.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/writing-kontrol-lemmas .claude/skills/writing-kontrol-lemmas && 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
writing-kontrol-lemmas
GitHub stars
125
Token cost
~5.2k tokens
SKILL.md length
2,539 words
Files
9
Skills in repo
3
Repo updated
First seen
Licence
BSD-3-Clause

At a glance

A skill your agent uses when kontrol prove leaves pending leaves in the KCFG, times out during simplification, or fails to reduce bitwise, keccak, Map, or bool2Word terms — and the fix needs a new K…

  • Works in 4 steps: Concise — operator nesting depth… → Sound → Maintainable → …
  • Kontrol prove leaves pending leaves in the KCFG
  • SKILL.md covers Overview, When to Use, When NOT to Use and Scope boundaries, plus 13 more sections
  • Runs Python and Shell scripts from its folder

What it does

Writing Kontrol Lemmas is an agent skill from runtimeverification/kontrol. Use when kontrol prove leaves pending leaves in the KCFG, times out during simplification, or fails to reduce bitwise, keccak, Map, or bool2Word terms — and the fix needs a new K simplification lemma rather than a kontrol prove flag.

Its SKILL.md is about 5.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 8 other files (for example `extract-stuck-term.py`, `flag-fixes.md` and `kontrol-lemma-test.sh`).

The licence is BSD-3-Clause.

When your agent uses it

  • Kontrol prove leaves pending leaves in the KCFG
  • Times out during simplification
  • Fails to reduce bitwise
  • Bool2Word terms — and the fix needs a new K simplification lemma rather than a kontrol prove flag

Example prompts

  • “/writing-kontrol-lemmas”

Requirements

  • Python 3
  • A Bash shell

Workflow steps

4 steps, taken from the step headings in SKILL.md.

  1. Concise — operator nesting depth strictly less than 2
  2. Sound
  3. Maintainable
  4. Readable

What it can do on your machine

Read from SKILL.md and the folder at commit 1649663. 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

    Ships script files (Python and Shell), which the agent can run.

    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

Writing Kontrol Lemmas loads about 5.2k tokens when it runs. Until then it costs about 66 tokens; SKILL.md has 2,539 words of instructions outside code blocks.

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

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 runtimeverification/kontrol at commit 1649663, republished under its BSD-3-Clause licence (© runtimeverification). 2,539 words, ~5,194 tokens.

Download SKILL.mdSave it as .claude/skills/writing-kontrol-lemmas/SKILL.md (or your agent's skills folder). This skill also uses 8 other files; get the full folder from GitHub.
name
writing-kontrol-lemmas
description
Use when `kontrol prove` leaves pending leaves in the KCFG, times out during simplification, or fails to reduce bitwise, keccak, Map, or `bool2Word` terms — and the fix needs a new K simplification lemma rather than a `kontrol prove` flag.

Writing Kontrol Lemmas

Overview

A K simplification lemma is a rewrite rule tagged [simplification] that Kontrol/KEVM applies during proof search. When kontrol prove gets stuck, the usual cure is a rule that discharges a side condition or collapses a composite term (bitwise algebra, keccak disjointness, Map lookups, bool2Word predicates, symbolic +Bytes blobs, etc.).

Core principle: Never commit a lemma whose reduction you haven't verified on the actual stuck term. Pair every candidate rule with a unit test under a runLemma/doneLemma scaffolding that runs against a minimal stand-alone kompiled definition — not the full Solidity build.

Why a separate definition. kontrol build takes minutes and is invalidated by any .k change. A lemma-test definition is just EVM + lemmas.k + the scaffolding — orthogonal to whatever state out/kompiled is in, so you can iterate on lemmas while an in-flight kontrol prove runs.

When to Use

Symptoms that a new lemma is needed:

  • kontrol prove finishes with "pending" leaves in the KCFG
  • A proof times out during simplification
  • A branch splits where the path condition is already decidable but K can't see it
  • The stuck term involves &Int, |Int, xorInt, >>Int, <<Int, keccak, Map:lookup / _Map_[_], in_keys, bool2Word, #lookup, #asWord, composite _+Bytes_ blobs, modInt pow256 wrappers
  • A test_* proof fails with Matching failed or unreduced predicates in <k>

When NOT to Use

Symptoms where a lemma is NOT the right answer — see flag-fixes.md:

  • EVMC_BAD_JUMP_DESTINATION inside a constructor with a symbolic immutable → use --symbolic-immutables
  • Enum branches not pruned → --enum-constraints
  • Coarse KCFG around external calls → --break-on-calls
  • Real constructor behavior matters for storage layout → --run-constructor

Skim kontrol prove --help once per stuck proof before committing to algebra. Flags are cheap, sounder, and invisible in the KCFG.

Also out of scope:

  • Debugging Z3 / SMT encoding details — this skill edits K simplification rules, not the solver. (See lessons-learned.md for the bitwise-ops- as-uninterpreted consequence and how to work around it.)
  • Running the production kontrol prove end-to-end — this skill produces a rule + probe spec; the final re-run is the user's.
  • Rewriting kontrol build or Solidity artifacts — lemmas operate on the K semantics, not the compiled bytecode.

Scope boundaries

  • In scope: Diagnosing stuck KCFG leaves as algebra vs. flag/config, writing [simplification] rules, scaffolding probe specs under a separate lemma-tests kompiled definition, checking soundness with the asymmetric +Int wrap, and minimizing the resulting rule set.
  • Out of scope: Modifying kontrol.toml's require = target beyond the project's existing lemmas file, changing out/kompiled (the production build), and authoring lemmas that require new sorts beyond Int | Bool | Bytes | Map without extending run-lemma.k's StepSort.

Usage

The user reports a pending or stuck KCFG leaf from kontrol prove and wants a lemma to close it. Work through the gating checklist ("Before writing a lemma"), then the Workflow section.

text
Example user request: `kontrol prove` on Foo.testFuzz_bar left a pending
leaf at node 42 — the <k> cell shows bool2Word(L ==Int 0) unreduced and
the path condition has 0 <Int L. Please write a lemma to close it.

Inputs and Assumptions

Requires:

  • Kontrol project with kontrol.toml, a lemmas file listed under [build.default] require = … (often test/kontrol/lemmas.k), and a working kontrol + kevm install. The wrapper resolves kevm from kontrol's nix-store closure, so nix-store must be on PATH.
  • A stuck / pending KCFG leaf identified via kontrol show <Contract>.<method> --no-minimize, with the offending subterm and the path condition known.
  • Write access to the project's lemmas file and permission to create a lemma-tests directory (e.g. test/kontrol/lemma-tests/) and a scripts/ (or script/) entry for the wrapper.

Optional:

  • Pre-existing test/kontrol/lemma-tests/ and scripts/ directories — the scaffolding and wrapper are dropped in next to whatever the project already uses.
  • auxiliary-lemmas = true under [build.default] in kontrol.toml (pulls in Kontrol's upstream helper lemmas; check before writing a duplicate).

Outputs (task contract)

  • Produces:
    • New [simplification] rules in the project's lemmas file, each paired with a firing claim and a soundness claim (asymmetric +Int wrap — see lemma-testing.md) in a <name>-spec.k file under the lemma-tests directory.
    • A PROOF PASSED run from scripts/kontrol-lemma-test.sh <stem> confirming the rules fire on the stuck shape against a minimal EVM + lemmas definition (no Solidity build).
    • Optionally, a minimized rule set after running scripts/minimize-lemmas.py, with a per-run $TMPDIR/minimize-lemmas-XXXXXX/results.tsv log classifying each rule as necessary or removable.
  • Hands off to: Re-running the original kontrol prove --match-test <Contract>.<method> to confirm the previously-pending leaf closes.

Before writing a lemma: is this really an algebra problem?

pending in a KCFG leaf does not mean "the theory cannot simplify this". It means "the prover has not driven this leaf to a terminal state yet". A pending leaf can be any of:

  1. Algebra-stuck — the term genuinely needs a new simplification. This is what the rest of this skill addresses.
  2. Iteration-exhausted — the prover hit its per-node step budget. Bump max-iterations in kontrol.toml (or pass --max-iterations) and re-run before writing anything.
  3. Fail-fast-truncated — fail-fast is on by default, so the runner stops as soon as any leaf fails. Sibling leaves that were pending when the runner exited are pending because they never got worked on, not because they're stuck. Check sibling statuses before treating any leaf as algebra-stuck; pass --no-fail-fast (or set fail-fast = false in kontrol.toml) to drive all branches to completion when you need the full picture.
  4. Flag-curable — see flag-fixes.md. A stuck symbolic-immutable JUMPDEST looks exactly like an algebra problem from the outside.

Diagnosis order: (a) sibling statuses, (b) max-iterations, (c) flags in flag-fixes.md, (d) algebra. Writing a lemma skips that ladder and wastes one kompile cycle per attempt.

Workflow

  1. Diagnose. kontrol show <Contract>.<method> --no-minimize | less. Note the stuck node id, the path condition at each pending/failing leaf, and the unreduced term in the leaf's <k> cell.
  2. Gate it. Work through the "is this really algebra?" checklist above — sibling statuses, max-iterations, flag-fixes.md. Only proceed past this point if the pending leaf's term is genuinely one the existing theory can't simplify.
  3. Pick the subterm to probe. The <k> cell typically has a whole chain (JUMPI D I ~> #pc[JUMPI] ~> #execute ~> ...). You only need to wrap the one subterm the theory is failing to reduce, not the whole chain. See "KCFG → runLemma recipes" below for the common shapes. Reproduce variables with Kontrol's KV<N>_<argName>:<Sort> naming verbatim so any concrete(...) / symbolic(...) attributes on lemmas line up with the actual ground/symbolic split.
  4. Set up scaffolding (once per project):
    • Locate the project's lemmas file — it's whatever appears under require = in kontrol.toml's [build.default] (often test/kontrol/lemmas.k, sometimes lemmas.k at the repo root).
    • Create a lemma-tests directory (e.g. test/kontrol/lemma-tests/ if not already present).
    • Copy run-lemma.k into the lemma-tests directory. Edit its requires "lemmas.k" line if the project's lemmas file has a different basename — the include resolves via the wrapper's -I path.
    • Copy kontrol-lemma-test.sh into a scripts/ (or script/, match the project) directory. Edit the four path variables at the top: SPEC_DIR, LEMMAS_DIR, DEFN_DIR, PROOFS_DIR. LEMMAS_DIR must be the directory containing the lemmas file (not the file itself).
  5. Write a probe spec FIRST — no new lemmas yet. At <lemma-tests-dir>/<name>-spec.k:
    k
    requires "run-lemma.k"
    
    module <NAME>-SPEC
        imports VERIFICATION
        claim [probe]:
            <k> runLemma ( <stuck subterm> ) => doneLemma ( <expected RHS> ) ... </k>
            requires <path condition constraints from the pending leaf>
    endmodule
    VERIFICATION re-exports the project's lemmas via run-lemma.k's imports KONTROL-LEMMAS, so whatever is already in lemmas.k (plus auxiliary-lemmas if enabled in kontrol.toml) is in scope.
  6. Run the wrapper on the probe spec — in the background. Kompile alone is ~60 s per invocation, so synchronous foreground runs freeze the conversation:
    Bash(run_in_background: true, command: "scripts/kontrol-lemma-test.sh <spec-stem>")
    BashOutput(<shell id>)               # poll until the shell exits
    Never invoke the wrapper with run_in_background: false — the same rule applies to minimize-lemmas.py, which internally calls the wrapper once per rule and takes N × one kompile cycle. Once the shell has exited, read the tail of the output to conclude:
    • PROOF PASSED → the existing theory already simplifies this shape. The proof's pending leaf is NOT an algebra problem — return to the gating checklist (step 2) and look at iteration budget, fail-fast, or a flag.
    • PROOF FAILED → inspect the stuck KCFG node (out/proofs-lemma-tests/<spec>/kcfg/ or kontrol view-kcfg) and the K_CELL: doneLemma(LHS' #Implies RHS) diff. LHS' is how far the booster got; the gap between LHS' and RHS tells you what rule is missing.
  7. Add candidate rules to the project's lemmas file. Every rule must satisfy the four requirements below (concise, sound, maintainable, readable). Re-run the wrapper; iterate until the probe spec passes.
  8. Check soundness with an asymmetric claim — see lemma-testing.md. A rule that passes runLemma(E) => doneLemma(E) is not a soundness test; wrap in +Int so an unsound step surfaces as a numeric diff.
  9. Integrate. Once the spec passes, the rules are already in the project's lemmas file and flow into the next kontrol build.
  10. Re-run the original proof to confirm the previously-pending leaf closes.
  11. Minimize with the driver in minimize-lemmas.md. Intuition overestimates what's load-bearing; dead simplification rules widen the search space and slow every future proof.

KCFG → runLemma recipes

Common stuck-term shapes and how to wrap them. Pick the recipe that matches the leaf's <k> cell.

Stuck <k> cellWrap in runLemma(...)requires
JUMPI DEST bool2Word(C) at pc P (leaf pending after branch split added C to path)bool2Word(C)C (positive-branch leaf) or notBool C (other) — expected RHS is 1 or 0
Storage read #lookup(M, K) returning a ternary ite(isInt(M[K]), ...)#lookup(M, KV0_slot)any disjointness / key-presence facts on M
Composite chop(A +Int B) in an arithmetic constraint that won't dischargechop(A +Int B)0 <=Int A, A +Int B <Int pow256, etc.
X ==Int keccak(A) +Int C that won't resolve via collision-resistancethe whole ==Intconstraints on C (e.g. notBool C ==Int 0)
Bitwise `A &Int (BInt C)` that stays unreducedthe operator expression

For anything else, copy the exact subterm from the leaf's <k> and the exact constraints from the pending leaf's path condition. Keep the wrapped subterm as narrow as possible — wrapping too much just slows kompile and obscures the failure diff.

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

Four requirements for every new lemma

Every lemma in the project's lemmas.k must satisfy all four. A rule that fails one is not acceptable even if the specific claim it was meant to close goes green.

1. Concise — operator nesting depth strictly less than 2

Count the operator tree on each side. Depth = operators you descend through to reach a leaf.

DepthExampleVerdict
0A +Int 1OK
0A *Int B <Int COK (two ops, none nested)
1(X +Int Y) modInt ZOK
1lengthBytes(B) <Int pow256OK
2((A +Int B) *Int C) xorInt DReject
3+#asWord(X +Bytes #buf(32, Y +Int 1))Reject

If the stuck term is deeper, decompose it into a chain of depth-≤1 rules. See lessons-learned.md → "Decompose stuck terms".

2. Sound

The rule must hold for every valuation of its free variables, not only the one the proof got stuck on. Use the asymmetric +Int wrap from lemma-testing.md to catch unsound steps. Unsound rules poison every future proof that reaches them.

3. Maintainable

Phrase as a generic algebraic identity, not a pattern glued to one stuck expression. A rule whose LHS is a verbatim copy of the stuck shape fires once in the project's lifetime; a single-identity rule over operator structure fires wherever that sub-pattern appears.

4. Readable
  • Name by the identity: add1-sound, shift-to-mult, nonneg-andInt, lowbit-or-shl. Reject: fix-deposit-stuck, for-btc-tx-proof, close-leaf-17.
  • If the body needs a 3-line comment to explain what it does, the rule is doing too much — split it.
  • Parenthesize every bitwise operator explicitly. The K pretty- printer drops same-precedence parens (see lessons-learned.md → "Pretty-printer parens") so the written rule's AST matches what a reader parses at a glance.

Attribute quick reference

AttributeEffect
[simplification]Used by the prover as a simplification equation.
[simplification(N)]Priority N (lower = applied earlier).
[preserves-definedness]Booster may apply in definedness-required contexts.
[concrete(X,Y,...)]Only fire when listed variables are ground.
[symbolic(X,Y,...)]Only fire when listed variables are symbolic.
[smt-lemma]Also hand equation to Z3 as a quantified axiom.
[comm]LHS is commutative; match either argument order.
[priority(N)]Non-simplification priority (ordering vs other rules).

K built-in reference — domains.md

The standard sorts the scaffolding wraps (Int, Bool, Bytes, Map, Set, List) and their operators (+Int, -Int, modInt, &Int/|Int/xorInt/>>Int/<<Int, lengthBytes, +Bytes, map lookup / in_keys, ...) are declared in the K framework's k-distribution/include/kframework/builtin/domains.md — from the upstream runtimeverification/k GitHub repository. Consult it to confirm:

  • Operator precedence / associativity — declared via [left] on each syntax rule. Relevant when parenthesizing bitwise terms copied out of the KCFG (see lessons-learned.md → "Pretty-printer parens").
  • SMT encoding — smt-hook(...) / smtlib(...) attributes show exactly what Z3 sees. Bitwise ops map to uninterpreted andInt / orInt / xorInt SMT symbols (see lessons-learned.md → "Z3 sees bitwise ops as uninterpreted").
  • Built-in simplifications — the INT-SYMBOLIC and INT-KORE modules ship rules like I +Int 0 => I, X modInt N => X requires 0 <=Int X andBool X <Int N, X <<Int 0 => X, plus arithmetic normalisation (concrete(I), symbolic(B) reorderings). Check here before writing a new rule; duplicates are a common source of minimization removals (minimize-lemmas.md).

EVM-specific things — keccak, bool2Word, chop, #lookup, #asWord, #buf, pow256 — are NOT in domains.md; they come from kevm_pyk/kproj/evm-semantics/*.md (lessons-learned.md → "-I include paths").

Interpreting results

OutcomeMeaning
PROOF PASSED: MOD.labelTheory rewrote runLemma(LHS) to doneLemma(LHS') matching doneLemma(RHS).
PROOF FAILED: MOD.labelRewrite stalled. Output shows stuck node id, K_CELL: doneLemma(LHS' #Implies RHS) diff, and accumulated path condition.

Rerun a single claim with --claim <NAME>-SPEC.<label>. Inspect the KCFG graph with kontrol view-kcfg pointed at out/proofs-lemma-tests/<spec>/kcfg/.

Common gotchas

  • Do NOT put runLemma / doneLemma syntax in lemmas.k. That file is pulled into production kontrol build via kontrol.toml's require. Test scaffolding must live in a separate file (run-lemma.k) only requires'd from spec files.
  • runLemma(X) => doneLemma(X) is NOT a soundness test. It passes trivially for unsound rules — both sides reduce identically. Use asymmetric wrap (lemma-testing.md).
  • 1 +Int 1 => 2 passes regardless of symbolic rules. K hooks evaluate concrete arithmetic before symbolic rules fire. Exercise rules with symbolic variables (Y:Int +Int 1).
  • Stale cached proof state. kevm prove caches; the wrapper always passes --reinit. Manual invocations need it explicitly.
  • KRYPTO differs from previous declaration = kevm from one install vs. out/...-kompiled from another. The wrapper resolves kevm from kontrol's nix-store closure specifically to avoid this.
  • Compile error "Found syntax declaration in proof module" — your spec file defined syntax in the *-SPEC module. Keep syntax in VERIFICATION (run-lemma.k); the proof module only holds claims.
  • The K pretty-printer drops same-precedence parens. An expression like A >>Int B <<Int C xorInt D &Int E in the KCFG view is not the left-to-right read. Parenthesize explicitly when copying into a spec. See lessons-learned.md.

Full list: lessons-learned.md.

Validation

  • <lemma-tests-dir>/<name>-spec.k exists with both a firing claim and a soundness claim (asymmetric +Int wrap — see lemma-testing.md). The identity claim runLemma(E) => doneLemma(E) alone is NOT a soundness test.
  • scripts/kontrol-lemma-test.sh <stem> reports PROOF PASSED for every claim in the spec module (run in the background and polled with BashOutput — never synchronous; kompile alone is ~60 s).
  • Each new rule satisfies the "Four requirements" (operator nesting depth < 2, sound, generic/algebraic, readable with an identity- based name).
  • The original kontrol prove --match-test <Contract>.<method> run closes the previously-pending leaf.
  • scripts/minimize-lemmas.py has been run on the new rule set and all rules retained are marked necessary in the per-run $TMPDIR/minimize-lemmas-XXXXXX/results.tsv (or wherever --results-file pointed).
  • No runLemma / doneLemma syntax appears in the project's production lemmas file — only in run-lemma.k and the spec files under the lemma-tests directory.

Supporting files in this skill

FilePurpose
run-lemma.kThe runLemma/doneLemma scaffolding. Copy into project's lemma-tests dir.
kontrol-lemma-test.shkompile + prove wrapper. Copy into project's scripts/; adjust paths at top.
extract-stuck-term.pyDumps symbolic terms from KCFG split targets.
flag-fixes.mdkontrol prove flags that cure common symptoms without a lemma.
lemma-testing.mdSoundness vs firing; asymmetric wrap; claim patterns.
lessons-learned.mdPretty-printer parens, Z3 opacity, decomposition strategy.
minimize-lemmas.mdMinimization workflow — usage + troubleshooting.
minimize-lemmas.pyDriver: comments out each listed rule in turn, reruns the spec, records REMOVABLE / NECESSARY / NOT-FOUND. All parameters are CLI args; scratch and results paths default to a fresh per-run $TMPDIR/minimize-lemmas-XXXXXX/.

© runtimeverification, BSD-3-Clause. 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 8 other files in .claude/skills/writing-kontrol-lemmas of runtimeverification/kontrol.

  • SKILL.md
  • extract-stuck-term.py
  • flag-fixes.md
  • kontrol-lemma-test.sh
  • lemma-testing.md
  • lessons-learned.md
  • minimize-lemmas.md
  • minimize-lemmas.py
  • run-lemma.k

Open the folder on GitHubat commit 1649663

Compare with similar skills

Writing Kontrol Lemmas 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.

Writing Kontrol Lemmas compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Writing Kontrol Lemmas this skillruntimeverification/kontrol125—~5.2kAutomated safety check: PassBSD-3-Clause
Time Trackingsickn33/agentic-awesome-skills47k1 repos~3.8kAutomated safety check: PassMIT
Time Ledgersickn33/agentic-awesome-skills47k1 repos~1.8kAutomated safety check: PassMIT
Leave Managementsickn33/agentic-awesome-skills47k1 repos~3.7kAutomated safety check: PassMIT
Timely AutomationComposioHQ/awesome-claude-skills77k3 repos~727Automated safety check: PassNone
Timing AnalysisFastLED/FastLED7.5k—~484Automated safety check: PassMIT

Similar skills

  • Time Tracking

    sickn33/agentic-awesome-skills

    Time entry register: employee, project, client, task, hours, billable flag, rate and amount, invoice and approver.

    47k GitHub starsUsed in 1 repo~3.8k tokens
    Productivity & AutomationAuto-check passed
  • Time Ledger

    sickn33/agentic-awesome-skills

    Natural-language time tracking: parse what the user says they did into Activity/Minutes/Date rows in their own Notion database — asking instead of guessing when unsure.

    47k GitHub starsUsed in 1 repo~1.8k tokens
    Productivity & AutomationAuto-check passed
  • Leave Management

    sickn33/agentic-awesome-skills

    Leave register: request, leave type, employee and department, manager and approver, start and end dates, days requested, leave balances, handover notes and status.

    47k GitHub starsUsed in 1 repo~3.7k tokens
    Auto-check passed
  • Timely Automation

    ComposioHQ/awesome-claude-skills

    Automate Timely tasks via Rube MCP (Composio). An agent skill from ComposioHQ/awesome-claude-skills.

    77k GitHub starsUsed in 3 repos~727 tokens
    Productivity & AutomationAuto-check passed
  • Timing Analysis

    FastLED/FastLED

    Analyze real-time constraints, ISR latency, DMA transfer times, and LED protocol timing for embedded systems.

    7.5k GitHub stars~484 tokensUpdated today
    DevelopmentAuto-check passed
  • Page Load Time

    thedaviddias/Front-End-Checklist

    A skill your agent uses when auditing slow page loads, heavy assets, or rendering delays related to Keep page load time under 3 seconds.

    74k GitHub stars~418 tokensUpdated 4 days ago
    Frontend & DesignAuto-check passed

More from runtimeverification/kontrol

  • Add Cheatcode

    runtimeverification/kontrol

    Add a new Foundry cheatcode to Kontrol (K rules, selector, Solidity test, CI registration).

    125 GitHub stars~903 tokensUpdated 5 days ago
    Auto-check passed
  • Update Expected Output

    runtimeverification/kontrol

    Update expected output golden files for integration test suites.

    125 GitHub stars~275 tokensUpdated 5 days ago
    Auto-check passed

Questions about Writing Kontrol Lemmas

What does Writing Kontrol Lemmas do?

A skill your agent uses when kontrol prove leaves pending leaves in the KCFG, times out during simplification, or fails to reduce bitwise, keccak, Map, or bool2Word terms — and the fix needs a new K…. Writing Kontrol Lemmas is an agent skill from runtimeverification/kontrol. Use when kontrol prove leaves pending leaves in the KCFG, times out during simplification, or fails to reduce bitwise, keccak, Map, or bool2Word terms — and the fix needs a new K simplification lemma rather than a kontrol prove flag.

When should I use Writing Kontrol Lemmas?

Writing Kontrol Lemmas fits situations like: kontrol prove leaves pending leaves in the KCFG; times out during simplification; fails to reduce bitwise; bool2Word terms — and the fix needs a new K simplification lemma rather than a kontrol prove flag.

How do I install Writing Kontrol Lemmas in Claude Code?

Run `npx skills add runtimeverification/kontrol --skill writing-kontrol-lemmas -a claude-code`. Or copy the skill folder (.claude/skills/writing-kontrol-lemmas in runtimeverification/kontrol) into .claude/skills/writing-kontrol-lemmas in your project. Claude Code loads it when a task matches its description.

How do I install Writing Kontrol Lemmas in Codex?

Run `npx skills add runtimeverification/kontrol --skill writing-kontrol-lemmas -a codex`. Or copy the skill folder (.claude/skills/writing-kontrol-lemmas in runtimeverification/kontrol) into .agents/skills/writing-kontrol-lemmas in your project. Codex loads it when a task matches its description.

Can I use Writing Kontrol Lemmas 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 runtimeverification/kontrol --skill writing-kontrol-lemmas -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/writing-kontrol-lemmas, .gemini/skills/writing-kontrol-lemmas, .github/skills/writing-kontrol-lemmas and .opencode/skills/writing-kontrol-lemmas in your project.

What does Writing Kontrol Lemmas need to run?

Going by SKILL.md and its folder, Writing Kontrol Lemmas needs Python and a shell for the scripts in its folder. Our summary lists: Python 3; A Bash shell.

Does Writing Kontrol Lemmas 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 Writing Kontrol Lemmas 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 Writing Kontrol Lemmas use?

Writing Kontrol Lemmas is published under the BSD-3-Clause licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Writing Kontrol Lemmas use?

About 5.2k tokens (SKILL.md is roughly 21k 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 Writing Kontrol Lemmas?

Skills that share tags, products or a category with Writing Kontrol Lemmas: Time Tracking (sickn33/agentic-awesome-skills, 47k stars), Time Ledger (sickn33/agentic-awesome-skills, 47k stars), Leave Management (sickn33/agentic-awesome-skills, 47k stars) and Timely Automation (ComposioHQ/awesome-claude-skills, 77k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Writing Kontrol Lemmas?

runtimeverification (a GitHub organization) maintains it in runtimeverification/kontrol, which has 125 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 5, 2026.

Source: runtimeverification/kontrol on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.