Found during the codex cross-review of #598 (QoderWork integration). Filing separately so it doesn't get lost — this is a pre-existing gap shared by several agents, not something #598 introduced.
Problem
For nested-config hook agents, Doctor's checkFileMode only verifies that at least one Clawd marker command exists anywhere in the settings file (src/doctor-detectors/agent-integrations.js, the generic validateCommandList(findHookCommands(...)) fallback). Two situations therefore report a healthy integration when hooks are partially or completely inoperative:
- Partial install — e.g. a user hand-edits
~/.qoder/settings.json and removes 9 of the 10 registered events. One surviving marker entry keeps Doctor green, but most animations silently stop working.
- Disabled hook group — Qoder-family agents support
hooksConfig.disabled: ["clawd"], which turns off the whole group. Both qoder-install.js and qoderwork-install.js even normalize raw command references into the "clawd" id with a comment saying this is "so Doctor can reliably see whether our group is disabled" — but no Doctor code path for these agents ever reads hooksConfig.disabled. Hooks are fully off, Doctor stays green.
Deeper validation exists but only for a few agents:
- Per-event checks:
validateGeminiHookEvents (gemini-cli), validateQwenHookEvents (qwen-code)
- Disabled/feature-flag supplements:
applyCodexSupplementary, applyGeminiSupplementary, applyQwenSupplementary, applyAntigravitySupplementary
Affected agents
At minimum qoder / qoderwork / reasonix (all nested: true, all walk the generic fallback, first two also carry the unconsumed hooksConfig.disabled mechanism). claude-code and codebuddy also resolve through the generic marker-existence path, though they have other health signals.
Suggested direction
The descriptors already carry the data needed: qoder/qoderwork/reasonix declare hookEvents in src/doctor-detectors/agent-descriptors.js. A data-driven pass could:
- Generalize per-event validation for any descriptor with a
hookEvents list (report which events are missing instead of a binary marker check)
- Generalize the
hooksConfig.disabled / hooksConfig.enabled === false check for agents whose installers manage that field, mirroring the existing Gemini supplementary (warning-level, no Fix button — Clawd preserves user intent, same policy as disableAllHooks)
No urgency — this is diagnostic quality, not runtime behavior. Worth doing before the next hook-family agent lands so the gap stops replicating.
Found during the codex cross-review of #598 (QoderWork integration). Filing separately so it doesn't get lost — this is a pre-existing gap shared by several agents, not something #598 introduced.
Problem
For nested-config hook agents, Doctor's
checkFileModeonly verifies that at least one Clawd marker command exists anywhere in the settings file (src/doctor-detectors/agent-integrations.js, the genericvalidateCommandList(findHookCommands(...))fallback). Two situations therefore report a healthy integration when hooks are partially or completely inoperative:~/.qoder/settings.jsonand removes 9 of the 10 registered events. One surviving marker entry keeps Doctor green, but most animations silently stop working.hooksConfig.disabled: ["clawd"], which turns off the whole group. Bothqoder-install.jsandqoderwork-install.jseven normalize raw command references into the"clawd"id with a comment saying this is "so Doctor can reliably see whether our group is disabled" — but no Doctor code path for these agents ever readshooksConfig.disabled. Hooks are fully off, Doctor stays green.Deeper validation exists but only for a few agents:
validateGeminiHookEvents(gemini-cli),validateQwenHookEvents(qwen-code)applyCodexSupplementary,applyGeminiSupplementary,applyQwenSupplementary,applyAntigravitySupplementaryAffected agents
At minimum qoder / qoderwork / reasonix (all
nested: true, all walk the generic fallback, first two also carry the unconsumedhooksConfig.disabledmechanism).claude-codeandcodebuddyalso resolve through the generic marker-existence path, though they have other health signals.Suggested direction
The descriptors already carry the data needed: qoder/qoderwork/reasonix declare
hookEventsinsrc/doctor-detectors/agent-descriptors.js. A data-driven pass could:hookEventslist (report which events are missing instead of a binary marker check)hooksConfig.disabled/hooksConfig.enabled === falsecheck for agents whose installers manage that field, mirroring the existing Gemini supplementary (warning-level, no Fix button — Clawd preserves user intent, same policy asdisableAllHooks)No urgency — this is diagnostic quality, not runtime behavior. Worth doing before the next hook-family agent lands so the gap stops replicating.