Repository navigation
claude-code: add timeouts to Entire hooks - #1237
Merged
MuskanPaliwal merged 13 commits intoOct 14, 2026
Merged
Conversation
Entire-Checkpoint: 01d84dee8fed
MuskanPaliwal
marked this pull request as ready for review
May 20, 2026 14:32
Soph
added a commit
that referenced
this pull request
Jul 3, 2026
Review feedback on the dead-code sweep: two deletions took the only tests of live logic with them. - factoryaidroid: the six subagent-aggregation tests only exercised the dead path-based twins, but the logic lives on in CalculateTotalTokenUsageFromBytes/ExtractAllModifiedFilesFromBytes — the production path via lifecycle.go, and Droid isn't in the CI canary. Retarget them at the FromBytes entry points: per-checkpoint offset math, the APICallCount>0 subagent gate, cross-agent file dedup, and missing-transcript tolerance are asserted again. - explain: the three default-view tests only drove the deleted runExplainDefault wrappers, leaving runExplainBranchWithFilter — the real branch soph/deslop checkpoints 114 ● f06be81196bf "<task-notification>\n<task-id>b53nll3s4</task-id>\n<tool-us..." 07-02 18:12 (ca82a6a) cli: drop types and test helper orphaned by the dead-code sweep ● 7307caae423f "<task-notification>\n<task-id>b53nll3s4</task-id>\n<tool-us..." 07-02 18:12 (350f6ff) cli subpackages: delete dead code and its dedicated tests ● 7c22eaba7124 "<task-notification>\n<task-id>b53nll3s4</task-id>\n<tool-us..." 07-02 18:12 (13b0ab1) cli: dedupe tmp-state cleanup and rewind preview warnings ● 8a9c75ea075f "<task-notification>\n<task-id>b53nll3s4</task-id>\n<tool-us..." 07-02 18:12 (a2c89a2) cli: delete dead root-package code and its dedicated tests ● ab0d1ee8ae62 e2e: share the run-capture/deadline-wrap block across age... 07-02 18:12 (c7443f4) e2e: share the run-capture/deadline-wrap block across agent runners ● 5eec000c7982 agent/geminicli: drop trailing blank line left by parser ... 07-02 18:12 (3ea3351) agent/geminicli: drop trailing blank line left by parser fold ● e64c28c66fb4 strategy, trailers, clusterdiscovery: delete dead code an... 07-02 18:12 (10892ce) strategy, trailers, clusterdiscovery: delete dead code and its tests ● 351ee2316125 cli: standardize on printJSON for indented JSON output 07-02 18:12 (7f9b918) cli: standardize on printJSON for indented JSON output ● 5c2527f62f77 cli: share the stop-sessions confirmation prompt 07-02 18:12 (62ea674) cli: share the stop-sessions confirmation prompt ● 76f119a87828 cli: dedupe agent display-name and hook-agent-option buil... 07-02 18:12 (a0ab634) cli: dedupe agent display-name and hook-agent-option building in setup ● 65cfea8234e1 agent/vogon: reuse one parser for the sessionInfoRaw hooks 07-02 18:12 (ff99145) agent/vogon: reuse one parser for the sessionInfoRaw hooks ● 4bfedc11ca7f review: dedupe config filtering and picker multiselect co... 07-02 18:12 (02a59b9) review: dedupe config filtering and picker multiselect construction ● 11253d4586b3 agent: dedupe transcript scanning in opencode and copilot... 07-02 18:12 (3aada34) agent: dedupe transcript scanning in opencode and copilot-cli ● 7b73bd925300 "/goal simplify this repo, make sure to de-slop it continu..." 07-02 18:11 (1b1e8b5) agent: collapse capability As* helpers onto two generic gates ● cafa646983ad [imported] "can you review #1462" 07-01 13:59 (cafa646) can you review #1462 ● 5bc51efe5634 [imported] "could we also add \"PR #1237\" or \"T #123\" (for trail) so m..." 07-01 13:39 (5bc51ef) could we also add "PR #1237" or "T #123" (for trail) so m... ● 1686873c82fe [imported] "test" 07-01 13:33 (1686873) test ● 424e70130be4 [imported] "can you review again, did it change?" 07-01 13:19 (424e701) can you review again, did it change? ● 88b96bfc1a5c [imported] "check" 07-01 13:18 (88b96bf) check ● 67b0ce56bd73 [imported] "one" 07-01 13:18 (67b0ce5) one ● 39348f4dc708 [imported] "can you post it as finding to the trail?" 07-01 13:11 (39348f4) can you post it as finding to the trail? ● 37c58b1285cc [imported] "so it worked a few times, but now it doesn't..." 07-01 13:07 (37c58b1) so it worked a few times, but now it doesn't... ● 738da64b0dfb [imported] "can you review #1573" 07-01 13:02 (738da64) can you review #1573 ● 42a4208d02fc [imported] "just testing if it updates now if I really type something" 07-01 12:15 (42a4208) just testing if it updates now if I really type something ● 3be2e037f80a [imported] "yes, revert" 07-01 10:46 (3be2e03) yes, revert ● 3b397151d6f6 [imported] "can you look at this comment: https://github.com/anthropi..." 07-01 10:38 (3b39715) can you look at this comment: https://github.com/anthropi... ● 4555162959cd [imported] "I think it worked when I left the focus for the window an..." 07-01 10:37 (4555162) I think it worked when I left the focus for the window an... ● 76eb3d2b9d98 [imported] "ok" 07-01 10:34 (76eb3d2) ok ● 2124a6f6a229 [imported] "test" 07-01 10:34 (2124a6f) test ● 4330123cdcf9 [imported] "it does not work :(" 06-30 16:20 (4330123) it does not work :( ● 4d9c7190f539 [imported] "ok, restarted, let's try again" 06-30 16:19 (4d9c719) ok, restarted, let's try again ● aaabdc00513b [imported] "I changed it, is this auto picked up or needs a restart?" 06-30 16:18 (aaabdc0) I changed it, is this auto picked up or needs a restart? ● 06862b0f6354 [imported] "Help me fix the issues reported by /doctor below.\n\nFor ea..." 06-30 16:16 (06862b0) Help me fix the issues reported by /doctor below. For ea... ● 8e56c6a6b74f [imported] "I put the line into the settings.json since I briefly saw..." 06-30 16:11 (8e56c6a) I put the line into the settings.json since I briefly saw... ● 5f4910a121d0 [imported] "no" 06-30 16:07 (5f4910a) no ● 4a0d45bf06c5 [imported] "it does not, but maybe I have not title set to \"\"" 06-30 16:05 (4a0d45b) it does not, but maybe I have not title set to "" ● a03587b3282a [imported] "works now, test" 06-30 16:04 (a03587b) works now, test ● 17e892e14dd0 [imported] "⏺ Ran 2 stop hooks\n ⎿ \u00a0Stop hook error: Failed with non-..." 06-30 16:00 (17e892e) ⏺ Ran 2 stop hooks ⎿ Stop hook error: Failed with non-... ● 9299dcc26c8e [imported] "hello" 06-30 15:59 (9299dcc) hello ● 3d591b1340c3 [imported] "Help me fix the issues reported by /doctor below.\n\nFor ea..." 06-30 15:58 (3d591b1) Help me fix the issues reported by /doctor below. For ea... ● 32197462b83a [imported] "yeah let's try wiring the stop hook in my settings.json, ..." 06-30 15:55 (3219746) yeah let's try wiring the stop hook in my settings.json, ... ● 08301e76c817 [imported] "but it would not work with claude being in the window and..." 06-30 15:52 (08301e7) but it would not work with claude being in the window and... ● 80b129a53f56 [imported] "I'd like to show when the last \"change\" in a ghostty tab ..." 06-30 15:49 (80b129a) I'd like to show when the last "change" in a ghostty tab ... ● 9454bdd3f330 [imported] "this has no a conflict with the base branch" 06-30 15:01 (9454bdd) this has no a conflict with the base branch ● 0652f4abbdbb [imported] "can you look at the pr comments, and also if the correspo..." 06-30 14:29 (0652f4a) can you look at the pr comments, and also if the correspo... ● f842b0ae13c4 [imported] "yes, do that" 06-30 14:07 (f842b0a) yes, do that ● aff3a8f7636f [imported] "did we open a PR yet?" 06-30 14:06 (aff3a8f) did we open a PR yet? ● 642544e41c50 [imported] "- cmd/entire/cli/paths/paths.go:32 still says transcript...." 06-30 12:28 (642544e) - cmd/entire/cli/paths/paths.go:32 still says transcript.... ● 03570057e87a [imported] "- P2 cmd/entire/cli/transcript/compact/compact.go:158: Fu..." 06-30 11:42 (0357005) - P2 cmd/entire/cli/transcript/compact/compact.go:158: Fu... ● d0b9faddc75d [imported] "<task-notification>\n<task-id>a0b8ca16f3d36a411</task-id>\n..." 06-30 11:15 (d0b9fad) <task-notification> <task-id>a0b8ca16f3d36a411</task-id> ... ● 9b2eb8b87c47 [imported] "<task-notification>\n<task-id>a78ca6485d1be4ff7</task-id>\n..." 06-30 11:14 (9b2eb8b) <task-notification> <task-id>a78ca6485d1be4ff7</task-id> ... ● 9c84afa51639 [imported] "<task-notification>\n<task-id>a457acc7c9d47e06e</task-id>\n..." 06-30 11:14 (9c84afa) <task-notification> <task-id>a457acc7c9d47e06e</task-id> ... ● 76b715ce095f [imported] "`/simplify → 4 cleanup agents in parallel → apply the fix..." 06-30 11:12 (76b715c) `/simplify → 4 cleanup agents in parallel → apply the fix... ● 4877690ab239 [imported] "how could 2 even work, we don't write the checkpoints at ..." 06-30 09:23 (4877690) how could 2 even work, we don't write the checkpoints at ... ● 2bc7d831d62e [imported] "can we start working on this?" 06-30 09:09 (2bc7d83) can we start working on this? ● d2b6c31a4e9b [imported] "Yeah but the issue is as soon as a checkpoint / commit in..." 06-30 08:57 (d2b6c31) Yeah but the issue is as soon as a checkpoint / commit in... ● def9943b30f0 [imported] "if we would want to store the transcript.jsonl as full we..." 06-30 08:46 (def9943) if we would want to store the transcript.jsonl as full we... ● 058751630ccb [imported] "<task-notification>\n<task-id>a676a8185d76c1abe</task-id>\n..." 06-30 08:42 (0587516) <task-notification> <task-id>a676a8185d76c1abe</task-id> ... ● 66311ee49b8c [imported] "can you give me a summary how we store session logs right..." 06-30 08:40 (66311ee) can you give me a summary how we store session logs right... ● e698e190b41c [imported] "can you also post the findings on 1472" 06-29 16:23 (e698e19) can you also post the findings on 1472 ● acd45beca109 [imported] "can you post those as findings on the trail using the cli..." 06-29 15:34 (acd45be) can you post those as findings on the trail using the cli... ● 4ffd98acbcbe [imported] "can you review #1313" 06-29 15:25 (4ffd98a) can you review #1313 ● e16e3aaaac83 [imported] "can you review #1472" 06-29 13:34 (e16e3aa) can you review #1472 ● 1b18c7ec130e [imported] "can you review again, I rebased" 06-29 13:12 (1b18c7e) can you review again, I rebased ● 9ad2a22d8dfc [imported] "can you review #1549 ..." 06-29 12:22 (9ad2a22) can you review #1549 ... ● 06efd7549b2f [imported] "I also not sure I like the design choice of just \"public\"..." 06-29 11:52 (06efd75) I also not sure I like the design choice of just "public"... ● a090f0dc130b [imported] "can you review #1531 ..." 06-29 11:26 (a090f0d) can you review #1531 ... ● 9a01b7c38400 [imported] "ok, now update the other place for the brew docs :)" 06-29 10:08 (9a01b7c) ok, now update the other place for the brew docs :) ● c7139bb53c2b [imported] "can you first review 1529 again" 06-29 10:03 (c7139bb) can you first review 1529 again ● 6a72ca55142f [imported] "back to 1534: can you check there are not other places wh..." 06-29 09:59 (6a72ca5) back to 1534: can you check there are not other places wh... ● 9d5af71d1933 [imported] "can you now review #1529" 06-29 09:50 (9d5af71) can you now review #1529 ● 474fa98bdd8d [imported] "can you look at #1534..." 06-29 09:45 (474fa98) can you look at #1534... ● 4f8c1a05c7b7 [imported] "can you post the findings to the trail" 06-26 10:51 (4f8c1a0) can you post the findings to the trail ● a30148800f79 [imported] "<task-notification>\n<task-id>acb9f26eddbbec259</task-id>\n..." 06-26 09:49 (a301488) <task-notification> <task-id>acb9f26eddbbec259</task-id> ... ● 52143da192be [imported] "<task-notification>\n<task-id>a8ef47f97666c7ec7</task-id>\n..." 06-26 09:47 (52143da) <task-notification> <task-id>a8ef47f97666c7ec7</task-id> ... ● cb6566b53cf4 [imported] "<task-notification>\n<task-id>ab560e36ee1d3b4fe</task-id>\n..." 06-26 09:46 (cb6566b) <task-notification> <task-id>ab560e36ee1d3b4fe</task-id> ... ● 0b6374e0727b [imported] "can you now review https://entire.io/gh/entireio/cli/trai..." 06-26 09:34 (0b6374e) can you now review https://entire.io/gh/entireio/cli/trai... ● 3780222c8dca [imported] "can you post the two findings on the corespoding trail?" 06-26 09:33 (3780222) can you post the two findings on the corespoding trail? ● 17a5bc98ead8 [imported] "<task-notification>\n<task-id>ab980f2b645d399d7</task-id>\n..." 06-26 09:05 (17a5bc9) <task-notification> <task-id>ab980f2b645d399d7</task-id> ... ● e3746a86fc59 [imported] "can you review https://entire.io/gh/entireio/cli/trails/6..." 06-26 08:55 (e3746a8) can you review https://entire.io/gh/entireio/cli/trails/6... ● da9f546ca0b2 [imported] "can you review #1511 ..." 06-26 07:15 (da9f546) can you review #1511 ... ● d7db80fe900d [imported] "How can we figure out the checkpoint version before talki..." 06-25 17:45 (d7db80f) How can we figure out the checkpoint version before talki... ● 60a30c517d1d [imported] "can you check #1507 i..." 06-25 17:28 (60a30c5) can you check #1507 i... ● 4de09c8dbe06 [imported] "are you sure the other code isn't generated too?" 06-25 13:46 (4de09c8) are you sure the other code isn't generated too? ● a7f2ccdfdae6 [imported] "<task-notification>\n<task-id>a5eabac878feb054a</task-id>\n..." 06-25 12:47 (a7f2ccd) <task-notification> <task-id>a5eabac878feb054a</task-id> ... ● ae405e941044 [imported] "<task-notification>\n<task-id>a81ae07c29c11807f</task-id>\n..." 06-25 12:46 (ae405e9) <task-notification> <task-id>a81ae07c29c11807f</task-id> ... ● 074a9669b87b [imported] "can you review #1518 ..." 06-25 12:41 (074a966) can you review #1518 ... ● aac680e5d19a [imported] "can you review https://entire.io/gh/entireio/cli/trails/661" 06-25 11:35 (aac680e) can you review https://entire.io/gh/entireio/cli/trails/661 ● d7f57fda979d [imported] "can you review https://entire.io/gh/entireio/cli/trails/652/" 06-25 10:29 (d7f57fd) can you review https://entire.io/gh/entireio/cli/trails/652/ ● a0dc8c4fe795 [imported] "can you review #1499 ..." 06-25 10:05 (a0dc8c4) can you review #1499 ... ● 4991964f4c59 [imported] "Add debug" 06-25 09:13 (4991964) Add debug ● 3889f0ebbc6a [imported] "Ok. Sounds good. The only thing I‘m now still wondering: ..." 06-25 09:11 (3889f0e) Ok. Sounds good. The only thing I‘m now still wondering: ... ● 908a3544dda7 [imported] "can you explain to me when resume will now directly launc..." 06-25 06:45 (908a354) can you explain to me when resume will now directly launc... ● b257152616fa [imported] "can you check again, there were some new commits" 06-25 06:29 (b257152) can you check again, there were some new commits ● d1772ae84a2c [imported] "The issue is: we are writing the placeholders - but they ..." 06-25 06:26 (d1772ae) The issue is: we are writing the placeholders - but they ... ● 5fd4acd71e1f [imported] "Hmm. It has none merged. The prior try failed because no ..." 06-24 16:19 (5fd4acd) Hmm. It has none merged. The prior try failed because no ... ● f2b9c1baea12 [imported] "Hmm. It has none merged. The prior try failed because no ..." 06-24 14:53 (f2b9c1b) Hmm. It has none merged. The prior try failed because no ... ● 15cbecef4326 [imported] "Question: but the skipping sounds as if no new prompts we..." 06-24 14:50 (15cbece) Question: but the skipping sounds as if no new prompts we... ● a5355b1b65c9 [imported] "[Request interrupted by user for tool use]" 06-24 14:50 (a5355b1) [Request interrupted by user for tool use] ● b99b7a61ff82 [imported] "Question: but the skipping sounds as if no new prompts we..." 06-24 14:33 (b99b7a6) Question: but the skipping sounds as if no new prompts we... ● 9e3847afcfc2 [imported] "can you take a look at this, I did run it in ../git-sync:..." 06-24 14:16 (9e3847a) can you take a look at this, I did run it in ../git-sync:... ● caabf544820c [imported] "<task-notification>\n<task-id>a3074a8a47b891551</task-id>\n..." 06-24 14:03 (caabf54) <task-notification> <task-id>a3074a8a47b891551</task-id> ... ● 6c110eac3ed6 [imported] "<task-notification>\n<task-id>a13dc9fa412edcc6e</task-id>\n..." 06-24 14:03 (6c110ea) <task-notification> <task-id>a13dc9fa412edcc6e</task-id> ... ● 75f953bc7f73 [imported] "<task-notification>\n<task-id>ad20ef831ab9e65ac</task-id>\n..." 06-24 14:02 (75f953b) <task-notification> <task-id>ad20ef831ab9e65ac</task-id> ... ● 6a06d3d60b75 [imported] "<task-notification>\n<task-id>ab0dd083f555810c5</task-id>\n..." 06-24 14:02 (6a06d3d) <task-notification> <task-id>ab0dd083f555810c5</task-id> ... ● 9919dc6061ec [imported] "`/simplify → 4 cleanup agents in parallel → apply the fix..." 06-24 13:58 (9919dc6) `/simplify → 4 cleanup agents in parallel → apply the fix... ● 87e140dbb789 [imported] "<task-notification>\n<task-id>a574469aa1c7a2156</task-id>\n..." 06-24 13:47 (87e140d) <task-notification> <task-id>a574469aa1c7a2156</task-id> ... ● d88c60c7e9d5 [imported] "<task-notification>\n<task-id>abcc3502034cdc607</task-id>\n..." 06-24 13:43 (d88c60c) <task-notification> <task-id>abcc3502034cdc607</task-id> ... ● 3513316e30da [imported] "hmm, they are embedded with the long prompts we have on m..." 06-24 13:38 (3513316) hmm, they are embedded with the long prompts we have on m... ● d60960deb068 [imported] "can you review #1511 ..." 06-24 13:33 (d60960d) can you review #1511 ... ● d30159d49f5f [imported] "can you add both as findings to the trail" 06-24 13:22 (d30159d) can you add both as findings to the trail ● 9c5d56031982 [imported] "<task-notification>\n<task-id>ab0220103d4f0fce1</task-id>\n..." 06-24 13:20 (9c5d560) <task-notification> <task-id>ab0220103d4f0fce1</task-id> ... ● 97e388529f33 [imported] "can you also look at https://entire.io/gh/entireio/cli/tr..." 06-24 13:15 (97e3885) can you also look at https://entire.io/gh/entireio/cli/tr... ● 61404c98152c [imported] "ok, I think we need to change the onboarding idea a bit. ..." 06-24 13:04 (61404c9) ok, I think we need to change the onboarding idea a bit. ... path — unasserted. Retarget them (branch view, zero-checkpoint hint, detached-HEAD labeling) with the wrapper's implied no-filter arguments, sharing one setup helper instead of the original copy-pasted scaffolding. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Entire-Checkpoint: 93a786da9959
…nch-timeout # Conflicts: # cmd/entire/cli/agent/claudecode/hooks.go # cmd/entire/cli/agent/claudecode/types.go
…ck Claude Entire-Checkpoint: 01M4TV293VGC1RSNYYKD2SASRQ
Contributor
There was a problem hiding this comment.
🟡 Changes recommended
Timeout migration can remove supported user hook fields and incorrectly report a modified configuration as unchanged.
1 open finding
What changed in this PR
Adds per-hook Claude Code timeouts to prevent stalled Entire launches from blocking sessions.
Changes:
- Adds 10s/60s timeout tiers and migration logic.
- Preserves existing nonzero user timeouts.
- Adds regression tests and updates dogfood configuration.
| File | Description |
|---|---|
hooks.go |
Defines, installs, and backfills hook timeouts. |
hooks_test.go |
Tests timeout installation, preservation, and idempotency. |
.claude/settings.json |
Applies generated timeout values. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
… give capture hooks 30s Entire-Checkpoint: 01M4TZCCGFH94AN9B78ZC2RHC2
…p enable calling new hooks outdated Entire-Checkpoint: 01M4W9QYKH916B98HYJBQKM7GC
…Entire can't model, and report hooks an install would rewrite as outdated Entire-Checkpoint: 01M4WCWVVQS94FPTS8F8PX8FGS
…0s, and reuse the settings writer for timeout repair Entire-Checkpoint: 01M4WEQA6X0YFD16XX93XQF6BG
…ft to `entire agent add` An explicit "timeout": 0 on an Entire hook read the same as no timeout, so doctor and install replaced it and a rewrite dropped it. It is now written back as the user wrote it. Doctor's drift message suggested `entire enable --force`, which rebuilds Entire's hooks and drops the timeouts and fields users set on them. A bare `entire enable` returns early on an enabled repo, so the message now names `entire agent add <agent>`, with --force as a fallback. Doctor's two silent repairs share one loop, and the comment on StatusWalkBudget is rewrapped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Entire-Checkpoint: 01M4WG9RQGWP0VEB5P2HKCW8DX
…ons block Entire-Checkpoint: 01M4WJFJNCGR5ZCFN2X5HVYWYT
Soph
previously approved these changes
Oct 14, 2026
MuskanPaliwal
enabled auto-merge
October 14, 2026 07:03
Entire-Checkpoint: 01M4WN4P3E46KC597TSR9TE0A8
Soph
approved these changes
Oct 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

