BloopAI/vibe-kanban · error · Error
This host is not paired with your browser. Pair it in Relay
Error message
This host is not paired with your browser. Pair it in Relay settings.
What it means
resolveRemoteHostContext looks up the requested hostId among hosts paired with this browser. If findPairedHost returns nothing, the host was never paired (or the pairing record was deleted), so no relay session can be established and this error is thrown.
Source
Thrown at packages/remote-web/src/shared/lib/relay/context.ts:26
createRemoteSession,
refreshRelaySigningSession,
} from "@/shared/lib/relayBackendApi";
import { buildRelaySigningSessionRefreshPayload } from "@/shared/lib/relaySigningSessionRefresh";
import type { RelayHostContext } from "@remote/shared/lib/relay/types";
const remoteSessionIdCache = new Map<string, string>();
subscribeRelayPairingChanges(({ hostId }) => {
remoteSessionIdCache.delete(hostId);
});
export async function resolveRemoteHostContext(
hostId: string,
): Promise<RelayHostContext> {
const pairedHost = await findPairedHost(hostId);
if (!pairedHost) {
throw new Error(
"This host is not paired with your browser. Pair it in Relay settings.",
);
}
if (!pairedHost.signing_session_id) {
throw new Error(
"This host pairing is outdated. Re-pair it in Relay settings.",
);
}
const browserSessionId = await getRemoteSessionId(hostId);
return {
pairedHost,
sessionId: browserSessionId,
};
}
export function invalidateRemoteSessionId(hostId: string): void {View on GitHub (pinned to 4deb7eca8f)
Solutions
- Open Relay settings and pair the host with this browser, then retry.
- Verify the hostId passed to resolveRemoteHostContext matches a host shown in your Relay settings.
- If storage was cleared, re-run the pairing flow to recreate the record.
- Confirm you are in the same browser profile that performed the original pairing.
Example fix
// before const ctx = await resolveRemoteHostContext(hostId); // throws if unpaired // after const ctx = await isHostPaired(hostId) ? await resolveRemoteHostContext(hostId) : await promptPairingFlow(hostId);
Defensive patterns
Strategy: validation
Validate before calling
const paired = await findPairedHost(hostId); if (!paired) await openPairingDialog(hostId); // run before resolveRemoteHostContext
Try / catch
try {
const ctx = await resolveRemoteHostContext(hostId);
} catch (e) {
if (e instanceof Error && e.message.includes('not paired')) {
await startPairingFlow(hostId);
} else throw e;
} Prevention
- Check the paired-host list in Relay settings before connecting programmatically.
- Avoid clearing site data for the Relay origin; treat pairing records as durable config.
- Validate hostId inputs against the UI's host list instead of hand-copying IDs.
When it happens
Trigger: Calling resolveRemoteHostContext(hostId) with a hostId that has no entry in the paired-hosts store for the current browser profile — e.g. after clearing site data, switching browsers, or referencing a host ID from another machine.
Common situations: User cleared browser storage/cookies; opened Relay in a different browser or private window; copied a host ID from a teammate's setup; pairing was removed from Relay settings but a stale client still references it.
Related errors
- This host pairing is outdated. Re-pair it in Relay settings.
- Server proof verification failed.
- No setup script configured for this project
- No cleanup script configured for this project
- No archive script configured for this project
AI-assisted analysis of BloopAI/vibe-kanban@4deb7eca8f (2026-08-29).
Data as JSON: /api/errors/f3a613c8588fb31b.
Report an issue: GitHub.