clojure-symbols

SKILL.md

Clojure Symbols Skill

Use clj-kondo for static analysis and clj-nrepl-eval for REPL introspection to find Clojure symbols.

For non-Clojure languages, use the code-symbols skill instead.

Prerequisites

clj-kondo

# Arch Linux
sudo pacman -S clj-kondo

# Homebrew
brew install borkdude/brew/clj-kondo

# Script
curl -sLO https://raw.githubusercontent.com/clj-kondo/clj-kondo/master/script/install-clj-kondo
chmod +x install-clj-kondo && ./install-clj-kondo

clj-nrepl-eval

Discover running nREPL servers:

clj-nrepl-eval --discover-ports

Quick Reference

Task Tool Command
List symbols in file clj-kondo clj-kondo --lint file.clj --config '{...}'
Find definition clj-kondo Filter var-definitions by name
Find usages clj-kondo Filter var-usages by name
Get var metadata REPL (meta #'ns/var)
Get source REPL (clojure.repl/source fn)

Core clj-kondo Commands

Note: JSON keys use hyphens (e.g., var-definitions), so use bracket notation in jq.

Find Symbol Definition

clj-kondo --lint src components bases \
  --config '{:output {:format :json}, :analysis {:var-definitions true}}' \
  | jq '.analysis["var-definitions"][] | select(.name == "my-function")'

Find Symbol Usages

clj-kondo --lint src components bases \
  --config '{:output {:format :json}, :analysis {:var-usages true}}' \
  | jq '.analysis["var-usages"][] | select(.name == "my-function")'

List Symbols in File

clj-kondo --lint path/to/file.clj \
  --config '{:output {:format :json}, :analysis {:var-definitions true}}' \
  | jq '.analysis["var-definitions"]'

Output Fields

var-definitions:

  • filename, row, col, end-row, end-col - Location
  • ns, name - Identity
  • defined-by - Defining form (e.g., clojure.core/defn)
  • fixed-arities, doc, private

var-usages:

  • from, to - Source and target namespaces
  • name, arity - Symbol name and call arity
  • from-var - Containing function
  • row, col - Location

Core REPL Commands

# Get var metadata
clj-nrepl-eval -p PORT "(meta #'my.namespace/my-function)"

# Get source code
clj-nrepl-eval -p PORT "(clojure.repl/source my-function)"

# List namespace contents
clj-nrepl-eval -p PORT "(dir my.namespace)"

# Search by pattern
clj-nrepl-eval -p PORT "(clojure.repl/apropos \"pattern\")"

Common Workflow

Find Definition and All Usages

# Find definition
clj-kondo --lint . \
  --config '{:output {:format :json}, :analysis {:var-definitions true}}' \
  | jq '.analysis["var-definitions"][] | select(.name == "target-fn") | {ns, name, filename, row}'

# Find all usages
clj-kondo --lint . \
  --config '{:output {:format :json}, :analysis {:var-usages true}}' \
  | jq '.analysis["var-usages"][] | select(.name == "target-fn") | {from, "from-var", filename, row}'

Find Usages of a Namespace

clj-kondo --lint bases components \
  --config '{:output {:format :json}, :analysis {:var-usages true}}' \
  | jq '.analysis["var-usages"][] | select(.to == "my.namespace") | {from, name, filename, row}'

Additional References

Weekly Installs
3
First Seen
Feb 28, 2026
Installed on
opencode3
gemini-cli3
github-copilot3
amp3
cline3
codex3