elps: Skill for Claude Code

.claude/skills/elpsvet/SKILL.md

elpsvet is a skill for Claude Code from luthersystems/elps. It costs 0 tokens per session (6,184 once invoked), scanned A, original, BSD-3-Clause.

A custom static-analysis tool for the ELPS project's Go source. Static analysis examines code without running it and checks project-specific rules that the Go compiler does not enforce.

In plain words
What is it for?
Use it after changing ELPS internals or when the project's static-analysis check reports a diagnostic.
Why use it?
It catches violations of ELPS's internal rules around values, package data, analyzers, and built-in functions before they become runtime bugs. It also matches checks used in continuous integration, the automated checks run for changes.

Skill for Claude Code

Written for Claude Code: installed under .claude/.

This is luthersystems/elps's own configuration. It tells Claude Code how to work on elps itself, so it is not a mod to install elsewhere. Copy it as a starting point and replace the rules that are about this project. Everything elps configures →

Needs its repository: it runs a file that does not travel with it, so clone the repository first. The line is go test ./cmd/elpsvet/ ./elpsvet/... # the analyzers' own tests and fixtures.

Reuse

Borrowing it

Nothing to install: this file belongs to luthersystems/elps. Take a copy, put it at the same path in your own repository, and replace the rules that are about this project with yours.

Copy the file
curl -O https://raw.githubusercontent.com/luthersystems/elps/main/.claude/skills/elpsvet/SKILL.md
Clone the repo
git clone --depth 1 https://github.com/luthersystems/elps

Made for: Claude Code.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for elpsvet

