Claude-skill-registry clojure-guardrails
Reference for Guardrails library with Malli in Clojure. Use when working with `>defn`, `>defn-`, `>def`, `>fdef` macros, gspec syntax, or function validation. Triggers on guardrails imports, `com.fulcrologic.guardrails.malli`, function specs with `=>` operator, or questions about runtime validation in Clojure.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/clojure-guardrails" ~/.claude/skills/majiayu000-claude-skill-registry-clojure-guardrails && rm -rf "$T"
manifest:
skills/data/clojure-guardrails/SKILL.mdsource content
Clojure Guardrails (Malli)
Detection
Check if guardrails is in use:
grep -r "guardrails.enabled" deps.edn shadow-cljs.edn 2>/dev/null
Setup
deps.edn:
{:deps {com.fulcrologic/guardrails {:mvn/version "1.2.16"} metosin/malli {:mvn/version "0.20.0"}} :aliases {:dev {:jvm-opts ["-Dguardrails.enabled=true"]}}}
See https://clojars.org/com.fulcrologic/guardrails for the latest version.
Enable at runtime:
-Dguardrails.enabled=true
Import
(require '[com.fulcrologic.guardrails.malli.core :refer [>defn >defn- >def >fdef | ? =>]])
Core Macros
| Macro | Purpose |
|---|---|
| Define function with inline spec |
| Private function with spec |
| Register malli schema |
| Declare spec without body |
| Nilable shorthand |
| "Such that" constraints |
| Separates args from return |
Gspec Syntax
[arg-specs* (| arg-preds+)? => ret-spec (| ret-preds+)?]
Basic:
(>defn add [a b] [:int :int => :int] (+ a b))
With constraints:
(>defn ranged-rand [start end] [:int :int | #(< start end) => :int | #(>= % start) #(< % end)] (+ start (long (rand (- end start)))))
Nilable:
(>defn find-user [id] [:int => (? :map)] (get users id))
Multi-arity:
(>defn greet ([name] [:string => :string] (str "Hello, " name)) ([greeting name] [:string :string => :string] (str greeting ", " name)))
Variadic:
(>defn sum [x & more] [:int [:* :int] => :int] (apply + x more))
Map schemas:
(>defn process-user [user] [[:map [:name :string] [:age :int]] => :string] (str (:name user) " is " (:age user)))
Schema Registry
This is an optional feature.
(require '[com.fulcrologic.guardrails.malli.registry :as gr.reg]) ;; Register schemas (>def :user/name :string) (>def :user/age :int) (>def :user/record [:map :user/name :user/age]) ;; Use in functions (>defn get-user [id] [:int => (? :user/record)] (lookup id))
Detailed Reference
See gspec-syntax.md for complete syntax documentation.