Skip to content

Doctor: nested hook agents (Qoder/QoderWork/Reasonix) report green on partial installs and disabled hook groups #599

Description

@rullerzhou-afk

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:

  1. 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.
  2. 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:

  1. Generalize per-event validation for any descriptor with a hookEvents list (report which events are missing instead of a binary marker check)
  2. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestintegrationThird-party integration or community bridge

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions