npx impeccable install and npx impeccable update install provider-native hook manifests for Claude Code, GitHub Copilot, Codex, and Cursor.
.claude/settings.local.json by default..github/hooks/impeccable.json, a committed file shared by the Copilot CLI and the cloud agent..codex/hooks.json..cursor/hooks.json.GitHub Copilot reads the committed .github/hooks/impeccable.json. In the Copilot CLI the hook activates once that file is on the repository's default branch and you trust the folder; the cloud agent reads it straight from the repo.
Codex requires one extra approval step. After install or update, open /hooks in Codex and approve the project hook. Codex tracks trust by hook definition, so updates can require approval again.
Cursor users should also confirm hooks are enabled in Cursor Settings -> Hooks.
The hook scans common UI and style files:
.tsx, .jsx, .html, .vue, .svelte, .astro, .css, .scss, .sass, .less, .ts, and .js.
Hook lifecycle settings live under hook in .impeccable/config.json:
{
"hook": {
"enabled": true,
"quiet": false,
"auditLog": ".impeccable/hook.ndjson"
}
}
Per-developer choices, including install consent, live in .impeccable/config.local.json.
Detector filters live under detector, not hook, because they are shared by the hook and the CLI detector.
Environment variables still override config for one shell: IMPECCABLE_HOOK_DISABLED, IMPECCABLE_HOOK_QUIET, and IMPECCABLE_HOOK_LOG.
Start with status:
/impeccable hooks status
It shows the shared and local config paths, current ignores, hook state, and relevant environment overrides.
For invocation logs, set hook.auditLog or use IMPECCABLE_HOOK_LOG. The hook writes one NDJSON line per invocation. Leave audit logging off for normal work.
If a manifest is malformed, install/update aborts by default. Re-run with --force only when you want Impeccable to back up the malformed file as .bak and replace it.