From 790f1f41b8aff19d189a18eda5ed3193a3aa4a9f Mon Sep 17 00:00:00 2001 From: vitya Date: Mon, 25 May 2026 00:24:23 +0300 Subject: [PATCH] docs(session-handoff): pwsh/powershell choice + restart-after-edit caveat [v0.3.2] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two findings from live-hook e2e smoke 2026-05-25 on this Windows machine: (1) README snippet was pwsh-only — PS 7 Core isn't on stock Windows. PS 5.1 (`powershell`) is always present and the hook script runs cleanly under both. README now leads with `powershell` and notes the `pwsh` swap for PS 7+ users. (2) Missing caveat that hooks load at Claude Code session start — mid-session edits to ~/.claude/settings.json don't activate the hook until CC restart. Without this note user would think the hook is broken after applying the snippet (standalone smoke would pass but live in-session wouldn't fire). Added explicit restart instruction + verification recipe. Also: dist/session-handoff.skill now tracked (was missing since promotion — inconsistent with other dist/*.skill artifacts that ship in repo). PATCH bump 0.3.1 → 0.3.2 (docs-only, no behavioral change in hook or skill). Co-Authored-By: Claude Opus 4.7 (1M context) --- dist/session-handoff.skill | Bin 0 -> 9399 bytes skills/session-handoff/SKILL.md | 2 +- skills/session-handoff/hooks/README.md | 8 ++++++-- 3 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 dist/session-handoff.skill diff --git a/dist/session-handoff.skill b/dist/session-handoff.skill new file mode 100644 index 0000000000000000000000000000000000000000..048b77e93dbff6af3434c1187186761b9637e910 GIT binary patch literal 9399 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 O6oUW&%qah7_x}LbshqC> literal 0 HcmV?d00001 diff --git a/skills/session-handoff/SKILL.md b/skills/session-handoff/SKILL.md index ea5e7a6..10e2f57 100644 --- a/skills/session-handoff/SKILL.md +++ b/skills/session-handoff/SKILL.md @@ -1,6 +1,6 @@ --- name: session-handoff -version: 0.3.1 +version: 0.3.2 description: "Sliding handoff between CC sessions via .tasks/NEXT_SESSION.md. Read on session start: orient agent, ask user before action. Write on session-end phrase or substantive commit. Session-end phrases: «завершаем сессию», «сворачиваемся», «закругляемся», «wrap up session», «end session», «we're done for now». Trigger-line in CLAUDE.md: `session handoff: read on start, write on end`. Skip task-zone phrases: «закрываем эту таску», «pause», «отбой», «разбегаемся»." --- diff --git a/skills/session-handoff/hooks/README.md b/skills/session-handoff/hooks/README.md index d7f64ba..5d4db72 100644 --- a/skills/session-handoff/hooks/README.md +++ b/skills/session-handoff/hooks/README.md @@ -8,7 +8,7 @@ Opt-in PostToolUse hook that detects substantive `git commit` invocations and si ## Enable on Windows (PowerShell) -Add to `~/.claude/settings.json`: +Add to `~/.claude/settings.json`. Use `powershell` for stock Windows (PS 5.1, always present); use `pwsh` if you have PowerShell 7+ installed. The hook script runs cleanly under both. ```jsonc { @@ -19,7 +19,7 @@ Add to `~/.claude/settings.json`: "hooks": [ { "type": "command", - "command": "pwsh -NoProfile -ExecutionPolicy Bypass -File \"$env:USERPROFILE\\.claude\\skills\\session-handoff\\hooks\\commit-detector.ps1\"" + "command": "powershell -NoProfile -ExecutionPolicy Bypass -File \"$env:USERPROFILE\\.claude\\skills\\session-handoff\\hooks\\commit-detector.ps1\"" } ] } @@ -28,8 +28,12 @@ Add to `~/.claude/settings.json`: } ``` +Swap `powershell` for `pwsh` if you prefer PS 7+. To check which you have: `Get-Command pwsh -ErrorAction SilentlyContinue` (empty → PS 7 not installed → use `powershell`). + If `hooks.PostToolUse` already exists — append the matcher block to the array. Don't overwrite existing entries. +**Restart Claude Code after editing `settings.json`** — hooks are loaded at session start. A running session won't pick up the new hook until it's restarted (close + reopen the CC instance). Verify the hook is active by making a substantive commit and checking for a `Substantive commit detected on ...` system reminder in the next turn. + ## Enable on Linux / macOS (bash) ```jsonc