Skip to content

Hooks in config.json are not preserved across session starts #3403

@iwhowe77

Description

@iwhowe77

Bug

The hooks field in ~/.copilot/config.json is documented as the location for user-level hooks (copilot help config states: "In global config.json these act as user-level hooks").

However, Copilot CLI overwrites config.json on every session start, dropping any hooks key that was previously written there. This makes it impossible for external tools (like cmux) to install persistent user-level hooks.

Steps to Reproduce

  1. Install cmux session restore hooks: cmux hooks copilot install
  2. Verify ~/.copilot/config.json now contains a "hooks" key with SessionStart, SessionEnd, etc.
  3. Start a new copilot session
  4. Check ~/.copilot/config.json — the "hooks" key is gone

Expected Behavior

The hooks field should be preserved when Copilot CLI rewrites config.json (e.g., when updating expAssignmentsCache or other managed state).

Additional Context

  • Copilot CLI version: 1.0.49
  • Hooks in settings.json do not fire as user-level hooks (despite being a recognized config location)
  • The file header says // User settings belong in settings.json but copilot help config says hooks go in config.json
  • macOS, cmux latest

Workaround

Currently none for global user-level hooks. Repo-level hooks (.github/hooks/*.json) work but require per-repo setup.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:configurationConfig files, instruction files, settings, and environment variablesarea:pluginsPlugin system, marketplace, hooks, skills, extensions, and custom agents

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions