572c3c248e
Adds a new `notepad-write-guard` hook that intercepts Write tool calls whose target path matches `**/.sisyphus/notepads/**` and throws an actionable error instead of allowing the write to proceed. Without this guard, an agent that hits an Edit hash-mismatch failure could silently fall back to Write, destroying the entire history of an append-only notepad file (decisions.md, issues.md, etc.). The file carries an explicit "NEVER overwrite" warning that the agent ignores under context pressure. The guard is path-based so it works regardless of plan name or nesting depth. Non-notepad `.sisyphus/**` paths (e.g. plan files) are unaffected. The hook is wired into `create-tool-guard-hooks` under the hook name `notepad-write-guard` and follows the same safeCreateHook + HookName schema pattern as every other tool-guard hook. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
64 lines
1.5 KiB
TypeScript
64 lines
1.5 KiB
TypeScript
import { z } from "zod"
|
|
|
|
export const HookNameSchema = z.enum([
|
|
"todo-continuation-enforcer",
|
|
"context-window-monitor",
|
|
"session-recovery",
|
|
"session-notification",
|
|
"comment-checker",
|
|
"tool-output-truncator",
|
|
"question-label-truncator",
|
|
"directory-agents-injector",
|
|
"directory-readme-injector",
|
|
"empty-task-response-detector",
|
|
"think-mode",
|
|
"model-fallback",
|
|
"anthropic-context-window-limit-recovery",
|
|
"preemptive-compaction",
|
|
"rules-injector",
|
|
"background-notification",
|
|
"auto-update-checker",
|
|
"startup-toast",
|
|
"keyword-detector",
|
|
"agent-usage-reminder",
|
|
"non-interactive-env",
|
|
"interactive-bash-session",
|
|
|
|
"thinking-block-validator",
|
|
"tool-pair-validator",
|
|
"ralph-loop",
|
|
"category-skill-reminder",
|
|
|
|
"compaction-context-injector",
|
|
"compaction-todo-preserver",
|
|
"claude-code-hooks",
|
|
"auto-slash-command",
|
|
"edit-error-recovery",
|
|
"json-error-recovery",
|
|
"delegate-task-retry",
|
|
"prometheus-md-only",
|
|
"sisyphus-junior-notepad",
|
|
"team-tool-gating",
|
|
"no-sisyphus-gpt",
|
|
"no-hephaestus-non-gpt",
|
|
"start-work",
|
|
"atlas",
|
|
"unstable-agent-babysitter",
|
|
"task-resume-info",
|
|
"stop-continuation-guard",
|
|
"tasks-todowrite-disabler",
|
|
"runtime-fallback",
|
|
"write-existing-file-guard",
|
|
"notepad-write-guard",
|
|
"bash-file-read-guard",
|
|
"anthropic-effort",
|
|
"hashline-read-enhancer",
|
|
"read-image-resizer",
|
|
"todo-description-override",
|
|
"webfetch-redirect-guard",
|
|
"fsync-skip-warning",
|
|
"legacy-plugin-toast",
|
|
])
|
|
|
|
export type HookName = z.infer<typeof HookNameSchema>
|