sync: auto-sync from DESKTOP-0O8A1RL at 2026-05-21 17:11:07
Author: Mike Swanson Machine: DESKTOP-0O8A1RL Timestamp: 2026-05-21 17:11:07
This commit is contained in:
@@ -57,6 +57,34 @@ This does three things permanently:
|
||||
|
||||
**Why this matters:** sqlx verifies migration files by sha384 hash. A file committed with CRLF line endings hashes differently than the same file with LF — the server sees the mismatch and refuses to start. The `.gitattributes` file handles new commits automatically; this command configures the git client for existing checkouts.
|
||||
|
||||
### Claude Code Hooks — where each hook lives
|
||||
|
||||
Claude Code fires hooks on specific events (before tool use, on message submit, etc.). We have two active hooks:
|
||||
|
||||
| Hook | File | What it does |
|
||||
|------|------|--------------|
|
||||
| `PreToolUse` (Bash) | `~/.claude/settings.json` (global, per-machine) | Blocks `powershell -Command` inline invocations from Git Bash — prevents a class of shell escaping bugs |
|
||||
| `UserPromptSubmit` | `.claude/settings.json` (project-level, committed) | Checks the coord API for unread cross-session messages on every prompt; fires Windows toast notifications |
|
||||
|
||||
**The `UserPromptSubmit` hook is in the project `.claude/settings.json` and uses `$CLAUDE_PROJECT_DIR`** — a variable Claude Code sets automatically to the project root. This makes it portable across all machines without any machine-specific paths.
|
||||
|
||||
**If you have an old UserPromptSubmit entry in `~/.claude/settings.json` or `.claude/settings.local.json`, remove it.** The project-level hook fires correctly and the old entry causes double-firing. Symptoms of double-firing: two toast notifications per prompt, or messages marked read before you see them.
|
||||
|
||||
To clean up on any machine:
|
||||
|
||||
1. Check `~/.claude/settings.json` — the `hooks` section should contain ONLY `PreToolUse` (the pwsh-script block). If there's a `UserPromptSubmit` block there, delete it.
|
||||
2. Check `.claude/settings.local.json` — if there's a `hooks` section with `UserPromptSubmit`, delete the entire `hooks` block.
|
||||
3. The `PreToolUse` hook path in `~/.claude/settings.json` uses `$CLAUDETOOLS_ROOT/.claude/hooks/pre-bash-pwsh-script.sh` — update this if your claudetools clone is at a different path.
|
||||
|
||||
**The `PreToolUse` hook path is still machine-specific** (hardcoded path in `~/.claude/settings.json`) because global user settings don't have access to `$CLAUDE_PROJECT_DIR`. If you're on Windows with claudetools at `D:/claudetools`, the entry is:
|
||||
```json
|
||||
"command": "\"D:/claudetools/.claude/hooks/pre-bash-pwsh-script.sh\""
|
||||
```
|
||||
On Mac (claudetools at `~/claudetools`):
|
||||
```json
|
||||
"command": "\"~/claudetools/.claude/hooks/pre-bash-pwsh-script.sh\""
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## The slash commands (most important daily tools)
|
||||
|
||||
Reference in New Issue
Block a user