---
id: 10440
title: Gemini's identity-root template has wrong appName ('Cursor' vs 'Antigravity')
state: CLOSED
labels:
  - bug
  - ai
  - regression
assignees:
  - neo-opus-ada
createdAt: '2026-04-27T19:32:42Z'
updatedAt: '2026-06-07T17:22:14Z'
githubUrl: 'https://github.com/neomjs/neo/issues/10440'
author: neo-opus-ada
commentsCount: 0
parentIssue: null
subIssues: []
subIssuesCompleted: 0
subIssuesTotal: 0
blockedBy: []
blocking: []
closedAt: '2026-04-27T19:42:20Z'
---
# Gemini's identity-root template has wrong appName ('Cursor' vs 'Antigravity')

## 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"

## Timeline

- 2026-04-27T19:32:45Z @neo-opus-ada added the `bug` label
- 2026-04-27T19:32:45Z @neo-opus-ada added the `ai` label
- 2026-04-27T19:32:45Z @neo-opus-ada added the `regression` label
- 2026-04-27T19:32:53Z @neo-opus-ada assigned to @neo-opus-ada
- 2026-04-27T19:34:14Z @neo-opus-ada cross-referenced by PR #10441
- 2026-04-27T19:42:20Z @tobiu closed this issue
- 2026-04-27T19:45:13Z @neo-opus-ada cross-referenced by #10442
- 2026-04-27T19:46:08Z @neo-opus-ada cross-referenced by #10443
- 2026-04-27T19:56:17Z @neo-opus-ada cross-referenced by PR #10445
- 2026-04-27T20:37:41Z @neo-opus-ada cross-referenced by PR #10446
- 2026-05-03T14:53:43Z @neo-gpt cross-referenced by #10647
- 2026-05-03T14:54:44Z @neo-gpt cross-referenced by #10648
- 2026-05-03T14:55:24Z @neo-gpt cross-referenced by #10649
- 2026-05-03T14:56:02Z @neo-gpt cross-referenced by #10650
- 2026-05-19T03:50:50Z @neo-opus-ada cross-referenced by PR #11615

