Skills DirectorySkills Directory
SkillsLearnSecurityCategoriesDocsCommunityBlog
Sign InSubmit Skill
Skills Directory

Security-tested agent skills for Claude, coding agents, and AI workflows.

Directory

  • Browse Skills
  • All Skills A–Z
  • Claude Skills
  • Claude Code Skills
  • Agent Skills
  • Categories
  • Submit a Skill

Learn

  • Learn Hub
  • Install Claude Skills
  • Write SKILL.md
  • Skills vs MCP
  • Directories Compared

Security

  • Security
  • Methodology
  • Secure Claude Skills
  • Security Badges

Company

  • About
  • Community
  • Blog
  • API Docs
  • Advertise

2026 Skills Directory. All rights reserved.

Back to skills

Lint Elisp

ASecurity

Fix byte-compile warnings, checkdoc notes, and other Elisp diagnostics in one or more files. Use when the user says "lint elisp", "fix warnings", "fix diagnostics", "elisp lint", "checkdoc", "byte-compile warnings", or wants to clean up Elisp compiler/linter output.

12 stars
0 votes
0 copies
0 views
Added 9/20/2026
documentationgoexpressdocumentation

Works with

cli

Security Analysis

A100/100

Scanned 9/20/2026

Install to Claude Code

$npx -y skills add benthamite/dotfiles --skill lint-elisp --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Lint Elisp?

Add the live security badge to your README — it updates automatically with every re-scan.

