ZackEyes
Local safety model

Security and safety model.

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.

Write boundaries.

ZackEyes-managed hook entries are intended to be visible, reversible, and scoped to the integration files they need.

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.

Small configuration surface

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.

Explicit non-goal

ZackEyes should never read or write `~/.codex/config.toml`. Hook installation should abort instead of guessing if a JSON file cannot be parsed safely.

Identifiable entries

ZackEyes-managed commands contain the literal string `zackeyes`, which makes them searchable in local hook files during audit or uninstall.

Source-code auditable

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.

Runtime behavior

Bridge and failure mode.

BridgeUnix socket

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.

Failurefail quietly

If ZackEyes is closed or unavailable, controlled failures write nothing to stdout, exit 0, and return control to Claude Code or Codex CLI.

AuditUser removable

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.

SSH and archive boundaries.

These features shipped in v0.10.0; the current published download is v0.10.3.

SSH observation

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.

Private Usage archives

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.

Question answering and Demo

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.

Report a concern.

Use the public issue tracker for install problems, hook behavior, compatibility reports, security concerns, and requests for clearer controls.

What to include

Share your ZackEyes version, macOS version, Mac model, agent CLI, the observed hook file state, and reproduction steps.

Public feedback channel

GitHub Issues is the feedback channel for security model questions, bugs, feature requests, and workflow concerns.