{"data":{"items":[{"id":"15f4817b-aff8-4533-9f9d-3007b9308cf5","excerpt":"Inside a 116-Configuration Claude Code Setup: Skills, Hooks, Agents, and the Layering That Makes It Work — # Update: Open-sourced the full setup — [**github.com/jonathanmalkin/jules**](http://github.com/jonathanmalkin/jules)\n\nI run a small business — custom web app, content pipeline, business operations, and the usual ","url":"https://www.reddit.com/r/ClaudeCode/comments/1rltiv7/inside_a_116configuration_claude_code_setup/","role":"request","weight":1.1971924,"occurredAt":"2026-03-05T20:59:30.000Z","sourceKey":"reddit","sourceName":"Reddit","credibility":0.62,"venue":"ClaudeCode","intent":"feature_request","painScore":0.39333335,"sentiment":-0.083333336,"confidence":0.859229,"matchedPatterns":["missing_feature","urgent"],"statement":"Use instead.\" |Hook|Event|What it does| |:-|:-|:-| | |PreToolUse: Bash|Blocks , , pipe-to-shell, force push, disk operations, file truncation, and 12 other destructive patterns| | |PreToolUse: Bash|Validates content before clipboard operat…","title":"Inside a 116-Configuration Claude Code Setup: Skills, Hooks, Agents, and the Layering That Makes It Work","body":"# Update: Open-sourced the full setup — [**github.com/jonathanmalkin/jules**](http://github.com/jonathanmalkin/jules)\n\nI run a small business — custom web app, content pipeline, business operations, and the usual solopreneur overhead. But Claude Code isn't just my IDE. It's my thinking partner, decision advisor, and operational co-pilot. Equal weight goes to `Code/` and `Documents/` — honestly, 80% of my time is in the Documents folder. Business strategy, legal research, content drafting, daily briefings. All through one terminal, one Claude session, one workspace.\n\nAfter setting it up over a few months, I did a full audit. Here's what's actually in there.\n\n# The Goal\n\nEverything in this setup serves one objective: Jules operates autonomously by default. No hand-holding, no \"what would you like me to do next?\" — just does the work.\n\nThree things stay human:\n\n1. **Major decisions.** Strategy, money, anything hard to reverse. Jules presents options and a recommendation. I approve or push back.\n2. **Deep thinking.** I drop a messy idea via voice dictation — sometimes two or three rambling paragraphs. Jules extracts the intent, researches the current state, pulls information from the web, then walks me through an adversarial review process: different mental models, bias checks, pre-mortems, steelmanned counterarguments. But the thinking is still mine. Jules facilitates. I decide.\n3. **Dangerous actions.** `sudo`, `rm`, force push, anything irreversible. The safety hook blocks these automatically — you'll see the code later in the article.\n\nEverything else? Fully enabled. Code, content, research, file organization, business operations — Jules just handles it and reports what happened at the end of the session.\n\nThat's the ideal, anyway. Still plenty of work to make that entire vision a reality. But the 116 configurations below are the foundation.\n\n# The Total Count\n\n|Category|Count|\n|:-|:-|\n|CLAUDE.md files (instruction hierarchy)|6|\n|Skills|29|\n|Agents|5|\n|Rules files|22|\n|Hooks|8|\n|Makefile targets|43|\n|LaunchAgent scheduled jobs|2|\n|MCP servers|1|\n|**Total**|**116**|\n\nThat's not counting the content inside each file. The bash-safety-guard hook alone is 90 lines of regex. The security-reviewer agent is a small novel.\n\n# 1. The [CLAUDE.md](http://CLAUDE.md) Hierarchy (6 files)\n\nThis is the foundation. Claude Code loads CLAUDE.md files at every level of your directory tree, and they stack. Mine go four levels deep:\n\n**Global** (`~/.claude/CLAUDE.md`) — Minimal. Points everything to the workspace-level file:\n\n    # User Preferences\n    \n    All preferences are in the project-level CLAUDE.md at ~/Active-Work/CLAUDE.md.\n    Always launch Claude from ~/Active-Work.\n\nI keep this thin because I always launch from the same workspace. Everything lives one level down.\n\n**Workspace root** (`~/Active-Work/CLAUDE.md`) — The real brain. Personality, decision authority, voice dictation parsing, agent behavior, content rules, and operational context. Here's the voice override section:\n\n    ### Voice overrides for Claude\n    \n    Claude defaults formal and thorough. Jules is NOT that. Override these defaults:\n    \n    - **Be casual.** Contractions. Drop formality. Talk like a person, not a white paper.\n    - **Be brief.** Resist the urge to over-explain. Say less.\n    - **Don't hedge.** \"I think maybe we could consider...\" → \"Do X.\" Direct.\n\nThe persona is detailed enough that it changes how Claude handles everything from debugging to content feedback. Warm, direct, mischievous, no corporate-speak.\n\n**Sub-workspace** (`Code/CLAUDE.md`) — Project inventory with stacks and statuses. `Documents/CLAUDE.md` — folder structure and naming conventions.\n\n**Project-level** — Each project has its own CLAUDE.md with context specific to that codebase. My web app, my website, utility projects — each gets a CLAUDE.md with stack info, deployment patterns, and domain-specific gotchas.\n\nThe hierarchy means you never paste context repeatedly. The web app CLAUDE.md only loads when you're working in that project folder. The document conventions only apply in the documents tree.\n\n# 2. Skills (29)\n\nSkills are invoked commands — Claude activates them when you ask, or you invoke them with `/skill-name`. Each one is a folder with a SKILL.md (description + instructions) and sometimes supporting reference files.\n\nHere's what the frontmatter looks like for my most-used skill:\n\n    ---\n    name: wrap-up\n    description: Use when user says \"wrap up\", \"close session\", \"end session\",\n      \"wrap things up\", \"close out this task\", or invokes /wrap-up — runs\n      end-of-session checklist for shipping, memory, and self-improvement\n    ---\n\nThat description field is what Claude reads to decide when to activate the skill. The body contains the full instructions.\n\n|Skill|What it does|\n|:-|:-|\n|`agent-browser`|Browser automation via Playwright — fill forms, click buttons, take screenshots, scrape pages|\n|`brainstorming`|Structured pre-implementation exploration — explores requirements before touching code or making decisions|\n|`check-updates`|Display the latest Claude Code change monitor report or re-run the monitor on demand|\n|`content-marketing`|Read-only content tasks: backlog display, Reddit monitoring, calendar review (runs cheap on Haiku)|\n|`content-marketing-draft`|Creative writing tasks: draft articles in my voice, adapt across platforms (runs on Sonnet for voice fidelity)|\n|`copy-for`|Format text for a target platform (Discord, Reddit, plain text) and copy to clipboard|\n|`docx`|Create, read, edit Word documents — useful for legal filings and formal business docs|\n|`engage`|Scan Reddit/LinkedIn/X for engagement opportunities, score them, draft reply angles|\n|`executing-plans`|Follow a plan file step by step with review checkpoints — completes the loop|\n|`generate-image-openai`|Generate images via OpenAI's GPT image models — relay to MCP server|\n|`good-morning`|Present the daily operational briefing and start-of-day context|\n|`pdf`|PDF operations: read, merge, split, rotate, extract text — essential for legal documents|\n|`pptx`|PowerPoint operations: create, edit, extract text from presentations|\n|`quiz-smoke-test`|Smoke tests for a custom web app — targeted test selection based on what changed|\n|`retro-deep`|Full end-of-session forensic retrospective — finds every issue, auto-applies fixes|\n|`retro-quick`|Quick mid-session retrospective — scans for repeated failures and compliance gaps|\n|`review-plan`|Pre-mortem review for plans and architecture decisions — stress-tests before implementation|\n|`subagent-driven-development`|Fresh subagent per task with two-stage review before committing|\n|`systematic-debugging`|Structured approach to diagnosing hard bugs — stops thrashing|\n|`wrap-up`|End-of-session checklist: git commit, memory updates, self-improvement loop|\n|`writing-plans`|Creates a structured plan file before multi-step implementation begins|\n|`xlsx`|Spreadsheet operations: read, edit, create, clean messy tabular data|\n\nThe split between `content-marketing` (Haiku) and `content-marketing-draft` (Sonnet) is intentional. Displaying a backlog costs $0.001. Drafting a 1500-word article in someone's specific voice costs more and deserves a better model.\n\n# 3. Agents (5)\n\nAgents are specialized subagents with their own system prompts, tool access, and sometimes model assignments. They handle work that needs a dedicated context rather than cluttering the main session.\n\n|Agent|Model|What it does|\n|:-|:-|:-|\n|`content-marketing`|Haiku|Read/research content tasks — backlog, monitoring, inventory|\n|`content-marketing-draft`|Sonnet|Creative content work — drafting, adaptation, voice checking|\n|`codex-review`|Opus|External code review via OpenAI Codex — second opinion on changes, structured findings|\n|`quiz-app-tester`|Sonnet|Runs the right subset of tests (unit, E2E, accessibility, PHP) based on what changed|\n|`security-reviewer`|Opus|Reviews code changes for vulnerabilities — especially important for anything touching sensitive user data|\n\nThe security reviewer exists because the web app handles personal data. That gets a dedicated review pass.\n\n# 4. Rules Files (22)\n\nRules are always-on context files that load for every session. They're for domain knowledge Claude would otherwise get wrong or need to look up repeatedly.\n\n|Rule|Domain|\n|:-|:-|\n|`1password.md`|How to pull secrets from 1Password CLI — credential patterns for every project|\n|`bash-prohibited-commands.md`|Documents what the bash-safety-guard hook blocks, so Claude doesn't waste tool calls|\n|`browser-testing.md`|Agent-browser installation fix (Playwright build quirk), testing patterns|\n|`claude-cli-scripting.md`|Running `claude -p` from shell scripts — env vars to unset, prompt control flags|\n|`context-handoff.md`|Protocol for saving state when context window gets heavy — handoff plan template|\n|`dotfiles.md`|Config architecture, multi-machine support, naming conventions|\n|`editing-claude-config.md`|How to modify hooks, agents, skills without breaking live sessions|\n|`mcp-servers.md`|MCP server paths and discovery conventions|\n|`proactive-research.md`|Full decision tree for when to research vs. when to ask — forces proactive lookups|\n|`siteground.md`|SSH patterns and WP-CLI usage for web hosting|\n|`skills.md`|Skill file conventions — structure, frontmatter requirements, testing checklist|\n|`token-efficiency.md`|Context window hygiene, model selection guidance per task type|\n|`wordpress-elementor.md`|Elementor stores content in `_elementor_data` postmeta, not `post_content` — the correct update flow|\n\nThe Elementor rule exists because I got burned. Spent two hours \"updating\" a page that never changed because Elementor completely ignores `post_content`. Now that knowledge is always in context.\n\n# 5. Hooks (8)\n\nHooks are shell scripts that fire on specific Claude Code events. They're the guardrails and automation layer. Here's the core of my bash safety guard — every command runs through these regex patterns before execution:\n\n    PATTERNS=(\n      '(^|[;&|])\\s*rm\\b'                    # rm in command position\n      '\\bfind\\b.*(-delete|-exec\\s+rm)'       # find -delete or find -exec rm\n      '^\\s*>\\s*/|;\\s*>\\s*/|\\|\\s*>\\s*/'       # file truncation via redirect\n      '\\bsudo\\b|\\bdoas\\b'                    # privilege escalation\n      '\\b(mkfs|dd\\b.*of=|fdisk|parted|diskutil\\s+erase)'  # disk ops\n      '(curl|wget|fetch)\\s.*\\|\\s*(bash|sh|zsh|source)'    # pipe-to-shell\n      '(curl|wget)\\s.*(-d\\s*@|-F\\s.*=@|--upload-file)'    # upload local files\n      '>\\s*.*\\.env\\b'                        # .env overwrite\n      '\\bgit\\b.*\\bpush\\b.*(-f\\b|--force-with-lease)'      # force push\n    )\n\nEach pattern has a corresponding error message. When Claude tries `rm -rf /tmp/old-stuff`, it gets: \"BLOCKED: rm is not permitted. Use `mv <target> ~/.Trash/` instead.\"\n\n|Hook|Event|What it does|\n|:-|:-|:-|\n|`bash-safety-guard.sh`|PreToolUse: Bash|Blocks `rm`, `sudo`, pipe-to-shell, force push, disk operations, file truncation, and 12 other destructive patterns|\n|`clipboard-validate.sh`|PreToolUse: Bash|Validates content before clipboard operations — catches sensitive data before it leaves the terminal|\n|`cloud-bootstrap.sh`|SessionStart|Installs missing system packages (like `pdftotext`) on cloud containers. No-ops on local.|\n|`notify-input.sh`|Notification|macOS notification when Claude needs input and the terminal isn't in focus|\n|`pdf-to-text.sh`|PreToolUse: Read|Intercepts PDF reads and runs `pdftotext` instead — converts \\~50K tokens of images to \\~2K tokens of text|\n|`plan-review-enforcer.sh`|PostToolUse: Write/Edit|After writing a plan file, injects a mandatory review directive — pre-mortem before proceeding|\n|`plan-review-gate.sh`|PreToolUse: ExitPlanMode|Content-based gate: blocks exiting plan mode if the plan file lacks review notes|\n|`pre-commit-verify.sh`|PreToolUse: Bash|Advisory reminder before git commits: check tests, review diff, no debug artifacts|\n\nThe PDF hook is probably ","offTopic":true},{"id":"8025589c-ecca-499a-b849-c876096e9ebf","excerpt":"Inside a 116-Configuration Claude Code Setup: Skills, Hooks, Agents, and the Layering That Makes It Work — [Original Reddit post](https://www.reddit.com/r/ClaudeCode/comments/1rltiv7/inside_a_116configuration_claude_code_setup/)\n\nI run a small business — custom web app, content pipeline, business operations, and the us","url":"https://lemmy.world/post/43896057","role":"request","weight":0.8449548,"occurredAt":"2026-03-05T21:06:50.421Z","sourceKey":"lemmy","sourceName":"Lemmy","credibility":0.58,"venue":"lemmy.world","intent":"problem_report","painScore":0.36,"sentiment":0.33333334,"confidence":0.62129027,"matchedPatterns":["urgent"],"statement":"The hooks enforce behavior I'd otherwise skip under deadline pressure (plan review, safety checks).","title":"Inside a 116-Configuration Claude Code Setup: Skills, Hooks, Agents, and the Layering That Makes It Work","body":"[Original Reddit post](https://www.reddit.com/r/ClaudeCode/comments/1rltiv7/inside_a_116configuration_claude_code_setup/)\n\nI run a small business — custom web app, content pipeline, business operations, and the usual solopreneur overhead. But Claude Code isn't just my IDE. It's my thinking partner, decision advisor, and operational co-pilot. Equal weight goes to\nCode/\nand\nDocuments/\n— honestly, 80% of my time is in the Documents folder. Business strategy, legal research, content drafting, daily briefings. All through one terminal, one Claude session, one workspace.\nAfter setting it up over a few months, I did a full audit. Here's what's actually in there.\nThe Goal\nEverything in this setup serves one objective: Jules operates autonomously by default. No hand-holding, no \"what would you like me to do next?\" — just does the work.\nThree things stay human:\nMajor decisions.\nStrategy, money, anything hard to reverse. Jules presents options and a recommendation. I approve or push back.\nDeep thinking.\nI drop a messy idea via voice dictation — sometimes two or three rambling paragraphs. Jules extracts the intent, researches the current state, pulls information from the web, then walks me through an adversarial review process: different mental models, bias checks, pre-mortems, steelmanned counterarguments. But the thinking is still mine. Jules facilitates. I decide.\nDangerous actions.\nsudo\n,\nrm\n, force push, anything irreversible. The safety hook blocks these automatically — you'll see the code later in the article.\nEverything else? Fully enabled. Code, content, research, file organization, business operations — Jules just handles it and reports what happened at the end of the session.\nThat's the ideal, anyway. Still plenty of work to make that entire vision a reality. But the 116 configurations below are the foundation.\nThe Total Count\nThat's not counting the content inside each file. The bash-safety-guard hook alone is 90 lines of regex. The security-reviewer agent is a small novel.\n1. The CLAUDE.md Hierarchy (6 files)\nThis is the foundation. Claude Code loads CLAUDE.md files at every level of your directory tree, and they stack. Mine go four levels deep:\nGlobal\n(\n~/.claude/CLAUDE.md\n) — Minimal. Points everything to the workspace-level file:\n```markdown\nUser Preferences\nAll preferences are in the project-level CLAUDE.md at ~/Active-Work/CLAUDE.md. Always launch Claude from ~/Active-Work. ```\nI keep this thin because I always launch from the same workspace. Everything lives one level down.\nWorkspace root\n(\n~/Active-Work/CLAUDE.md\n) — The real brain. Personality, decision authority, voice dictation parsing, agent behavior, content rules, and operational context. Here's the voice override section:\n```markdown\nVoice overrides for Claude\nClaude defaults formal and thorough. Jules is NOT that. Override these defaults:\nBe casual.\nContractions. Drop formality. Talk like a person, not a white paper.\nBe brief.\nResist the urge to over-explain. Say less.\nDon't hedge.\n\"I think maybe we could consider...\" → \"Do X.\" Direct. ```\nThe persona is detailed enough that it changes how Claude handles everything from debugging to content feedback. Warm, direct, mischievous, no corporate-speak.\nSub-workspace\n(\nCode/CLAUDE.md\n) — Project inventory with stacks and statuses.\nDocuments/CLAUDE.md\n— folder structure and naming conventions.\nProject-level\n— Each project has its own CLAUDE.md with context specific to that codebase. My web app, my website, utility projects — each gets a CLAUDE.md with stack info, deployment patterns, and domain-specific gotchas.\nThe hierarchy means you never paste context repeatedly. The web app CLAUDE.md only loads when you're working in that project folder. The document conventions only apply in the documents tree.\n2. Skills (29)\nSkills are invoked commands — Claude activates them when you ask, or you invoke them with\n/skill-name\n. Each one is a folder with a SKILL.md (description + instructions) and sometimes supporting reference files.\nHere's what the frontmatter looks like for my most-used skill:\n```yaml\nname: wrap-up description: Use when user says \"wrap up\", \"close session\", \"end session\", \"wrap things up\", \"close out this task\", or invokes /wrap-up — runs\nend-of-session checklist for shipping, memory, and self-improvement\n```\nThat description field is what Claude reads to decide when to activate the skill. The body contains the full instructions.\nThe split between\ncontent-marketing\n(Haiku) and\ncontent-marketing-draft\n(Sonnet) is intentional. Displaying a backlog costs $0.001. Drafting a 1500-word article in someone's specific voice costs more and deserves a better model.\n3. Agents (5)\nAgents are specialized subagents with their own system prompts, tool access, and sometimes model assignments. They handle work that needs a dedicated context rather than cluttering the main session.\nThe security reviewer exists because the web app handles personal data. That gets a dedicated review pass.\n4. Rules Files (22)\nRules are always-on context files that load for every session. They're for domain knowledge Claude would otherwise get wrong or need to look up repeatedly.\nThe Elementor rule exists because I got burned. Spent two hours \"updating\" a page that never changed because Elementor completely ignores\npost_content\n. Now that knowledge is always in context.\n5. Hooks (8)\nHooks are shell scripts that fire on specific Claude Code events. They're the guardrails and automation layer. Here's the core of my bash safety guard — every command runs through these regex patterns before execution:\nbash PATTERNS=( '(^|[;&|])\\s*rm\\b' # rm in command position '\\bfind\\b.*(-delete|-exec\\s+rm)' # find -delete or find -exec rm '^\\s*>\\s*/|;\\s*>\\s*/|\\|\\s*>\\s*/' # file truncation via redirect '\\bsudo\\b|\\bdoas\\b' # privilege escalation '\\b(mkfs|dd\\b.*of=|fdisk|parted|diskutil\\s+erase)' # disk ops '(curl|wget|fetch)\\s.*\\|\\s*(bash|sh|zsh|source)' # pipe-to-shell '(curl|wget)\\s.*(-d\\s*@|-F\\s.*=@|--upload-file)' # upload local files '>\\s*.*\\.env\\b' # .env overwrite '\\bgit\\b.*\\bpush\\b.*(-f\\b|--force-with-lease)' # force push )\nEach pattern has a corresponding error message. When Claude tries\nrm -rf /tmp/old-stuff\n, it gets: \"BLOCKED: rm is not permitted. Use\nmv <target> ~/.Trash/\ninstead.\"\nThe PDF hook is probably my favorite. A 33-page PDF read as images chews through ~50,000 tokens that stay in context for every subsequent API call. The hook transparently swaps it to extracted text before Claude ever sees it:\n```bash\nRedirect the Read tool to the extracted text file\njq -n --arg path \"$TMPFILE\" --arg ctx \"$CONTEXT\" '{ hookSpecificOutput: { hookEventName: \"PreToolUse\", permissionDecision: \"allow\", updatedInput: { file_path: $path }, additionalContext: $ctx } }' ```\nThe\nupdatedInput\nfield is the key — it changes what the Read tool actually opens. Claude thinks it's reading the PDF. It's actually reading a text file. 95% smaller, no behavior change.\nThe plan review gate is two files working together: the enforcer injects a review step after writing, and the gate literally blocks\nExitPlanMode\nif the review hasn't happened. You can't skip it.\n6. Makefile (43 targets)\nThe Makefile is the workspace CLI.\nmake help\nprints everything. Grouped by domain:\nQuiz app\n(12):\nquiz-dev\n,\nquiz-build\n,\nquiz-lint\n,\nquiz-test\n,\nquiz-test-all\n,\nquiz-db-seed\n,\nquiz-db-reset\n,\nquiz-report\n,\nquiz-report-send\n,\nquiz-validate\n,\nquiz-kill\n,\nquiz-analytics-*\nClaude monitor\n(4):\nmonitor-claude\n,\nmonitor-claude-force\n,\nmonitor-claude-report\n,\nmonitor-claude-ack\nMorning briefing\n(5):\ngood-morning\n,\ngood-morning-test\n,\ngood-morning-weekly\n,\nmorning-install\n,\nmorning-uninstall\nWorkspace health\n(4):\npush-all\n,\nverify\n,\nstatus\n,\nsetup\nDisaster recovery\n(4):\ndisaster-recovery\n,\ndisaster-recovery-repos\n,\ndisaster-recovery-mcp\n,\ndisaster-recovery-brew\nInfrastructure\n(misc):\ngit-pull-install\n,\ninbox-install\n,\nrefresh-claude-env\n,\ngym\n,\nclaude-map\nThe disaster recovery stack is something I built after a scare.\nmake disaster-recovery\ndoes a full workspace restore from GitHub and 1Password: clones all repos, reinstalls MCP servers, reinstalls Homebrew packages. One command from a blank machine to fully operational.\n7. Scheduled Jobs (2 LaunchAgents)\nThese run automatically in the background:\nGit auto-pull\n— fast-forward pulls from origin/main every 5 minutes. The workspace is a single git repo, and I sometimes work from cloud sessions or other machines. This keeps local up to date without manual pulls.\nInbox processor\n— watches for new items dropped into an inbox file (via Syncthing from my phone or other sources) and surfaces them at session start. Part of the \"Jules Den\" async messaging system.\n8. MCP Servers (1)\nOne custom MCP server:\nopenai-images\n. It wraps OpenAI's image generation API and exposes it as a Claude tool. Lives in\nCode/openai-images/\n, symlinked into\n~/.claude/mcp-servers/\n. The\ngenerate-image-openai\nskill routes through it.\nI deliberately kept the MCP footprint small. Every MCP server is another thing to maintain and another attack surface. One well-scoped server beats five loosely-scoped ones.\nThe Part That Actually Matters\nThe count is impressive on paper, but the reason this setup works isn't the volume — it's the layering.\nThe hooks enforce behavior I'd otherwise skip under deadline pressure (plan review, safety checks). The rules load domain knowledge that would take three searches every time I need it. The skills route work to the right model at the right cost. The agents isolate context so the main session doesn't become a 100K-token mess after two hours.\nNothing here is clever for its own sake. Every piece traces back to something that broke, slowed me down, or cost money.\nThe most unexpected thing I learned: the personality layer (\nJules\n) changes the texture of the work in ways that are hard to quantify but easy to feel. Claude Code without a persona is a tool. Claude Code with a coherent personality is closer to a collaborator. The difference matters when you're spending 6-10 hours a day in the terminal.\nWhat's Next in This Series\nI'm writing deeper articles on each category:\nThe hooks system\n— how plan-review enforcement actually works (two hooks cooperating), the bash safety guard, and why the PDF hook is worth more than its weight\nReview cycles\n— my plans get reviewed 3 times before I can execute them. The five-lens framework and how the hooks enforce it\nThe morning briefing\n—\nclaude -p\nas a background service, a 990-line orchestrator script, and the\nclaude -p\ngotchas nobody documents\nThe personality layer\n— why I named my Claude Code setup and gave it opinions. And why that makes the work better\nIf you want a specific deep-dive, say so in the comments.\nRunning this on an M4 Macbook with a Claude Code Max subscription. Total workspace is a single git repo. If you have questions about any specific component, ask. Most of this is just config files and shell scripts, not magic.\nsubmitted by\n/u/jonathanmalkin\n\nOriginally posted by u/jonathanmalkin on r/ClaudeCode","offTopic":true},{"id":"8fead712-f163-4340-a713-ab9f9b2833cd","excerpt":"Inside a 116-Configuration Claude Code Setup: Skills, Hooks, Agents, and the Layering That Makes It Work — \nI run a small business — custom web app, content pipeline, business operations, and the usual solopreneur overhead. But Claude Code isn't just my IDE. It's my thinking partner, decision advisor, and operational c","url":"https://www.reddit.com/r/ClaudeAI/comments/1rlth6q/inside_a_116configuration_claude_code_setup/","role":"request","weight":1.0875505,"occurredAt":"2026-03-05T20:57:42.000Z","sourceKey":"reddit","sourceName":"Reddit","credibility":0.62,"venue":"ClaudeAI","intent":"feature_request","painScore":0.39333335,"sentiment":-0.083333336,"confidence":0.7805387,"matchedPatterns":["missing_feature","urgent"],"statement":"Use instead.\" | Hook | Event | What it does | |---|---|---| | | PreToolUse: Bash | Blocks , , pipe-to-shell, force push, disk operations, file truncation, and 12 other destructive patterns | | | PreToolUse: Bash | Validates content before…","title":"Inside a 116-Configuration Claude Code Setup: Skills, Hooks, Agents, and the Layering That Makes It Work","body":"\nI run a small business — custom web app, content pipeline, business operations, and the usual solopreneur overhead. But Claude Code isn't just my IDE. It's my thinking partner, decision advisor, and operational co-pilot. Equal weight goes to `Code/` and `Documents/` — honestly, 80% of my time is in the Documents folder. Business strategy, legal research, content drafting, daily briefings. All through one terminal, one Claude session, one workspace.\n\nAfter setting it up over a few months, I did a full audit. Here's what's actually in there.\n\n---\n\n## The Goal\n\nEverything in this setup serves one objective: Jules operates autonomously by default. No hand-holding, no \"what would you like me to do next?\" — just does the work.\n\nThree things stay human:\n\n1. **Major decisions.** Strategy, money, anything hard to reverse. Jules presents options and a recommendation. I approve or push back.\n2. **Deep thinking.** I drop a messy idea via voice dictation — sometimes two or three rambling paragraphs. Jules extracts the intent, researches the current state, pulls information from the web, then walks me through an adversarial review process: different mental models, bias checks, pre-mortems, steelmanned counterarguments. But the thinking is still mine. Jules facilitates. I decide.\n3. **Dangerous actions.** `sudo`, `rm`, force push, anything irreversible. The safety hook blocks these automatically — you'll see the code later in the article.\n\nEverything else? Fully enabled. Code, content, research, file organization, business operations — Jules just handles it and reports what happened at the end of the session.\n\nThat's the ideal, anyway. Still plenty of work to make that entire vision a reality. But the 116 configurations below are the foundation.\n\n---\n\n## The Total Count\n\n| Category | Count |\n|---|---|\n| CLAUDE.md files (instruction hierarchy) | 6 |\n| Skills | 29 |\n| Agents | 5 |\n| Rules files | 22 |\n| Hooks | 8 |\n| Makefile targets | 43 |\n| LaunchAgent scheduled jobs | 2 |\n| MCP servers | 1 |\n| **Total** | **116** |\n\nThat's not counting the content inside each file. The bash-safety-guard hook alone is 90 lines of regex. The security-reviewer agent is a small novel.\n\n---\n\n## 1. The CLAUDE.md Hierarchy (6 files)\n\nThis is the foundation. Claude Code loads CLAUDE.md files at every level of your directory tree, and they stack. Mine go four levels deep:\n\n**Global** (`~/.claude/CLAUDE.md`) — Minimal. Points everything to the workspace-level file:\n\n```markdown\n# User Preferences\n\nAll preferences are in the project-level CLAUDE.md at ~/Active-Work/CLAUDE.md.\nAlways launch Claude from ~/Active-Work.\n```\n\nI keep this thin because I always launch from the same workspace. Everything lives one level down.\n\n**Workspace root** (`~/Active-Work/CLAUDE.md`) — The real brain. Personality, decision authority, voice dictation parsing, agent behavior, content rules, and operational context. Here's the voice override section:\n\n```markdown\n### Voice overrides for Claude\n\nClaude defaults formal and thorough. Jules is NOT that. Override these defaults:\n\n- **Be casual.** Contractions. Drop formality. Talk like a person, not a white paper.\n- **Be brief.** Resist the urge to over-explain. Say less.\n- **Don't hedge.** \"I think maybe we could consider...\" → \"Do X.\" Direct.\n```\n\nThe persona is detailed enough that it changes how Claude handles everything from debugging to content feedback. Warm, direct, mischievous, no corporate-speak.\n\n**Sub-workspace** (`Code/CLAUDE.md`) — Project inventory with stacks and statuses. `Documents/CLAUDE.md` — folder structure and naming conventions.\n\n**Project-level** — Each project has its own CLAUDE.md with context specific to that codebase. My web app, my website, utility projects — each gets a CLAUDE.md with stack info, deployment patterns, and domain-specific gotchas.\n\nThe hierarchy means you never paste context repeatedly. The web app CLAUDE.md only loads when you're working in that project folder. The document conventions only apply in the documents tree.\n\n---\n\n## 2. Skills (29)\n\nSkills are invoked commands — Claude activates them when you ask, or you invoke them with `/skill-name`. Each one is a folder with a SKILL.md (description + instructions) and sometimes supporting reference files.\n\nHere's what the frontmatter looks like for my most-used skill:\n\n```yaml\n---\nname: wrap-up\ndescription: Use when user says \"wrap up\", \"close session\", \"end session\",\n  \"wrap things up\", \"close out this task\", or invokes /wrap-up — runs\n  end-of-session checklist for shipping, memory, and self-improvement\n---\n```\n\nThat description field is what Claude reads to decide when to activate the skill. The body contains the full instructions.\n\n| Skill | What it does |\n|---|---|\n| `agent-browser` | Browser automation via Playwright — fill forms, click buttons, take screenshots, scrape pages |\n| `brainstorming` | Structured pre-implementation exploration — explores requirements before touching code or making decisions |\n| `check-updates` | Display the latest Claude Code change monitor report or re-run the monitor on demand |\n| `content-marketing` | Read-only content tasks: backlog display, Reddit monitoring, calendar review (runs cheap on Haiku) |\n| `content-marketing-draft` | Creative writing tasks: draft articles in my voice, adapt across platforms (runs on Sonnet for voice fidelity) |\n| `copy-for` | Format text for a target platform (Discord, Reddit, plain text) and copy to clipboard |\n| `docx` | Create, read, edit Word documents — useful for legal filings and formal business docs |\n| `engage` | Scan Reddit/LinkedIn/X for engagement opportunities, score them, draft reply angles |\n| `executing-plans` | Follow a plan file step by step with review checkpoints — completes the loop |\n| `generate-image-openai` | Generate images via OpenAI's GPT image models — relay to MCP server |\n| `good-morning` | Present the daily operational briefing and start-of-day context |\n| `pdf` | PDF operations: read, merge, split, rotate, extract text — essential for legal documents |\n| `pptx` | PowerPoint operations: create, edit, extract text from presentations |\n| `quiz-smoke-test` | Smoke tests for a custom web app — targeted test selection based on what changed |\n| `retro-deep` | Full end-of-session forensic retrospective — finds every issue, auto-applies fixes |\n| `retro-quick` | Quick mid-session retrospective — scans for repeated failures and compliance gaps |\n| `review-plan` | Pre-mortem review for plans and architecture decisions — stress-tests before implementation |\n| `subagent-driven-development` | Fresh subagent per task with two-stage review before committing |\n| `systematic-debugging` | Structured approach to diagnosing hard bugs — stops thrashing |\n| `wrap-up` | End-of-session checklist: git commit, memory updates, self-improvement loop |\n| `writing-plans` | Creates a structured plan file before multi-step implementation begins |\n| `xlsx` | Spreadsheet operations: read, edit, create, clean messy tabular data |\n\nThe split between `content-marketing` (Haiku) and `content-marketing-draft` (Sonnet) is intentional. Displaying a backlog costs $0.001. Drafting a 1500-word article in someone's specific voice costs more and deserves a better model.\n\n---\n\n## 3. Agents (5)\n\nAgents are specialized subagents with their own system prompts, tool access, and sometimes model assignments. They handle work that needs a dedicated context rather than cluttering the main session.\n\n| Agent | Model | What it does |\n|---|---|---|\n| `content-marketing` | Haiku | Read/research content tasks — backlog, monitoring, inventory |\n| `content-marketing-draft` | Sonnet | Creative content work — drafting, adaptation, voice checking |\n| `codex-review` | Opus | External code review via OpenAI Codex — second opinion on changes, structured findings |\n| `quiz-app-tester` | Sonnet | Runs the right subset of tests (unit, E2E, accessibility, PHP) based on what changed |\n| `security-reviewer` | Opus | Reviews code changes for vulnerabilities — especially important for anything touching sensitive user data |\n\nThe security reviewer exists because the web app handles personal data. That gets a dedicated review pass.\n\n---\n\n## 4. Rules Files (22)\n\nRules are always-on context files that load for every session. They're for domain knowledge Claude would otherwise get wrong or need to look up repeatedly.\n\n| Rule | Domain |\n|---|---|\n| `1password.md` | How to pull secrets from 1Password CLI — credential patterns for every project |\n| `bash-prohibited-commands.md` | Documents what the bash-safety-guard hook blocks, so Claude doesn't waste tool calls |\n| `browser-testing.md` | Agent-browser installation fix (Playwright build quirk), testing patterns |\n| `claude-cli-scripting.md` | Running `claude -p` from shell scripts — env vars to unset, prompt control flags |\n| `context-handoff.md` | Protocol for saving state when context window gets heavy — handoff plan template |\n| `dotfiles.md` | Config architecture, multi-machine support, naming conventions |\n| `editing-claude-config.md` | How to modify hooks, agents, skills without breaking live sessions |\n| `mcp-servers.md` | MCP server paths and discovery conventions |\n| `proactive-research.md` | Full decision tree for when to research vs. when to ask — forces proactive lookups |\n| `siteground.md` | SSH patterns and WP-CLI usage for web hosting |\n| `skills.md` | Skill file conventions — structure, frontmatter requirements, testing checklist |\n| `token-efficiency.md` | Context window hygiene, model selection guidance per task type |\n| `wordpress-elementor.md` | Elementor stores content in `_elementor_data` postmeta, not `post_content` — the correct update flow |\n\nThe Elementor rule exists because I got burned. Spent two hours \"updating\" a page that never changed because Elementor completely ignores `post_content`. Now that knowledge is always in context.\n\n---\n\n## 5. Hooks (8)\n\nHooks are shell scripts that fire on specific Claude Code events. They're the guardrails and automation layer. Here's the core of my bash safety guard — every command runs through these regex patterns before execution:\n\n```bash\nPATTERNS=(\n  '(^|[;&|])\\s*rm\\b'                    # rm in command position\n  '\\bfind\\b.*(-delete|-exec\\s+rm)'       # find -delete or find -exec rm\n  '^\\s*>\\s*/|;\\s*>\\s*/|\\|\\s*>\\s*/'       # file truncation via redirect\n  '\\bsudo\\b|\\bdoas\\b'                    # privilege escalation\n  '\\b(mkfs|dd\\b.*of=|fdisk|parted|diskutil\\s+erase)'  # disk ops\n  '(curl|wget|fetch)\\s.*\\|\\s*(bash|sh|zsh|source)'    # pipe-to-shell\n  '(curl|wget)\\s.*(-d\\s*@|-F\\s.*=@|--upload-file)'    # upload local files\n  '>\\s*.*\\.env\\b'                        # .env overwrite\n  '\\bgit\\b.*\\bpush\\b.*(-f\\b|--force-with-lease)'      # force push\n)\n```\n\nEach pattern has a corresponding error message. When Claude tries `rm -rf /tmp/old-stuff`, it gets: \"BLOCKED: rm is not permitted. Use `mv <target> ~/.Trash/` instead.\"\n\n| Hook | Event | What it does |\n|---|---|---|\n| `bash-safety-guard.sh` | PreToolUse: Bash | Blocks `rm`, `sudo`, pipe-to-shell, force push, disk operations, file truncation, and 12 other destructive patterns |\n| `clipboard-validate.sh` | PreToolUse: Bash | Validates content before clipboard operations — catches sensitive data before it leaves the terminal |\n| `cloud-bootstrap.sh` | SessionStart | Installs missing system packages (like `pdftotext`) on cloud containers. No-ops on local. |\n| `notify-input.sh` | Notification | macOS notification when Claude needs input and the terminal isn't in focus |\n| `pdf-to-text.sh` | PreToolUse: Read | Intercepts PDF reads and runs `pdftotext` instead — converts ~50K tokens of images to ~2K tokens of text |\n| `plan-review-enforcer.sh` | PostToolUse: Write/Edit | After writing a plan file, injects a mandatory review directive — pre-mortem before proceeding |\n| `plan-review-gate.sh` | PreToolUse: ExitPlanMode | Content-based gate: blocks exiting plan mode if the plan file lacks review notes |\n| `pre-commit-verify.","offTopic":true},{"id":"ebc0eae6-bcfb-4419-adee-b88f7a85eaed","excerpt":"Share your Setup - Here is mine — I would love to see all the /slash commands and loops, skills, subagents, workflows, etc that everyone has built for their projects. I'll dump mine below but I think if we got a good thread going then we could all take the url of this thread and give them to claude code and have it bui","url":"https://www.reddit.com/r/ClaudeCode/comments/1tzv5nm/share_your_setup_here_is_mine/","role":"request","weight":0.97442085,"occurredAt":"2026-06-08T02:22:38.000Z","sourceKey":"reddit","sourceName":"Reddit","credibility":0.62,"venue":"ClaudeCode","intent":"problem_report","painScore":0.38,"sentiment":-0.05,"confidence":0.7061021,"matchedPatterns":["manual_process"],"statement":"Two scopes throughout: * **Project** = (lives with the repo, shared with the team) * **Global** = (applies to every project on my machine) # TL;DR — the patterns that actually earn their keep |Pattern|What it does|Why it's worth copying| |…","title":"Share your Setup - Here is mine","body":"I would love to see all the /slash commands and loops, skills, subagents, workflows, etc that everyone has built for their projects. I'll dump mine below but I think if we got a good thread going then we could all take the url of this thread and give them to claude code and have it build project specific loops, commands, hooks, plugins, etc.\n\n# prompt I used to create the below output:\n\nShare your Loops - Here are mine\n\nI would love to see all the /slash commands and loops, skills, etc that everyone has built for their projects. I'll dump mine below but I think if we got a good thread going then we could all take the url of this thread and give them to claude code and have it build project specific loops, commands, hooks, plugins, etc.\n\nI'm going to make this reddit post and I want you to create a file in markdown of all my loops, hooks, skills, plugins, etc that I can share with the reddit post to get it going.\n\n# Output\n\n# My Claude Code Setup — Commands, Loops, Skills, Subagents & Hooks\n\nThis is the actual custom setup I run on a real production project (an AI-agent governance runtime, Next.js 16 + Postgres, on Windows). I've stripped the secrets and genericized the paths so you can lift any piece of it.\n\n**How to use this:** paste this whole thing into Claude Code and say *\"build me equivalents of these, adapted to my project.\"* Each item has a **Steal this pattern** line describing the reusable idea so it ports to any stack.\n\nTwo scopes throughout:\n\n* **Project** = `<project>/.claude/` (lives with the repo, shared with the team)\n* **Global** = `~/.claude/` (applies to every project on my machine)\n\n# TL;DR — the patterns that actually earn their keep\n\n|Pattern|What it does|Why it's worth copying|\n|:-|:-|:-|\n|**One \"ship\" skill**|Lands the branch on main, bumps version, *and re-syncs every doc/count/date to the live code*|Kills \"the code shipped but the docs lied\" drift|\n|**Model-tiered subagents**|Haiku runs the gates, Sonnet audits drift, Opus does security|Pay Opus prices only for the work that needs Opus|\n|**Parallel pre-ship sweep**|3 specialists run at once → one BLOCK/PASS verdict|Go/no-go in one shot instead of a manual checklist|\n|**Find-and-fix loop**|Smoke every page → triage → fix top issues in parallel worktrees → integrate|Stop clicking through your app by hand|\n|**Self-review → apply loop**|Mines my own agent history for repeated failures, *proposes* CLAUDE.md edits, applies on approval|The setup improves itself instead of me remembering to|\n|**Governance hooks**|Pre/Post/Stop tool hooks record + police every tool call|Real guardrails the model can't talk its way past|\n|**Cost & loop guards**|Block after N identical calls; track $/session; scan writes for secrets|Caps runaway autonomous runs|\n|**Context-keep-warm discipline**|Logs to files, subagents for exploration, `/clear` between tasks|My cost is re-reading context, not output — this is the lever|\n\n# 1. Slash commands\n\nMarkdown files in `.claude/commands/`. The filename is the command (`/name`); the file is the prompt it runs.\n\n**Project (**`<project>/.claude/commands/`**):**\n\n* `/dashclaw-quality` — Recurring find-and-fix quality pass over the whole app: browser smoke test → run the code gates → triage breakage → fix the top issues in parallel worktrees → verify → ship. (This is the *goal prompt* that boots the dev server and drives the find-and-fix workflow below.)\n* `/dashclaw-retire-legacy` — Retire a published-but-deprecated SDK the safe way (deprecate now, delete at the next major) without breaking external npm consumers. Drives the deprecation-sweep workflow.\n* `/memory-self-review` — Mine recent agent history for recurring failures and repeated patterns, audit my memory file's health, and **propose (never apply)** edits to CLAUDE.md / memory for human approval.\n* `/apply-self-review` — Apply the approved improvements from the latest self-review proposal. Auto-applies the safe, reversible doc/memory edits (with backups); queues anything that rewrites code/config/rules for an explicit go.\n\n**Global (**`~/.claude/commands/`**):**\n\n* `/combine` — Inventory every product in my monorepo, review each one, and design new sellable products by combining existing projects. (A \"look across everything I've built and find the leverage\" command.)\n* `/handoff-save` `/handoff-load` `/handoff-list` `/handoff-show` — Save/restore durable context-handoff bundles so a fresh session (or a different machine) can resume mid-task without re-deriving everything.\n\n>**Steal this pattern:** a slash command is just a saved prompt with arguments. The high-value ones aren't \"do X once\" — they're **named, repeatable workflows you'd otherwise retype**, especially the *meta* ones (`/memory-self-review`, `/combine`) that operate on your own history and repo rather than on a single file.\n\n# 2. Skills\n\nFolders in `.claude/skills/<name>/SKILL.md`. Skills are model-invoked (they fire when their `description` matches what you're doing) and can bundle reference docs, scripts, and sub-skills.\n\n**The flagship — a \"ship\" skill that refuses to leave anything half-done:**\n\n* `dashclaw-ship` — The single skill that gets a change *on main and live*. It rebases and lands feature branches, runs the gates, merges + pushes so the deploy fires, bumps the unified platform+SDK version — and then **re-aligns every description of the system with the live code**: README, project docs, SDK READMEs, `/docs`, generated artifacts (API inventory, OpenAPI, the platform skill), plugins/hooks/MCP, marketing/landing copy, and the drift-prone hardcoded counts (routes, SDK methods, MCP tools) and stale date-stamps. The one thing it can't finish itself (a credential-gated publish) it flags loudly instead of silently skipping.\n\n>**Steal this pattern:** most \"ship\" commands stop at `git push`. The value here is treating **docs + counts + version + generated artifacts as part of \"done.\"** If your repo has any number that's cited in five places (route counts, supported-model lists, pricing), a ship skill that re-derives and re-writes them is the single highest-ROI thing on this list.\n\n**The rest:**\n\n* `dashclaw-platform-intelligence` — A platform-expert skill for integration/troubleshooting questions. Prefers *live* queries (a CLI that introspects the running system) over a stale snapshot, so answers don't rot.\n* `route-changes` — Make focused changes to API routes *with verification baked in* (touches the route, runs the contract checks, won't call it done until they pass).\n* `dashclaw-agent` — A container skill with 8 sub-skills for a whole domain workflow: `setup`, `build`, `troubleshoot`, `create-policies`, `manage-approvals`, `register`, `compliance-drift-evals`, `instrument`, plus a `knowledge/` folder of reference docs the sub-skills pull from.\n* `gitnexus` — Wraps a code-intelligence CLI (index a repo, query structure, generate a wiki) so exploration goes through cheap structured queries instead of broad file reads.\n\n>**Steal this pattern:** skills beat commands when (a) you want them to **trigger automatically** by context, or (b) they need to **bundle reference material / scripts / sub-skills**. A \"container\" skill with sub-skills + a `knowledge/` folder is a clean way to encode an entire multi-step domain workflow.\n\n# 3. Subagents (model-tiered by cost)\n\nMarkdown files in `.claude/agents/<name>.md` with a `model:` pinned in frontmatter. The point: **route cheap work to cheap models, reserve Opus for the hard stuff.**\n\n**Project (**`<project>/.claude/agents/`**):**\n\n* `dashclaw-gate-runner` — `model: haiku`. Runs lint + the full test suite + the build + contract checks and returns **only the failures + a pass/fail verdict.** Its whole job is keeping multi-hundred-line build logs *out of the main context* — it pipes verbose output to a file and reads back only the failing lines.\n* `dashclaw-drift-auditor` — `model: sonnet`. Computes the *live* truth for every drift-prone count (route count, SDK method counts, MCP tool counts, the unified version) and greps every place those numbers are cited, reporting mismatches with `file:line`. **Reports only, never edits.**\n* `dashclaw-security-reviewer` — `model: opus`. Read-only security review specialized to my stack (API-key auth, payment/spend surface, webhooks, tenant scoping, Postgres-via-repositories). Invoked before merging anything that touches auth/secrets/data access. **Reports findings only, never edits.**\n\n**Global (**`~/.claude/agents/`**):**\n\n* `security-reviewer` — `model: inherit`. The generic version of the above for my default stack (auth + billing + secrets + DB). Read-only, reports only.\n\n>**Steal this patterns:** (1) **Tier your models** — a Haiku agent that just runs gates and returns failures is dirt cheap and runs constantly; save Opus for security and architecture. (2) **Read-only \"reporter\" agents.** Telling an agent *\"you REVIEW and REPORT, you never edit\"* in the system prompt makes it a trustworthy reviewer you can run on every diff without it going rogue and \"helpfully\" rewriting things. (3) **Context firewalls** — an agent whose entire value is *\"run the noisy thing, return only the 4 lines that matter\"* keeps your main thread cheap.\n\n# 4. Workflows — the actual \"loops\"\n\nJavaScript files in `.claude/workflows/` that deterministically orchestrate many subagents (fan-out, parallel stages, verdict synthesis). These are where the real leverage is.\n\n* `dashclaw-preship-sweep.js` — **Pre-ship go/no-go.** Runs three specialists *in parallel* and synthesizes one BLOCK/PASS verdict: the Haiku gate-runner, the Sonnet drift-auditor, and the Opus security-reviewer (the model-tiered roster from §3). Replaces the manual \"lint+test+build, then check the counts, then eyeball security\" sequence with one call.\n* `dashclaw-find-and-fix.js` — **The quality loop.** Smoke-tests every page + runs the code gates → triages breakage into atomic issues → fixes the top ones in **parallel git worktrees** (so the agents don't collide) → integrates the green diffs sequentially. Phases: Discover → Detect → Triage → Fix → Integrate.\n* `legacy-sdk-deprecation-sweep.js` — Audits every live reference to a deprecated SDK, then applies a consistent deprecate-or-remove sweep across all surfaces in parallel worktrees. Phases: Audit → Plan → Sweep → Integrate.\n\n>**Steal this pattern:** the recurring shape is **fan-out → verify/triage → integrate.** Two tricks make it work: (1) **parallel git worktrees** so multiple fix-agents edit isolated copies and never step on each other, then you integrate the diffs one at a time; (2) a **synthesis step** at the end that turns N independent reports into one verdict/plan instead of dumping all N on you. Start with the pre-ship sweep — it's the easiest win.\n\n# 5. Hooks — guardrails the model can't talk past\n\nHooks are configured in `settings.json` and fire on harness events (not on the model's goodwill). This is where \"automated behavior\" actually lives.\n\n**Governance / observability (Pre + Post + Stop tool, project):**\n\n* `dashclaw_pretool.py` (`PreToolUse`) — Evaluates every tool call against policy before it runs; exits `0` to allow or `2` to block.\n* `dashclaw_posttool.py` (`PostToolUse`) — Records the outcome of each governed call (a short output summary + structured metadata).\n* `dashclaw_stop.py` (`Stop`) — Captures the turn's token usage from the transcript and attaches it to the record. Never blocks.\n\n**Safety (global):**\n\n* `secret-guard.cjs` (`PreToolUse` on Write/Edit/Bash) — Blocks any tool call about to write a *real, high-confidence* secret into the repo or commit it. Fail-open by design, allows `.env` files, skips obvious placeholders (`YOUR_`, `EXAMPLE`, `PLACEHOLDER`).\n* `ts-check.sh` (`PostToolUse` on Edit/Write of `.ts`/`.tsx`) — Runs `tsc --noEmit` after every TypeScript edit so type errors surface immediately, not at the push gate.\n\n**Design discipline (project):**\n\n* `impeccable-reminder.py` (`UserPromptSubmit`) — When a prompt contains UI/design/copy keywords, injec","offTopic":true}],"breakdown":[{"sourceKey":"reddit","sourceName":"Reddit","count":3},{"sourceKey":"lemmy","sourceName":"Lemmy","count":1}],"total":4}}