Agent skill

Vero Translate

by sunblaze-ucb in sunblaze-ucb/vero

A skill your agent uses when translating selected verified items from Dafny/Verus/Coq into a compilable Lean 4 benchmark.

Apache-2.0Auto-check: notesWriting & Content

Install Vero Translate

skills CLI
$ npx skills add sunblaze-ucb/vero --skill vero-translate -a claude-code

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

GitHub CLI
$ gh skill install sunblaze-ucb/vero vero-translate --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/sunblaze-ucb/vero.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/vero-translate .claude/skills/vero-translate && 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
vero-translate
GitHub stars
107
Token cost
~4.9k tokens
SKILL.md length
1,652 words
Files
1
Skills in repo
16
Repo updated
First seen
Licence
Apache-2.0

At a glance

A skill your agent uses when translating selected verified items from Dafny/Verus/Coq into a compilable Lean 4 benchmark.

  • Works in 6 steps: Scaffolding (one Write each) → Impl modules (iterate… → Bundle + Harness (two Writes, one build) → …
  • Translating selected verified items from Dafny/Verus/Coq into a compilable Lean 4 benchmark
  • SKILL.md covers When to use, Prerequisites, Output shape (must match… and The !benchmark marker system, plus 4 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Vero Translate is an agent skill from sunblaze-ucb/vero. Use when translating selected verified items from Dafny/Verus/Coq into a compilable Lean 4 benchmark. Scaffolds the project to the ratified bundle paradigm (Bundle.lean + structure RepoImpl + Impl/Spec/Harness/Test layout) and wraps each reference implementation body in the correct !benchmark marker. Pair with vero-source-{dafny,verus,coq}.

Its SKILL.md is about 4.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Writing & Content, covering Translation and Project scaffolding. The licence is Apache-2.0.

When your agent uses it

  • Translating selected verified items from Dafny/Verus/Coq into a compilable Lean 4 benchmark
  • Tasks that involve Translation
  • Tasks that involve Project scaffolding

Example prompts

  • “/vero-translate”

Requirements

  • Pre-approved tools (allowed-tools): Read, Write, Edit, Bash, Grep, Glob, Agent

Workflow steps

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

  1. Scaffolding (one Write each)
  2. Impl modules (iterate plan.packages[].modules[])
  3. Bundle + Harness (two Writes, one build)
  4. Spec modules (iterate plan.packages[].modules[])
  5. Test (one Write, one build)
  6. Manifest + root hub (two Writes, final build)

What it can do on your machine

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

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Write
    • Edit
    • Bash
    • Grep
    • Glob
    • Agent

    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 lean, toml and json).

    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

Vero Translate loads about 4.9k tokens when it runs. Until then it costs about 90 tokens; SKILL.md has 1,652 words of instructions outside code blocks.

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

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

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Write, Edit, Bash, Grep, Glob, Agent

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 sunblaze-ucb/vero at commit 0a7325d, republished under its Apache-2.0 licence (© sunblaze-ucb). 1,652 words, ~4,879 tokens.

Download SKILL.mdSave it as .claude/skills/vero-translate/SKILL.md (or your agent's skills folder).
name
vero-translate
description
Use when translating selected verified items from Dafny/Verus/Coq into a compilable Lean 4 benchmark. Scaffolds the project to the ratified bundle paradigm (Bundle.lean + structure RepoImpl + Impl/Spec/Harness/Test layout) and wraps each reference implementation body in the correct `!benchmark` marker. Pair with `vero-source-{dafny,verus,coq}`.
allowed-tools
Read, Write, Edit, Bash, Grep, Glob, Agent

VCG Translate: Verified Code → Lean 4 Benchmark

Translate the selected items from the upstream source into a compilable Lean 4 project that matches the ratified paradigm documented in reference/BankLedger/. This is curation stage output: produce Impl/, Spec/, Harness.lean, Bundle.lean, Test.lean, root hub, lakefile.toml, lean-toolchain, and manifest.json. Do NOT emit Proof/ — that layer is materialized downstream at pre-agent-gen.

Canonical example: reference/BankLedger/. When uncertain about marker placement, Bundle shape, manifest field names, or docstring style, read those files directly — they are the living contract.

When to use

  • After plan stage has produced .vero/plan.json and humans have approved it.
  • Pair with the appropriate vero-source-{lang} skill for per-language translation patterns.

Prerequisites

  • .vero/plan.json exists with the approved translation plan (schema: docs/pipeline-schema.md).
  • Source files accessible.
  • Language skill loaded.

Output shape (must match reference/BankLedger/)

<Project>/                         # Lean project root
├── lakefile.toml                  # see "Lakefile" below
├── lean-toolchain                 # leanprover/lean4:v4.29.1
├── manifest.json                  # see docs/pipeline-schema.md
├── <Project>.lean                 # root hub — imports only
└── <Project>/                     # root package dir
    ├── Impl/<Module>.lean         # types, sig abbrevs, reference impls (with markers)
    ├── Spec/<Module>.lean         # frozen specs plus RepoImpl-dependent spec helpers
    ├── Bundle.lean                # structure <Project>Bundle — one field per API
    ├── Harness.lean               # structure RepoImpl + canonical + joint_unsat macro
    └── Test.lean                  # #guard conformance tests against Bank.* directly

Multi-package benchmarks add sibling <OtherPackage>/ dirs, each with their own Impl/, Spec/, Bundle.lean. Harness.lean stays as a benchmark-level singleton.


The !benchmark marker system

Every LLM-editable slot is wrapped in a -- !benchmark @start <key> … / -- !benchmark @end <key> … pair. The @end must repeat the same key and def=<name>.

Active key set (7)
KeyWrapsdef=Extra fields on @start
importsfile-level import extension slot——
global_auxfile-level helper-def slot——
codefunction body (reference impl in curated source; sorry only after pre-agent materialization)yes—
code_auxper-function helper-def slotyes—
prooftactic body after byyeskind=prove|disprove|unsat|sat|joint_unsat, target=<spec> (omitted only when kind=joint_unsat)
proof_auxper-theorem helper-def slotyes—
claimLLM's live macro invocation in Joint.lean (discarded at eval)yeskind=joint_unsat

Retired (do not emit): spec, spec_aux, claim_aux, def_aux, def_body, precond*, postcond*.

!solution prefix (new third prefix — only in Proof/Joint.lean)

Multi-line block that lets the LLM submit structured data (the joint-unsat spec list). Translate does not emit Proof/Joint.lean; the pre-agent-gen stage does. Knowledge for reference only.

!curation prefix

Single-line curator-only annotations. Stripped before the benchmark is presented to the LLM. Only in Impl/* after curation. Forms:

-- !curation @review v<N> [<x| >] <name> — <loc>, <kind>, <notes>
-- !curation @human: <note>
-- !curation @question <target>: <q>
-- !curation @answer: <a>
-- !curation @v<N> [...] <name> — <notes> [RESOLVED|NOTED|ANSWERED|KEPT]
Marker positioning rules (hard)
  • imports — immediately after the actual import statements, BEFORE the module docstring. At file top if no imports.
  • global_aux — after the module docstring, before the body.
  • code_aux — file-level, immediately before its code slot.
  • proof_aux — file-level, BEFORE the theorem or macro invocation. Never between by and the proof body.
  • claim — in Joint.lean only; wraps the LLM's live macro invocation (its content is discarded at eval).
def=<name> conventions
  • code / code_aux — the Lean function dot-tail (createAccount).
  • proof / proof_aux — full theorem name (prove_<spec>, disprove_<spec>, unsat_<spec>, sat_<spec>).
  • claim — joint_unsatisfiability (there is exactly one joint slot per benchmark).
Balance

Every @start has a matching @end with the same key and def=. No nesting. Commented markers (inside /- … -/ or -- -- !benchmark) are ignored by the extractor. def=<name> is unique within (file, key).


File templates — canonical shape

lakefile.toml
toml
name = "{Project}"
version = "0.1.0"
defaultTargets = ["{Project}"]

[[lean_lib]]
name = "{Project}"
srcDir = "."
leanOptions = [{ name = "autoImplicit", value = false }]

The old [package] form is gone.

lean-toolchain
leanprover/lean4:v4.29.1

Override only if the upstream source forces a different version.

Root hub <Project>.lean
lean
import {Project}.Impl.<Module1>
import {Project}.Impl.<Module2>
...
import {Project}.Bundle
import {Project}.Harness
import {Project}.Spec.<Module1>
import {Project}.Spec.<Module2>
...
import {Project}.Test

Do not import any Proof/ directory — that's a downstream artifact.

Impl/<Module>.lean template
lean
import {Project}.Impl.<DepModule>

-- !benchmark @start imports
-- !benchmark @end imports

/-!
# {Project}.Impl.<Module>

<One-paragraph description.>

DO NOT MODIFY types or signatures — these are the fixed vocabulary.
Implement only the function bodies.
-/

-- !benchmark @start global_aux
-- !benchmark @end global_aux

-- ── Types (no markers — fixed vocabulary) ─────────────
...

namespace Bank

-- ── API signatures (no markers — fixed vocabulary) ────
abbrev CreateAccountSig := AccountId → Ledger → Ledger
...

end Bank

-- ── Reference implementations (LLM task slots) ──────────

-- !benchmark @start code_aux def=createAccount
-- !benchmark @end code_aux def=createAccount

-- !curation @review v1 [ ] createAccount — Impl/<Module>, code, reference impl
def Bank.createAccount : Bank.CreateAccountSig :=
-- !benchmark @start code def=createAccount
  fun id ledger =>
    if ledger.any (fun a => a.id == id) then ledger
    else ⟨id, 0⟩ :: ledger
-- !benchmark @end code def=createAccount

The body inside the code marker is the curator's reference implementation — real working code, not sorry. Pre-agent-gen replaces it with sorry when emitting the LLM-facing benchmark. See Non-Negotiables below.

lean

Types live in the foundation Impl file (the one every other Impl imports — typically Impl/Account.lean for the root-most types). There is no central Sig.lean or Types.lean.

Spec/<Module>.lean template (frozen, no markers)
lean
import {Project}.Harness

/-!
# {Project}.Spec.<Module>

Specifications for <subsystem>. Each `spec_*` is a property over an
arbitrary `impl : RepoImpl`. Spec helpers that mention `RepoImpl` also
live here, before the specs.

DO NOT MODIFY — this file is frozen curator-given content.
-/

/-- <natural-language description> -/
def spec_<name> (impl : RepoImpl) : Prop :=
  ∀ …, impl.<pkg>.<fn> … = …

Specs access API functions via impl.<pkg>.<fn> where <pkg> is the field name in RepoImpl (e.g. impl.bankLedger.createAccount). No markers at all — the Spec layer is entirely frozen.

Bundle.lean template
lean
import {Project}.Impl.<Module1>
import {Project}.Impl.<Module2>
...

/-!
# {Project}.Bundle

Per-package implementation bundle for the `{Project}` root package.
Collects all API signatures into one structure.

DO NOT MODIFY — benchmark infrastructure.
-/

structure {Project}Bundle where
  createAccount : Bank.CreateAccountSig
  closeAccount  : Bank.CloseAccountSig
  ...

Bundle struct name is <Project>Bundle (PascalCase). One field per API sig, field name matches the API's Lean name (camelCase).

Harness.lean template
lean
import {Project}.Bundle

/-!
# {Project}.Harness

Benchmark harness: `RepoImpl` structure (one field per package),
`canonical` instance wiring, and the `joint_unsat` macro.

DO NOT MODIFY — benchmark infrastructure.
-/

structure RepoImpl where
  {pkg} : {Project}Bundle

def canonical : RepoImpl where
  {pkg} := {
    createAccount := Bank.createAccount
    closeAccount  := Bank.closeAccount
    ...
  }

/-- `joint_unsat spec_A spec_B [spec_C …] by <proof>` generates the
    ∧-conjunction unsat theorem. Variadic; no sort / no dedup — anti-cheat
    is enforced at `!solution` extraction during evaluation. -/
syntax "joint_unsat" ident ident ident* "by" tacticSeq : command

open Lean in
macro_rules
  | `(joint_unsat $s1 $s2 $[$rest]* by $proof) => do
    let specs := #[s1, s2] ++ rest
    let name := specs.foldl (init := `joint_unsat) fun acc s => Name.append acc s.getId
    let mut body ← `($(specs[0]!) impl)
    for s in specs[1:] do
      body ← `($body ∧ $s impl)
    `(theorem $(mkIdent name) : ¬ ∃ impl : RepoImpl, $body := by $proof)

For single-package benchmarks (typical), RepoImpl has exactly one field named lowerCamelCase(<Project>). For multi-package benchmarks it has one field per package.

No other macros. The retired solo_unsat / sat_witness macros are gone; per-module proof obligations materialize as plain theorem statements downstream.

Test.lean template
lean
import {Project}.Impl.<Module1>
...

/-!
# {Project}.Test

`#guard` conformance tests. Guards run against `Bank.*` directly —
the curator's reference implementations live INSIDE the `code` markers
in `Impl/*.lean`. Before the LLM sees the benchmark, pre-agent-gen
replaces marker content with `sorry`; these guards catch regressions
in the reference impls themselves, not in LLM submissions.

DO NOT MODIFY — infrastructure.
-/

open Bank

#guard accountExists 1 [] == false
#guard getBalance 1 (createAccount 1 []) == some 0
#guard (transfer 1 2 30 [⟨1, 100⟩, ⟨2, 50⟩]).map totalAssets == some 150
...

No markers in Test.lean. No Bank.Ref namespace — that's been retired (2026-04-20). The reference implementation is whatever the curator wrote inside each code marker.


manifest.json (derived from the tree)

At the end of translate, emit / update the manifest per the shape in reference/BankLedger/manifest.json (full schema: docs/pipeline-schema.md). Top-level:

json
{
  "benchmark_id": "...",
  "description": null,
  "lean_version": "4.29.1",
  "modes_supported": ["proof", "codeproof"],
  "source": { "kind": "translated", "language": "...", "repo_url": "...", "commit_hash": "...", "path": "..." },
  "curation": { "date": "..." },
  "root_package": "{Project}",
  "files": {
    "root_hub": "{Project}.lean",
    "harness": "{Project}/Harness.lean",
    "test":    "{Project}/Test.lean",
    "lakefile": "lakefile.toml"
  },
  "packages": [
    {
      "name": "{Project}",
      "bundle": "{Project}/Bundle.lean",
      "bundle_type": "{Project}Bundle",
      "repo_impl_field": "{lowerCamelCase}",
      "modules": [
        {
          "name": "<Module>",
          "impl": "{Project}/Impl/<Module>.lean",
          "spec": "{Project}/Spec/<Module>.lean",
          "apis": [
            { "name": "createAccount", "sig": "CreateAccountSig", "type": "AccountId → Ledger → Ledger" }
          ],
          "specs": ["spec_create_zero_balance", "..."]
        }
      ]
    }
  ]
}

apis[].type is the body of the abbrev <Sig> := <type> in the Impl file (exact text, including spaces around →). specs[] are the spec names found in Spec/<Module>.lean.


Workflow (plan-driven, one file per Write, build per file)

plan.json is the contract. Translate walks plan.packages[].modules[] and emits exactly the files the plan names, one at a time. Do NOT improvise a module that isn't in the plan, and do NOT skip one that is. Do NOT write multiple Lean files before running lake build.

Non-negotiable write discipline.

  • One Write per file. Never batch-emit several .lean files in a single turn.
  • After each Write, run cd <project> && lake build and wait for it to succeed before moving to the next file.
  • If a file is larger than ~150 lines of body (e.g. an Impl/ module with 8+ APIs), split its emission into: (a) Write skeleton with types + sig abbrevs + marker-wrapped API definitions, lake build, (b) Edit to fill each API's reference impl one at a time. This keeps the file buildable after every step.
  • Announce each Write in one sentence: "Writing Impl/Merkle.lean — 3 types, 5 APIs, 12 code slots." Then perform the Write. Then announce the build outcome.
Phase 1 — Scaffolding (one Write each)

lakefile.toml, lean-toolchain, empty root hub, empty manifest.json. Build the empty scaffold. That's four Writes and one lake build.

Phase 2 — Impl modules (iterate plan.packages[].modules[])

For each module M in plan.json, in dependency order (foundation module first):

  1. Look up the four per-module lists in plan.json:
    • M.types — fully-defined types, emit without markers
    • M.spec_helpers — curator-given vocabulary for specs; emit each as a fully-defined def / inductive / predicate using lean_form verbatim. No markers, not in Bundle. Helpers that mention RepoImpl or impl.<pkg> must live in Spec/<Module>.lean before the specs; pure helpers live in Impl/<Module>.lean.
    • M.api_helpers (optional, usually empty) — fully-defined helpers the curator wants to hand to the LLM. No markers, not in Bundle.
    • M.apis — sig abbrevs + reference implementation defs, each wrapped in !benchmark code / code_aux markers, field contributed to Bundle.
  2. Write <Project>/Impl/<M.name>.lean in this order, top to bottom:
    imports
    `-- !benchmark @start imports`  … `-- !benchmark @end imports`
    docstring
    types (no markers)
    pure spec helpers (no markers)
    api helpers (no markers, if any)
    namespace Bank
      API sig abbrevs (no markers)
    end Bank
    `-- !benchmark @start global_aux` … `-- !benchmark @end global_aux`
    one `code_aux` + `code` marker pair per API (with reference impl
    body inside each `code` marker)
  3. lake build. Fix errors before proceeding.
  4. Announce: "Module <M.name> built. T types, H spec helpers, N API slots emitted. Moving on to <next>."

No module is emitted before its dependencies build clean.

Show full SKILL.md (566 more words)Show less
Phase 3 — Bundle + Harness (two Writes, one build)

Write <Project>/Bundle.lean with one field per entry in plan.packages[].modules[].apis[] only — spec helpers and API helpers must NOT appear as Bundle fields. Write <Project>/Harness.lean with structure RepoImpl + canonical wiring, again using only API names. lake build.

Verify canonical has exactly one field per API in the plan and no extra fields — grep for each <api_lean_name> in Harness.lean before calling Phase 3 complete. Count fields: it must equal len(plan.packages[].modules[].apis[]) summed across modules.

Phase 4 — Spec modules (iterate plan.packages[].modules[])

For each module M in plan order, write <Project>/Spec/<M.name>.lean when M.specs is non-empty or M.spec_helpers contains any helper mentioning RepoImpl / impl.<pkg>. Emit the RepoImpl-dependent helpers first, then every spec from M.specs as a def spec_<name> (impl : RepoImpl) : Prop := …. One Write per module, build after each one. The plan's spec.lean_form field is the authoritative body — paste it under the def header verbatim, adjusting only for obvious typos.

Spec count gate. After each Spec file, count its ^def spec_ lines (grep -c ...) and confirm it matches plan.json[package].modules[M].specs.length. If the plan says 11 specs and you emitted 6, stop and emit the remaining 5 — do not proceed to the next module.

Phase 5 — Test (one Write, one build)

Write <Project>/Test.lean with #guard tests from plan.test_cases[]. One Write. Build.

Phase 6 — Manifest + root hub (two Writes, final build)

Regenerate manifest.json from what was actually emitted (don't trust the scaffold — the module list must reflect the real tree). Update the root hub to import every emitted file except Proof/. Final lake build must pass cleanly without sorry warnings in curated Impl/ code markers. sorry is introduced later by pre-agent materialization, not by translate.

If interrupted

Every phase leaves the tree in a lake-buildable state. To resume: rerun translate and the skill should detect existing files (via a quick ls <project>/Impl/) and skip already-emitted modules. Never overwrite a file that already contains !benchmark markers without confirming the curator wants it regenerated.


Non-negotiables

  1. No Sig.lean, no Types.lean — types and sigs live with the Impl file they describe.
  2. Spec/ has no markers — entirely frozen.
  3. No Proof/ emitted — that is downstream.
  4. Fill reference impls inside code markers — NOT sorry. The curator writes the actual working implementation there; pre-agent-gen replaces marker content with sorry before the LLM sees the benchmark. Test.lean #guards therefore hit real code at curation / build time, catching regressions in the reference itself.
  5. No Bank.Ref namespace. Retired 2026-04-20 in favor of the single-source-of-truth model above. #guard tests use Bank.* directly.
  6. Only 7 !benchmark keys — retired keys are errors (see src/vero/curation/marker.py RETIRED_KEYS for the list).
  7. Marker positioning rules — imports after actual imports, proof_aux before theorem, no nesting.
  8. Bundle + structure RepoImpl uniformly — single-package benchmarks use the same shape (one field) as multi-package (more fields).
  9. Specs access APIs via impl.<pkg>.<fn> — never bare impl.<fn> (the structure is one-level-nested, not an abbrev).
  10. Manifest items are source-backed — translated APIs, helpers, specs, and reference implementations must correspond to concrete upstream declarations; do not invent placeholders to fill gaps.
  11. Imports use one canonical generated root — import generated modules through the manifest package paths only, so the same declarations cannot be loaded through alternate roots.
  12. lake build must pass before calling translate complete.

Validation

After completing translate, the pipeline runs the validate stage (rule-based checks in src/vero/curation/validation/). If the translate output diverges from the paradigm, validate blocks the pipeline with actionable errors. Fix and re-run translate.

© sunblaze-ucb, 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

Just SKILL.md in .claude/skills/vero-translate of sunblaze-ucb/vero.

Open the folder on GitHubat commit 0a7325d

Compare with similar skills

Vero Translate 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.

Vero Translate compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Vero Translate this skillsunblaze-ucb/vero107—~4.9kAutomated safety check: NotesApache-2.0
Forge Codegen Crudyaomindong1996/forge-admin127—~1.3kAutomated safety check: PassApache-2.0
Create Module FileMichealWayne/fe-tools207—~381Automated safety check: PassNone
PonytailDavidObando/gsharp5657 repos~1.7kAutomated safety check: PassMIT
Create Release Blogweb-infra-dev/rstest505—~4.7kAutomated safety check: PassMIT
Aholo Viewer Docsmanycoretech/aholo-viewer1.1k—~341Automated safety check: PassMIT

Similar skills

  • Forge Codegen Crud

    yaomindong1996/forge-admin

    Generate or review Forge project code-generation output for CRUD modules.

    127 GitHub stars~1.3k tokensUpdated today
    Documents & OfficeAuto-check passed
  • Create Module File

    MichealWayne/fe-tools

    Create a new module file for fe-tools utilities. An agent skill from MichealWayne/fe-tools.

    207 GitHub stars~381 tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Ponytail

    DavidObando/gsharp

    Forces the laziest solution that actually works, simplest, shortest, most minimal.

    565 GitHub starsUsed in 7 repos~1.7k tokens
    DevelopmentAuto-check passed
  • Create Release Blog

    web-infra-dev/rstest

    Generate a narrative version release blog post from commits within a tag range.

    505 GitHub stars~4.7k tokensUpdated today
    Writing & ContentAuto-check passed
  • Aholo Viewer Docs

    manycoretech/aholo-viewer

    Guides writing and maintaining Aholo Viewer documentation: README, AGENTS.md, architecture notes, bilingual manual pages and AI collaboration guides.

    1.1k GitHub stars~341 tokensUpdated 2 days ago
    Writing & ContentAuto-check passed
  • Dify Docs Format Check

    langgenius/dify-docs

    Check formatting compliance in changed documentation against writing-guides/formatting-guide.md and tools/translate/formatting-{zh,ja}.md.

    178 GitHub stars~2.8k tokensUpdated yesterday
    Writing & ContentAuto-check passed

More from sunblaze-ucb/vero

All 16 skills in this repo
  • Vero Discover

    sunblaze-ucb/vero

    A skill your agent uses when scanning a verified source repo (Dafny, Verus, or Coq) to classify every item and produce per-file discovery markdown for human curation.

    107 GitHub stars~3.9k tokensUpdated 1 mo ago
    Auto-check: notes
  • Vero Coq Pitfalls

    sunblaze-ucb/vero

    Load BEFORE translating any Coq item to Lean 4 to avoid known Coq→Lean pitfalls.

    107 GitHub stars~1.5k tokensUpdated 1 mo ago
    Auto-check: notes
  • Vero Dafny Pitfalls

    sunblaze-ucb/vero

    Load BEFORE translating any Dafny item to Lean 4 to avoid known Dafny→Lean pitfalls.

    107 GitHub stars~1.2k tokensUpdated 1 mo ago
    Auto-check: notes
  • Vero Lean Pitfalls

    sunblaze-ucb/vero

    Load BEFORE writing any Lean 4 translation to avoid common Lean pitfalls (universes, coercions, type-class resolution, notation).

    107 GitHub stars~1.4k tokensUpdated 1 mo ago
    Auto-check: notes
  • Vero Plan

    sunblaze-ucb/vero

    Use after vero-select to write a detailed translation plan as .vero/plan.json — the authoritative contract the TRANSLATE stage executes.

    107 GitHub stars~3.6k tokensUpdated 1 mo ago
    Auto-check: notes
  • Vero Python Pitfalls

    sunblaze-ucb/vero

    Load BEFORE translating any Python item to Lean 4 to avoid known Python→Lean pitfalls.

    107 GitHub stars~1.7k tokensUpdated 1 mo ago
    Auto-check passed

Questions about Vero Translate

What does Vero Translate do?

A skill your agent uses when translating selected verified items from Dafny/Verus/Coq into a compilable Lean 4 benchmark. Vero Translate is an agent skill from sunblaze-ucb/vero. Use when translating selected verified items from Dafny/Verus/Coq into a compilable Lean 4 benchmark.

When should I use Vero Translate?

Vero Translate fits situations like: translating selected verified items from Dafny/Verus/Coq into a compilable Lean 4 benchmark; tasks that involve Translation; tasks that involve Project scaffolding.

How do I install Vero Translate in Claude Code?

Run `npx skills add sunblaze-ucb/vero --skill vero-translate -a claude-code`. Or copy the skill folder (.claude/skills/vero-translate in sunblaze-ucb/vero) into .claude/skills/vero-translate in your project. Claude Code loads it when a task matches its description.

How do I install Vero Translate in Codex?

Run `npx skills add sunblaze-ucb/vero --skill vero-translate -a codex`. Or copy the skill folder (.claude/skills/vero-translate in sunblaze-ucb/vero) into .agents/skills/vero-translate in your project. Codex loads it when a task matches its description.

Can I use Vero Translate 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 sunblaze-ucb/vero --skill vero-translate -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/vero-translate, .gemini/skills/vero-translate, .github/skills/vero-translate and .opencode/skills/vero-translate in your project.

What does Vero Translate need to run?

SKILL.md names no scripts, command-line tools or credentials: Vero Translate is instructions for the agent only. Its frontmatter pre-approves these tools: Read, Write, Edit, Bash, Grep, Glob, Agent.

Does Vero Translate 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 Vero Translate safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Vero Translate use?

Vero Translate 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 Vero Translate use?

About 4.9k tokens (SKILL.md is roughly 20k 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 Vero Translate?

Skills that share tags, products or a category with Vero Translate: Forge Codegen Crud (yaomindong1996/forge-admin, 127 stars), Create Module File (MichealWayne/fe-tools, 207 stars), Ponytail (DavidObando/gsharp, 565 stars) and Create Release Blog (web-infra-dev/rstest, 505 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Vero Translate?

sunblaze-ucb (a GitHub organization) maintains it in sunblaze-ucb/vero, which has 107 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on August 17, 2026.

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