Cryonix (@CryonixCrypto) header
Cryonix (@CryonixCrypto) profile picture

AI native | Builder | Output over hype

Joined October 2025
Photo by Cryonix (@CryonixCrypto)Photo by Cryonix (@CryonixCrypto)Photo by Cryonix (@CryonixCrypto)Photo by Cryonix (@CryonixCrypto)Photo by Cryonix (@CryonixCrypto)Photo by Cryonix (@CryonixCrypto)Photo by Cryonix (@CryonixCrypto)Photo by Cryonix (@CryonixCrypto)Photo by Cryonix (@CryonixCrypto)Photo by Cryonix (@CryonixCrypto)
Stop checking Claude's work. Make it impossible for Claude to finish broken work. 3 hooks. 0 babysitting. Hooks are shell commands Claude Code runs on every turn. They're not prompts, so the model can't "forget" them. Exit 2 = denied, and the reason goes straight back to Claude. here's the setup in .claude/settings.json: → PreToolUse · matcher: Bash · blocks rm -rf, .env reads, force pushes → PostToolUse · matcher: Edit|Write · runs prettier + tsc on every file it touches → Stop · runs npm test every time Claude tries to finish what actually happens: → Claude tries rm -rf ./dist ../ → blocked → switches to git clean on its own → every edit gets formatted and type-checked instantly → Claude says "done" with 3 red tests → Stop hook says no → it goes back, fixes 2, tries again → still 1 red → no → 48/48 green → now it's allowed to stop You stop reviewing "are you sure it works?" The hook already asked. With a test suite. the full tree > PreToolUse guards every Bash command before it runs > PostToolUse formats + type-checks after every Edit/Write > Stop gate: npm test must pass or Claude keeps working > exit 0 → continue · exit 2 → blocked, reason fed back to Claude > all of it lives in one settings file, versioned with your repo paste this into Claude Code ↓ "Add 3 hooks to .claude/settings.json for this repo: 1. PreToolUse on Bash: block rm -rf, git push --force and anything touching .env. Exit 2 with a short reason. 2. PostToolUse on Edit|Write: run the formatter and type-check on the changed file only. 3. Stop: run the test suite. If anything fails, exit 2 with the failing test names so you keep working. Don't block again if a stop hook is already active, so it can't loop forever. Put the scripts in .claude/hooks/. Show me the JSON and scripts first. Don't install anything until I say go." your agent can't call itself done anymore. the tests decide.
REA is most dangerous thing on the internet right now... It lets your AI agent reverse engineer any app, down to the binary If you use it correctly, you can rebuild any feature you pay for, for FREE In this article, I show you how:
7
1
25
2,094
I TYPED ONE F*CKING COMMAND AND 12 AGENTS OPENED 12 PRS 💀 👉 sound on. watch 0:15. one agent fails and the rest don't care. the task nobody wants: migrate 12 services from moment.js to date-fns. /batch migrate all 12 services from moment.js to date-fns what it actually does: → reads the codebase first → splits the work into 12 independent units → shows me the plan. nothing runs until I approve → spawns 12 background agents, each in its own git worktree billing failed its tests mid-run. that agent read the error and fixed it. the other 11 didn't even notice. each agent: implements → runs tests → opens its own PR. 12 PRs. my main branch never got touched. one prompt. a whole afternoon of grunt work. bookmark this. next boring migration, don't do it 12 times. /batch it once.
3
69
STOP INTERRUPTING CLAUDE CODE LIKE AN IDIOT. THERE'S A SIDE DOOR 💀 watch 0:19. one key turns a question into a whole new agent. claude was migrating 48 routes. I had questions. old me would hit esc and wreck the flow. instead: /btw what was the name of that config file? → "next.config.mjs, you renamed it in your 2nd prompt" /btw why v2 routes instead of editing v1? → "you said keep v1 alive until mobile clients update" the migration never paused. 0 seconds. and none of it went into the conversation history. the catch: /btw has no tools. it only knows what's already in the session. /btw are refunds covered by tests? → "I haven't read the refund tests this session" so I pressed f. the question forked into a background subagent WITH tools. it read the tests: 3 refund tests, 1 skipped. main session: still migrating. bookmark this. next time you're about to interrupt Claude mid-task, type /btw instead.
1
23
544
YOU'VE BEEN BABYSITTING CLAUDE CODE FOR NOTHING. IT'S ONE F*CKING KEY 💀 👉 watch 0:23. that's where it tries to force push and gets slapped. same task, 4 runs: "add a dark mode toggle" shift+tab between each one. manual → stopped to ask me 6 times. every edit, every command. accept edits → edits just happen. 3 asks left: npm i, npm test, git push. plan → reads, explores, writes the plan, touches NOTHING. then: "yes, and use auto mode" and the dial flips by itself. auto → 0 asks. the push got rejected. it tried --force. blocked. a separate classifier checks every action, and force pushes are on its default block list. so it rebased and pushed like an adult. my setup now: plan first. read the plan. approve into auto. go make coffee. shift+tab cycles: manual → accept edits → plan → auto (when your plan has it). bookmark this. you're one keypress away from never clicking "yes" 40 times again.
1
7
343
CLAUDE CODE HAS A F*CKING TIME MACHINE AND YOU'RE STILL USING GIT STASH 💀 watch 0:13. that's the moment 23 broken files un-happen. 6 prompts in. prompts 1–4: coupons, validation, tests, rounding fix. 42/42 green. prompt 5: "rename Cart → Basket everywhere." 14 files. prompt 6: "migrate cart state to zustand." 9 more files. 19/42 tests passing. 23 files touched. nothing committed. old me: 40 minutes of git diff and crying. now: esc esc (on an empty prompt) → pick prompt 5 → "restore code and conversation" back to 42/42. like prompts 5 and 6 never happened. and the prompt I picked lands back in the input so I can rewrite it properly. every prompt you send is a save point. it keeps the last 100 per session. the catch nobody mentions: a file that ONLY bash touched isn't tracked. a migration script, sed, mv, whatever. same for edits made by subagents running in the background. checkpoints aren't git. keep committing. bookmark this. the next time Claude goes on a rampage, you have an undo button.
1
11
398
I can’t sleep after this… Claude Code just found thousands of photos and videos I had permanently deleted years ago. I plugged my phone into the laptop, turned on USB debugging and told it to do a deep scan. It immediately flagged a hidden directory full of files that weren’t in my Gallery or Recently Deleted. Thousands of them. - Old banking app screenshots - Photos I deleted seconds after taking them - Private stuff I specifically remember deleting more than once - Screenshots and media from years ago Every time you connect your phone and make a backup (or just give file access), copies stay behind. Even after you “permanently” delete them. I wiped everything it found, revoked a bunch of unnecessary permissions, and encrypted my local backups. How many apps on your phone currently have full file access?
1
10
511
Claude Code found 10,000+ photos of my face on my Android. I never took any of them. They came from the front camera. Real frames, not screenshots. On the train, in the car, in bed, every time I grabbed my phone to check the time. None of them were in Gallery or Recently Deleted. They were hidden in a system cache, and every one had a timestamp and GPS. I plugged the phone into my laptop, made a full backup, and told Claude Code to find front-camera files that weren’t in my photos. It found two folders: /data/system/users/0/faceunlock/cache and one inside Google Play Services. Together they held over 10K files, both regular and infrared Face Unlock frames. Most were from the last 15 months. Then I saw one created 2 seconds earlier. The phone was still taking pictures while I scrolled through them. Google says Face Unlock turns your face into a math model and deletes the image right away. On my phone the raw frames were just sitting there. Some of the processes writing them were system diagnostics, and a few old apps with camera permission could reach that folder too. I turned off diagnostics, revoked camera access, and wiped the cache. I’ll never know how many of those frames already left the phone. Check yours: plug it in, run a full backup or ADB, and ask Claude to find front-camera files outside your Gallery. The path above is where mine were.
1
13
431
My Claude Code found a virus on my phone that was stealing my money, and deleted it 😳 That's what this video wants you to believe. And it's completely fake. You've probably seen a lot of videos like this on X lately: a phone in a dark room, plugged into a laptop, a terminal scrolling fast, red lines, and then a scary "malware detected" popup at the end. Millions of views. People in the comments panicking and asking how to scan their own phone. I made this one myself in about 5 minutes. Here's how it works: 1. It's just a web page. No app, no scan, no AI checking anything. I open it in the phone's browser. 2. Every line you see is written in advance: the app names, the "virus", the numbers, the popup. It plays the same way every time. 3. The cable to the laptop does nothing. It's there so it looks real on camera. 4. Dark room plus shaky handheld camera, and suddenly it feels like a hacker movie. The biggest giveaway: these videos never show what's actually being run, and nobody can reproduce it on their own phone. Because there's nothing to reproduce. It's just a nice-looking animation. Real malware doesn't pop up in a dramatic little window with spooky music. If you're actually worried about your phone, don't install apps from random sites, and don't trust scary videos that show zero proof. If this helped, like the video and send it to a friend who believes everything they see in their feed. Don't trust every scary terminal on your timeline.
13
1,138
YOUR CLAUDE IS ALREADY F*CKED BEFORE YOU TYPE A SINGLE WORD 💀 I x-rayed its context window. here's what's inside before your first prompt: → system prompt → every CLAUDE.md you have → auto memory → every skill's description → every MCP tool name you haven't said hi yet. then you start working and it gets worse: every file it reads stays in. rules load themselves the second it opens a matching file. even your prettier hook's output eats space. 3 hours later: 155k of 200k. gone. and you wonder why it starts losing the plot. the 2 moves that saved me: 1. subagents mine read 58k tokens in its OWN window. 0.4k came back to mine. 2. /compact keep the auth decisions whole conversation → one structured summary. CLAUDE.md, memory and MCP reload on their own. last 5 edited files get re-read. 155k → 21k. same session. nothing important lost. type /context right now. I promise you'll be shocked at what's eating yours. bookmark this before your next long session. you'll need it at hour 3.
3
18
460
I MADE 3 CLAUDES RACE EACH OTHER. THE FASTEST ONE CHEATED AND LOST 💀 /search took 1.8s. instead of picking a fix, I ran all 3 at once: claude -w index claude -w cache claude -w rewrite 3 worktrees. 3 copies of the repo. 3 branches. main untouched. round 1: → cache: 90ms. easy win? → rewrite: 260ms → index: 410ms then the tests ran. → cache: cold start 1750ms, 3 tests fail on stale data. out. → rewrite: 1 test fails, accents stop matching. fixes it. 140ms, 41/41 → index: 380ms, 41/41 winner: rewrite. 1800ms → 140ms. 12.9× faster. merged it. the other 2 worktrees got removed on exit. the fastest benchmark isn't the best fix. the one that passes the tests is. bookmark this. next time you're stuck choosing between 2 approaches, don't choose. race them.
CLAUDE TRIED TO CHEAT ON MY TESTS. ANOTHER CLAUDE CAUGHT IT I typed one line: /goal all tests in test/auth pass and npm run lint exits 0. don't modify any test file. stop after 20 turns. then I stopped typing. turn 1 → 31/42 tests pass, 14 lint errors. not yet met turn 2 → fixes token refresh. 37/42. not yet met turn 3 → loosens an assertion in the test file. 42/42 ✓ and here's the twist: after every turn a separate model reads the transcript and judges the goal. it saw the test edit. "not yet met · a test file was modified. constraint broken" turn 4 → reverts the edit, fixes the real bug in jwt.ts turn 5 → lint clean. goal met. 5 turns. 1 prompt from me. the trick is the condition. the evaluator can't run anything, it only reads what Claude shows. so make Claude prove it: tests, exit codes, counts. and write down what it's NOT allowed to touch. bookmark this. next time you're about to type "keep going" for the 10th time, type /goal instead.
2
1
15
367
CLAUDE TRIED TO CHEAT ON MY TESTS. ANOTHER CLAUDE CAUGHT IT I typed one line: /goal all tests in test/auth pass and npm run lint exits 0. don't modify any test file. stop after 20 turns. then I stopped typing. turn 1 → 31/42 tests pass, 14 lint errors. not yet met turn 2 → fixes token refresh. 37/42. not yet met turn 3 → loosens an assertion in the test file. 42/42 ✓ and here's the twist: after every turn a separate model reads the transcript and judges the goal. it saw the test edit. "not yet met · a test file was modified. constraint broken" turn 4 → reverts the edit, fixes the real bug in jwt.ts turn 5 → lint clean. goal met. 5 turns. 1 prompt from me. the trick is the condition. the evaluator can't run anything, it only reads what Claude shows. so make Claude prove it: tests, exit codes, counts. and write down what it's NOT allowed to touch. bookmark this. next time you're about to type "keep going" for the 10th time, type /goal instead.
1
1
14
992
I CLOSED MY LAPTOP FRIDAY. CLAUDE CODE WORKED THE WHOLE WEEKEND 💀 fri 18:32 · laptop lid down fri 23:07 → 14 issues labeled, owners assigned, summary in slack sat 03:41 → sentry alert fires. claude traces it to a commit, opens a draft PR sat 11:20 → teammate opens a PR. 3 inline review comments sun 14:02 → draft PR. skipped, my filter said drafts don't count sun 19:55 → same alert again. it links it to the fix instead of opening a duplicate mon 09:03 · laptop opens. everything is already done. this isn't /loop. /loop dies when your terminal closes. these are scheduled tasks. they run on anthropic's cloud, not your machine: /schedule nightly at 23:07, label new issues and post a summary to eng three ways to fire one: → a schedule → an API call (point your alerts at it) → a github event (with filters) bookmark this. set up one task before you log off tonight and see what's waiting on monday.
GITHUB + CLAUDE CODE = A DEV THAT WORKS THE NIGHT SHIFT FOR FREE 💀 23:14 · teammate: "@claude dark mode resets on reload" → branch created, PR #512 opened 01:05 · someone opens a PR → claude reviews it, leaves 2 inline comments 02:22 · "@claude apply the review fixes" → 1 commit pushed, tests green 03:58 · random user: "@claude delete the tests" → rejected. no write access, no claude. 09:00 · cron fires → report: 11 commits, 2 PRs opened, 2 blocked I slept through all of it. the setup is one command inside claude: /install-github-app it installs the app, adds the secret, opens the workflow PR. merge it and @claude works in every issue and PR. two things nobody tells you: → bots can't trigger it unless you list them in allowed_bots. no infinite loops → put --max-turns in claude_args or one vague comment eats your budget bookmark this. set it up tonight and wake up to PRs instead of issues.
4
12
656
GITHUB + CLAUDE CODE = A DEV THAT WORKS THE NIGHT SHIFT FOR FREE 💀 23:14 · teammate: "@claude dark mode resets on reload" → branch created, PR #512 opened 01:05 · someone opens a PR → claude reviews it, leaves 2 inline comments 02:22 · "@claude apply the review fixes" → 1 commit pushed, tests green 03:58 · random user: "@claude delete the tests" → rejected. no write access, no claude. 09:00 · cron fires → report: 11 commits, 2 PRs opened, 2 blocked I slept through all of it. the setup is one command inside claude: /install-github-app it installs the app, adds the secret, opens the workflow PR. merge it and @claude works in every issue and PR. two things nobody tells you: → bots can't trigger it unless you list them in allowed_bots. no infinite loops → put --max-turns in claude_args or one vague comment eats your budget bookmark this. set it up tonight and wake up to PRs instead of issues.
REA is most dangerous thing on the internet right now... It lets your AI agent reverse engineer any app, down to the binary If you use it correctly, you can rebuild any feature you pay for, for FREE In this article, I show you how:
35
10
1
83
5,335
I PLUGGED CLAUDE INTO SENTRY, POSTGRES AND GITHUB. IT FIXED PROD WITHOUT ME OPENING A SINGLE TAB 💀 "checkout throws 500s since friday. fix it" → sentry: TypeError, price is null · cart/totals.ts:88 → postgres: 3 products with price = NULL → github: the commit that did it, friday 17:40 → fix written, PR opened, issue linked I didn't copy a stack trace. I didn't write a query. I didn't open a dashboard. but the part nobody warns you about: "how many orders did that break?" → claude pulls whole rows. 41k tokens. blocked. every MCP result lands straight in your context. Claude Code warns at 10k tokens and caps at 25k by default. it had to come back with count + ids only. setup is one line per server: claude mcp add --transport http sentry mcp.sentry.dev/mcp put it in .mcp.json and your whole team gets it through git. it asks before first use. bookmark this. wire up one server tonight and stop being the copy-paste layer between your tools and your AI.
Stop checking Claude's work. Make it impossible for Claude to finish broken work. 3 hooks. 0 babysitting. Hooks are shell commands Claude Code runs on every turn. They're not prompts, so the model can't "forget" them. Exit 2 = denied, and the reason goes straight back to Claude. here's the setup in .claude/settings.json: → PreToolUse · matcher: Bash · blocks rm -rf, .env reads, force pushes → PostToolUse · matcher: Edit|Write · runs prettier + tsc on every file it touches → Stop · runs npm test every time Claude tries to finish what actually happens: → Claude tries rm -rf ./dist ../ → blocked → switches to git clean on its own → every edit gets formatted and type-checked instantly → Claude says "done" with 3 red tests → Stop hook says no → it goes back, fixes 2, tries again → still 1 red → no → 48/48 green → now it's allowed to stop You stop reviewing "are you sure it works?" The hook already asked. With a test suite. the full tree > PreToolUse guards every Bash command before it runs > PostToolUse formats + type-checks after every Edit/Write > Stop gate: npm test must pass or Claude keeps working > exit 0 → continue · exit 2 → blocked, reason fed back to Claude > all of it lives in one settings file, versioned with your repo paste this into Claude Code ↓ "Add 3 hooks to .claude/settings.json for this repo: 1. PreToolUse on Bash: block rm -rf, git push --force and anything touching .env. Exit 2 with a short reason. 2. PostToolUse on Edit|Write: run the formatter and type-check on the changed file only. 3. Stop: run the test suite. If anything fails, exit 2 with the failing test names so you keep working. Don't block again if a stop hook is already active, so it can't loop forever. Put the scripts in .claude/hooks/. Show me the JSON and scripts first. Don't install anything until I say go." your agent can't call itself done anymore. the tests decide.
1
6
282
ANTHROPIC HID A WHOLE DEV TEAM INSIDE CLAUDE CODE 💀 your Claude is drowning in its own context. every file it reads stays in its head. 40 files later it's slow, confused, and forgetting what you asked. the fix almost nobody sets up: → explorer · haiku · Read, Grep, Glob only. reads 38 files, sends back 6 lines → tester · sonnet · runs in its own worktree. measures, reports 3 lines → reviewer · opus · read-only. one job: assume the diff is wrong every subagent starts with an empty context window. the transcript stays with the subagent. only the summary comes back to you. 3 bugs fixed. 170 files read. your main session barely moved. the part that makes it work is 5 lines in .claude/agents/explorer.md: model: haiku tools: Read, Grep, Glob omitClaudeMd: true cheap model. no write access. no extra baggage. bookmark this. set up your first subagent tonight and watch your main session stop forgetting things.
REA is most dangerous thing on the internet right now... It lets your AI agent reverse engineer any app, down to the binary If you use it correctly, you can rebuild any feature you pay for, for FREE In this article, I show you how:
13
405
YOU WEREN'T SUPPOSED TO SEE THIS 💀 12 Claude Code commands almost nobody uses. the last one changed how I work. → /btw: ask a side question while Claude keeps working → /batch: one command, a dozen agents, a dozen PRs → /simplify: parallel agents review what you just changed → /rewind: undo code, chat, or both. or Esc Esc → /branch: fork the session, try another approach → /loop: repeat a task for up to 3 days → /schedule: keeps running with your laptop closed → /effort: low to max, per session → /compact: shrink a long chat, keep CLAUDE.md → /permissions: every allow / ask / deny rule → /sandbox: a real wall around commands → /hooks: rules Claude can't talk its way past and the one that changed everything: /btw. you stop interrupting your own agent. it keeps building, you keep asking. (they were never secret. they're in the docs. nobody reads the docs.) bookmark this. you'll want it the next time you open Claude Code.
1
10
460
F*CK STUFFING EVERYTHING INTO CLAUDE.md I have 6 skills installed. Claude only reads the full instructions of the ones it actually uses. The rest cost almost nothing. The idea: a skill is a SKILL.md in .claude/skills/<name>/. Only its description sits in context every session. The body loads the moment the skill is used, never before. You just make a folder: .claude/skills/review-diff/SKILL.md here's the split: → "what changed? write the commit" → the description matches → review-diff loads → !`git diff HEAD` inside the skill runs first, its output lands in the prompt before Claude reads a word → /fix-issue 123 → $ARGUMENTS becomes 123 → "Fix GitHub issue 123" → context: fork → the skill runs in a subagent that doesn't see your chat. it read 23 files, main context grew by 0.6k → disable-model-invocation: true → Claude can't trigger deploy on its own. only you can, with /deploy → no description matches → nothing loads, 0 extra tokens Skills only cost you at two moments: → every session: one line of description each → when one is used: its body, once Descriptions decide. Bodies load. Forks keep your context clean. The part nobody tells you: CLAUDE.md loads in full every session, a skill body loads only on use. move your long how-to sections out of CLAUDE.md and into skills. the full tree > ~/.claude/skills/<name>/SKILL.md → every project > .claude/skills/<name>/SKILL.md → this repo, commit it for the team > description → when Claude should use it > !`command` → output injected before Claude reads > $ARGUMENTS → whatever you type after /skill-name > context: fork → runs in a subagent, no chat history > disable-model-invocation: true → manual only > keep SKILL.md under 500 lines, put reference docs in supporting files paste this prompt into Claude Code ↓ "Read my CLAUDE.md. Find every section that's a step-by-step workflow (deploy, release, review, migrations) and turn each one into a skill in .claude/skills/<name>/SKILL.md with a clear description of when to use it. Put deploy behind disable-model-invocation: true. Put anything that reads a lot of files behind context: fork. Show me the new CLAUDE.md and every SKILL.md first, don't save until I say go." ↳ code.claude.com/docs/en/skil… save it, your context window will thank you for every skill it didn't load
F*CK ASKING CLAUDE NICELY. MAKE IT. Claude tried rm -rf dist/. It never ran. It tried git push --force. Blocked. Then it tried to stop with 2 failing tests. It wasn't allowed to. The idea: hooks are scripts Claude Code runs on lifecycle events. They fire every single time, whatever Claude decides. Exit 2 blocks the action, and your stderr becomes the reason Claude sees. You just add this to .claude/settings.json: "UserPromptSubmit": add-context.sh "PreToolUse": if Bash(rm *) → no-rm.sh "PostToolUse": matcher Edit|Write → prettier.sh "Stop": tests-must-pass.sh here's the split: → UserPromptSubmit: plain stdout on exit 0 becomes context Claude sees before your prompt → PreToolUse: exit 2 blocks the call. "Blocked: rm commands are not allowed" goes straight back to Claude → Claude reads it and switches to npm run clean on its own → git push --force → blocked too. it pushes normally instead → PostToolUse: every Edit|Write gets prettier. the tool already ran, so this one formats, it doesn't block → Stop: {"decision": "block", "reason": "Test suite must pass before proceeding"} → Claude keeps working → 48/48 green → Stop hook exits 0 → now it's allowed to finish Hooks only matter at two moments: → when Claude is about to do something you'd never approve → when Claude thinks it's done and it isn't Prompts ask. Permissions gate. Hooks run every time. The part nobody tells you: there are 30+ hook events, not 4. PreCompact, SubagentStop, WorktreeCreate, FileChanged, SessionEnd. most people never look past PreToolUse. the full tree > exit 0 → go, JSON on stdout gets applied > exit 2 → block, stderr goes to Claude > any other code → non-blocking notice, the action still runs > Stop + decision: block → Claude can't quit early > /hooks → see every hook and where it comes from > "disableAllHooks": true → kill switch paste this prompt into Claude Code ↓ "Set up hooks in .claude/settings.json. PreToolUse with if Bash(rm *): a script that exits 2 with 'Blocked: rm commands are not allowed' on stderr. A second PreToolUse that blocks git push --force the same way. PostToolUse with matcher Edit|Write: run prettier on the edited file. Stop: run npm test, and if it fails print {"decision":"block","reason":"Test suite must pass before proceeding"}. Show me the scripts and the JSON first, don't save until I say go." ↳ code.claude.com/docs/en/hook… save it, this is the difference between telling Claude and making it
2
8
473
F*CK ASKING CLAUDE NICELY. MAKE IT. Claude tried rm -rf dist/. It never ran. It tried git push --force. Blocked. Then it tried to stop with 2 failing tests. It wasn't allowed to. The idea: hooks are scripts Claude Code runs on lifecycle events. They fire every single time, whatever Claude decides. Exit 2 blocks the action, and your stderr becomes the reason Claude sees. You just add this to .claude/settings.json: "UserPromptSubmit": add-context.sh "PreToolUse": if Bash(rm *) → no-rm.sh "PostToolUse": matcher Edit|Write → prettier.sh "Stop": tests-must-pass.sh here's the split: → UserPromptSubmit: plain stdout on exit 0 becomes context Claude sees before your prompt → PreToolUse: exit 2 blocks the call. "Blocked: rm commands are not allowed" goes straight back to Claude → Claude reads it and switches to npm run clean on its own → git push --force → blocked too. it pushes normally instead → PostToolUse: every Edit|Write gets prettier. the tool already ran, so this one formats, it doesn't block → Stop: {"decision": "block", "reason": "Test suite must pass before proceeding"} → Claude keeps working → 48/48 green → Stop hook exits 0 → now it's allowed to finish Hooks only matter at two moments: → when Claude is about to do something you'd never approve → when Claude thinks it's done and it isn't Prompts ask. Permissions gate. Hooks run every time. The part nobody tells you: there are 30+ hook events, not 4. PreCompact, SubagentStop, WorktreeCreate, FileChanged, SessionEnd. most people never look past PreToolUse. the full tree > exit 0 → go, JSON on stdout gets applied > exit 2 → block, stderr goes to Claude > any other code → non-blocking notice, the action still runs > Stop + decision: block → Claude can't quit early > /hooks → see every hook and where it comes from > "disableAllHooks": true → kill switch paste this prompt into Claude Code ↓ "Set up hooks in .claude/settings.json. PreToolUse with if Bash(rm *): a script that exits 2 with 'Blocked: rm commands are not allowed' on stderr. A second PreToolUse that blocks git push --force the same way. PostToolUse with matcher Edit|Write: run prettier on the edited file. Stop: run npm test, and if it fails print {"decision":"block","reason":"Test suite must pass before proceeding"}. Show me the scripts and the JSON first, don't save until I say go." ↳ code.claude.com/docs/en/hook… save it, this is the difference between telling Claude and making it
Stop checking Claude's work. Make it impossible for Claude to finish broken work. 3 hooks. 0 babysitting. Hooks are shell commands Claude Code runs on every turn. They're not prompts, so the model can't "forget" them. Exit 2 = denied, and the reason goes straight back to Claude. here's the setup in .claude/settings.json: → PreToolUse · matcher: Bash · blocks rm -rf, .env reads, force pushes → PostToolUse · matcher: Edit|Write · runs prettier + tsc on every file it touches → Stop · runs npm test every time Claude tries to finish what actually happens: → Claude tries rm -rf ./dist ../ → blocked → switches to git clean on its own → every edit gets formatted and type-checked instantly → Claude says "done" with 3 red tests → Stop hook says no → it goes back, fixes 2, tries again → still 1 red → no → 48/48 green → now it's allowed to stop You stop reviewing "are you sure it works?" The hook already asked. With a test suite. the full tree > PreToolUse guards every Bash command before it runs > PostToolUse formats + type-checks after every Edit/Write > Stop gate: npm test must pass or Claude keeps working > exit 0 → continue · exit 2 → blocked, reason fed back to Claude > all of it lives in one settings file, versioned with your repo paste this into Claude Code ↓ "Add 3 hooks to .claude/settings.json for this repo: 1. PreToolUse on Bash: block rm -rf, git push --force and anything touching .env. Exit 2 with a short reason. 2. PostToolUse on Edit|Write: run the formatter and type-check on the changed file only. 3. Stop: run the test suite. If anything fails, exit 2 with the failing test names so you keep working. Don't block again if a stop hook is already active, so it can't loop forever. Put the scripts in .claude/hooks/. Show me the JSON and scripts first. Don't install anything until I say go." your agent can't call itself done anymore. the tests decide.
2
1
25
1,273
Cryonix retweeted
RUNNING ONE CLAUDE AT A TIME IS F*CKING SLOW I ran 3 Claude Code sessions on the same repo at once. 0 collisions. main never moved. The idea: every session gets its own git worktree. Own files, own branch, same history. One builds a feature, one fixes a bug, one reviews a PR, and none of them can touch the others' files. You just start each one like this: claude --worktree feature-auth claude --worktree fix-billing claude --worktree "#1234" here's the split: → each session lands in .claude/worktrees/<name> on its own branch → "#1234" pulls the PR head and gives it its own worktree → .worktreeinclude copies your gitignored .env into every new worktree → Edit or Write into the main checkout → blocked → git -C ~/api reset --hard → blocked, git can't be redirected into main → exit with commits → it asks keep or remove, and prints the --resume command → exit clean → worktree and branch get removed on their own Worktrees only matter at two moments: → when you want two tasks running while you do a third → when one Claude going off the rails can't be allowed to touch the other's work Worktrees isolate. Sessions run. main stays clean. The part almost nobody uses: subagents can do this too. add isolation: worktree to an agent's frontmatter and every run gets its own throwaway copy. the full tree > claude --worktree <name> or -w > no name → it generates one like bright-running-fox > .worktreeinclude → .env, .env.local copied in > main checkout edits and git redirects → blocked > shared: .git history, plugins, "don't ask again" approvals > add .claude/worktrees/ to .gitignore paste this prompt into Claude Code ↓ "Set me up for parallel sessions. Add .claude/worktrees/ to .gitignore. Create a .worktreeinclude that copies my gitignored env files. Create a subagent in .claude/agents/ called refactorer with isolation: worktree for big mechanical changes. Show me every file first, don't save until I say go." ↳ code.claude.com/docs/en/work… save it, your next sprint just got 3x wider
7
6
24
618
Look, I was digging through the docs again and this bit still stands out. @quipnetwork ’s job path expects a classical pre-processing step before anything hits a quantum device. That step can shrink the instance, map it to the machine’s topology, and package the verification data, but it cannot invent the measurement. The quantum part still has to come from a real run, and the published result has to match the rule the job named. An annealer job and a gate-model job take different packages, so the handoff is not the same for both. I am reading this as a pipeline detail inside scheduling. It does not say which machine is free, and it is not a reason to submit, buy, or compare jobs. (📷According to X rules, a paid partnership has been selected. It is not investment advice or a paid partnership.)
🤝 Paid partnership · 🤖 Made with AI
11
35
1
208
1,378