macOS Gatekeeper warning for extracted .node native addon

Open 💬 4 comments Opened Dec 20, 2025 by peteknowsai

Description

On macOS, a Gatekeeper warning dialog repeatedly appears when using Claude Code:

".7fd3dfffbffbbd2f-00000000.node" Not Opened Apple could not verify ".7fd3dfffbffbbd2f-00000000.node" is free of malware that may harm your Mac or compromise your privacy.

Environment

  • Claude Code version: 2.0.75
  • macOS: Darwin 25.1.0 (Sequoia)
  • Architecture: arm64

Root Cause Analysis

The file .7fd3dfffbffbbd2f-00000000.node appears to be a native addon (likely better-sqlite3) that Bun extracts at runtime from the compiled binary.

The Claude Code binary itself is properly signed:

Authority=Developer ID Application: Anthropic PBC (Q6L2SF6YDW)
Authority=Developer ID Certification Authority
Authority=Apple Root CA

However, when Bun extracts native .node modules to temp directories at runtime, these extracted files don't inherit the code signature from the parent binary. macOS Gatekeeper sees an unsigned binary and shows the warning.

Running spctl --assess on the Claude binary returns:

rejected (the code is valid but does not seem to be an app)

Steps to Reproduce

  1. Install Claude Code on macOS
  2. Run claude in terminal
  3. The Gatekeeper warning appears (may be intermittent depending on when native modules are loaded)

Expected Behavior

No Gatekeeper warnings should appear for signed, distributed software.

Possible Solutions

  1. Pre-sign the extracted native addons
  2. Use Bun's --compile with proper entitlements for extracted resources
  3. Bundle the native addon differently so it doesn't require runtime extraction
  4. Add the extracted path to Gatekeeper exceptions during installation

Workaround

Users can click "Done" (not "Move to Trash") when the dialog appears. The file is safe - it's Claude Code's SQLite bindings.

🤖 Generated with Claude Code

View original on GitHub ↗

This issue has 4 comments on GitHub. Read the full discussion on GitHub ↗