prompts/skills/clojure-tap-debug-logging/SKILL.md
Use tap-based debug logging in Clojure projects. Use when debugging with brepl or a project REPL, capturing intermediate values with tap>, inspecting ol.dev.portal tap atoms, querying logs, or preferring structured REPL-visible debug data over console output.
npx skillsauth add ramblurr/nix-devenv clojure-tap-debug-loggingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Prefer tap> with structured data over parsing console output.
My projects start REPLs with :repl/dev, which puts the ol.dev.* namespaces on the classpath and runs ol.dev.repl. The :repl/dev alias includes my/dev-repl and :main-opts ["-m" "ol.dev.repl"]. (Check $XDG_CONFIG_HOME/clojure/deps.edn if there are errors)
Project dev/user namespaces usually open Portal automatically. If not, run:
(require '[ol.dev.portal :as portal])
(portal/open-portals)
Use ol.dev.portal directly:
(require '[ol.dev.portal :as portal])
(portal/logs) ;; all regular taps
(portal/logs 5) ;; count-limited taps
(portal/logs :fetch) ;; taps whose first element is :fetch
(portal/logs :fetch 3) ;; count-limited labeled taps
(portal/log-values) ;; mapv :value over regular taps
(portal/log-values :fetch 3) ;; useful when selected taps are maps with :value
(portal/last-log) ;; latest regular tap entry
(portal/last-log :v) ;; latest regular tap's :value
(portal/clear-logs!)
@(portal/my-taps) ;; raw regular tap atom value
@(portal/noisy-taps) ;; raw logging / middleware / nREPL tap atom value
Use a vector whose first element is a keyword for labeled logging:
(tap> [:fetch response])
(tap> [:error {:fn 'process :ex (ex-message e)}])
Use plain values for unlabeled logging:
(tap> intermediate-result)
Inspect from brepl:
(require '[ol.dev.portal :as portal])
(portal/logs 5)
(portal/last-log :v)
Tap intermediate pipeline values with a small helper form:
(-> data
transform
((fn [x] (tap> [:after-transform x]) x))
persist!)
Do not copy local portal_helpers.clj implementations into projects. Add missing behavior to ol.dev.portal instead.
testing
Use this OCP when executing or preparing to execute commands that change a live or important system, service reloads/restarts, package changes, deployments, migrations, firewall/network/access changes, credential rotation, NixOS switch/test/boot/deploy, or incident mitigation. It guides safe operations with a persisted ledger for scope, preflight, baseline, rollback, validation, and evidence.
development
Create new agent skills with proper structure, progressive disclosure, and bundled resources. Use when user wants to create, write, or build a new skill.
documentation
Naming conventions for workflow documents in prompts/. Use when creating plans, PRDs, research reports, idea capture or other workflow documents. Triggers on (1) creating new planning documents, (2) naming PRDs or research reports, (3) questions about document organization in prompts/.
testing
Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions.