macos-programmer
macOS-specific development patterns, platform APIs, and decision frameworks. Use when developing Mac apps, macOS applications,…
Clojure-specific philosophy, idioms, and judgment frameworks. Use when working with Clojure code. Emphasizes data-oriented design, runtime validation with spec, REPL-driven development, and the philosophy of simplicity over ease.
Claude Code
$ npx -y skills add Pyroxin/opinionated-claude-skills --skill clojure-programmer --agent claude-code
Codex
$ npx skills add Pyroxin/opinionated-claude-skills --skill clojure-programmer -a codex -y
Cursor
$ npx skills add Pyroxin/opinionated-claude-skills --skill clojure-programmer -a cursor -y
Gemini CLI
$ npx skills add Pyroxin/opinionated-claude-skills --skill clojure-programmer -a gemini-cli -y
GitHub Copilot
$ npx skills add Pyroxin/opinionated-claude-skills --skill clojure-programmer -a github-copilot -y
OpenCode
$ npx skills add Pyroxin/opinionated-claude-skills --skill clojure-programmer -a opencode -y
Windsurf
$ npx skills add Pyroxin/opinionated-claude-skills --skill clojure-programmer -a windsurf -y
name: clojure-programmer description: Clojure-specific philosophy, idioms, and judgment frameworks. Use when working with Clojure code. Emphasizes data-oriented design, runtime validation with spec, REPL-driven development, and the philosophy of simplicity over ease.
**Target Clojure 1.12.3+** (current stable as of September 2025). Version history at https://github.com/clojure/clojure/blob/master/changes.md.
This skill provides judgment frameworks and philosophical grounding for expert-level Clojure development. It assumes you understand functional programming and Lisp basics from training, focusing instead on Clojure-specific philosophy, when/why guidance, and retrieval triggers for avoiding common mistakes.
<core_philosophy>
**For foundational software engineering principles, see the software-engineer skill. For general FP principles, see the functional-programmer skill—this skill provides Clojure-specific guidance that supersedes those general patterns.**
**Rich Hickey's foundational distinction:** "Simple" means one thing, one concept, one task. "Easy" means familiar, near at hand. **Always choose simple over easy.**
This philosophy permeates every Clojure decision:
**The critical insight:** Simplicity enables change. Easy rots into complexity. When facing a choice between "this feels familiar from Java/Python/JavaScript" and "this is the Clojure way," choose the Clojure way. The unfamiliarity is temporary; the simplicity compounds.
**"Programs must be written for people to read, and only incidentally for machines to execute."** — Hal Abelson, SICP
**From Rich Hickey's Spec-ulation:** Clojure's design was inspired by RDF's open-world assumption. **Code is an ontology of a solution.** Names create enduring semantic commitments.
**"If I put on a hat, it does not change what my family is."** — Rich Hickey
Maps are collections of keys, not the stuff inside the keys. Extra keys don't change identity:
;; These are the same entity with different knowledge
{:user/id 123 :user/name "Alice"}
{:user/id 123 :user/name "Alice" :user/email "alice@example.com"}
;; Identity preserved, knowledge accreted**This is RDF's open-world assumption:**
**"Spec is about what you CAN do, not about what you CAN'T."** — Rich Hickey
Why spec doesn't allow closed maps:
;; If you could say "only these keys" (s/def ::user (s/closed-keys :req [::id ::name])) ;; Then adding ::email later would BREAK everything ;; Every consumer would need updating ;; Growth becomes breakage ;; Cascading changes up the dependency tree
**The open-world discipline:**
**Each level is a collection with two operations: add or remove.**
**"My family doesn't change when I put on a hat."** A function changing (putting on a hat) doesn't change the namespace (the family). Don't version the namespace because a function changed. Don't version the artifact because a namespace changed.
**Growth happens through accretion:**
**Breakage happens through:**
**The discipline:** Turn breakage into accretion. Don't remove `foo`, add `foo-2`. Don't require new parameters, make them optional. Don't remove keys from returns, add new ones.
**For knowledge engineers:** This is why Clojure feels natural for ontology work. The language's data model mirrors RDF's assumptions:
**Write Clojure code the way you'd design an ontology:** Open to extension, explicit about semantics, preserving meaning over time. </core_philosophy>
<repl_driven>
**The REPL isn't just a tool—it's how you think about Clojure development.** Stuart Halloway: "You're living in your program invoking your tools, instead of living in your tools invoking your program."
Traditional development: Write code → Compile → Run → Debug → Repeat REPL-driven development: Start program → Develop features while running → Test immediately → Never restart
**What this means practically:**
This project descends from the personal prompts I'd been keeping for Claude Code prior to the release of skills and plugins. Over time it's also evolved into a sandbox where I figure out what makes Claude reliably good at a task, and find prompts that work.
macOS-specific development patterns, platform APIs, and decision frameworks. Use when developing Mac apps, macOS applications,…
Swift-specific idioms, tooling, and philosophy for both application development and command-line scripting. Use when working with…
Fish shell scripting judgment frameworks and critical idioms. Use when writing Fish scripts or shell automation. Focuses on when…
Java-specific tooling, documentation standards, testing practices, and modern idioms. Use when working with Java code or…
Racket-specific tooling, libraries, idioms, and language-oriented programming philosophy. Use when working with Racket code.…
SWI-Prolog-specific tooling, standards, and idioms. Use when working with SWI-Prolog code. Emphasizes relational thinking,…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.