Worker disconnected and no replacement worker was found

Where does the bug appear (feature/product)?

Cursor CLI

Describe the Bug

Running agent worker start from repository cohgit/LyrinEye (C:\Users\Ogoss\dev\LyrinEye) connects to the Cursor bridge, receives a single stream frame, then immediately exits with “Worker released by bridge, exiting.” The same command on the same Windows machine and same logged-in account in another repository keeps the worker connected. When using the web Cloud Agent for this project, the UI shows: “Worker disconnected and no replacement worker was found.” CLI version: 2026.03.30-a5d3e17, OS win32 x64, authenticated via agent whoami.

Steps to Reproduce

Install/update Cursor Agent CLI (agent update) and confirm login: agent whoami.
Open a terminal and run: cd C:\Users\Ogoss\dev\LyrinEye (clone must have origin = GitHub - cohgit/LyrinEye · GitHub).
Run: agent worker start --worker-dir C:\Users\Ogoss\dev\LyrinEye.
Observe the log: bridge connects, Received frame with frameCount: 1, then Worker released by bridge, exiting and the process ends.
(Optional) Start a web Cloud Agent session for the same repo while expecting a local worker: the web UI shows the worker disconnected error.

Expected Behavior

The worker process should remain connected to the bridge while a Cloud/Background Agent session needs a local worker, and should not be released and terminated immediately after the first frame when the user has an active web agent waiting for that repo.

Operating System

Windows 10/11

Version Information

PS C:\Users\Ogoss\dev\LyrinEye> agent about
About Cursor CLI

CLI Version 2026.03.30-a5d3e17
Model Auto
OS win32 (x64)
Terminal unknown
Shell cmd
User Email [email protected]
PS C:\Users\Ogoss\dev\LyrinEye>

For AI issues: which model did you use?

If this field is required even for worker/bridge bugs, use something like:

Auto (as shown in agent about for the CLI). In the web Cloud Agent UI, use whatever you actually had selected (e.g. Auto, GPT-4.1, Claude … — debe coincidir con lo que salía en el selector del chat).

If you did not use a model (solo probaste el worker en terminal), pon:

N/A — issue is agent worker / bridge disconnect, not a chat completion failure.

For AI issues: add Request ID with privacy disabled

