預覽¶
智能體元數據目前處於預覽階段,可能會發生變更,包括破壞性
變更。
雲端代理可在 VM 內讀取當前運行的鍵值元數據,包括智能體 ID、所有者、此輪的提交者、所用模型以及已檢出的倉庫。鉤子和安裝腳本也可以讀取這些值。
智能體通過終端工具調用此 API。您無需自行發起這些請求。
要讓智能體讀取元數據,請在提示詞中加入以下內容:
To read agent metadata, follow the instructions at
https://cursor.com/docs/cloud-agent/metadata
此 API 僅在智能體 VM 本地可用。它不是您通過 SDK 或 Cloud Agents API 創建智能體時設置的、歸調用方所有的 metadata 標籤。這些 API 使用 Cursor API 密鑰從 VM 外部管理 agents。
當 VM 外部需要驗證智能體身份時,應讓智能體改爲簽發 OIDC 身份令牌。這些 JWT 已簽名且綁定受衆。元數據不是憑證,其中可能包含當前輪次的提交者和所用模型,而令牌不應攜帶這些信息。
由 Cursor 管理的雲端代理虛擬機會通過與 OIDC 身份令牌相同的套接字提供元數據。自託管 workers 尚不提供此 API。
讀取值¶
智能體通過 CURSOR_AGENT_SOCKET 指定的 Unix 套接字讀取鍵。在由 Cursor 管理的 VM 上,默認值爲 /run/cursor/api.sock。
curl --unix-socket "${CURSOR_AGENT_SOCKET:-/run/cursor/api.sock}" \
http://cursor-agent/v1/meta-data/agent/id
請求通過 Unix 套接字使用 HTTP。URL 中的主機名會被忽略。
列出前綴,查看有哪些鍵:
curl --unix-socket "${CURSOR_AGENT_SOCKET:-/run/cursor/api.sock}" \
http://cursor-agent/v1/meta-data/
agent/
owner/
turn/
workspace/
然後請求一個鍵:
curl --unix-socket "${CURSOR_AGENT_SOCKET:-/run/cursor/api.sock}" \
http://cursor-agent/v1/meta-data/owner/user-id
請求¶
通過 Unix 套接字發送 GET /v1/meta-data[/<path>]。無需請求體或額外請求頭。允許使用尾部斜槓,因此列出的 agent/ 可請求爲 /v1/meta-data/agent/。
缺失的鍵返回 404。
響應¶
成功讀取的內容類型爲 text/plain; charset=utf-8。讀取鍵時,響應僅包含其文本形式的值。
| 類型 | 響應體 |
|---|---|
| 鍵 | 以 string 形式返回值。具有多個值的鍵每行顯示一個條目。 |
| 前綴 | 每行一個子項,按順序排列。嵌套前綴以 / 結尾。列表末尾帶有換行符。 |
錯誤響應爲 JSON。請參閱限流和錯誤。
鍵何時出現¶
安裝腳本可讀取同一個套接字。鍵僅在有值時纔會出現:編碼輪次開始前不會有 turn/;運行記錄分支前不會有 workspace/branch-name。所有者、團隊和代碼倉庫鍵從智能體創建起便可用。
如果啓動後立即找不到套接字,請重試連接。
鍵¶
列表中會省略缺失的鍵;如果直接請求,則返回 404。列表僅包含當前實際存在的鍵。
agent/¶
| 鍵 | 存在條件 | 描述 |
|---|---|---|
agent/id |
始終 | 雲端代理 ID (bcId)。 |
agent/name |
已知時 | 儀表盤中顯示的名稱。 |
agent/source |
已知時 | 智能體的啓動方式,例如 WEBSITE、API、SLACK 或 AUTOMATIONS。 |
agent/runtime |
始終 | 在由 Cursor 管理的雲端代理虛擬機上,該值爲 managed。 |
owner/¶
| 鍵 | 存在條件 | 描述 |
|---|---|---|
owner/user-id |
已知時 | 智能體所有者的 Cursor 用戶 ID,以十進制 string 表示。對於允許列表,優先使用此項而非電子郵件。 |
owner/user-email |
已知時 | 所有者的小寫電子郵件。電子郵件可能會變更。 |
owner/service-account-id |
已知時 | 當服務賬戶擁有該智能體時,其服務賬戶 ID。 |
owner/team-id |
已知時 | 所屬團隊的 ID,以十進制 string 表示。 |
turn/¶
僅當編碼輪次處於活動狀態時,turn/ 才存在。輪次之間,這些鍵會消失。如果缺少 turn/,則沒有活動輪次。
turn/ 下的值始終反映當前輪次。請勿跨輪次緩存這些值。
| 鍵 | 存在時機 | 描述 |
|---|---|---|
turn/id |
輪次期間 | 此編碼輪次的 ID。不同於 agent/id,後者是雲端代理 ID (bcId)。 |
turn/user-id |
已知時 | 提交此輪次的人員的 Cursor 用戶 ID,以十進制 string 表示。在團隊後續操作中,這可能與 owner/user-id 不同。 |
turn/user-email |
已知時 | 該人員的電子郵件地址 (小寫) 。 |
turn/started-at |
輪次期間 | 輪次開始時間,以 Unix 秒錶示。 |
turn/model |
已知時 | 爲此輪次提供服務的模型。如果您選擇了 Auto,這裏顯示的是提供服務的模型,而非 Auto。 |
OIDC 身份令牌不包含輪次提交者或提供服務的模型,因爲令牌的有效期可能長於輪次。請改爲從元數據中讀取這些鍵。
workspace/¶
| 鍵 | 存在條件 | 描述 |
|---|---|---|
workspace/repo-url |
已知時 | 主代碼倉庫,採用 host/path 格式,例如 github.com/acme/widgets。主機名使用小寫,不含協議、憑據、端口、查詢參數或 .git 後綴。對於多倉庫智能體,這僅表示主代碼倉庫。 |
workspace/repo-urls |
已知倉庫集合時 | 工作區中的所有代碼倉庫,格式與 repo-url 相同。主代碼倉庫排在首位,其餘按排序順序排列,每行一個 URL。缺失表示倉庫集合未知,並不表示只有一個倉庫。 |
workspace/branch-name |
已知時 | 主代碼倉庫的分支。 |
workspace/environment-id |
已知時 | 此次運行所使用的 Cursor 環境 ID。 |
workspace/automation-id |
用於自動化 | 當 agent/source 爲自動化時的自動化 ID。 |
workspace/repo-url 表示主代碼倉庫。完整集合請讀取 workspace/repo-urls。
誰可以讀取元數據¶
任何能訪問套接字的進程都可以讀取所有鍵:智能體、它運行的代碼和鉤子。請將這些值視爲對整個運行均可見。
元數據未經簽名。要向 AWS、GCP、Vault 或你自己的服務證明身份,請讓智能體簽發 OIDC 身份令牌 並驗證 JWT。請勿將元數據值作爲憑據轉發。
限流和錯誤¶
每個智能體 VM 每分鐘最多可發起 120 個元數據請求,突發請求最多 20 個。套接字最多可同時接受 8 個連接。該上限與 OIDC 令牌簽發共用。
對 429、503、500、502 和 504 採用退避策略重試。將 403 視爲致命錯誤:該智能體無權讀取元數據。
404 和 405 響應包含一個說明 API 調用方式的 usage string。限流和飽和錯誤僅返回錯誤代碼:
{ "error": "not_found", "usage": "GET /v1/meta-data[/<path>] ..." }
{ "error": "rate_limited" }
| HTTP | error |
適用情形 |
|---|---|---|
| 404 | not_found |
鍵未知或缺失 |
| 405 | method_not_allowed |
非 GET 請求 |
| 429 | rate_limited |
超出每個智能體的請求預算;請遵循 Retry-After |
| 503 | saturated |
連接過多;請遵循 Retry-After |
| 500 | host_error |
內部錯誤;請重試 |
| 502 / 504 | backend_unreachable |
Cursor 無法返回元數據;請重試 |
| Other | backend_error |
Cursor 拒絕了請求。403 不可恢復;503 可重試 |
示例¶
智能體或鉤子可以比較本輪提交者與所有者。隊友的後續操作可以採用更嚴格的處理路徑:
SOCKET="${CURSOR_AGENT_SOCKET:-/run/cursor/api.sock}"
owner="$(curl -fsS --unix-socket "$SOCKET" \
http://cursor-agent/v1/meta-data/owner/user-id)"
turn_user="$(curl -fsS --unix-socket "$SOCKET" \
http://cursor-agent/v1/meta-data/turn/user-id || true)"
if [ -n "$turn_user" ] && [ "$turn_user" != "$owner" ]; then
echo "follow-up from user $turn_user; owner is $owner"
fi
智能體或鉤子可以使用智能體 ID 和處理本輪的模型爲日誌添加標籤:
SOCKET="${CURSOR_AGENT_SOCKET:-/run/cursor/api.sock}"
agent_id="$(curl -fsS --unix-socket "$SOCKET" \
http://cursor-agent/v1/meta-data/agent/id)"
model="$(curl -fsS --unix-socket "$SOCKET" \
http://cursor-agent/v1/meta-data/turn/model || true)"
echo "cloud_agent_id=$agent_id model=${model:-unknown}"
列出工作區中的每個代碼倉庫。repo-urls 中每行一個 URL:
curl -fsS --unix-socket "${CURSOR_AGENT_SOCKET:-/run/cursor/api.sock}" \
http://cursor-agent/v1/meta-data/workspace/repo-urls
github.com/acme/widgets
github.com/acme/docs