By johnfink8
Personal engineering skills: trial discipline, pytest/e2e/type-safety methodology, formatting standards, commit preferences.
Use whenever the user is building, debugging, or extending code that puts an LLM in a loop — calling tools, taking multi-step actions, deciding what to do next. Triggers include words like "agent", "agentic", "tool use", "tool calling", "ReAct", "autonomous", and code that loops over `messages.create` / `responses.create` / similar SDK calls. Apply when wiring webhooks/events/queues to an LLM, when an agent is misbehaving (looping, flailing, blowing context, spawning too many subagents), and when planning a new agent. Do NOT apply for one-shot prompting — only when the LLM has tools and decides its own next step.
Use whenever you're about to ask the user to manually click, refresh, reproduce, or paste output — and when starting any new project, to plan verification infrastructure up front. Don't punt verification to the user when tools exist that let you do it yourself. Triggers on debugging from a user-reported error, building frontend features, 'could you check whether' moments, and anytime you're tempted to outsource a verification step. Especially relevant for frontend work where browser automation (Playwright, Claude in Chrome, Puppeteer MCP) eliminates most 'could you click and tell me what you see' handoffs.
Use whenever writing a git commit message, drafting a PR title, or generating release notes. Enforces a terse, informal commit-message style — hints at the diff rather than restating it, no trailers. Apply on every commit, including auto-generated ones after edits.
Use when (a) authoring a new e2e/browser test (selector choice, set-up strategy, what to assert), (b) investigating a flaky test, (c) deciding whether e2e is the right tier for a behavior (vs. unit/integration), (d) reviewing existing e2e tests for design issues, or (e) anyone is about to reach for `sleep` / `waitForTimeout` / `--retries=3` (which is always wrong). NOT needed for minor edits to existing well-shaped e2e tests — load only when an e2e design decision or flake investigation is on the table.
Use when (a) setting up a new project and choosing/configuring a formatter, (b) someone is proposing a manual formatting override or arguing about style, (c) reformatting legacy code or deciding whether to bundle reformatting with unrelated changes, (d) deciding line-length / import-order / quote-style / trailing-comma config, or (e) adding pre-commit hooks or editor config (`.editorconfig`). NOT needed for ordinary code edits — modern formatters already handle those, and the principle is "let the formatter decide" which only matters when a decision is actually being made.
Executes bash commands
Hook triggers when Bash tool is used
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
Personal skills marketplace for Claude Code.
/plugin marketplace add johnfink8/skill-repo
/plugin install johnfink-skills@johnfink
(Replace the GitHub slug if you fork.)
Verify with /plugin — you should see the johnfink-skills plugin and its skills will appear in skill listings as johnfink-skills:<skill-name>.
as / # type: ignore / any.A SessionStart hook injects plugins/johnfink-skills/rules/house-rules.md into context at the start of every session. These are the rules that apply regardless of task — transparency about shortcuts, comment hygiene, how to respond to "why did you do X this way?" — and live as a hook because their trigger condition is "always," not "matches description."
CLAUDE.md isn't plugin-able. Marketplaces ship skills, hooks, agents, and commands — not CLAUDE.md content. Even if they could, CLAUDE.md often holds per-machine configuration that shouldn't be clobbered: things like "you're in a Docker container, don't try to spawn Docker", "pyright lives at this nonstandard path", or project-specific facts that don't belong in a portable marketplace. A SessionStart hook ships the always-on rules without touching CLAUDE.md, so portable guidance and local config coexist cleanly.
A PreToolUse hook on the Bash tool injects a warning into Claude's context (model-visible via additionalContext, non-blocking) when it spots a string-as-code anti-pattern — a script piped into a language interpreter instead of being written to a real file:
python <<EOF, node <<EOF, ruby <<-EOF, perl <<EOF, php <<EOF) when the command runs 30+ newlines. Smaller heredocs are tolerated. Heredocs into non-interpreters (cat, psql, tee, bash) are always fine at any length.-c / -e script in a language interpreter (python -c, node -e, etc.) with substantial content (multi-line or >120 chars).The warning carries a transferable why — the piped script skips your formatter and linter, isn't somewhere you (or the user) can diff or re-run — and each form cross-references the other so the natural pivot ("just use -c instead") is preempted. The remedy is always: use the Write tool to create a real script file and invoke that.
This is the enforcement half of a rule that lives advisorily in the autonomy and trial-data-discipline skills. Skills tell Claude what should happen; hooks catch when it doesn't.
Lives at plugins/johnfink-skills/hooks/bash-anti-patterns.py; test cases in test_bash_anti_patterns.py.
Edit the SKILL.md files in plugins/johnfink-skills/skills/, commit, push. Bump version in plugins/johnfink-skills/.claude-plugin/plugin.json for meaningful changes.
On other machines:
/plugin marketplace update johnfink — refresh the marketplace listing./plugin, go to the Installed tab, update from there./plugin uninstall johnfink-skills@johnfink then /plugin install johnfink-skills@johnfink./plugin → Marketplaces tab) so future versions pull at startup..claude-plugin/marketplace.json # marketplace manifest
plugins/johnfink-skills/
.claude-plugin/plugin.json # plugin manifest
skills/<skill-name>/SKILL.md # one skill per dir (lazy-loaded)
hooks/hooks.json # SessionStart + PreToolUse hook config
hooks/bash-anti-patterns.py # PreToolUse: warn on ephemeral scripts
rules/house-rules.md # always-on rules injected by SessionStart
npx claudepluginhub johnfink8/skill-repo --plugin johnfink-skillsComprehensive skill pack with 66 specialized skills for full-stack developers: 12 language experts (Python, TypeScript, Go, Rust, C++, Swift, Kotlin, C#, PHP, Java, SQL, JavaScript), 10 backend frameworks, 6 frontend/mobile, plus infrastructure, DevOps, security, and testing. Features progressive disclosure architecture for 50% faster loading.
Develop, test, build, and deploy Godot 4.x games with Claude Code. Includes GdUnit4 testing, web/desktop exports, CI/CD pipelines, and deployment to Vercel/GitHub Pages/itch.io.
A growing collection of Claude-compatible academic workflow bundles. Covers scientific figures, manuscript writing and polishing, reviewer assessment, citation retrieval, data availability, paper reading, literature search, response letters, paper-to-PPTX conversion, and evidence-grounded Chinese invention patent drafting. Rules are organized as reusable skill folders with explicit workflows and quality checks.
Permanent coding companion for Claude Code — survives any update. MCP-based terminal pet with ASCII art, stats, reactions, and personality.
Comprehensive PR review agents specializing in comments, tests, error handling, type design, code quality, and code simplification
Comprehensive feature development workflow with specialized agents for codebase exploration, architecture design, and quality review