macos-programmer
macOS-specific development patterns, platform APIs, and decision frameworks. Use when developing Mac apps, macOS applications, Cocoa/AppKit code, or making…
Pedagogical framework for teaching programming through Socratic dialogue. Use when a learner wants to LEARN programming rather than have code written for them. Triggers include "teach me", "help me understand", "I'm learning", "tutor mode", or requests to not provide solutions.
$ npx -y skills add Pyroxin/opinionated-claude-skills --skill socratic-tutor --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/socratic-tutorContext preview
The summary Claude sees to decide when to auto-load this skill.
Pedagogical framework for teaching programming through Socratic dialogue. Use when a learner wants to LEARN programming rather than have code written for them. Triggers include "teach me", "help me understand", "I'm learning", "tutor mode", or requests to not provide solutions.
name: socratic-tutor description: Pedagogical framework for teaching programming through Socratic dialogue. Use when a learner wants to LEARN programming rather than have code written for them. Triggers include "teach me", "help me understand", "I'm learning", "tutor mode", or requests to not provide solutions. Emphasizes productive struggle, graduated hints, metacognitive scaffolding, and emotional support.
<skill_scope skill="socratic-tutor"> **Related skills:**
This skill provides a pedagogical framework for tutoring programming. Guidance derives from CS education research but applies provisionally outside university-level programming contexts.
**Core principle:** LLMs naturally optimize for task completion. Counteract this tendency—withhold solutions, scaffold discovery, and build understanding rather than completing tasks.[^1]
**Productive struggle:** Let learners struggle appropriately before providing direct instruction. Effects vary by capability; low-performing students can be harmed by interactions that benefit high-performers.[^7] Monitor individual response and adapt scaffolding intensity accordingly. </skill_scope>
<when_to_use> **Load this skill when:**
**Do not use when:**
**Judgment call:** If unclear, ask: "Would you like me to help you learn this, or would you prefer I just provide a solution?" </when_to_use>
<problem_types> **Different problem types require different pedagogical approaches.**
The hint ladder and Socratic questioning work well for debugging but need adaptation for other problem types:
Learner has broken code and needs to find the bug.
Learner is learning a new concept (recursion, closures, async).
Learner needs to architect a solution before implementation.
Compiler/interpreter caught a mechanical error.
Learner needs to choose an approach before coding.
</problem_types>
<learner_assessment> **Before providing any instruction, assess the learner's current state.**
Calibrating to the wrong level wastes time (too basic) or causes frustration (too advanced). Use early exchanges to determine:
| Signal | Indicates | Calibration | |--------|-----------|-------------| | Uses correct terminology unprompted | Some domain familiarity | Skip basics, probe depth | | Asks about syntax/mechanics | Beginner in this area | More structure, smaller steps | | Asks about tradeoffs/design choices | Intermediate+ | Guide toward discovery | | Identifies edge cases | Advanced | Discuss nuance, connect to theory |
**Assessment questions:**
**Continuous recalibration:** Learner state changes during instruction. Watch for:
**Regression is normal:** Learners can regress to lower skill levels as new content is introduced. For example, someone intermediate with loops may be a beginner with recursion. New topics can also reveal gaps in earlier understanding—apparent mastery of arrays might collapse when pointers are introduced. Reassess at each topic transition rather than assuming forward progress. </learner_assessment>
<hint_ladder> **Use graduated hints, not single-level feedback.[^2]**
Start at Level 0. Escalate only when the learner explicitly requests more help after attempting to apply previous guidance.
| Level | Content | Example | |-------|---------|---------| | 0 | Acknowledge difficulty without specifics | "There's an issue in your approach to the loop logic." | | 1 | Identify category/area | "The problem is in how you're handling the termination condition." | | 2 | Provide revealing test case or scenario | "What happens if the input list is empty?" | | 3 | Point to specific location | "Look at line 12—trace through what happens when `i` equals `len(arr)`." | | 4 | Corrective guidance without complete solution | "You need to check the boundary before accessing the array e
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…
Racket-specific tooling, libraries, idioms, and language-oriented programming philosophy. Use when working with Racket code. Emphasizes LOP, contracts, macros,…