PS C:\Users\Ogoss\dev\LyrinEye> $repo = “C:\Users\Ogoss\dev\LyrinEye”; $log = Join-Path $env:LOCALAPPDATA “cursor-agent\logs\worker-$(Get-Date -Format ‘yyyyMMdd-HHmmss’).log”; New-Item -ItemType Directory -Force -Path (Split-Path $log) | Out-Null; Set-Location $repo; agent worker start --worker-dir $repo 2>&1 | Tee-Object -FilePath $log
03:32:12.032 INFO Starting in worker mode ctx=worker-mode meta={bridgeUrl: “…://api2.cursor.sh”}
03:32:12.092 INFO Derived repo label from git origin ctx=worker-mode meta={repo: “cohgit/LyrinEye”}
03:32:12.093 INFO Fetching user privacy mode… ctx=worker-mode
03:32:12.523 INFO User ghost mode ctx=worker-mode meta={ghostMode: false, bridgeType: “non-privacy”}
03:32:12.523 INFO Using user data directory ctx=worker-mode meta={dataDir: “C:\Users\Ogoss\AppData\Local\cursor-agent”}
03:32:12.523 INFO Starting exec-daemon in bridge mode… ctx=worker-mode
03:32:12.525 INFO Starting exec-daemon ctx=worker-mode meta={logLevel: undefined, workspacePath: “C:\Users\Ogoss\dev\LyrinEye”, browserEnabled: false, cursorSelfControlEnabled: false, mcpConfigSummary: {hasMcpConfig: false, serverNames: , stdioServerCount: 0, httpServerCount: 0}, cloudRulesEnabled: false, computerUseEnabled: false, secretRedactionEnabled: false, recordScreenEnabled: false, chromeExecutablePath: undefined}
03:32:12.526 INFO Resolved exec-daemon workspaces ctx=worker-mode meta={workspacePath: “C:\Users\Ogoss\dev\LyrinEye”, usesReposRoot: false, effectiveWorkspacePaths: [“C:\Users\Ogoss\dev\LyrinEye”]}
03:32:12.529 INFO Logs directory created/verified: C:\Users\Ogoss\AppData\Local\cursor-agent\logs ctx=worker-mode
03:32:12.561 INFO loading resource provider ctx=worker-mode meta={computerUseEnabled: false, computerUseRunning: false}
03:32:12.571 INFO resource provider loaded ctx=worker-mode meta={hooksConfig: {errors: , configDirs: {}}}
03:32:12.572 INFO Exec-daemon loaded hook executor ctx=worker-mode meta={hasUserHooks: false, hasProjectHooks: false}
03:32:12.572 INFO Exec-daemon loaded resources ctx=worker-mode
03:32:12.572 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.572 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.573 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.573 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.573 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.573 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.573 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.573 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.573 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.573 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.573 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.573 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.574 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.574 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.574 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.574 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.574 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.574 INFO Implementation: ctx=worker-mode meta={implementation: {innerExecutor: {execute: [Function execute]}, hookExecutor: {workspacePath: “C:\Users\Ogoss\.cursor\projects\C-Users-Ogoss-dev-LyrinEye”, globalContext: {cursor_version: “1.0.0”, user_email: null}, shellExecutor: {cwd: “C:\Users\Ogoss\dev\LyrinEye”, options: {shell: “C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe”}}, promptHookClient: undefined, teamHooksReadyPromise: undefined, onHookExecution: undefined, sessionEnv: undefined, config: {errors: , configDirs: {}}}, baseHookRequestExtractor: [Function], mcpLease: {manager: {clients: {}, elicitationFactory: undefined, changeListeners: [[Function], [Function]]}}}}
03:32:12.574 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.574 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.574 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.574 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.575 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.575 INFO Implementation: ctx=worker-mode meta={implementation: {execute: [Function execute]}}
03:32:12.575 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.575 INFO Implementation: ctx=worker-mode meta={implementation: {innerExecutor: {execute: [Function execute]}, hooksAdditionalContextPromise: {}, teamHooksReadyPromise: undefined, hooksConfigLease: {config: {errors: , configDirs: {}}, configuredSteps: }}}
03:32:12.575 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.575 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.575 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.575 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.575 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.575 INFO Implementation: ctx=worker-mode meta={implementation: {execute: [Function execute]}}
03:32:12.576 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.576 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.576 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.576 INFO Implementation: ctx=worker-mode meta={implementation: {hookExecutor: {workspacePath: “C:\Users\Ogoss\.cursor\projects\C-Users-Ogoss-dev-LyrinEye”, globalContext: {cursor_version: “1.0.0”, user_email: null}, shellExecutor: {cwd: “C:\Users\Ogoss\dev\LyrinEye”, options: {shell: “C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe”}}, promptHookClient: undefined, teamHooksReadyPromise: undefined, onHookExecution: undefined, sessionEnv: undefined, config: {errors: , configDirs: {}}}}}
03:32:12.577 INFO Starting in bridge mode ctx=worker-mode meta={bridgeUrl: “api2direct.cursor.sh”, originalBridgeUrl: “api2.cursor.sh”, hostHeader: “api2.cursor.sh”, workspacePath: “C:\Users\Ogoss\dev\LyrinEye”, ghostMode: false, labels: [{key: “repo”, value: “cohgit/LyrinEye”}]}
03:32:12.578 INFO Artifacts: setting up artifact upload manager ctx=worker-mode meta={artifactsRootPath: “C:\Users\Ogoss\AppData\Local\cursor-agent\artifacts”}
03:32:12.578 INFO Using persisted worker ID ctx=worker-mode meta={workerId: “919e529d-8964-4209-8747-5aa468674a9c”}
03:32:12.581 INFO Starting bridge connection attempt ctx=worker-mode meta={retryCount: 0}
03:32:12.582 INFO Session state before connect ctx=worker-mode meta={state: “closed”}
03:32:12.583 DEBUG Setting host header for ALB routing ctx=worker-mode meta={hostHeader: “api2.cursor.sh”}
03:32:12.587 INFO Session state after connect ctx=worker-mode meta={state: “connecting”}
03:32:12.588 INFO Starting to iterate over stream frames ctx=worker-mode

Additional Information

PS C:\Users\Ogoss\dev\LyrinEye> $repo = “C:\Users\Ogoss\dev\LyrinEye”; $log = Join-Path $env:LOCALAPPDATA “cursor-agent\logs\worker-$(Get-Date -Format ‘yyyyMMdd-HHmmss’).log”; New-Item -ItemType Directory -Force -Path (Split-Path $log) | Out-Null; Set-Location $repo; agent worker start --worker-dir $repo 2>&1 | Tee-Object -FilePath $log
03:32:12.032 INFO Starting in worker mode ctx=worker-mode meta={bridgeUrl: “api2.cursor.sh”}
03:32:12.092 INFO Derived repo label from git origin ctx=worker-mode meta={repo: “cohgit/LyrinEye”}
03:32:12.093 INFO Fetching user privacy mode… ctx=worker-mode
03:32:12.523 INFO User ghost mode ctx=worker-mode meta={ghostMode: false, bridgeType: “non-privacy”}
03:32:12.523 INFO Using user data directory ctx=worker-mode meta={dataDir: “C:\Users\Ogoss\AppData\Local\cursor-agent”}
03:32:12.523 INFO Starting exec-daemon in bridge mode… ctx=worker-mode
03:32:12.525 INFO Starting exec-daemon ctx=worker-mode meta={logLevel: undefined, workspacePath: “C:\Users\Ogoss\dev\LyrinEye”, browserEnabled: false, cursorSelfControlEnabled: false, mcpConfigSummary: {hasMcpConfig: false, serverNames: , stdioServerCount: 0, httpServerCount: 0}, cloudRulesEnabled: false, computerUseEnabled: false, secretRedactionEnabled: false, recordScreenEnabled: false, chromeExecutablePath: undefined}
03:32:12.526 INFO Resolved exec-daemon workspaces ctx=worker-mode meta={workspacePath: “C:\Users\Ogoss\dev\LyrinEye”, usesReposRoot: false, effectiveWorkspacePaths: [“C:\Users\Ogoss\dev\LyrinEye”]}
03:32:12.529 INFO Logs directory created/verified: C:\Users\Ogoss\AppData\Local\cursor-agent\logs ctx=worker-mode
03:32:12.561 INFO loading resource provider ctx=worker-mode meta={computerUseEnabled: false, computerUseRunning: false}
03:32:12.571 INFO resource provider loaded ctx=worker-mode meta={hooksConfig: {errors: , configDirs: {}}}
03:32:12.572 INFO Exec-daemon loaded hook executor ctx=worker-mode meta={hasUserHooks: false, hasProjectHooks: false}
03:32:12.572 INFO Exec-daemon loaded resources ctx=worker-mode
03:32:12.572 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.572 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.573 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.573 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.573 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.573 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.573 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.573 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.573 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.573 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.573 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.573 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.574 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.574 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.574 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.574 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.574 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.574 INFO Implementation: ctx=worker-mode meta={implementation: {innerExecutor: {execute: [Function execute]}, hookExecutor: {workspacePath: “C:\Users\Ogoss\.cursor\projects\C-Users-Ogoss-dev-LyrinEye”, globalContext: {cursor_version: “1.0.0”, user_email: null}, shellExecutor: {cwd: “C:\Users\Ogoss\dev\LyrinEye”, options: {shell: “C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe”}}, promptHookClient: undefined, teamHooksReadyPromise: undefined, onHookExecution: undefined, sessionEnv: undefined, config: {errors: , configDirs: {}}}, baseHookRequestExtractor: [Function], mcpLease: {manager: {clients: {}, elicitationFactory: undefined, changeListeners: [[Function], [Function]]}}}}
03:32:12.574 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.574 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.574 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.574 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.575 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.575 INFO Implementation: ctx=worker-mode meta={implementation: {execute: [Function execute]}}
03:32:12.575 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.575 INFO Implementation: ctx=worker-mode meta={implementation: {innerExecutor: {execute: [Function execute]}, hooksAdditionalContextPromise: {}, teamHooksReadyPromise: undefined, hooksConfigLease: {config: {errors: , configDirs: {}}, configuredSteps: }}}
03:32:12.575 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.575 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.575 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.575 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.575 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.575 INFO Implementation: ctx=worker-mode meta={implementation: {execute: [Function execute]}}
03:32:12.576 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.576 INFO Implementation: ctx=worker-mode meta={implementation: {wrappedExecutor: {execute: [Function execute]}}}
03:32:12.576 INFO Resource: ctx=worker-mode meta={symbol: Symbol()}
03:32:12.576 INFO Implementation: ctx=worker-mode meta={implementation: {hookExecutor: {workspacePath: “C:\Users\Ogoss\.cursor\projects\C-Users-Ogoss-dev-LyrinEye”, globalContext: {cursor_version: “1.0.0”, user_email: null}, shellExecutor: {cwd: “C:\Users\Ogoss\dev\LyrinEye”, options: {shell: “C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe”}}, promptHookClient: undefined, teamHooksReadyPromise: undefined, onHookExecution: undefined, sessionEnv: undefined, config: {errors: , configDirs: {}}}}}
03:32:12.577 INFO Starting in bridge mode ctx=worker-mode meta={bridgeUrl: “api2direct.cursor.sh”, originalBridgeUrl: “api2.cursor.sh”, hostHeader: “api2.cursor.sh”, workspacePath: “C:\Users\Ogoss\dev\LyrinEye”, ghostMode: false, labels: [{key: “repo”, value: “cohgit/LyrinEye”}]}
03:32:12.578 INFO Artifacts: setting up artifact upload manager ctx=worker-mode meta={artifactsRootPath: “C:\Users\Ogoss\AppData\Local\cursor-agent\artifacts”}
03:32:12.578 INFO Using persisted worker ID ctx=worker-mode meta={workerId: “919e529d-8964-4209-8747-5aa468674a9c”}
03:32:12.581 INFO Starting bridge connection attempt ctx=worker-mode meta={retryCount: 0}
03:32:12.582 INFO Session state before connect ctx=worker-mode meta={state: “closed”}
03:32:12.583 DEBUG Setting host header for ALB routing ctx=worker-mode meta={hostHeader: “api2.cursor.sh”}
03:32:12.587 INFO Session state after connect ctx=worker-mode meta={state: “connecting”}
03:32:12.588 INFO Starting to iterate over stream frames ctx=worker-mode

Does this stop you from using Cursor

Yes - Cursor is unusable

Hey, thanks for the detailed report and the logs.

The logs show the key part:

Using persisted worker ID meta={workerId: "919e529d-8964-4209-8747-5aa468674a9c"}

It looks like the bridge isn’t accepting this persisted worker ID and releases the worker right away. That’s why another repo works fine but this one doesn’t. Each repo label has its own binding.

Try a full state reset:

  1. Stop the worker process
  2. Do a full logout: agent logout This is logout, not just re-login. This is the key step, without it the old backend binding won’t be cleared
  3. Find the state file. From the logs it looks like your dataDir is %LOCALAPPDATA%\cursor-agent. First check what’s in there:
    Get-ChildItem "$env:LOCALAPPDATA\cursor-agent" -Recurse -Filter "*.json" | Select-Object FullName
    
  4. When you find agent-cli-state.json, reset it:
    '{"version":1,"workerIdsByDisplayName":{}}' | Out-File -FilePath "$env:LOCALAPPDATA\cursor-agent\agent-cli-state.json" -Encoding utf8
    
    If the file is somewhere else, swap in the correct path.
  5. Log in again: agent login
  6. Start the worker: agent worker start --worker-dir C:\Users\Ogoss\dev\LyrinEye
  7. On cursor.com/agents, create a completely new session for this repo. Not from a snapshot and not from an old session

One more thing. Your logs stop at Starting to iterate over stream frames. The final lines like Received frame and Worker released by bridge, exiting aren’t in what you sent. If the reset doesn’t help, send the full output after the process exits so we can see exactly what the bridge sends right before it releases the worker.

This issue is on our radar. Let me know how it goes.