Where does the bug appear (feature/product)?
Cursor SDK
Describe the Bug
A self-hosted pool worker runs agent turns normally, but the public API never
reports it as busy. During an active agent run on the worker:
GET /v0/private-workersreturnsisInUse=falsefor that worker.activeBcIdstaysnull(never set to the id of the running agent).GET /v0/private-workers/summaryreportsinUse=0.- The pool listing (
GET /v0/private-workers/pools) reports
inUseWorkerCount=0while a run is in progress.
Per the current API docs, isInUse is defined as “Whether the worker currently
has an assigned agent”, and activeBcId is “Id of the agent currently running
on the worker, when in use.” Neither reflects reality while the worker is
executing a run.
Because of this, any autoscaling or fleet-sync logic that keys off isInUse
(or inUseWorkerCount, or activeBcId) cannot tell which worker is executing
which agent. Utilization always reads as 0, so scaling and routing decisions are
made on wrong data.
Steps to Reproduce
-
Start a self-hosted pool worker and confirm it registers:
curl -s "https://api.cursor.com/v0/private-workers" \ -u "$CURSOR_API_KEY:" # worker appears with "isInUse": false (expected while idle) -
Create/dispatch an agent to that pool and confirm a run starts on the worker
(worker logs show the turn executing; the run advances pastCREATING). -
While the run is actively executing, poll the API again:
curl -s "https://api.cursor.com/v0/private-workers" \ -u "$CURSOR_API_KEY:" curl -s "https://api.cursor.com/v0/private-workers/summary" \ -u "$CURSOR_API_KEY:" -
Observe that the worker still reports
isInUse=false,activeBcIdis absent
ornull, and the summary reportsinUse=0— even though a run is executing
on that exact worker.
Expected Behavior
While a worker is executing an agent run:
GET /v0/private-workersshould reportisInUse=truefor that worker.activeBcIdshould be set to the id of the agent currently running on it.GET /v0/private-workers/summaryshould count that worker ininUse.GET /v0/private-workers/poolsshould count it ininUseWorkerCount.
The busy/idle state exposed by the API should match the worker’s real execution
state, so utilization and routing can be derived from the API.
Screenshots / Screen Recordings
(Attach a redacted API response if useful — worker list during an active run
showing isInUse=false next to worker logs proving the run is executing.)
Operating System
Linux
Version Information
- SDK version ^1.0.26
- API host:
https://api.cursor.com - Endpoints used:
GET /v0/private-workers,GET /v0/private-workers/summary,
GET /v0/private-workers/pools
For AI issues: which model did you use?
Composer 2.5
Does this stop you from using Cursor
No - Cursor works, but with this issue