Agent skill

Elisp Dev

by captainflasmr in captainflasmr/ollama-buddy

Assist with Emacs Lisp (elisp) development, debugging, and parenthesis matching.

GPL-3.0Auto-check passedDevelopment

Install Elisp Dev

skills CLI
$ npx skills add captainflasmr/ollama-buddy --skill elisp-dev -a claude-code

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

GitHub CLI
$ gh skill install captainflasmr/ollama-buddy elisp-dev --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/captainflasmr/ollama-buddy.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/elisp-dev .claude/skills/elisp-dev && 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
elisp-dev
GitHub stars
103
Token cost
~2.7k tokens
SKILL.md length
932 words
Files
1
Skills in repo
12
Repo updated
First seen
Licence
GPL-3.0

At a glance

Assist with Emacs Lisp (elisp) development, debugging, and parenthesis matching.

  • Works in 7 steps: message — The Print Debugger → debug-on-error — Automatic Stack Traces → Edebug — The Source-Level Debugger → …
  • The user is writing
  • SKILL.md covers Parenthesis Matching &…, Debugging Techniques, Development Workflow and Common Debugging Scenarios, plus 3 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Elisp Dev is an agent skill from captainflasmr/ollama-buddy. Assist with Emacs Lisp (elisp) development, debugging, and parenthesis matching. Use this skill when the user is writing, editing, or debugging elisp code, struggling with unbalanced parentheses, or needs help with elisp development workflows. Trigger on phrases like "debug my elisp", "unbalanced parentheses", "paren matching", "elisp debugging", or any request involving writing or fixing Emacs Lisp code.

Its SKILL.md is about 2.7k 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 Development, covering Debugging. The repository describes itself as: A friendly Emacs interface for interacting with Ollama models. The licence is GPL-3.0.

When your agent uses it

  • The user is writing
  • Debugging elisp code
  • Struggling with unbalanced parentheses
  • Needs help with elisp development workflows

Example prompts

  • “debug my elisp”
  • “unbalanced parentheses”
  • “paren matching”
  • “/elisp-dev”

Workflow steps

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

  1. message — The Print Debugger
  2. debug-on-error — Automatic Stack Traces
  3. Edebug — The Source-Level Debugger
  4. trace-function — Function Call Tracing
  5. Backtrace on Demand
  6. Timing and Performance
  7. Inspecting Variables and State

What it can do on your machine

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

  • Tool permissions

    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.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are elisp).

    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

Elisp Dev loads about 2.7k tokens when it runs. Until then it costs about 105 tokens; SKILL.md has 932 words of instructions outside code blocks.

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

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 passed

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.

SKILL.md

The full file from captainflasmr/ollama-buddy at commit 12eaf7f, republished under its GPL-3.0 licence (© captainflasmr). 932 words, ~2,695 tokens.

