Time Tracking
sickn33/agentic-awesome-skills
Time entry register: employee, project, client, task, hours, billable flag, rate and amount, invoice and approver.
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…
$ npx skills add runtimeverification/kontrol --skill writing-kontrol-lemmas -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install runtimeverification/kontrol writing-kontrol-lemmas --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/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-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 "writing-kontrol-lemmas" agent skill from https://github.com/runtimeverification/kontrol/tree/master/.claude/skills/writing-kontrol-lemmas into .claude/skills/writing-kontrol-lemmas/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-kontrol-lemmas", 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/runtimeverification/kontrol/tree/master/.claude/skills/writing-kontrol-lemmasType 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 runtimeverification/kontrol --skill writing-kontrol-lemmas -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install runtimeverification/kontrol writing-kontrol-lemmas --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/runtimeverification/kontrol.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/writing-kontrol-lemmas .agents/skills/writing-kontrol-lemmas && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "writing-kontrol-lemmas" agent skill from https://github.com/runtimeverification/kontrol/tree/master/.claude/skills/writing-kontrol-lemmas into .agents/skills/writing-kontrol-lemmas/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-kontrol-lemmas", 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 runtimeverification/kontrol --skill writing-kontrol-lemmas -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install runtimeverification/kontrol writing-kontrol-lemmas --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/runtimeverification/kontrol.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/writing-kontrol-lemmas .cursor/skills/writing-kontrol-lemmas && 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 "writing-kontrol-lemmas" agent skill from https://github.com/runtimeverification/kontrol/tree/master/.claude/skills/writing-kontrol-lemmas into .cursor/skills/writing-kontrol-lemmas/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-kontrol-lemmas", 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/runtimeverification/kontrol.git --path .claude/skills/writing-kontrol-lemmas--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 runtimeverification/kontrol --skill writing-kontrol-lemmas -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install runtimeverification/kontrol writing-kontrol-lemmas --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/runtimeverification/kontrol.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/writing-kontrol-lemmas .gemini/skills/writing-kontrol-lemmas && 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 "writing-kontrol-lemmas" agent skill from https://github.com/runtimeverification/kontrol/tree/master/.claude/skills/writing-kontrol-lemmas into .gemini/skills/writing-kontrol-lemmas/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-kontrol-lemmas", 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 runtimeverification/kontrol writing-kontrol-lemmasInstalls 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 runtimeverification/kontrol --skill writing-kontrol-lemmas -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/runtimeverification/kontrol.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/writing-kontrol-lemmas .github/skills/writing-kontrol-lemmas && 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 "writing-kontrol-lemmas" agent skill from https://github.com/runtimeverification/kontrol/tree/master/.claude/skills/writing-kontrol-lemmas into .github/skills/writing-kontrol-lemmas/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-kontrol-lemmas", 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 runtimeverification/kontrol --skill writing-kontrol-lemmas -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install runtimeverification/kontrol writing-kontrol-lemmas --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/runtimeverification/kontrol.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/writing-kontrol-lemmas .opencode/skills/writing-kontrol-lemmas && 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 "writing-kontrol-lemmas" agent skill from https://github.com/runtimeverification/kontrol/tree/master/.claude/skills/writing-kontrol-lemmas into .opencode/skills/writing-kontrol-lemmas/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "writing-kontrol-lemmas", 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.
writing-kontrol-lemmasA 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.
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.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 1649663. 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.
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.
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.
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.
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 runtimeverification/kontrol at commit 1649663, republished under its BSD-3-Clause licence (© runtimeverification). 2,539 words, ~5,194 tokens.
.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.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.
Symptoms that a new lemma is needed:
kontrol prove finishes with "pending" leaves in the KCFG&Int, |Int, xorInt, >>Int, <<Int,
keccak, Map:lookup / _Map_[_], in_keys, bool2Word, #lookup,
#asWord, composite _+Bytes_ blobs, modInt pow256 wrappersMatching failed or unreduced predicates in
<k>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-constraints--break-on-calls--run-constructorSkim kontrol prove --help once per stuck proof before committing to
algebra. Flags are cheap, sounder, and invisible in the KCFG.
Also out of scope:
lessons-learned.md for the bitwise-ops-
as-uninterpreted consequence and how to work around it.)kontrol prove end-to-end — this skill produces
a rule + probe spec; the final re-run is the user's.kontrol build or Solidity artifacts — lemmas operate on the
K semantics, not the compiled bytecode.[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.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.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.
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.Requires:
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.kontrol show <Contract>.<method> --no-minimize, with the offending subterm and
the path condition known.test/kontrol/lemma-tests/) and a
scripts/ (or script/) entry for the wrapper.Optional:
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).[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.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).scripts/minimize-lemmas.py, with a per-run
$TMPDIR/minimize-lemmas-XXXXXX/results.tsv log classifying each
rule as necessary or removable.kontrol prove --match-test <Contract>.<method> to confirm the previously-pending leaf closes.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:
max-iterations in kontrol.toml (or pass --max-iterations)
and re-run before writing anything.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.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.
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.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.<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.require = in kontrol.toml's [build.default] (often
test/kontrol/lemmas.k, sometimes lemmas.k at the repo root).test/kontrol/lemma-tests/
if not already present).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.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).<lemma-tests-dir>/<name>-spec.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>
endmoduleVERIFICATION 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.Bash(run_in_background: true, command: "scripts/kontrol-lemma-test.sh <spec-stem>")
BashOutput(<shell id>) # poll until the shell exitsrun_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.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.kontrol build.minimize-lemmas.md. Intuition
overestimates what's load-bearing; dead simplification rules widen
the search space and slow every future proof.runLemma recipesCommon stuck-term shapes and how to wrap them. Pick the recipe that
matches the leaf's <k> cell.
Stuck <k> cell | Wrap 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 discharge | chop(A +Int B) | 0 <=Int A, A +Int B <Int pow256, etc. |
X ==Int keccak(A) +Int C that won't resolve via collision-resistance | the whole ==Int | constraints on C (e.g. notBool C ==Int 0) |
| Bitwise `A &Int (B | Int C)` that stays unreduced | the 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.
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.
Count the operator tree on each side. Depth = operators you descend through to reach a leaf.
| Depth | Example | Verdict |
|---|---|---|
| 0 | A +Int 1 | OK |
| 0 | A *Int B <Int C | OK (two ops, none nested) |
| 1 | (X +Int Y) modInt Z | OK |
| 1 | lengthBytes(B) <Int pow256 | OK |
| 2 | ((A +Int B) *Int C) xorInt D | Reject |
| 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".
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.
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.
add1-sound, shift-to-mult,
nonneg-andInt, lowbit-or-shl. Reject: fix-deposit-stuck,
for-btc-tx-proof, close-leaf-17.lessons-learned.md →
"Pretty-printer parens") so the written rule's AST matches what a
reader parses at a glance.| Attribute | Effect |
|---|---|
[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). |
domains.mdThe 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:
[left] on
each syntax rule. Relevant when parenthesizing bitwise terms copied
out of the KCFG (see lessons-learned.md → "Pretty-printer parens").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").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").
| Outcome | Meaning |
|---|---|
PROOF PASSED: MOD.label | Theory rewrote runLemma(LHS) to doneLemma(LHS') matching doneLemma(RHS). |
PROOF FAILED: MOD.label | Rewrite 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/.
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).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.*-SPEC module. Keep syntax in
VERIFICATION (run-lemma.k); the proof module only holds claims.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.
<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).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).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.| File | Purpose |
|---|---|
run-lemma.k | The runLemma/doneLemma scaffolding. Copy into project's lemma-tests dir. |
kontrol-lemma-test.sh | kompile + prove wrapper. Copy into project's scripts/; adjust paths at top. |
extract-stuck-term.py | Dumps symbolic terms from KCFG split targets. |
flag-fixes.md | kontrol prove flags that cure common symptoms without a lemma. |
lemma-testing.md | Soundness vs firing; asymmetric wrap; claim patterns. |
lessons-learned.md | Pretty-printer parens, Z3 opacity, decomposition strategy. |
minimize-lemmas.md | Minimization workflow — usage + troubleshooting. |
minimize-lemmas.py | Driver: 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
SKILL.md and 8 other files in .claude/skills/writing-kontrol-lemmas of runtimeverification/kontrol.
Open the folder on GitHubat commit 1649663
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.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Writing Kontrol Lemmas this skillruntimeverification/kontrol | 125 | — | ~5.2k | Automated safety check: Pass | BSD-3-Clause | |
| Time Trackingsickn33/agentic-awesome-skills | 47k | 1 repos | ~3.8k | Automated safety check: Pass | MIT | |
| Time Ledgersickn33/agentic-awesome-skills | 47k | 1 repos | ~1.8k | Automated safety check: Pass | MIT | |
| Leave Managementsickn33/agentic-awesome-skills | 47k | 1 repos | ~3.7k | Automated safety check: Pass | MIT | |
| Timely AutomationComposioHQ/awesome-claude-skills | 77k | 3 repos | ~727 | Automated safety check: Pass | None | |
| Timing AnalysisFastLED/FastLED | 7.5k | — | ~484 | Automated safety check: Pass | MIT |
sickn33/agentic-awesome-skills
Time entry register: employee, project, client, task, hours, billable flag, rate and amount, invoice and approver.
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.
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.
ComposioHQ/awesome-claude-skills
Automate Timely tasks via Rube MCP (Composio). An agent skill from ComposioHQ/awesome-claude-skills.
FastLED/FastLED
Analyze real-time constraints, ISR latency, DMA transfer times, and LED protocol timing for embedded systems.
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.
runtimeverification/kontrol
Add a new Foundry cheatcode to Kontrol (K rules, selector, Solidity test, CI registration).
runtimeverification/kontrol
Update expected output golden files for integration test suites.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.