Backups before hook writes
Every write to `~/.claude/settings.json` and `~/.codex/hooks.json` is preceded by a timestamped backup so users can inspect or restore prior settings.
ZackEyes is local-first by design. It connects Claude Code and Codex CLI events to the macOS notch through identifiable local hooks and a Unix socket bridge, while preserving the terminal workflow if the app is not running.
ZackEyes-managed hook entries are intended to be visible, reversible, and scoped to the integration files they need.
Every write to `~/.claude/settings.json` and `~/.codex/hooks.json` is preceded by a timestamped backup so users can inspect or restore prior settings.
Claude integration changes are limited to hook and status line entries. Codex integration uses `~/.codex/hooks.json` and does not need the CLI config file.
ZackEyes should never read or write `~/.codex/config.toml`. Hook installation should abort instead of guessing if a JSON file cannot be parsed safely.
ZackEyes-managed commands contain the literal string `zackeyes`, which makes them searchable in local hook files during audit or uninstall.
Every boundary above is enforced in code that lives in the open under the MIT license. Read the hook installer, the bridge, and the socket protocol yourself at github.com/yangshiqi/ZackEyes — no closed binary doing magic behind the scenes.
Agent hook events are normalized locally and sent to the macOS app over a Unix socket. The bridge is for local status, not a hosted dashboard.
If ZackEyes is closed or unavailable, controlled failures write nothing to stdout, exit 0, and return control to Claude Code or Codex CLI.
Use Settings → Integrations → Uninstall Integrations… before quitting and removing the app. Deleting ~/.zackeyes also erases saved Usage history, SSH host configuration and any existing journal files; copy data you want to keep first.
These features shipped in v0.10.0; the current published download is v0.10.3.
The system SSH client uses public-key authentication and strict host-key checking. ZackEyes does not accept unknown hosts automatically, show password prompts, or change SSH configuration. Remote metadata includes project paths, agent/model, tool names, state and last activity; prompts, replies and tool arguments are excluded. Remote cards cannot approve requests or jump to a local terminal.
Local counts and resumable import state use a private SQLite database under ~/.zackeyes/usage/ with directory mode 0700 and file/sidecar mode 0600. Unsafe permissions, symlinks and unsupported storage formats are rejected. Source transcripts and the previous saved ledger are not modified; removed source history cannot be recreated without saved counts.
Supported Claude question answers require explicit opt-in and fall back to the terminal after two minutes. Demo approvals and answers target synthetic sessions only. Remote requests stay in the remote terminal.
Use the public issue tracker for install problems, hook behavior, compatibility reports, security concerns, and requests for clearer controls.
Share your ZackEyes version, macOS version, Mac model, agent CLI, the observed hook file state, and reproduction steps.
GitHub Issues is the feedback channel for security model questions, bugs, feature requests, and workflow concerns.