diff --git a/engineering/agent-memory/hooks/hooks.json b/engineering/agent-memory/hooks/hooks.json index 4151148c..b540cdb0 100644 --- a/engineering/agent-memory/hooks/hooks.json +++ b/engineering/agent-memory/hooks/hooks.json @@ -1,5 +1,5 @@ { - "description": "CONTRACT ONLY — the referenced scripts are not yet implemented (see ../DESIGN.md). Three hooks implementing the L0-L3 memory tiers. SessionStart injects L3 (global persona) + L2 (current project context). UserPromptSubmit recalls relevant L1 atoms. SessionEnd asynchronously captures L0 into L1 and stages promotions for human adoption. Every hook fails open (exit 0, no memory) and never blocks. Disable individually with AGENT_MEMORY_SESSIONSTART=0, AGENT_MEMORY_USERPROMPTSUBMIT=0, AGENT_MEMORY_SESSIONEND=0. NOTE ON THE RECALL TIMEOUT: the hook 'timeout' field below is in SECONDS and 1 is its floor, so it is only a backstop against a wedged process. The real requirement is the 100ms internal self-budget that user_prompt_submit.py must enforce against its own monotonic clock, returning whatever it has when the budget expires. See DESIGN.md section 5.2 — finishing under 1s does NOT satisfy the spec, and section 9.5 tracks whether 100ms is achievable at all given python interpreter cold-start.", + "description": "CONTRACT ONLY — the referenced scripts are not yet implemented (see ../DESIGN.md). PROVISIONAL ENTRY: the UserPromptSubmit hook below is NOT a settled part of the design. DESIGN.md section 9.5 is an open decision whose option (c) is to drop this hook entirely, because its 100ms recall budget is dominated by python interpreter cold-start rather than by any work the script does. This file listing the hook is a contract for the shape it would take IF it survives that decision, not evidence the decision was made — read on its own, a hooks.json says \"these three hooks exist\", which is exactly the wrong impression here. SessionStart and SessionEnd are not provisional. Three hooks implementing the L0-L3 memory tiers. SessionStart injects L3 (global persona) + L2 (current project context). UserPromptSubmit recalls relevant L1 atoms. SessionEnd asynchronously captures L0 into L1 and stages promotions for human adoption. Every hook fails open (exit 0, no memory) and never blocks. Disable individually with AGENT_MEMORY_SESSIONSTART=0, AGENT_MEMORY_USERPROMPTSUBMIT=0, AGENT_MEMORY_SESSIONEND=0. NOTE ON THE RECALL TIMEOUT: the hook 'timeout' field below is in SECONDS and 1 is its floor, so it is only a backstop against a wedged process. The real requirement is the 100ms internal self-budget that user_prompt_submit.py must enforce against its own monotonic clock, returning whatever it has when the budget expires. See DESIGN.md section 5.2 — finishing under 1s does NOT satisfy the spec, and section 9.5 tracks whether 100ms is achievable at all given python interpreter cold-start.", "hooks": { "SessionStart": [ {