macos-programmer
macOS-specific development patterns, platform APIs, and decision frameworks. Use when developing Mac apps, macOS applications, Cocoa/AppKit code, or making…
Core software engineering philosophy and design principles based on Structure and Interpretation of Computer Programs (SICP). Use for all software development tasks including writing code, designing systems, refactoring, or making architectural decisions. MUST ALWAYS be loaded
$ npx -y skills add Pyroxin/opinionated-claude-skills --skill software-engineer --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/software-engineerContext preview
The summary Claude sees to decide when to auto-load this skill.
Core software engineering philosophy and design principles based on Structure and Interpretation of Computer Programs (SICP). Use for all software development tasks including writing code, designing systems, refactoring, or making architectural decisions. MUST ALWAYS be loaded
name: software-engineer description: Core software engineering philosophy and design principles based on Structure and Interpretation of Computer Programs (SICP). Use for all software development tasks including writing code, designing systems, refactoring, or making architectural decisions. MUST ALWAYS be loaded when working on any kind of software development or design task!
<skill_scope skill="software-engineer">
This skill provides fundamental software engineering philosophy and design principles derived from _Structure and Interpretation of Computer Programs_ (SICP) by Abelson and Sussman. Apply these principles to all software development work to create well-designed, maintainable, and robust systems.
**Related skills:**
</skill_scope>
<core_philosophy>
<program_as_expression>
Computer programming is fundamentally about expressing ideas, not just getting computers to do things. Code is written for humans to read and understand; execution by computers is incidental. Prioritize clarity and expressiveness in all code. </program_as_expression>
<utilitarian_code>
Code exists to solve problems, not to demonstrate cleverness. Write code that does what's right because it's right, not because it's an opportunity to show off language features or clever tricks.
**Utilitarian principles:**
**The test:** Would a tired engineer at 2am understand this code? If not, simplify it. </utilitarian_code>
<manage_complexity>
Complexity is the primary challenge in software engineering. Combat complexity through:
1. **Procedural abstraction** - Encapsulate operations as procedures/functions with clear contracts 2. **Data abstraction** - Separate the use of data from its representation 3. **Conventional interfaces** - Use standard protocols to combine components 4. **Linguistic abstraction** - Create domain-specific languages when appropriate
> "Piles of kludges make a big complicated mess." — Gerald Jay Sussman </manage_complexity>
<naming_and_scope>
Use naming and scope to control what parts of the program can see and affect other parts. Well-chosen names make programs self-documenting. Minimize scope to reduce coupling and increase modularity. </naming_and_scope>
<language_layers>
Complex systems benefit from layers of language, where each layer provides abstractions for the layer above. Design programs as a series of language levels, each suitable for expressing ideas at that level of abstraction.
> "You can gain control of complexity by inventing new languages sometimes." — Hal Abelson </language_layers>
<delayed_commitment>
Defer decisions about implementation details to maintain flexibility in discovering the right interfaces. The goal is not delay for its own sake, but rather:
The commitment being delayed is to internal representations and algorithms, not to understanding what makes a good interface. Use scaffolding and test-writing to explore interface designs before implementation. </delayed_commitment> </core_philosophy>
<code_as_ontology>
Public APIs are ontologies—systems of names carrying semantic commitments. This perspective, drawn from knowledge representation, shapes how we approach API design and system evolution.[^hickey-speculation]
<semantic_commitments>
When you name something in a public API, you make a promise about what that name means. `User`, `createAccount`, `/api/users`—these establish concepts in your system's ontology. Changing what a name means changes the ontology itself.
**Design implications:**
</semantic_commitments>
<open_world_assumption>
Design systems as if unknown facts might exist. From knowledge representation: what you don't know might be true, not merely false.
**In practice:** Data structures should tolerate unknown fields. Systems should ignore what they don't understand. Don't fail on unexpected information.
// Open-world: tolerates unknown fields
function processUser(user) {
const { id, name, email } = user;
// Ignores any other fields—system can evolve independently
return { id, processedName: name.toUppeThis 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…
Racket-specific tooling, libraries, idioms, and language-oriented programming philosophy. Use when working with Racket code. Emphasizes LOP, contracts, macros,…