Command overview
beacon endpoint doctor runs local health checks for the Beacon endpoint agent and exits non-zero when any hard check fails. Add --fix to apply safe remediations for supported findings.
Command syntax
beacon endpoint status.
beacon doctor is a top-level alias for beacon endpoint doctor.
Checks
Doctor verifies:- Endpoint configuration file
- Endpoint configuration validity
- Collector configuration file
- Runtime JSONL log path
- Runtime log permissions
- Service definition: launchd plist on macOS, systemd unit on Linux
- Configured harness telemetry and recent observed events
- Whether DeepSeek Harness can load the hook bridge its hooks depend on (
dsh_hook_bridge) - Whether DeepSeek Harness hooks are actually recording live events (
dsh_hook_capture) - Whether Beacon’s git hooks ran out of time recently (
git_hook_budget) - Whether a real user’s agent runtime points at the collector (system mode only)
- The system log’s access mode, and in the restricted mode whether the collector is serving the ingest socket (
runtime_log_access)
runtime_log_access
System mode only. Reports whether the system log is shared or restricted, and in the restricted mode whether everything it depends on is in place.
In the restricted mode,
runtime_log_permissions checks that the log and its directory are closed to other accounts instead of checking that hooks can append. On Windows it reads the ACL of the log directory and of everything directly in it, and reports restricted_acl when only SYSTEM, Administrators and the beacon-log group (read only) can reach them, or restricted_log_too_open naming each grant to anyone else. Run without sudo (or, on Windows, unelevated), doctor cannot open a restricted log, and says so rather than reporting a failure. On Windows the suggested repair is beacon endpoint repair --system from an elevated shell.
console_user_configured
System-mode only, and worth understanding because it is the one failure that a completely healthy endpoint can still report.
A system endpoint runs as root, so it has to work out whose agent settings to configure, and the collector is useless if nothing exports to it. This check asks whether that happened:
doctor --system runs as root and sees the settings the install wrote for root. The person whose sessions matter is the one with nothing.
If no logged-in user can be identified at all, this reports a warning rather than a failure: an unattended host legitimately has nobody to configure, and that is not something an operator can act on.
dsh_hook_bridge
This check runs only when DeepSeek Harness is detected and Beacon’s hooks for it are installed. dsh does not ship the Claude Code hook bridge the hooks run through, and a mount it cannot load is skipped at boot with a warning, so an install can be complete on disk and record nothing. The check reports what Beacon found about the bridge:
It is a warning, not a failure: installing packages into a
dsh profile is the operator’s step, and Beacon does not take it. --fix lists the check as a manual skip. See Installing the hook bridge.
dsh_hook_capture
This check runs only when DeepSeek Harness is detected and Beacon’s hooks for it are installed. It catches a failure no other check sees: the hooks are loaded, but they cannot write the runtime log because dsh runs them inside its session sandbox. harness_observed stays green in this state, because beacon endpoint dsh sync fills the log with poll events under the same harness name.
dsh, where it succeeds. So the check compares evidence instead. It counts native sessions that DeepSeek wrote after the hooks were installed and more than a few minutes after the last event with harness.collection_method=hook. The live log and every rotated archive are searched for that event. Each of those sessions is one the live hooks did not capture. Once rotation has started discarding history, sessions older than the oldest retained event are not counted, because their hook events may have rotated out. Evidence doctor cannot read, such as a missing hooks file, is reported as a warning rather than a pass. The other cause is a dsh process that was already running when the hooks were installed and has not been restarted.
This is a warning, not a failure. The sandbox mode is the operator’s choice in dsh, and Beacon does not change it. --fix lists the check as a manual skip. See Live hooks and the DeepSeek Harness sandbox.
git_hook_budget
This check appears only when one of Beacon’s git hooks ran out of time in the last seven days, in any repository. It counts the git.hook_budget_exceeded events in the runtime log and names the most recent.
--fix lists the check as a manual skip.
Fix mode
beacon endpoint doctor --fix plans and applies safe remediations for supported findings. It can create a missing runtime log, and recreate managed collector configuration and the service definition (a launchd plist or a systemd unit) when the endpoint configuration is valid. On a Windows system install it also resets the log directory ACL, from an elevated shell, when interactive users cannot append to the runtime log or when they hold more than append (an older install’s Modify grant): the same ACL a fresh install applies, described in Windows.
Fix mode deliberately skips cases that need operator intent, such as invalid endpoint configuration, missing harness setup, missing observed runtime events, unsafe runtime log permissions, or service repair on a host with no service manager to repair. If a collector service repair fails, Beacon rolls back the files and service state it changed where possible, then refreshes doctor results so the printed checks reflect any partial fixes that succeeded.
JSON output includes applied and skipped fix details so deployment scripts can distinguish remediated checks from findings that still need manual action.
Flags
Examples
Run health checks with the default per-user paths:Run health checks with the default per-user paths
Run health checks and apply supported fixes
Check a root-managed endpoint deployment
Repair supported root-managed findings
Print machine-readable check results
Print machine-readable results with applied and skipped fix details
Use the top-level alias
Related
Endpoint status
Inspect collector, service, harness, diagnostics, and runtime-log state.
Endpoint inventory
Show configured, detected, and observed endpoint inventory.