aboutsummaryrefslogtreecommitdiff
path: root/hooks/precompact-priorities.sh
diff options
context:
space:
mode:
Diffstat (limited to 'hooks/precompact-priorities.sh')
-rwxr-xr-xhooks/precompact-priorities.sh122
1 files changed, 122 insertions, 0 deletions
diff --git a/hooks/precompact-priorities.sh b/hooks/precompact-priorities.sh
new file mode 100755
index 0000000..3ebee8f
--- /dev/null
+++ b/hooks/precompact-priorities.sh
@@ -0,0 +1,122 @@
+#!/usr/bin/env bash
+# PreCompact hook: inject priority-preservation instructions into the
+# compaction prompt so the generated summary retains information that's
+# disproportionately expensive to reconstruct after compact.
+#
+# Wire in ~/.claude/settings.json (or per-project .claude/settings.json):
+#
+# {
+# "hooks": {
+# "PreCompact": [
+# {
+# "hooks": [
+# {
+# "type": "command",
+# "command": "~/.claude/hooks/precompact-priorities.sh"
+# }
+# ]
+# }
+# ]
+# }
+# }
+#
+# The hook writes to stdout; Claude Code appends this to its default
+# compact prompt. It doesn't read stdin. Safe to install globally.
+
+cat <<'PRIORITIES'
+
+---
+
+When producing the compact summary, preserve the following verbatim or
+near-verbatim. Do not paraphrase, compress, or drop these categories — they
+are disproportionately expensive to reconstruct after compaction.
+
+These instructions patch the default compact-prompt sections; they do not
+replace other parts of it.
+
+### A. Unanswered questions
+
+For every question the user asked, mark it as *answered*, *partially
+answered*, or *unanswered*. List every unanswered question verbatim under
+a "Pending Questions" heading in the summary. Do not drop a question
+just because the conversation moved on; unanswered questions are the
+single most common thing that gets lost across compactions.
+
+### B. Root causes, not symptoms
+
+- Distinguish *confirmed* root causes from *ruled-out hypotheses*.
+- Cite confirmed causes with `path/to/file:line_number`.
+- Keep ruled-out hypotheses under a short "Investigated and excluded"
+ list so they don't get re-tried after compact.
+- Preserve error messages, stack frames, exit codes, and error IDs
+ verbatim — never paraphrase them.
+
+### C. Exact numbers and identifiers
+
+Retain exact digits and strings for all of:
+
+- Commit SHAs, PR numbers, issue numbers, ticket IDs
+- Run IDs, job IDs, container IDs
+- Dataset names, model IDs, version numbers, release tags
+- Measured latencies, throughput, token counts, costs, file sizes
+- Line counts, port numbers, IP addresses
+- Credentials format markers (not the credential itself — see §E)
+
+These anchor future recall. Rounded or paraphrased numbers force
+re-measurement.
+
+### D. File path tiers
+
+Group touched files by tier rather than flattening them into one list:
+
+- **Critical** — files modified, or identified as the source of the bug.
+ List with `path/to/file:line`.
+- **Referenced** — files read for context but not modified. List the paths.
+- **Mentioned** — files discussed but not opened. List by name.
+
+The tiers matter for resumption: "critical" tells the next session where
+the work is, "referenced" tells it what to re-open on demand, "mentioned"
+is breadcrumb.
+
+### E. Subagent findings as primary evidence
+
+For every Task / Agent tool call, preserve the sub-agent's final report
+in full or near-full. Subagent runs are expensive to re-execute; treat
+their findings as primary evidence, not compressible chatter. Include:
+
+- The sub-agent's summary heading
+- Key findings verbatim
+- Any cited code, file paths, or URLs exactly as returned
+- The invoking prompt (brief) so the next session knows why the agent ran
+
+If multiple sub-agents ran in parallel, preserve each — do not merge their
+findings into a synthesized paragraph.
+
+### F. A-vs-B comparisons and decisions
+
+When two or more options were weighed:
+
+- Preserve the options (labeled A, B, C as appropriate)
+- Preserve the decision criteria used
+- State which option won and why
+- Preserve rejected alternatives with the reason for rejection
+
+Decisions are load-bearing for future work. Losing the rationale forces
+re-analysis or, worse, re-deciding the same question differently.
+
+### G. Open TODO items
+
+Any TODO lists, task lists, "next steps," or explicit follow-ups mentioned
+in the conversation — preserve the items verbatim. Do not aggregate them
+as "user has some follow-up items." A TODO without its exact text is
+noise.
+
+### H. Sensitive data handling
+
+If credentials, tokens, API keys, PII, or classified markers appeared in
+the conversation: preserve the *shape* (e.g., "AWS access key starting
+with AKIA...") but never the full secret. If an operational question
+depended on a specific value that can't be preserved safely, record that
+the value exists and where it came from so the next session can re-fetch
+rather than re-guess.
+PRIORITIES