Each skill is a copy-ready pattern — install command, config example, when to use, common gotchas. Drop one into ~/.claude/skills/ and it's instantly available across every project.
Both have install commands, full config, real use cases, and the gotchas I hit shipping them. New skill drops every 2-3 weeks until the library is complete.
Run shell commands automatically when Claude Code events fire. Auto-lint after Write, audit log every Bash, block git push without a checklist pass — the rules enforce themselves, no AI judgment needed.
Hooks are shell commands that fire on Claude Code events: PreToolUse, PostToolUse, Notification, Stop, SubagentStop. The hook runs OUTSIDE the AI's context — meaning rules are enforced without burning tokens or relying on the model "remembering."
git push --force via PreToolUseHooks live in .claude/settings.json at user level (~/.claude/) or project level. Project-level wins on conflicts.
// .claude/settings.json — auto-lint HTML after every Write/Edit { "hooks": { "PostToolUse": [{ "matcher": "Write|Edit", "hooks": [{ "type": "command", "command": "~/scripts/lint-html.sh \"$CLAUDE_FILE_PATH\"" }] }] } }
$CLAUDE_FILE_PATH — the file being touched (Write/Edit)$CLAUDE_TOOL_NAME — name of the tool that triggered$CLAUDE_PROJECT_DIR — the project root// reject the Write if file contains emojis or "AIOPSFORGE" lowercase { "hooks": { "PreToolUse": [{ "matcher": "Write|Edit", "hooks": [{ "type": "command", "command": "~/scripts/brand-check.sh", "exitOnError": true }] }] } }
chmod +x and use absolute paths inside. If a hook fails, Claude shows the error inline but doesn't block on it unless you set exitOnError: true.The Model Context Protocol gives Claude Code structured access to external tools, data, and services. Already have GitHub, Playwright, Gmail, Drive, Obsidian configured — and you can build custom MCP servers in 50 lines of code.
MCP servers are standalone programs that expose tools, resources, and prompts to Claude over a structured protocol. Anthropic ships official servers (filesystem, brave-search, fetch); the community builds anything else. Claude Code connects via claude mcp add and the tools appear in its tool list.
# Add via Claude CLI $ claude mcp add brave-search -- npx @modelcontextprotocol/server-brave-search # List configured $ claude mcp list # Remove $ claude mcp remove brave-search
// my-mcp/server.js import { McpServer } from '@modelcontextprotocol/sdk/server/mcp'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio'; const server = new McpServer({ name: 'my-tools', version: '1.0.0' }); server.tool('get_today_stats', 'Return today\'s ops stats', {}, async () => { const data = await fetch('https://api.internal/stats/today').then(r => r.json()); return { content: [{ type: 'text', text: JSON.stringify(data) }] }; }); const transport = new StdioServerTransport(); await server.connect(transport);
Then register: claude mcp add my-tools -- node /abs/path/to/my-mcp/server.js
/mcp to reconnect. If it happens repeatedly with the same server, file the issue upstream + temporarily switch to HTTP transport.Each will follow the same documentation pattern — what it does, when to use, install command, real example, gotchas. New skill drops every 2-3 weeks.
claude -p for cron-driven tasks, JSON output piping, batch processing/my-skill · frontmatter, scope, user-invocable flag.cursorrules