README.md
[![agentmods](https://agentmods.dev/badge/skills/luthersystems/elps/elpsvet/github.svg)](https://agentmods.dev/skills/luthersystems/elps/elpsvet)
Your own site
<a href="https://agentmods.dev/skills/luthersystems/elps/elpsvet"><img src="https://agentmods.dev/badge/skills/luthersystems/elps/elpsvet/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for elpsvet

Your own site · 80×15
<a href="https://agentmods.dev/skills/luthersystems/elps/elpsvet"><img src="https://agentmods.dev/badge/skills/luthersystems/elps/elpsvet.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 0 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 6,184 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00000 $0.06184
Opus 5.5 $0.00000 $0.02474
Sonnet 5.5 $0.00000 $0.01237
Haiku 4.5 $0.00000 $0.00618

Measured 2d ago against content hash 3ed381dd2cad, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

elpsvet scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2d ago.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

.claude/skills/elpsvet/SKILL.md · 361 lines

How it starts

The opening of the file, as written. The whole thing — 361 lines — stays where its author put it; the contents beside it link to each section on GitHub.

/elpsvet — elps's Own Go Static Analysis

cmd/elpsvet is a golang.org/x/tools/go/analysis multichecker over elps's own Go source. It enforces invariants the compiler cannot, and CI runs it on every PR (Seal contract (elpsvet) in .github/workflows/elps.yml).

Trigger

Use when:

  • make elpsvet (or the CI step) reports a diagnostic;
  • you add a native payload (lisp.Native, lisp.NativeOf, a .Native write) or a new payload type (it needs a durable codec or a transient mark, see "Durable natives");
  • you add a package-level table holding *lisp.LVal (e.g. a stdlib builtins slice), write LVal fields, or store a *token.Location;
  • you register a builtin as a method value or closure, or give one package-level state;
  • you touch Package tables, packageBase, sortedmap.m, or the lazy template path (lisp/template_lazy.go);
  • you change an analyzer rule, a tier, or an allowlist;
  • a library builtin evaluates code, builds a lambda, reads Runtime.Package or resolves a symbol it was handed (elpsownpkg: take a value, qualify the name, or turn it into a macro over core forms).

The thirteen rules

Analyzer File Flags Suppression marker
elpsownership main.go package-level var whose type reaches *lisp.LVal (#363) //elpsvet:allow <reason>
elpsfreshness freshness.go, alias.go LVal field write on a value the function did not construct, incl. via a local slice alias (#333/#334, #369/#371) //elps:mutates <reason>
elpsescape escape.go runtime-owned *token.Location stored uncopied into an escaping value (#375) //elps:aliases <reason>
elpsnativepayload elpsvet/nativepayload/nativepayload.go (importable) native payload whose type a template could not publish safely //elpsvet:allow-native <≥3-word reason>
elpsbuiltinstate elpsvet/builtinstate/builtinstate.go (importable) a builtin that writes state outliving the call: its receiver, a captured variable, or a package-level var (#680, the class behind #678) //elpsvet:allow-shared <≥3-word reason>
elpsfrozenpackage frozenpackage.go a write to Package tables or a packageBase field outside the audited write paths allowlist row in packageWriteFunctions (no marker)
elpslazyread lazyread.go a direct read of Package.symbols, Package.baseValues or sortedmap.m that bypasses the lazy-filling accessor allowlist row in lazyTableFunctions (no marker)
elpsownpkg elpsvet/ownpkg/ownpkg.go (importable) inside a library builtin (LBuiltin shape, outside package lisp): Eval*, Load*, Lambda, Terminal, InPackage, a Runtime.Package read, or a symbol lookup that is not a literal qualified name -- a library builtin runs in its own package (#736) //elpsvet:allow-ownpkg <≥3-word reason>
elpsltypeswitch ltypeswitch.go an audited lisp.LType switch has a default arm or misses a constant scope list in the analyzer (no marker)
elpsvalwalker valwalker.go a function dispatches on lisp.LType and recurs or pushes child values in a loop in elps: audited pkgpath.FuncName row in valueWalkerFunctions; in another module: //elpsvet:allow-valwalker <≥3-word reason> in the declared function's doc comment (ignored inside elps)
elpsmarkerfields markerfields.go a struct carrying templatepolicy.Marker whose fields reach a map, slice, pointer, func, chan, interface, uintptr, unsafe.Pointer or type parameter, through nested structs and arrays; covers types in function bodies, type T U and anonymous struct literals (luthersystems/elps#778) //elpsvet:allow-marker <≥3-word reason> on the type doc, or on a field line or the line above (any nesting depth)
elpsdurablenative elpsvet/nativepayload/durable.go (importable) a native payload type with no visible package-level libjson.DurableCodec[T] value and no transient mark; a type-parameter payload; a pointer or unlisted codec value a documented TransientNative() method on the type; for a type of another module, //elpsvet:transient <reason> at one construction
elpsidiom elpsvet/idiom/idiom.go (importable) in every package, package lisp included, an idiom with a suggested fix (the "(fix)" rows of the IDIOMS list in the package doc); elpsvet sets -elpsidiom.fixonly, so hints and mistakes are not reported. In package lisp a fix is not made in a function that the new helper reaches, so a helper does not call itself //elpsvet:keep-idiom <reason> on the line or the line above, for a hot site where the helper measures slower; otherwise apply the fix with go run ./cmd/elpsvet -test=false -fix ./...

Read the full file on GitHub · 361 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 2d ago First seen · 361 lines · 0 tokens per session scan A 3ed381dd2cad

Subscribe to this mod's changes

elpsvet is a skill published in the GitHub repository luthersystems/elps (36 stars, last pushed today), licensed BSD-3-Clause. It costs nothing until one of its globs matches a file; then it loads 6,184 tokens. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-10-26.

Related

Other skills, from other repositories

code-changes

Workflow for any task that ends in code changes: issue analysis or triage, pull request review comments, features, bug fixes, refactors. Invoke at the start of such a task, before reading or writing code.

JanDeDobbeleer/oh-my-posh · 48 tokens

printing-press-output-review

Internal sub-skill: agentic review of a printed CLI's sampled command output for plausibility issues that rule-based checks can't encode (substring-match relevance, format bugs, silent source drops, ranking failures). Invoked via the Skill tool by the main printing-press skill at Phase 4.85 and printing-press-polish…

mvanhorn/cli-printing-press · 102 tokens

code-guidelines-go

Go 1.24–1.27 coding guidelines for the dimetron/pi-go AI agent runtime. Use this skill whenever writing, reviewing, or refactoring ANY Go code in pi-go. This covers idiomatic style, error handling, concurrency, project layout, testing (table-driven, fuzz, benchmarks, synctest), new stdlib usage, golangci-lint v2…

dimetron/pi-go · 124 tokens

design-review

Deep design review of Go codebase — naming, structure, consistency, interfaces, error handling. Scores each dimension and provides actionable fixes.

dimetron/pi-go · 30 tokens

pi-loop-forensics

Diagnose pi-go agent loops and degenerate turns — "agent loop aborted", runaway thinking with no tool calls, repeated phrases. Discriminates genuine model repetition collapse from a race, a tool-parse failure, or a too-low guard, and A/B replays a seed session across providers.

dimetron/pi-go · 65 tokens

nightly-session-watch

Nightly sweep of the last 24h of pi-go sessions — anomalous runs, loop aborts, tool error rates, token waste, real prompt-token spend, and whether the observation and palace pipelines are still recording. Triages each finding to the specialist skill that diagnoses it. Use for an unattended daily health check, or on…

dimetron/pi-go · 78 tokens