fixes #1065
Gives each of Entire's Claude Code hooks a timeout, so Claude Code cancels a stalled
entirelaunch and keeps going instead of waiting on it. Existing installs get the timeouts fromentire doctororentire agent add claude-code, andentire statusflags configs that still lack them and points toentire doctor.why
In #1065, macOS blocks
entirebefore Gomain()runs (_dyld_start), so nothing inside the binary can time out. Without a hooktimeout, Claude Code kept waiting on the stuck hook (still blocked after 40s in testing), and stuck hook processes piled up across sessions. With atimeoutset, Claude Code cancels the hook and continues.what changed
UserPromptSubmit:session-start, which Claude blocks startup on. Besides a trail refresh capped at 1s, it resolves the repo and reads and writes session state, which a cold start or a large repo can slow well past that. This is still far below the 600s default.user-prompt-submit,subagent-startandpre-task, which snapshot the worktree. This matches Claude Code's ownUserPromptSubmitdefault and stays abovegitrepo.StatusWalkBudget(20s), so a slow status walk degrades on its own before the hook is cancelled.stop,stop-failure,subagent-stopandpost-task, which write checkpoint data. Their path can spend up to 15s on a remote probe (WriteProbeFetchBudget) and 20s on a first-checkpoint status (StatusWalkBudget) before transcript work, and a 65MB transcript has been seen taking 30s (Hook timeouts: a flat 30s is wrong in both directions, and the cap is doing telemetry's job #2115).session-end. Claude Code already gives exit hooks only a short time, and an explicit timeout would make it wait longer.entire agent add claude-codeorentire enable --agent claude-code) adds the timeout to existing Entire hooks that have none, keeps any timeout the user set, and says it updated outdated hooks instead of "already installed".entire doctoradds the missing timeouts without asking, as it already does for the retired deny rule, and does so before its hook drift check so that check reports on the repaired config. The repair only sets a timeout on an Entire hook that has none: it adds, removes and moves no hook, keeps the user's timeouts, and skips a hook type that does not parse. It reads and writessettings.jsonthrough the same helpers as install, so an empty"permissions": {}is dropped, as install drops it.entire statusandentire doctornow reports hooks as out of date whenever a plain install would rewrite them, including Entire hooks in a command shape an older CLI wrote (which the repair does not match) and hooks without their timeout.entire statusnow suggestsentire doctorinstead ofentire enable --forcefor outdated hooks, because--forcerebuilds every Entire hook and drops the timeouts and fields the user set on them. Doctor adds missing timeouts in place, and for anything else (a missing matcher, an old command shape) it suggestsentire agent add <agent>, with--forceonly as a fallback. It does not suggest a bareentire enable, which returns early on a repo that is already enabled.settings.jsonkeeps fields Entire does not model on the user's own hooks and matchers (for exampleasync,statusMessage, prompt hooks). Only exact-case keys are decoded, so a key like"Command"is kept as written instead of overwritingcommand, and an entry whose modeled field has a value Entire does not model (a fractionaltimeout, or an explicit"timeout": 0) is written back unchanged. Decoding resets each entry first, so bytes kept from an earlier decode never replace the entry that followed..claude/settings.jsonis updated to match.test plan
"permissions": {}(dropped, as install drops it), no settings file (nothing created), and a user-set timeout (file untouched).entire statuspoints outdated hooks toentire doctor, notentire enable --force(verified RED: the output still saidrun 'entire enable --force')."command":"a","timeout":1.5came back).entire agent add claude-code.enablewrites, then reports OK, and a second repair prints nothing.mise run check(unrelated tests that time out under full-suite load each failed once and passed when rerun:TestExternalCommand_SigintReachesPlugin,TestProbeConfigDir_AsksClaude,TestResolveClaudeConfigDir_PrefersClaudesAnswer, and the git hook backup testsTestInstallHooks_ForeignWrapperOverPreGuardEntireDoesNotRecurseandTestInstallHooks_ReclaimedChainRunsEachHookOnce)entire enablereports only the installed hooks.entire agent add claude-code,entire enable --agent claude-codeandentire doctoreach restored a file byte-for-byte identical to a fresh enable, and a seconddoctorrun printed nothing.entire enableon the already-enabled repo, with or without a terminal, printed "Entire is already enabled." and left the file without its timeouts.entireonPATHthat hangs forever (run with an earlier 10s value forsession-startand prompt hooks):session-startwas killed at 9.9s anduser-prompt-submitat 10.1s.session-endwas cut off by Claude's exit limit at 1.5s, and Claude still answered.not in scope
prepare-commit-msg,post-commit, ...) can still hanggit commitin this state.🤖 Generated with Claude Code