Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/kuhumcst/dannet/browser-repl-debugnpx skills add kuhumcst/DanNet --skill browser-repl-debuggit clone --depth 1 https://github.com/kuhumcst/DanNetWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00095 | $0.00821 |
| Opus 5 | $0.00048 | $0.00411 |
| Sonnet 5 | $0.00019 | $0.00164 |
| Haiku 4.5 | $0.00010 | $0.00082 |
Grade A, and why
browser-repl-debug scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 3d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 77 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Browser REPL Debugging (shadow-cljs)
Frontend bugs are debugged in the live browser tab, not by reading source and
guessing. The shadow-cljs nREPL runs alongside the regular clj nREPL (7888);
its port is in .shadow-cljs/nrepl.port and clj-nrepl-eval --discover-ports
finds it. Sessions persist per port, so once switched to CLJS mode, later
evaluations on that port stay in the browser until :cljs/quit.
Connect
;; On the shadow-cljs nREPL port:
(shadow.cljs.devtools.api/repl-runtimes :app) ; confirm a browser tab is connected
(shadow.cljs.devtools.api/repl :app) ; switch session to CLJS (:cljs/quit to leave)
Inspect and reproduce
;; Client state, e.g. the current page data:
(:data @dk.cst.dannet.web.router/location)
;; Drive navigation to reproduce a bug on a specific page:
(dk.cst.dannet.web.app/navigate-to "/dannet/data/synset-52")
;; (this var has moved between namespaces before — if undefined, locate the
;; current navigate-to rather than assuming)
;; Query and measure the DOM, incl. glyph-level baseline comparisons:
(.querySelector js/document "tr[property=\"dns:inherited\"]")
;; use Range/getClientRects on single characters to compare baselines
Instrument non-invasively
Capture args/stacks in an atom deref-able from the REPL; keep the original so it can be restored:
(defonce orig-f some.ns/suspect-fn)
(defonce captured (atom []))
(set! some.ns/suspect-fn (fn [x]
(swap! captured conj [(pr-str x) (.-stack (js/Error.))])
(orig-f x)))
Trial CSS before touching main.css
;; Inject a temporary <style> and re-measure:
(let [style (.createElement js/document "style")]
(set! (.-id style) "exp-style")
(set! (.-textContent style) "span.inheritance sub { line-height: 0; }")
(.appendChild (.-head js/document) style))
;; Cache-bust stylesheets after editing main.css:
(doseq [link (array-seq (.querySelectorAll js/document "link[rel=stylesheet]"))]
(set! (.-href link) (str (first (clojure.string/split (.-href link) #"\?"))
"?v=" (js/Date.now))))
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 3d ago First seen · 77 lines · 95 tokens per session scan A 968bc9020fa2
browser-repl-debug is a skill published in the GitHub repository kuhumcst/DanNet (29 stars, last pushed 5d ago), licensed MIT. It adds 95 tokens to every session and 821 once invoked, about $0.0005 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
graph-mutation-plan
Cookbook for composing an applygraphmutations plan — stable entitykey patterns, the canonical label/edge vocabulary, evidence/invalidation/confidence discipline, and a worked example. Load this when building a non-trivial mutation plan.
tinker-dev
Development guidance for the Apache TinkerPop monorepo. Use when building, testing, or contributing to TinkerPop's graph computing framework and its multi-language Gremlin ecosystem (Java, Python, JavaScript, .NET, Go). Covers coding conventions, build recipes, test evaluation, documentation, development environment…
review
Structured PR review for pygraphistry. Input: PR number/branch (default current branch PR). Output: findings and convergence artifacts under plans/ /. Method: multi-wave, evidence-first review across spec, correctness, tests, security, code quality, DRY, concurrency, performance, architecture, operability, and…
test-amplification
Methodical bug-driven test amplification for pygraphistry features. Use when hardening a feature area via user-workflow exploration, 5-Whys retrospectives, bug-taxonomy derivation, concrete test planning, implementation, and safety-gated validation.
plan
OPT-IN file-based planning for multi-session tasks. Only use when user explicitly requests it or work spans multiple sessions. For single-session work, prefer your platform's native planning features.
portaljs-add-dcat
Make a PortalJS portal harvestable by national/EU/US open-data portals — emit standards-compliant DCAT catalog feeds (DCAT 2/3, DCAT-AP, DCAT-US, national profiles) in JSON-LD, Turtle, and RDF/XML at build, with autodiscovery and per-profile conformance checking. Use when a portal needs to be harvested by…