Download SKILL.mdSave it as .claude/skills/elisp-dev/SKILL.md (or your agent's skills folder).
name
elisp-dev
description
Assist with Emacs Lisp (elisp) development, debugging, and parenthesis matching. Use this skill when the user is writing, editing, or debugging elisp code, struggling with unbalanced parentheses, or needs help with elisp development workflows. Trigger on phrases like "debug my elisp", "unbalanced parentheses", "paren matching", "elisp debugging", or any request involving writing or fixing Emacs Lisp code.

Emacs Lisp Development Skill

You are assisting with Emacs Lisp development. Your goal is to help the user write correct, idiomatic elisp and debug issues efficiently.


Parenthesis Matching & Navigation

Built-in Commands
Key / CommandAction
C-M-f (forward-sexp)Move forward across one balanced expression
C-M-b (backward-sexp)Move backward across one balanced expression
C-M-n (forward-list)Move forward across one balanced list
C-M-p (backward-list)Move backward across one balanced list
C-M-u (backward-up-list)Move up one level of parentheses
C-M-d (down-list)Move down one level of parentheses
C-M-k (kill-sexp)Kill the balanced expression following point
C-M-SPC (mark-sexp)Mark the balanced expression following point
C-M-t (transpose-sexps)Transpose the sexps around point
Showing Matching Parens

Enable show-paren-mode globally:

elisp
(show-paren-mode 1)

Or configure it:

elisp
(setq show-paren-delay 0
      show-paren-style 'mixed)  ; 'parenthesis, 'expression, or 'mixed
Structural Editing with paredit or smartparens

Paredit provides strict structural editing:

KeyAction
(Inserts () and places cursor inside
)Moves past closing paren ("smart close")
M-("Wraps the next sexp in parentheses
M-s"Splits the current sexp at cursor
M-r"Raises the current sexp (replaces parent with child)
C-k"Kills the sexp, preserving structure
`M-<up>``Splice sexp, killing everything around it
`M-<down>``Splice sexp into parent

Smartparens is more flexible and works with multiple languages:

elisp
(require 'smartparens-config)
(smartparens-global-mode 1)
Finding Unbalanced Parentheses
  1. Use check-parens:

    • M-x check-parens jumps to the first unmatched paren
    • Works in any mode, not just elisp
  2. Use Emacs to scan:

    elisp
    ;; Evaluate this to find the position of unbalanced parens
    (with-current-buffer (current-buffer)
      (goto-char (point-min))
      (condition-case err
          (while (not (eobp))
            (forward-sexp))
        (error (message "Unbalanced at position %d, line %d"
                        (point) (line-number-at-pos)))))
  3. Use count-pairs approach:

    elisp
    ;; Count all parens in the file
    (let ((open (count-matches "(" (point-min) (point-max)))
          (close (count-matches ")" (point-min) (point-max))))
      (message "Open: %d, Close: %d, Diff: %d" open close (- open close)))
  4. Narrow to the problematic region:

    • Select the region you think is correct
    • C-x n n (narrow-to-region)
    • M-x check-parens
    • C-x n w (widen) to restore
Common Paren Mistakes
  • Missing close paren at end of file: Emacs reports "End of file during parsing"
  • Extra close paren: Emacs reports "Scan error: Unbalanced parentheses"
  • Mismatched string quotes: A " inside a string without escaping breaks parsing
  • Unescaped backticks or commas inside docstrings

Debugging Techniques

1. message — The Print Debugger
elisp
(message "Value of x: %S" x)  ; %S for lisp objects, %s for strings
(message "Point is at %d" (point))
(message "Buffer: %s, Line: %d" (buffer-name) (line-number-at-pos))

View the *Messages* buffer with C-h e.

2. debug-on-error — Automatic Stack Traces
elisp
(setq debug-on-error t)        ; Enter debugger on any error
(setq debug-on-signal t)       ; Also break on signals (very verbose)

Toggle interactively: M-x toggle-debug-on-error

In the debugger:

  • c — continue
  • d — step through (single-step)
  • q — quit debugger
  • e — evaluate expression
  • h — help
3. Edebug — The Source-Level Debugger

Instrument a function for debugging:

  • C-u C-M-x (eval-defun with prefix) — instrument the current defun
  • M-x edebug-defun — same thing
  • M-x edebug-all-defs — instrument all subsequent defs as they're evaluated

Execution control while in Edebug:

KeyAction
SPCStep through (next expression)
nNext (skip stepping into function calls)
tTrace (show but don't stop at each step)
TRapid trace (faster, less display)
gGo (run until next breakpoint)
cContinue (run until done or break)
fForward (exit current function)
oOut (step out of current function)
iStep in (step into function call)
qQuit Edebug
bSet breakpoint at point
uUnset breakpoint
xSet conditional breakpoint
eEvaluate expression (M-: in Edebug)
rReturn a value from current function
dDisplay details of current expression
wWhere (show backtrace)
?Help

Breakpoints:

  • b at point to set/unset
  • x for conditional: x (equal x 42)
  • B to show all breakpoints
  • U to unset all breakpoints

Evaluate expressions during debugging:

  • e — evaluate in minibuffer
  • M-: — evaluate with completion
4. trace-function — Function Call Tracing
elisp
(require 'trace)
(trace-function 'my-function)     ; Trace calls to my-function
(untrace-function 'my-function)   ; Stop tracing
(untrace-all)                     ; Stop all tracing

Output goes to *trace-output* buffer.

5. Backtrace on Demand
elisp
(debug)  ; Enter debugger immediately when this is evaluated

Or use M-x debug to enter the debugger at the current position.

6. Timing and Performance
elisp
;; Simple timing
(benchmark-run 1 (my-function))

;; More detailed
(benchmark-run-compiled 100 (my-function))

;; Profile a specific function
(profiler-start 'cpu)
(my-function)
(profiler-stop)
(profiler-report)
7. Inspecting Variables and State
elisp
;; Describe a variable
C-h v variable-name

;; Describe a function
C-h f function-name

;; Apropos (search for symbols)
C-h a regexp

;; Inspect value
M-: variable-name RET

;; Pretty-print a complex structure
M-x pp-eval-expression RET variable-name RET

Development Workflow

Show full SKILL.md (397 more words)Show less
Evaluating Code Incrementally
KeyAction
C-M-xEvaluate the current defun
C-x C-eEvaluate the sexp before point
C-jEvaluate and print result in current buffer (Lisp Interaction mode)
M-:Evaluate expression in minibuffer
C-x C-e with prefix (C-u)Insert result into buffer
Working with Multiple Files
elisp
;; Load a file
(load-file "~/path/to/file.el")

;; Require a feature (triggers autoloads)
(require 'my-feature)

;; Load after another package loads
(with-eval-after-load 'org
  (require 'my-org-extension))
Testing Changes
  1. Edit the function
  2. C-M-x to evaluate it
  3. Test it in a scratch buffer or via M-:
  4. If it's broken, C-h e to check messages
  5. If needed, C-u C-M-x to instrument with Edebug
Byte Compilation
elisp
;; Byte-compile current buffer
M-x emacs-lisp-byte-compile

;; Byte-compile and load
M-x emacs-lisp-byte-compile-and-load

;; Check for warnings
M-x byte-compile-file

Always check compiler warnings — they often catch real bugs:

  • Unused variables
  • Undefined functions
  • Obsolete function calls
  • Wrong number of arguments

Common Debugging Scenarios

"End of file during parsing"
  1. M-x check-parens — jumps to the problem
  2. Look for missing close parens near the end of the file
  3. Check for unterminated strings (" without matching ")
  4. Check for unterminated comments (; is fine, but #| needs |#)
"Symbol's function definition is void"
  • The function hasn't been defined or loaded
  • Check if you need (require 'some-library)
  • Check for typos in the function name
  • If it's a macro, ensure the file is loaded before the macro is used
"Wrong number of arguments"
  • Check the function signature with C-h f function-name
  • Some functions changed signatures between Emacs versions
  • Check if a macro is being called like a function
"Args out of range" or "Beginning/End of buffer"
  • Check buffer boundaries before operations
  • Use save-excursion or save-restriction if modifying point
"Invalid function"
  • Usually means a list is being called as a function
  • Check if you meant to use funcall or apply
  • Often caused by missing #' before function names
Infinite Loop or Hanging
  • C-g to quit
  • M-x toggle-debug-on-quit to get a backtrace on C-g
  • Add (message "…") calls to find the loop
  • Check while loops for missing increment/progress

Useful Minor Modes

elisp
;; Enable eldoc (show function signature in echo area)
(add-hook 'emacs-lisp-mode-hook #'eldoc-mode)

;; Enable flymake for on-the-fly checking
(add-hook 'emacs-lisp-mode-hook #'flymake-mode)

;; Enable paredit or smartparens
(add-hook 'emacs-lisp-mode-hook #'paredit-mode)
;; or
(add-hook 'emacs-lisp-mode-hook #'smartparens-strict-mode)

;; Enable rainbow delimiters for visual paren matching
(add-hook 'emacs-lisp-mode-hook #'rainbow-delimiters-mode)

Best Practices

  1. Always use lexical-binding: t in the file header
  2. Use #' (function quote) when passing functions: (mapcar #'car list)
  3. Use defcustom for user-facing variables, defvar for internal
  4. Prefix all symbols with your package name: my-package--private, my-package-public
  5. Write docstrings for every public function and variable
  6. Use when/unless instead of (if … nil)
  7. Use condition-case for operations that might fail
  8. Use with-temp-buffer instead of creating and managing temp buffers manually
  9. Check for nil before calling car/cdr on potentially empty lists
  10. Test incrementally — evaluate each function as you write it

Quick Reference: Debugging Commands

C-M-x          eval-defun
C-u C-M-x      eval-defun + edebug instrument
C-x C-e        eval-last-sexp
M-:            eval-expression
C-h e          view-echo-area-messages
M-x edebug-defun
M-x toggle-debug-on-error
M-x check-parens
C-M-f          forward-sexp
C-M-b          backward-sexp
C-M-u          backward-up-list
C-M-d          down-list

© captainflasmr, GPL-3.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 .agents/skills/elisp-dev of captainflasmr/ollama-buddy.

Open the folder on GitHubat commit 12eaf7f

Compare with similar skills

Elisp Dev 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.

Elisp Dev compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Elisp Dev this skillcaptainflasmr/ollama-buddy103—~2.7kAutomated safety check: PassGPL-3.0
Trellis Session Insightmindfold-ai/Trellis15k4 repos~1.7kAutomated safety check: PassAGPL-3.0
Native Data FetchingCherryHQ/cherry-studio-app4k6 repos~2.9kAutomated safety check: NotesMIT
Aoti Debugpytorch/pytorch104k1 repos~1.7kAutomated safety check: PassCustom licence
Herdr Throwaway Reproductionherdrdev/herdr43k—~2.4kAutomated safety check: PassApache-2.0
Systematic Debuggingultralisp/ultralisp25851 repos~2.4kAutomated safety check: PassNone

Similar skills

  • Trellis Session Insight

    mindfold-ai/Trellis

    Reach into past AI conversation history through the trellis mem CLI.

    15k GitHub starsUsed in 4 repos~1.7k tokens
    DevelopmentAuto-check passed
  • Native Data Fetching

    CherryHQ/cherry-studio-app

    A skill your agent uses when implementing or debugging ANY network request, API call, or data fetching.

    4k GitHub starsUsed in 6 repos~2.9k tokens
    DevelopmentAuto-check: notes
  • Aoti Debug

    pytorch/pytorch

    Debug AOTInductor (AOTI) errors and crashes. An agent skill from pytorch/pytorch.

    104k GitHub starsUsed in 1 repo~1.7k tokens
    DevelopmentAuto-check passed
  • Runs a disposable, uniquely named Herdr session inside an existing one so runtime, pane, terminal or API bugs can be reproduced without touching the main session.

    43k GitHub stars~2.4k tokensUpdated today
    DevelopmentAuto-check passed
  • Systematic Debugging

    ultralisp/ultralisp

    A skill your agent uses when encountering any bug, test failure, or unexpected behavior, before proposing fixes

    258 GitHub starsUsed in 51 repos~2.4k tokens
    DevelopmentAuto-check passed
  • Decides whether an OpenLogi device problem on macOS is a privacy-permission (TCC) problem, using agent log lines, and says which identity needs which grant.

    23k GitHub stars~2.5k tokensUpdated 4 days ago
    DevelopmentAuto-check: notes

More from captainflasmr/ollama-buddy

All 12 skills in this repo
  • Blog Writer

    captainflasmr/ollama-buddy

    Write an Emacs blog post in James Dyer's voice for www.emacs.dyerdwelling.family.

    103 GitHub stars~2.1k tokensUpdated 27 days ago
    Auto-check passed
  • Elisp Review

    captainflasmr/ollama-buddy

    Review Emacs Lisp (elisp) packages for bugs, style/convention violations, and optimisation opportunities.

    103 GitHub stars~2.2k tokensUpdated 27 days ago
    Auto-check passed
  • Annotate Project

    captainflasmr/ollama-buddy

    Analyse a project's source code and generate a simply-annotate database file with LLM-created annotations categorised by tag: defun for functions and large syntactical blocks, line for smaller…

    103 GitHub stars~6.2k tokensUpdated 27 days ago
    Auto-check passed
  • Reddit Post Writer

    captainflasmr/ollama-buddy

    Write an r/emacs Reddit post in James Dyer's voice for announcing or discussing an Emacs package.

    103 GitHub stars~1.4k tokensUpdated 27 days ago
    Auto-check passed
  • Code Refactoring

    captainflasmr/ollama-buddy

    Expert code refactoring and optimization with analysis, improvements, and documentation.

    103 GitHub stars~446 tokensUpdated 27 days ago
    Auto-check passed
  • Emacs Blog Reviewer

    captainflasmr/ollama-buddy

    Review Emacs blog posts for technical accuracy, naming conventions, and correct Emacs idioms.

    103 GitHub stars~751 tokensUpdated 27 days ago
    Auto-check passed

Categories

Questions about Elisp Dev

What does Elisp Dev do?

Assist with Emacs Lisp (elisp) development, debugging, and parenthesis matching. Elisp Dev is an agent skill from captainflasmr/ollama-buddy. Assist with Emacs Lisp (elisp) development, debugging, and parenthesis matching.

When should I use Elisp Dev?

Elisp Dev fits situations like: the user is writing; debugging elisp code; struggling with unbalanced parentheses; needs help with elisp development workflows.

How do I install Elisp Dev in Claude Code?

Run `npx skills add captainflasmr/ollama-buddy --skill elisp-dev -a claude-code`. Or copy the skill folder (.agents/skills/elisp-dev in captainflasmr/ollama-buddy) into .claude/skills/elisp-dev in your project. Claude Code loads it when a task matches its description.

How do I install Elisp Dev in Codex?

Run `npx skills add captainflasmr/ollama-buddy --skill elisp-dev -a codex`. Or copy the skill folder (.agents/skills/elisp-dev in captainflasmr/ollama-buddy) into .agents/skills/elisp-dev in your project. Codex loads it when a task matches its description.

Can I use Elisp Dev 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 captainflasmr/ollama-buddy --skill elisp-dev -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/elisp-dev, .gemini/skills/elisp-dev, .github/skills/elisp-dev and .opencode/skills/elisp-dev in your project.

What does Elisp Dev need to run?

SKILL.md names no scripts, command-line tools or credentials: Elisp Dev is instructions for the agent only.

Does Elisp Dev 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 Elisp Dev safe to install?

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.

What licence does Elisp Dev use?

Elisp Dev is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Elisp Dev use?

About 2.7k tokens (SKILL.md is roughly 11k 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 Elisp Dev?

Skills that share tags, products or a category with Elisp Dev: Trellis Session Insight (mindfold-ai/Trellis, 15k stars), Native Data Fetching (CherryHQ/cherry-studio-app, 4k stars), Aoti Debug (pytorch/pytorch, 104k stars) and Herdr Throwaway Reproduction (herdrdev/herdr, 43k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Elisp Dev?

captainflasmr (a GitHub user) maintains it in captainflasmr/ollama-buddy, which has 103 GitHub stars. The repository holds 12 skills in this directory. The repository was last updated on September 10, 2026.

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