Troubleshooting

Start with the returned decision and rule ID. Reproduce problems with dummy data, and retain the policy and agent version involved.

Check the installation

  1. Run cyberboar version using the executable path in the agent’s settings.
  2. Run cyberboar check POLICY.
  3. Confirm the hook’s policy, public-key, audit and state paths are accessible to the agent’s account. Managed pull/ship state may belong to a different account from hook tripwire state.
  4. Reload the agent configuration. In Codex, trust user/project hooks in /hooks.
  5. Test allowed and denied calls in a session. If logging is enabled, confirm the matching event.

explain evaluates independently and does not prove a hook is installed. Previewing apply does not write settings; installation requires --write.

Common symptoms

SymptomCheck and recovery
Every call is deniedCheck the error reason, policy path/schema, signature, expiry and minimumVersion. Development builds meet no version floor.
A denied operation runsVerify scope, hook loading, Codex trust and audit event. Review agent hook failure and visibility limits.
An ask rule blocks without promptingCodex, Cursor and opencode receive deny for ask; Copilot also denies in headless mode.
Native Windows calls are blockedUse Claude Code with Git Bash or another agent with the Linux binary in WSL/a Linux container.
A read gets builtin.guardedShell access to guarded settings is a potential write. Use a native read tool for inspection; a user must change settings.
A recursive search/archive is blockedThe directory may contain a protected file or built-in protected path. Review files.containing and narrow the operation.
secrets.<id> blocks test dataReview the finding. Use placeholders; add a justified secrets.ignore exception only after review.
Session remains blockedThe tripwire is locked. Inspect with unlock and investigate before unlocking.
No audit file existsConfirm --audit in the installed hook. spec.audit.sink does not create a log.
Audit errors block callsCheck ownership, append permissions, free space and the absolute path.
Tools break after a binary update/removalRestore a valid binary at the configured path or update settings with apply.

From the affected project directory:

cyberboar explain --policy .cyberboar/policy.yaml --command 'cat .env' --v

For a tripwire, use the hook’s same absolute state directory:

cyberboar unlock --state /absolute/path/to/hook-state
cyberboar unlock --state /absolute/path/to/hook-state --agent claude-code --session SESSION_ID

Signed policy and transport failures

FailureAction
Invalid/expired signatureRun verify --pubkey KEY POLICY. Publish a valid newly signed policy with a higher serial.
Update rejected as rollbackRe-sign older contents with a higher serial; do not delete rollback state to bypass the check.
Pull reports a lock errorRetry after the competing process finishes. The persistent .lock filename is normal; the process lock releases on exit.
Redirect or TLS errorServe directly over TLS 1.3. Use --ca for a trusted private CA.
Enrollment refuses another host/nameFollow managed reassignment or migration; enrollment pins console and assignment.
Certificate expiredRe-enroll with a valid token, retaining key and ID. Expired certificates cannot renew.
401 staleCorrect endpoint/console clock synchronization.
ship cannot deliverCheck enrollment, URL, permissions and signatures. Unacknowledged events remain local for retry.

Enrollment and shipping require a compatible console service. Skip enrollment for local use or static distribution. See Operations, CLI reference and MDM recovery.

Report a problem

For ordinary issues, include OS/architecture, CyberBoar/agent versions, scope, minimal policy, exact tool call and observed rule ID. Remove credentials and unrelated personal data. See Contributing for intake rules.

Send vulnerabilities privately to security@cyberboar.io under SECURITY.md; do not publish bypass details in an issue.