macos-programmer
macOS-specific development patterns, platform APIs, and decision frameworks. Use when developing Mac apps, macOS applications, Cocoa/AppKit code, or making…
Racket-specific tooling, libraries, idioms, and language-oriented programming philosophy. Use when working with Racket code. Emphasizes LOP, contracts, macros, and design methodology.
$ npx -y skills add Pyroxin/opinionated-claude-skills --skill racket-programmer --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/racket-programmerContext preview
The summary Claude sees to decide when to auto-load this skill.
Racket-specific tooling, libraries, idioms, and language-oriented programming philosophy. Use when working with Racket code. Emphasizes LOP, contracts, macros, and design methodology.
name: racket-programmer description: Racket-specific tooling, libraries, idioms, and language-oriented programming philosophy. Use when working with Racket code. Emphasizes LOP, contracts, macros, and design methodology.
Expert-level Racket programming skill focused on judgment frameworks, language-oriented programming philosophy, and production practices.
**Related skills:**
**Always target the latest stable Racket version** unless explicitly working on a codebase with version constraints.
**Racket CS (Chez Scheme-based) is the default implementation since 8.0.** Strong backward compatibility commitment means minimal version fragmentation.
**For owned codebases:** Aggressive upgrade philosophy. Use latest features and libraries.
**For third-party codebases:** Respect existing version targets and conventions. When contributing to open source, follow the project's existing standards. Don't introduce modern features to projects targeting older versions. Propose improvements through proper channels (issues, governance).
<language_oriented_programming>
**Central Insight**: Racket's defining characteristic is building solutions as languages, not just libraries. Every problem is approached by asking "what's the right notation?" before "what's the implementation?"
This is not a feature of Racket—it IS Racket's design philosophy. Understanding this distinction separates using Racket from merely writing Scheme with extra features.
**"A programmable programming language."** Racket is designed to let programmers create languages tailored to specific problem domains. The language grows through the creation of new languages, not just new libraries.
**Key principle**: "If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization." —Gerald Weinberg
The right notation eliminates entire classes of errors at compile time. Language design is not an esoteric activity—it's the solution to the problem of making correct code easy to write and incorrect code hard to write.
Does solution need non-S-expression syntax? → Reader extension needed → #lang Does solution benefit from compile-time validation of entire program? → Custom #%module-begin → #lang Just adding new operations/abstractions? → Macros + provide → library Need IDE integration (syntax coloring, specialized checks)? → #lang with language info Notation precision outweighs learning curve? → #lang
1. **Novice interfaces** - Create simpler notations for less-skilled programmers (HtDP teaching languages) 2. **Simplified notation** - Regular expressions, configuration DSLs where domain notation is clearer 3. **Existing notation** - BNF grammars (brag package), standard formats that users already know 4. **Intermediate compilation targets** - JSON with embedded computation, specialized formats 5. **Configuration-heavy domains** - Test specifications, API definitions where structure matters
**Essential Reading:**
**Trade-offs:**
**Pattern**: Build languages on languages, creating towers where each layer provides abstractions for the next. Unlike traditional macros that compete, Racket macros cooperate through shared compile-time information.
**Key Paper**: "Macros that Work Together" (Flatt et al., 2012)
Racket achieves this through:
**Example**: Racket's class system is implemented as macros over struct, which is itself a macro. Each layer maintains proper scoping and composition.
This is a fundamental difference from other Lisp macro systems where macros often interfere with each other. </language_oriented_programming>
<contracts_and_blame>
**Core Pattern**: Modules are units of abstraction AND units of blame for contracts. Design module boundaries intentionally with this in mind.
Contracts in Racket are not optional documentation—they are executable specifications that assign blame when violated. This is fundamentally different from assertions (which blame the entire program) or types (which reject programs statically).
(provide
(contract-out
[my-function (→ number? (>/c 0) boolean?)]
[my-struct (struct/c point [real? real?])]
[complex-fn (→i ([x number?]
[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, Cocoa/AppKit code, or making…
Swift-specific idioms, tooling, and philosophy for both application development and command-line scripting. Use when working with Swift code, including Swift…
Fish shell scripting judgment frameworks and critical idioms. Use when writing Fish scripts or shell automation. Focuses on when to use Fish vs bash,…
Java-specific tooling, documentation standards, testing practices, and modern idioms. Use when working with Java code or Java-based projects on the JVM.
Clojure-specific philosophy, idioms, and judgment frameworks. Use when working with Clojure code. Emphasizes data-oriented design, runtime validation with…
SWI-Prolog-specific tooling, standards, and idioms. Use when working with SWI-Prolog code. Emphasizes relational thinking, steadfastness, DCGs, constraints,…