LearnNewsExamplesServices
Frontmatter
id10440
titleGemini's identity-root template has wrong appName ('Cursor' vs 'Antigravity')
stateClosed
labels
bugairegression
assigneesneo-opus-ada
createdAtApr 27, 2026, 9:32 PM
updatedAtJun 7, 2026, 7:22 PM
githubUrlhttps://github.com/neomjs/neo/issues/10440
authorneo-opus-ada
commentsCount0
parentIssuenull
subIssues[]
subIssuesCompleted0
subIssuesTotal0
blockedBy[]
blocking[]
closedAtApr 27, 2026, 9:42 PM

Gemini's identity-root template has wrong appName ('Cursor' vs 'Antigravity')

neo-opus-ada
neo-opus-ada commented on Apr 27, 2026, 9:32 PM

Context

Surfaced empirically during the post-#10438-merge wake-substrate end-to-end validation (2026-04-27, session b3c0bfb8/c68a7d4b). Bidirectional wake delivery is asymmetric:

  • Gemini → Claude: WAKE event delivered successfully via osascript to Claude app
  • Claude → Gemini: [Bridge Daemon] Failed to deliver via osascript: osascript exited with code 1

@tobiu's bridge-daemon log:

[2026-04-27T19:26:45.820Z] [INFO] [Bridge Daemon] Started. Tail-syncing from GraphLog ID: 458157
[2026-04-27T19:28:05.311Z] [INFO] [Bridge Daemon] Delivered WAKE_SUB:4f5ba204-... via osascript to Claude
[2026-04-27T19:29:18.928Z] [ERROR] [Bridge Daemon] Failed to deliver via osascript: osascript exited with code 1

The Problem

ai/graph/identityRoots.mjs:48 sets @neo-gemini-pro's subscriptionTemplate.harnessTargetMetadata.appName = 'Cursor'. But the actual macOS app is Antigravity:

  • /Applications/ contains Antigravity.app only — no Cursor.app
  • /Applications/Antigravity.app/Contents/Info.plist: CFBundleName: Antigravity, CFBundleDisplayName: Antigravity, CFBundleIdentifier: com.google.antigravity
  • Direct test: osascript -e 'tell application "Cursor" to activate'Can't get application "Cursor". (-1728), exit 1
  • Direct test: osascript -e 'tell application "Antigravity" to activate' → exit 0

Antigravity is a fork of Cursor (Google's IDE based on Cursor), but the macOS app's identity is Antigravity. The 'Cursor' template was apparently chosen at #10404 merge time as a placeholder; never empirically validated end-to-end until today's auto-bootstrap shipped + restart cycle completed.

This bug was masked by:

  1. Earlier sessions had A2A break for OTHER reasons (#10424 cross-process coherence)
  2. Wake delivery to Gemini's side was rarely tested empirically until #10438 made auto-bootstrap automatic
  3. The AC for #10402 was reached via a "bootstrap call works" check — never via "wake event reaches recipient" full-loop validation

The Architectural Reality

  • ai/graph/identityRoots.mjs:48 — the canonical source for Gemini's template
  • ai/mcp/server/memory-core/services/WakeSubscriptionService.mjs:bootstrap() — reads the template and creates WAKE_SUB nodes inheriting the metadata at subscribe-time (one-shot copy; later template changes don't propagate to existing subs)
  • ai/scripts/bridge-daemon.mjs:476 (osascript adapter) — reads meta.appName per delivery and fires tell application "${appName}" to activate
  • Existing live data:
    • @neo-gemini-pro AgentIdentity node has subscriptionTemplate.harnessTargetMetadata.appName: 'Cursor'
    • WAKE_SUB:de10611c (Gemini's auto-bootstrapped sub) inherited the bad value at subscribe-time

The Fix

Two parts:

1. Code fix (canonical source)

ai/graph/identityRoots.mjs:48: appName: 'Cursor'appName: 'Antigravity'

2. Live-data fix (existing nodes)

The code fix only affects future re-seeds. Existing live data needs explicit patching:

  • Update @neo-gemini-pro AgentIdentity node's subscriptionTemplate.harnessTargetMetadata.appName
  • Update WAKE_SUB:de10611c-bd3a-4ec4-8dc0-49c487a4f5c2's harnessTargetMetadata.appName (created from bad template at boot time post-#10438; metadata is one-shot-copied, doesn't auto-update on template change)

Either via raw SQL UPDATE (one-shot) or via re-seed (seedAgentIdentities.mjs) plus deletion + bootstrap-recreation of Gemini's WAKE_SUB.

Acceptance Criteria

  • ai/graph/identityRoots.mjs:48 reads appName: 'Antigravity'
  • @neo-gemini-pro AgentIdentity node in canonical sqlite has appName: 'Antigravity' in its subscriptionTemplate
  • WAKE_SUB:de10611c (or its replacement after re-bootstrap) has appName: 'Antigravity' in its harnessTargetMetadata
  • End-to-end validation: Claude → Gemini wake delivery works post-fix. Bridge daemon log shows Delivered ... via osascript to Antigravity (not the previous Failed to deliver via osascript: exit 1)

Out of Scope

  • Adding Antigravity to bridge-daemon.mjs:506 default tabShortcut mapping (currently maps 'Cursor' → 'l'). Gemini's template explicitly sets tabShortcut: null, so the default fallback never fires for her. Could be added for symmetry but defer unless it surfaces a separate bug.
  • Auditing OTHER identity-root templates for similar app-name placeholder errors (none currently exist; only Gemini's was wrong)
  • Adding a runtime validator that checks tell application <appName> to exists before delivery (architecturally cleaner but bigger scope; the osascript exited with code 1 failure mode is captured in #10425's persistent log, so post-hoc diagnosis is already possible)

Avoided Traps

  • Trap: Patch only the bridge-daemon's osascript to retry with alternate names. Avoided: the canonical wrong source is the identity template; daemon-side fallback would mask the data error.
  • Trap: Hardcode app-name aliases ('Cursor' → 'Antigravity'). Avoided: Cursor and Antigravity are distinct apps for distinct users; aliasing would break Cursor users when they emerge.
  • Trap: Re-seed without explicit live-data patch. Avoided: existing WAKE_SUB nodes have metadata one-shot-copied from the template at subscribe time; changing the template doesn't propagate to existing subs. Both must be patched explicitly.

Related

  • Surfaced by: #10437 / PR #10438 (auto-bootstrap shipped → end-to-end wake delivery testable for first time)
  • Original template author: #10404 (closed #10402 with 'Cursor' placeholder that was never empirically validated)
  • Persistent diagnostic log substrate that captured the failure: #10419 / PR #10425

Origin Session ID: c68a7d4b-909a-4965-9bf9-116906d271a3

Retrieval Hint: "Gemini identity template appName Cursor Antigravity osascript bridge daemon delivery failure"

tobiu closed this issue on Apr 27, 2026, 9:42 PM