nrepl-eval

star 49.9k

Evaluate Clojure code via nREPL using the standalone tools/nrepl-eval.mjs CLI tool.

penpot By penpot schedule Updated 5/10/2026

name: nrepl-eval description: Evaluate Clojure code via nREPL using the standalone tools/nrepl-eval.mjs CLI tool.

nREPL Eval

Evaluate Clojure (or ClojureScript) code via a running nREPL server using tools/nrepl-eval.mjs — a standalone CLI application.

Session state (defs, in-ns, etc.) persists across invocations via a stored session ID, so you can build up state incrementally.

Usage

node tools/nrepl-eval.mjs [options] [<code>]

The tool is also executable directly:

./tools/nrepl-eval.mjs [options] [<code>]

Options

Flag Description Default
-p, --port PORT nREPL server port 6064
-H, --host HOST nREPL server host 127.0.0.1
-t, --timeout MS Timeout in milliseconds 120000
--reset-session Discard stored session and start fresh
-e, --last-error Evaluate *e to retrieve the last exception
-h, --help Show help message

When to Use

Use this tool when you need to:

  1. Evaluate Clojure code during development — test functions, inspect state, or run experiments against a running Clojure process.
  2. Verify that edited files compile — require namespaces with :reload to pick up changes.
  3. Inspect the last exception after a failed evaluation — use -e to print the error stored in *e.

Workflow

1. Session management

Sessions are persisted to /tmp/penpot-nrepl-session-<host>-<port>. State carries across calls automatically:

./tools/nrepl-eval.mjs '(def x 42)'
./tools/nrepl-eval.mjs 'x'
# => 42

Reset the session to start fresh:

./tools/nrepl-eval.mjs --reset-session '(def x 0)'

2. Evaluate code

Single expression (inline) — uses default port 6064:

./tools/nrepl-eval.mjs '(+ 1 2 3)'

Multiple expressions via heredoc (recommended — avoids escaping issues):

./tools/nrepl-eval.mjs <<'EOF'
(def x 10)
(+ x 20)
EOF

Override with a different port:

./tools/nrepl-eval.mjs -p 7888 '(+ 1 2 3)'

3. Inspect last exception

After code throws an error, retrieve the full exception details:

./tools/nrepl-eval.mjs -e

Common Patterns

Require a namespace with reload:

./tools/nrepl-eval.mjs "(require '[my.namespace :as ns] :reload)"

Test a function:

./tools/nrepl-eval.mjs "(ns/my-function arg1 arg2)"

Long-running operation with custom timeout:

./tools/nrepl-eval.mjs -t 300000 "(long-running-fn)"

Key Principles

  • Default port is 6064 — just pass code directly, no -p needed when your nREPL server is on 6064. Use -p <PORT> for a different port.
  • Always use :reload when requiring namespaces to pick up file changes.
  • Session is reused across invocations — defs, in-ns, and var bindings persist. Use --reset-session to clear.
  • Do not start any server — the tool connects to an existing nREPL server, it is not the agent's responsibility to start the nREPL server (assume the server is already running on the specified port).
Install via CLI
npx skills add https://github.com/penpot/penpot --skill nrepl-eval
Repository Details
star Stars 49,856
call_split Forks 3,223
navigation Branch main
article Path SKILL.md
More from Creator