LearnNewsExamplesServices
Frontmatter
id12401
titleRename Agent-OS "bridge daemon" → "wake-daemon" to disambiguate from Neural Link's Bridge
stateClosed
labels
aiarchitecturemodel-experience
assigneesneo-opus-grace
createdAtJun 3, 2026, 2:10 AM
updatedAtJun 6, 2026, 11:50 PM
githubUrlhttps://github.com/neomjs/neo/issues/12401
authorneo-opus-ada
commentsCount1
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[x] 11822 Implement Claude sibling instance wake routing
blocking[]
closedAtJun 6, 2026, 11:50 PM

Rename Agent-OS "bridge daemon" → "wake-daemon" to disambiguate from Neural Link's Bridge

Closed v13.0.0/archive-v13-0-0-chunk-15 aiarchitecturemodel-experience
neo-opus-ada
neo-opus-ada commented on Jun 3, 2026, 2:10 AM

Context

Two unrelated subsystems are both called "Bridge" / "bridge daemon", which recurrently confuses cross-family agents (operator-reported 2026-06-02, esp. @neo-gpt):

  1. Neural Link "Bridge" (ai/mcp/server/neural-link/Bridge.mjs, run-bridge.mjs) — the WebSocket bridge between the Neural Link MCP server and the live browser Neo app. Server.mjs even calls it "Bridge daemon". This name is semantically correct: it genuinely bridges agent ↔ running application.
  2. Agent-OS "bridge daemon" (ai/daemons/bridge/daemon.mjs, launched via ai/scripts/bridge-daemon.mjs) — the wake-delivery daemon that polls GraphLog and delivers A2A wake digests to local desktop harnesses via osascript/tmux.

The Problem

Same term, two subsystems → agents mis-attribute behavior, mis-route debugging, and conflate the WebSocket app-bridge with the wake-delivery daemon. The Agent-OS daemon is the misnomer: its function is wake delivery, not "bridging" in the NL sense — and its data dir is already named .neo-ai-data/wake-daemon/, so the naming is internally inconsistent today.

The Fix

Rename the Agent-OS daemon (keep NL's "Bridge", which is correct):

  • ai/daemons/bridge/ai/daemons/wake/
  • ai/scripts/bridge-daemon.mjsai/scripts/wake-daemon.mjs
  • bridge-daemon.pid / bridge.logwake-daemon.pid / wake-daemon.log
  • Internal identifiers, log prefixes ([Bridge Daemon][Wake Daemon]), comments, and the ~112 code + ~60 doc/skill references.

This makes name ↔ function ↔ data-dir consistent (the data dir is already wake-daemon/) and frees "Bridge" for NL.

CRITICAL nuance — two layers; the wire-format one needs a decision

V-B-A shows the rename is NOT purely internal:

  1. Internal naming (dir, script, PID, log, log-prefixes, comments, docs) — safe to rename freely.
  2. Public wire-format value: the manage_wake_subscription harnessTarget enum (ai/mcp/server/memory-core/openapi.yaml) includes the literal value bridge-daemon, which is stored in existing wake subscriptions. Renaming this enum value is a BREAKING change to persisted subscriptions.
  3. Lane/config identifier: the orchestrator's hardcoded continuousTasks array carries a bridgeDaemon lane id (per the cloud-deployment lane taxonomy), another non-internal surface.

The ticket must DECIDE between:

  • (A) Decouple internal name from wire value: rename all internal naming to wake/wake-daemon but KEEP harnessTarget: 'bridge-daemon' (+ the bridgeDaemon lane id) as stable wire/config constants (lowest risk; a residual "bridge" token documented as a frozen wire constant).
  • (B) Rename the wire value + lane id too with a back-compat alias + a migration of existing subscriptions' harnessTarget.

Recommend (A) unless migration proves cheap — the wire value is invisible to humans, and the confusion lives in the code/doc surface, not the enum string.

Sequencing

MUST land AFTER #11822 (PR #12399) merges. #12399 actively edits ai/daemons/bridge/daemon.mjs; renaming the dir mid-review would churn that PR. Clean post-merge follow-up.

Contract Ledger

Target Surface Source of Authority Proposed Behavior Fallback Docs Evidence
ai/daemons/bridge/ dir + bridge-daemon.mjs script this ticket renamed to wake/ + wake-daemon.mjs atomic rename runbooks / AGENTS docs grep -rn "daemons/bridge" clean
PID/log files this ticket wake-daemon.pid / wake-daemon.log data dir already wake-daemon/ deploy runbook daemon boots + writes new paths
harnessTarget enum value wake-subscription wire contract DECISION A (keep bridge-daemon) or B (alias+migrate) existing subs keep working openapi.yaml description existing subscriptions still deliver post-rename
bridgeDaemon lane id orchestrator continuousTasks / lane taxonomy same A/B decision as the enum lane keeps scheduling lane-taxonomy doc orchestrator still schedules the lane
Docs/skills (~60 refs) this ticket updated to wake-daemon n/a learn/ + .agents/ grep clean

Acceptance Criteria

  • AC1: NL's Bridge.mjs/run-bridge.mjs are UNTOUCHED (only the Agent-OS daemon is renamed).
  • AC2: ai/daemons/bridge/ai/daemons/wake/; ai/scripts/bridge-daemon.mjsai/scripts/wake-daemon.mjs; all imports updated; grep -rn "daemons/bridge" is clean.
  • AC3: PID/log renamed to wake-daemon.*; the daemon boots, acquires the lock, and delivers a wake end-to-end on the new paths.
  • AC4: The harnessTarget wire-value decision (A or B) is made + documented; existing wake subscriptions continue to deliver (if B: migration + back-compat alias proven by test).
  • AC5: The bridgeDaemon lane id is handled consistently with AC4's A/B decision; the orchestrator still schedules the lane.
  • AC6: All ~60 doc/skill refs updated; no stale "bridge daemon" for the Agent-OS daemon in learn/ or .agents/.

Out of Scope

  • Renaming NL's Bridge (it is correctly named).
  • Any behavioral change to wake delivery (pure rename + wire-value decision).

Related

  • Blocked-by (sequencing): #11822 / PR #12399.
  • Related (also touches the bridge-daemon): #12008.
  • Origin: operator naming-collision report 2026-06-02; recurring cross-family confusion (esp. @neo-gpt).
tobiu unassigned from @neo-opus-ada on Jun 6, 2026, 8:09 PM
tobiu assigned to @neo-opus-grace on Jun 6, 2026, 8:09 PM
tobiu referenced in commit d27db48 - "refactor(ai): rename Agent-OS bridge daemon → wake-daemon (#12401) (#12651) on Jun 6, 2026, 11:50 PM
tobiu closed this issue on Jun 6, 2026, 11:50 PM