fix(notepad-guard): refuse Write tool for .sisyphus/notepads files (#3685)
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>
This commit is contained in:
@@ -19,6 +19,7 @@ import {
|
||||
createWebFetchRedirectGuardHook,
|
||||
createTeamToolGating,
|
||||
createFsyncSkipWarningHook,
|
||||
createNotepadWriteGuardHook,
|
||||
} from "../../hooks"
|
||||
import {
|
||||
getOpenCodeVersion,
|
||||
@@ -45,6 +46,7 @@ export type ToolGuardHooks = {
|
||||
webfetchRedirectGuard: ReturnType<typeof createWebFetchRedirectGuardHook> | null
|
||||
fsyncSkipWarning: ReturnType<typeof createFsyncSkipWarningHook> | null
|
||||
teamToolGating: ReturnType<typeof createTeamToolGating> | null
|
||||
notepadWriteGuard: ReturnType<typeof createNotepadWriteGuardHook> | null
|
||||
}
|
||||
|
||||
export function createToolGuardHooks(args: {
|
||||
@@ -145,6 +147,10 @@ export function createToolGuardHooks(args: {
|
||||
? safeHook("fsync-skip-warning", () => createFsyncSkipWarningHook())
|
||||
: null
|
||||
|
||||
const notepadWriteGuard = isHookEnabled("notepad-write-guard")
|
||||
? safeHook("notepad-write-guard", () => createNotepadWriteGuardHook())
|
||||
: null
|
||||
|
||||
return {
|
||||
commentChecker,
|
||||
toolOutputTruncator,
|
||||
@@ -162,5 +168,6 @@ export function createToolGuardHooks(args: {
|
||||
webfetchRedirectGuard,
|
||||
fsyncSkipWarning,
|
||||
teamToolGating,
|
||||
notepadWriteGuard,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user