Connect once
At startup the plugin reads .nrepl-port, opens a TCP connection, clones an nREPL session, and keeps that session alive across evaluations.
Dirge + nREPL, assessed for my current workflow
Dirge's nREPL plugin gives a coding agent a persistent connection to a running Clojure system. That can shorten the edit, reload, inspect, test cycle. It is not a strong reason to abandon Codex.
Keep Codex for intent, issue coordination, broad research, browser evidence, review, and delivery. Trial Dirge where runtime feedback is the bottleneck.
connect .nrepl-port -> session 8af...
edit src/app/orders.clj
eval (require 'app.orders :reload)
probe (reserve-stock db order)
test (run-tests 'app.orders-test)
live state is evidence, not the final gateSnapshot: 3 August 2026. Downloads include automation and are not unique users. These numbers show interest and velocity, not maturity.
01 / What changes
Clojure's REPL is an interface to the running program, not merely a faster shell command. Dirge places that interface in the model's tool list and adds just enough connection management to sustain a debugging conversation.
At startup the plugin reads .nrepl-port, opens a TCP connection, clones an nREPL session, and keeps that session alive across evaluations.
Dirge can navigate .clj, .cljs, .cljc, .edn, and .bb with tree-sitter tools, surface clojure-lsp diagnostics, and reject syntactically broken file writes.
The model calls nrepl_eval to reload namespaces, exercise functions, inspect vars, run tests, and read value, stdout, stderr, and current namespace.
A per-eval timeout defaults to 120 seconds. Dirge sends an interrupt when it expires and reconnects once if the socket has gone stale.
02 / Clojure and ClojureScript
The plugin's README compresses both languages into one tool description. Operationally they need different startup contracts.
.nrepl-port./nrepl-status.:reload.Best targets: stateful services, data transformations, lifecycle systems, slow-starting JVM projects, and bugs whose cause is visible only in a running component graph.
shadow-cljs watch app and connect the browser or Node runtime.target/shadow-cljs/nrepl.port./nrepl-connect 127.0.0.1 PORT.(shadow.cljs.devtools.api/nrepl-select :app).For .cljc, test both semantics. A successful JVM eval says nothing about the selected JavaScript runtime, macro phase, Closure compilation, or browser behavior.
Source remains the durable truth.
Fast runtime evidence.
Repeatable local contract.
Detect leaked REPL state.
Prove the real boundary.
03 / Dirge versus my current Codex workflow
This is not a generic benchmark. It compares the tools against the workflow I already use: documented intent, GitHub issue contracts, claimed tasks, TDD, browser evidence, and deployment gates.
Direct, persistent nREPL connection inside the agent. This is its clearest advantage.
Your current clj-nrepl-eval command starts a small client process per call, while the REPL itself still holds state.
DirgeWorks after connecting to a CLJS-capable nREPL and selecting a running build, but it does not discover or select that environment for you.
clojure-mcp-light detects shadow and other environments; your existing scripts can encode project-specific selection.
Codex todayHas an internal SQLite issue board, phased plans, goals, worktrees, and persistent project memory.
Already fits your documentation-backed grilling, GitHub issue graph, exclusive claims, task coordination, and review flow.
CodexTerminal-first. Web search and MCP exist, but there is no equivalent integrated visual workspace.
Browser inspection, Chrome state, desktop control, connectors, visual artifacts, review panes, and automations are one workflow.
CodexStrong multi-provider and local-model routing. Main loop, critic, escalation, summary, and subagents can use different models.
Tighter OpenAI model integration and subscription surfaces, without managing a matrix of provider keys and bills.
DependsJanet hooks can reach directly into the agent lifecycle and add tools or commands in-process.
AGENTS.md, skills, plugins, hooks, MCP, and connectors are broader and easier to share across non-terminal work.
DifferentSQLite-backed project and global memory, FTS5 retrieval, session checkpoints, and post-session curation.
Repo-owned guidance and issues remain inspectable, reviewable, and portable; Codex also provides memories and resumable tasks.
Trade-off04 / Fit with the rest of the series
Dirge belongs close to code and runtime state. The other tools should continue to own intent, application contracts, fleet state, human review, and learning. Collapsing those concerns into Dirge would duplicate the control planes this series is trying to clarify.
OpenSuperWhisper makes the request cheap to express.
Resolve decisions and expose the planning frontier.
Name the cell, schemas, and allowed runtime edges.
Own issues, claims, isolation, and worker state.
Edit one bounded slice and interrogate the live system.
Gate delivery and decide whether the workflow improved.
Voice can capture a bug, observation, or experiment quickly. It should feed the grill or issue-writing step, not bypass it with a long unreviewed prompt sent straight to a code-executing agent.
Handoff: transcript -> reviewed intentUse discovery, prototypes, and the decision graph before Dirge. Once the unresolved frontier is small, pass a vertical issue or specification downstream. Dirge should execute a decision, not silently make product choices while probing the REPL.
Handoff: resolved node -> bounded taskMycelium's manifest can identify the cell contract and valid connections that a worker may change. Dirge then becomes a strong cell-level implementer: read the projected brief, edit locally, and use nREPL probes to test the contract against a running graph.
Handoff: cell brief -> runtime evidenceFirstMate could treat Dirge as one worker backend, with an adapter translating a durable brief into a headless or MCP delegation. Treehouse supplies isolation and No Mistakes remains the delivery gate. This is a possible composition, not a native integration.
Rule: one worktree, one runtime, one portCodex should retain documentation-backed grilling, GitHub issue contracts, exclusive claims, browser verification, and diff review. Dirge can sit behind it as an explicit implementation delegate. Codex still reruns the acceptance evidence itself.
Handoff: issue -> Dirge diff -> Codex reviewCompare Dirge and the existing CLI bridge with the same task class and model. Record nREPL calls, time to first useful observation, repair notices, retries, clean-suite failures, human corrections, cost, and escaped defects. Optimize outcomes, not eval volume.
Handoff: trace -> one bounded workflow changeKeep the durable method harness-agnostic where practical. A skill can describe reload, probe, test, and clean-process gates while a Babashka script hides project mechanics. The Janet plugin is then a faster adapter, not the only place the workflow exists.
Baseline: clj-nrepl-eval remains availableDirge's terminal transcript is useful machine evidence but a poor review surface. Codex or Lavish can turn a design choice, trace comparison, or architecture change into a visual artifact the human can annotate before the next implementation pass.
Handoff: evidence -> inspectable decision surface05 / Outside Clojure
In TypeScript, Python, Go, Rust, Java, C, C++, Ruby, Elixir, or Bash, evaluate Dirge for its harness, not this plugin.
Route routine work to a lower-cost or local model and reserve a stronger provider for escalation or review.
Let project memory retain build commands, pitfalls, and prior mistakes without growing one permanent Markdown prompt.
Its low footprint, worktree commands, headless mode, and goal gate suit many bounded local runs.
Prefer Codex when the task needs browsers, desktop apps, Slack, Drive, rich artifacts, scheduled follow-up, or a polished review surface.
06 / Costs and failure modes
Dirge's attraction is mechanical closeness to the runtime. The same closeness magnifies stale-state and safety mistakes.
It only discovers a root .nrepl-port. It has no clj, bb, Basilisp, or shadow environment detection, no formatter, no editor-style source position metadata, and no richer middleware operations.
A shadow-cljs nREPL begins in Clojure mode. The watch must be running, its JavaScript runtime must be connected, and the Dirge session must select the build before CLJS evaluation works.
The Janet matcher appends missing closing delimiters. It is not a full Clojure reader and ignores extra or mismatched closers, so a repair notice should trigger a source check, not quiet acceptance.
Persistent vars are the point, but they can also let an eval pass against definitions that are not saved or no longer match a clean process. Reload, run tests, and periodically restart from zero.
Keep it on localhost for development. Do not point an autonomous agent at a production REPL merely because the command accepts another host.
Dirge was created in May 2026 and had already published 90 crate versions by this research snapshot. Fast fixes are encouraging; compatibility churn and regressions are still realistic costs.
07 / What public usage says
Search results can show attention and reported experience. They do not establish comparative quality, user retention, or production reliability.
Dmitri Sotnikov says it is the plugin he uses most. He describes using a stronger agent for planning and Dirge over MCP for implementation. This supports the hybrid pattern, but it remains first-party evidence.
One external user reported two bugs, including confusion after compaction. Both were fixed within hours, one with a regression test. That is evidence of responsive maintenance, not of mature stability.
The public archive shows people preparing comparisons with OpenCode and discussing harness-agnostic skills. It does not yet contain a body of independent reports about sustained Dirge or nREPL-plugin use.
The same archive contains concrete reports of agents using clj-nrepl-eval in monorepos, browser CLJS, and jank. Your existing approach therefore has stronger Clojure-specific community evidence than Dirge's new plugin today.
08 / Adoption plan
Do not port your full Codex workflow, global guidance, skills, and issue machinery before Dirge proves one narrower claim.
Pick ten recent, representative CLJ tasks. Record elapsed time, tool retries, REPL calls, full-suite result, human interventions, tokens, and cost.
Use Dirge only for five small REPL-heavy slices. Keep your current tests, GitHub issues, acceptance criteria, and Codex review unchanged.
Let Codex shape and review work; use Dirge for implementation where a persistent live runtime matters. Do not change models mid-comparison.
Adopt Dirge only if quality-adjusted cycle time improves. A faster green eval does not count if clean-process tests, CLJS behavior, or review effort get worse.
Sources
Research snapshot: 3 August 2026.