From 0cb2baac09b4d9130ac38105ec832d37bc3cc4d6 Mon Sep 17 00:00:00 2001 From: autocommit Date: Wed, 27 May 2026 14:14:57 -0700 Subject: [PATCH] =?UTF-8?q?fix(orchestrator):=20=F0=9F=90=9B=20Replace=20@?= =?UTF-8?q?=20symbol=20with=20hyphen=20in=20remote-control=20registration?= =?UTF-8?q?=20to=20prevent=20duplicate=20entries?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Lilith Autocommit --- src/claire/orchestrator/bootstrap.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/claire/orchestrator/bootstrap.py b/src/claire/orchestrator/bootstrap.py index 58fd9fb..b11a52a 100644 --- a/src/claire/orchestrator/bootstrap.py +++ b/src/claire/orchestrator/bootstrap.py @@ -349,7 +349,10 @@ def _send_kick(*, rcl: Rclaude, cwd: str) -> None: def _register_remote_control(*, rcl: Rclaude, cwd: str, host_label: str) -> None: """Register the orchestrator session with claude.ai/code as - `claire@` so per-host Claires are distinguishable in the browser. + `claire-` so per-host Claires are distinguishable in the browser. + Hyphen (not `@`) because claude.ai/code's remote-control name field + silently strips `@` — observed when `claire@apricot` registered as + bare `claire` and produced duplicate entries. `/remote-control` is a Claude *slash command* — it only takes effect delivered as literal input, never from prose. The bootstrap kick is a @@ -364,7 +367,7 @@ def _register_remote_control(*, rcl: Rclaude, cwd: str, host_label: str) -> None remote spawns. """ rcl.send( - text=f"/remote-control claire@{host_label}", + text=f"/remote-control claire-{host_label}", match=_cwd_slug(cwd), yes=True, dry_run=False,