Skip to content

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

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions