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/brackendev/clojurescript-skills/clojurescriptnpx skills add brackendev/clojurescript-skills --skill clojurescriptgit clone --depth 1 https://github.com/brackendev/clojurescript-skillsWhat 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.00349 | $0.05078 |
| Opus 5 | $0.00175 | $0.02539 |
| Sonnet 5 | $0.00070 | $0.01016 |
| Haiku 4.5 | $0.00035 | $0.00508 |
Grade A, and why
clojurescript 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 yesterday.
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 — 425 lines — stays where its author put it; the contents beside it link to each section on GitHub.
ClojureScript
Layered on top of the clojure skill, which defines host-neutral Clojure family guidance. This skill applies only to ClojureScript (.cljs files, .cljc files compiled to JS, ClojureScript deps.edn projects, shadow-cljs.edn, figwheel-main.edn). It overrides the baseline for JavaScript interop, externs inference, macro stage separation (:require-macros, :refer-macros, :include-macros), host-typed exception handling (catch :default, js/Error), JS-flavored numerics and truthiness, host-specific aliases (goog.object, goog.string, goog.dom), and the cljs.main project workflow.
JVM and ClojureDart deltas live in their own packages (clojure-jvm-skills, clojuredart-skills). Do not apply this skill's JS interop, externs, or catch :default rules to those dialects.
Key Rules
- Property access uses a leading hyphen.
(.-prop obj)reads a property;(set! (.-prop obj) v)assigns it.(.method obj args)calls a method. The hyphen is what distinguishes property access from method invocation in ClojureScript. - Globals live under the
js/namespace.js/document,js/window,js/Promise,js/Error. There is no other path to native globals. - Catch with
:defaultwhen you want to catch everything; otherwise name a JS type. ClojureScript supports(catch :default e ...). Preferjs/Errorand its subclasses (js/TypeError,js/RangeError,js/SyntaxError) when the failure mode has a named JS type. - Macros must be defined in
.cljor.cljcfiles and required with:require-macros,:refer-macros, or:include-macros. Macros and functions run in different compilation stages. A macro and a function may share the same name. :importis only for Google Closure classes.(:import [goog Uri])works;(:import [java.util Date])does not exist on this host. Use(:require ...)andjs/for everything else.- No
gen-class, no refs, no agents, no STM. Atoms are the only built-in state primitive. Concurrency primitives that depend on multiple OS threads do not exist; JS has a single execution thread per realm. - Numbers are JavaScript numbers. There is no
Ratio,BigDecimal, orBigIntliteral.(= 0.0 0)evaluates totrue. Usejs/BigIntdirectly when arbitrary-precision integers are required. - Use
^booleanto avoid checked-if. It is the only type hint with runtime significance for code generation, and it suppresses the runtime check that copes with JavaScript's wider falsy set (0,"",NaN,null,undefined). - Use
^jsand^js/Foo.Barto drive externs inference for advanced compilation. Without hints on foreign JavaScript values, the Google Closure Compiler may rename property names and break interop at advanced optimization levels. - Convert at the boundary, not at every use. Use
js->cljandclj->jsonce at the interop boundary to translate between persistent collections and native JS objects, then operate on Clojure data inside the namespace.
What ships with it
2 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
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.
- yesterday First seen · 425 lines · 349 tokens per session scan A f238bf72710b
clojurescript is a skill published in the GitHub repository brackendev/clojurescript-skills (1 stars, last pushed 1mo ago), licensed MIT. It adds 349 tokens to every session and 5,078 once invoked, about $0.0017 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-31.
Other skills, from other repositories
playwright-mcp-metabase
Drive Metabase's UI with the Playwright MCP browser tools (mcpplaywrightbrowser). Covers the snapshot/act/check pattern, Mantine component pitfalls (Menu race, Select/MultiSelect, the Escape-closes-modal trap, portal scoping), and Metabase-specific login flows. Use whenever a session needs to interact with the…
lipas-e2e
Run end-to-end scenarios against a live LIPAS dev system. Use when verifying a user-visible flow works correctly across DB, Elasticsearch, app-db, and DOM. Covers municipality-user flows (create/update sports facility) and grows from there.
help-video-ingest
Extract help-center (ohjeet) articles from LIPAS YouTube tutorial videos using Gemini's native video understanding, consolidate them into task-sized help pages, translate to sv/en, and publish to the help CMS (which feeds the AI-assistant knowledge base). Use when turning tutorial videos or guide PDFs into ohjeet…
joyride
Joyride core — REPL evaluation, async patterns, VS Code API access, Flares, JS interop, and available libraries. Use when: working with Joyride evaluation, writing ClojureScript in any Joyride context, creating Flares/WebViews, exploring VS Code APIs via the REPL, or using joyrideevaluatecode.
joyride-internals
Joyride extension internals — subsystem contracts, state architecture, activation sequences, and namespace reference. Use when: modifying core extension code, debugging state issues, working with app-db or SCI context, understanding activation or script execution flow, investigating nREPL or when-context behavior, or…
joyride-user-scripting
Joyride User scope scripting — scripts and source files in /.config/joyride/. Covers user activation scripts, global keyboard shortcuts, disposable management, and npm dependencies. Use when: creating or editing User scripts/source files, setting up useractivate.cljs, or configuring global keybindings.