agentic-actions-audito…
Audits GitHub Actions workflows for security vulnerabilities in AI agent integrations including Claude Code Action, Gemini CLI, OpenAI Codex, and GitHub AI…
Writes and reviews structured Lean 4 proofs and designs Lean libraries following Mathlib conventions. Use when proving theorems in Lean, formalizing mathematics or specifications in Lean 4, defining new types or definitions in a Lean library, reviewing Lean proofs for
$ npx -y skills add trailofbits/skills --skill writing-lean-proofs --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/writing-lean-proofsContext preview
The summary Claude sees to decide when to auto-load this skill.
Writes and reviews structured Lean 4 proofs and designs Lean libraries following Mathlib conventions. Use when proving theorems in Lean, formalizing mathematics or specifications in Lean 4, defining new types or definitions in a Lean library, reviewing Lean proofs for
name: writing-lean-proofs description: "Writes and reviews structured Lean 4 proofs and designs Lean libraries following Mathlib conventions. Use when proving theorems in Lean, formalizing mathematics or specifications in Lean 4, defining new types or definitions in a Lean library, reviewing Lean proofs for readability and maintainability, refactoring long tactic proofs into lemmas, filling in sorry placeholders in a Lean development, setting up CI or linters for a Lean project, diagnosing slow proofs or maxHeartbeats timeouts, or writing custom tactics, macros, or linters."
Structured Lean 4 proof writing and library design, distilled from Mathlib's style and review conventions and from the methodology of large formalization projects (Liquid Tensor Experiment, PFR, Fermat's Last Theorem).
**Core principle: design top-down, prove bottom-up.** Lean propositions are proof-irrelevant — only a theorem's *statement* can affect later declarations. Statements are the stable interface; proofs are disposable and freely replaceable. Put design effort into definitions and statements, then fill in proofs against skeletons that already compile (modulo `sorry`).
contribute to in parallel
at project start, before patterns propagate
most of this skill targets proof and API structure
Lean 3 idioms (`ge_or_gt` linting, `discrete_field`) are obsolete
spec-traceability-first codebases): Mathlib conventions are the community default, but check the project's CONTRIBUTING first and defer to it
Definitions carry the design weight. Before proving anything about a new concept:
signatures (Mathlib: `(0 : ℝ)⁻¹ = 0`). Side conditions then appear only on the lemmas that need them, not at every use site.
new subobject kinds use `SetLike`; carry property proofs as structure fields, not separate `IsHom`-style predicates.
multiple equivalent forms, and state all API lemmas for that form only.
coercion, and injectivity lemmas — before the definition is used anywhere. Downstream proofs use the API, never `unfold`/`show ... from rfl`.
See [library-design.md](references/library-design.md) for the full set of design rules with rationale.
State everything before proving anything, at every scale:
with `:= sorry`, and make the file compile. Each `sorry` is now an independent work unit — a contributor (human or LLM) can discharge one without understanding the rest. This is how LTE, PFR, and FLT scale to dozens of parallel contributors.
skeleton with `sorry` justifications, get Lean to accept the structure, then fill each step. Keeping the structure intact is what produces useful error messages while you work.
example (a b c d : ℝ) (h : c = d * a + b) (h' : b = a * d) : c = 2 * a * d := by
calc
c = d * a + b := sorry
_ = d * a + a * d := sorry
_ = 2 * a * d := sorryleave several goals active in unfocused sequence (Mathlib's `multiGoal` linter enforces this). This is what kills fragile goal-ordering dependence.
without it; reviewers and future editors need it. If `show` would *change* the goal, use `change` instead — keep stated goals honest.
vertically.
for backward reduction ("it suffices to show X").
tactics — emitted by Lean, never imagined. In a headless workflow, insert `trace_state` at the point of interest or a deliberate `done` where goals should be closed, then run `lake env lean Path/To/File.lean`; copy the reported hypotheses, case name, and target. Strip routine probes after the proof works. This is the single most effective technique for LLM-written proofs (see [llm-techniques.md](references/llm-techniques.md)).
See [proof-style.md](references/proof-style.md) for the full tactic-style rules, and [naming-conventions.md](references/naming-conventions.md) for naming lemmas so their names ar
A Claude Code plugin marketplace from Trail of Bits providing skills to enhance AI-assisted security analysis, testing, and development workflows. Codex can load this marketplace through its Claude marketplace compatibility.
Audits GitHub Actions workflows for security vulnerabilities in AI agent integrations including Claude Code Action, Gemini CLI, OpenAI Codex, and GitHub AI…
Understand a codebase before looking for bugs in it - what each function assumes, what it guarantees, and what it depends on elsewhere. Use when starting an…
Scans Algorand smart contracts for 11 common vulnerabilities including rekeying attacks, unchecked transaction fees, missing field validations, and access…
Prepares codebases for security review using Trail of Bits' checklist. Helps set review goals, runs static analysis tools, increases test coverage, removes…
Scans Cairo/StarkNet smart contracts for 6 critical vulnerabilities including felt252 arithmetic overflow, L1-L2 messaging issues, address conversion problems,…
Systematic code maturity assessment using Trail of Bits' 9-category framework. Analyzes codebase for arithmetic safety, auditing practices, access controls,…