Security grade badge for Lint Elisp
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/benthamite-lint-elisp-dotfiles/badge)](https://www.skillsdirectory.com/skills/benthamite-lint-elisp-dotfiles)

More formats (shields.io, HTML) on the badges page.

Download Zip
Files
SKILL.md
---
name: lint-elisp
description: Fix byte-compile warnings, checkdoc notes, and other Elisp diagnostics in one or more files. Use when the user says "lint elisp", "fix warnings", "fix diagnostics", "elisp lint", "checkdoc", "byte-compile warnings", or wants to clean up Elisp compiler/linter output.
---

# Lint Elisp

Diagnose and fix the requested Elisp diagnostics without changing intended
behavior. A completed diagnostic run is not the same as a warning-free run;
an error, skipped compiler or incomplete check must never become “clean.”

Use `elisp-conventions` for Elisp edits and verification, and `dotfiles-context`
when canonical package or paired configuration routing is needed.

## 1. Resolve scope and source

Use the actual request and reliable current-file context, not just a literal
`$ARGUMENTS` placeholder. A review, diagnosis-only or “show diagnostics” request is read-only;
a request to fix/lint the named targets authorizes scoped diagnostic fixes.

- A file request selects that exact source, including its owning repository and
  any unsaved buffer state. Do not overwrite a conflicting buffer or pick another
  file from its basename.
- A directory request defaults to immediate `.el` children unless recursive or
  exhaustive coverage was requested. Record the inventory and exclusions.
  Generated files such as `*-autoloads.el` and `*-pkg.el` normally route to their
  source/generator, not hand edits. Do not silently skip an explicitly named file.
- With no path, use an unambiguous target already established in the conversation.
  Ask one concise question only if that identity remains genuinely ambiguous;
  do not guess a “main file” from the directory name.

Resolve managed sources and required dependency locations through the actual
registry/project workflow. Do not construct a profile path from a string returned
by `emacsclient`, scan profiles for a plausible checkout, or use the package's
build as its source. An unavailable required registry/dependency context is a
reported limitation, not permission to guess. Unmanaged or self-contained Elisp
uses its own documented clean batch context; it does not require a live profile
merely to check a built-in-only file.

## 2. Collect complete diagnostics

Read [the runner contract](references/diagnostics.md) before running
[scripts/lint-file.el](scripts/lint-file.el). Use a fresh `emacs -Q --batch`
process for each exact target with literal arguments and verified source-first
dependency paths. Never interpolate a filename into an Elisp expression.

Byte compilation can execute macros, `eval-when-compile` and required libraries.
Inspect relevant code/project commands before execution; `-Q` and temporary
output are not a sandbox or authority for network, installation or live-runtime
effects. If those effects exceed the request, report the blocked check. Do not
load the target into the active Emacs session to make compilation succeed.

Record each stage's completion, diagnostics and errors, plus the target identity,
Emacs version and dependency context used. Preserve the initial findings so fixed,
remaining and newly introduced diagnostics can be distinguished. A successful
process exit alone, empty grep output or a missing callback proves nothing about
a check that did not complete. Treat `no-byte-compile` as an explicit skip, not
a clean compile; do not remove the directive merely to satisfy the checker.

## 3. Fix causes, not warning counts

Read each diagnostic in its declaration/caller context before editing. Common
cases are investigation routes, not automatic transformations:

| Diagnostic | Behavior-preserving approach |
|---|---|
| Free variable | Check spelling, lexical binding, macro expansion and the defining dependency. Use a forward `(defvar VAR)` only for an established special variable; it changes binding interpretation within its scope. Do not invent a global declaration to conceal a missing local binding. |
| Later variable definition | Check initialization, custom setters, dependency and load order before moving `defvar`, `defcustom` or `defconst`. Moving an initializer is not just formatting. Prefer an accurate declaration when it preserves the established contract. |
| Unknown function | Check the actual provider and intended optional/eager loading. Use a truthful `declare-function` or appropriate dependency fix; do not add an eager `require` solely to suppress a warning. |
| Unused binding | Preserve initializer evaluation, ordering and side effects. An ignored local name may be suitable; deleting the binding is safe only if its evaluation is unnecessary. Check keyword, public and introspected argument contracts before renaming formals. |
| Argument missing from docstring | Describe the actual argument in uppercase without inventing behavior or padding the prose. |
| Imperative or punctuation note | Apply the rule to the actual declaration type and meaning. Function-docstring guidance is not a universal rewrite of variable documentation. |
| Width note | Use the project's/checker's actual width and preserve literals, URLs, syntax and readable meaning; do not assume every diagnostic uses 80 columns. |

Preserve docstring semantics and public interfaces. Do not disable warning
classes, change algorithms, or add dummy definitions to manufacture a clean run.
If a diagnosed false positive or necessary semantic change cannot be handled by
a sound scoped edit, retain it with the reason. Keep unrelated user hunks out.

## 4. Verify and stop accurately

Re-run both stages for every changed target under the same established context.
Compare source identities and the diagnostic ledger; do not use stale results
after concurrent changes. Fix new diagnostics caused by the edit, but stop a
non-progressing cycle with an explicit unresolved result rather than rewriting
the same docstring indefinitely.

Follow the layout-specific `elisp-conventions` checks: the managed package's
source-bound batch evidence, an unmanaged project's own checks, or the owning
workflow for non-package/test-only Elisp. Add focused behavior assertions when
bindings, definitions or executable code changed. Follow its supported
post-commit live-verification path when applicable; do not substitute a bare
`emacsclient -e` call or manually reload package code. A clean lint run is
diagnostic evidence, not proof of runtime behavior.

Inspect the final diff and index, and commit only owned authorized changes under
project policy. File selection alone does not isolate foreign hunks. Do not
push, publish or restart sessions as lint bookkeeping.

## 5. Report

Briefly state the checked scope, meaningful fixes and any remaining diagnostics
or incomplete checks. Give counts only from the recorded results. Distinguish
“no diagnostics in completed checks” from “all requested checks passed,” and
never describe intentionally skipped findings as fixed.

Attribution

benthamitebenthamite
View sourceMore from benthamite →
SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments (0)

No comments yet. Be the first to comment!

SSkills DirectorySkills Directory

Your tool, in front of Claude Code builders.

3 founder slots · $299/mo · GSC-verified traffic · sponsors can never buy grades.

See placements

Related Skills

Context Fundamentals

Understand the components, mechanics, and constraints of context in agent systems. Use when designing agent architectures, debugging context-related failures, or optimizing context usage.

179001 votes

release-notes

Draft release notes and changelog entries from git history or merged PRs between two refs (tags/SHAs/branches), including breaking changes, migrations, and upgrade steps. Use when the user asks for release notes, changelog updates, or a GitHub Release draft.

1301 votes

docs-style-guide

Documentation style guide enforcer by @planetabhi. Applies and reviews the writing style guide when authoring or editing product documentation and tutorials. Use to check prose for voice, tense, word choice, inclusive language, formatting, code block, UI, Markdown, and number/date conventions.

11 votes

Caveman Help

Quick-reference card for all caveman modes, skills, and commands. One-shot display, not a persistent mode. Trigger: /caveman-help, "caveman help", "what caveman commands", "how do I use caveman".

1023330 votes

How It Works

Explain how claude-mem captures observations, when memory injection kicks in, and where data lives. Use when the user asks "how does claude-mem work?" or "what is this thing doing?".

942310 votes
View all in documentation →