#!/bin/sh # PreToolUse(Edit|Write) — block hand-editing generated agent .md files. # # Generated files start with: ` marker # on line 1 as the SOLE SOURCE OF TRUTH for "is this file generated?". # Legacy agent .md files that were produced before the assembler existed # (and therefore lack the marker) will pass this hook silently. That is # intentional — the marker is how the assembler self-declares ownership, # and any file without it is assumed hand-authored. Re-run the assembler # to adopt an older file into the managed set. case "$FILE" in "$HOME/.claude/agents/_"*) exit 0 ;; "$HOME/.claude/agents/"*.md) ;; *) exit 0 ;; esac # Detect generated marker in the first 10 lines (sole truth — see NOTE above) if [ -f "$FILE" ] && head -10 "$FILE" | grep -q 'GENERATED by _assembler'; then NAME=$(basename "$FILE" .md) echo "[no-hand-edit-agents] BLOCKED: $FILE is generated." >&2 echo "" >&2 echo "Edit the manifest instead:" >&2 echo " ~/.claude/agents/_manifests/$NAME.toml" >&2 echo "" >&2 echo "Or edit a shared block:" >&2 echo " ~/.claude/agents/_blocks/.md" >&2 echo "" >&2 echo "Override (emergency only): export AGENT_MIGRATION=1" >&2 exit 1 fi exit 0