一键导入
ovstorage-user-handle-errors
Use when an ovstorage tool returns ok false and you need to interpret the envelope error and choose the next action.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Use when an ovstorage tool returns ok false and you need to interpret the envelope error and choose the next action.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
Deploy and develop against NVIDIA Omniverse Storage APIs on any Kubernetes cluster (MicroK8s, EKS, AKS, GKE, bare metal). Two storage adapters: (1) Example Storage Adapter — Python filesystem reference implementation + Discovery for learning and custom adapter development; (2) S3/Azure Production Storage Adapter — NVIDIA pre-built S3/Azure adapter + Discovery as minimum, expandable with Event Aggregation, Event Consumer, RabbitMQ, Envoy Auth Extension, Storage Navigator, and Contour ingress. Can deploy on the developer's behalf (generating scripts + .env) or guide manual deployment. Custom adapter development covers three APIs: Storage, Notifications, and Permissions. Use when a developer asks about deploying, configuring, validating, troubleshooting, or building any component of the Omniverse Storage APIs stack.
Use when adding or reviewing an authz plugin for ovstorage-broker or ovstorage-rest - covers the AuthzPlugin trait, the 21 operations, the policy-epoch model, and the cdylib cancellation contract.
Use when adding or reviewing a storage backend plugin for ovstorage.
Use when Rust changes affect ovstorage C or C++ headers and checked-in generated headers must be refreshed.
Use when starting an ovstorage-broker locally for development or integration testing - covers a minimal TOML, the cdylib plugin path, and how to hit the listener with broker-client or curl.
Use when checking the Storage API wire contract that ovstorage-plugin-services-client depends on.
基于 SOC 职业分类
| name | ovstorage-user-handle-errors |
| description | Use when an ovstorage tool returns ok false and you need to interpret the envelope error and choose the next action. |
| license | CC-BY-4.0 |
| version | 0.1.0 |
| author | NVIDIA Omniverse |
| tags | ["ovstorage","errors","mcp"] |
| tools | ["Read"] |
| compatibility | Requires ovstorage MCP tools or equivalent result-envelope output. |
Goal: When a tool call fails, understand what went wrong and what to do next.
When to use this: Any time you get ok: false from a tool. Bookmark
this — it's the cross-cutting primer the other runbooks reference.
{
"v": "0.1",
"ok": false,
"operation": "ovstorage_read",
"resource": "s3://my-bucket/missing.bin",
"error": {
"code": "NotFound",
"message": "NotFound: object missing at s3://my-bucket/missing.bin",
"retryable": false,
"next_action": "Call library.add_connection(...) for a backend that serves this address prefix, or load a saved configuration via library.load_config(...)."
}
}
The fields you care about, in order of usefulness:
error.code — the canonical reasonA stable string identifying the failure category. Pin your branching
on this, not on error.message. Common codes:
| Code | Meaning |
|---|---|
NotFound | Address doesn't exist |
AlreadyExists | Destination is taken (write with if_dest: {"kind": "fail"}) |
PermissionDenied | Auth allows the call but not on this resource |
AuthRequired / CredentialExpired | Connection needs auth refresh |
NoRoute / NotConfigured | No backend handles this address |
Unsupported | Backend exists but doesn't support this op |
ObjectModified | if_match precondition failed |
ResourceExhausted | Hit a cap (max_bytes, quota, rate) |
InvalidArgument | The arguments you passed are wrong |
Transient / BrokerUnavailable / ResourceExhausted / DeadlineExceeded | Backend hiccup, cap, or throttling; retry-friendly |
Cancelled | The call was cancelled (Ctrl+C, timeout, etc.) |
Full list and meanings: see ErrorCode in
docs/public/agent/mcp-tools.md.
error.retryable — should you try againA boolean. true means a blind retry with the same arguments might
succeed. Today only these codes are retryable: Transient,
BrokerUnavailable, ResourceExhausted, DeadlineExceeded,
CacheLockContention, AuthorizationLeaseExpired.
When retryable: true:
When retryable: false: do not retry the same call. Either the
input is wrong (fix it), the resource doesn't exist (different
recovery), or the operation isn't supported (use a different one).
error.next_action — the recovery hintA human-readable string suggesting what to do next. Present at high-value error sites (auth failures, missing config, no-route). When present, it's the most actionable signal — it tells you the specific call to make.
next_action is not present on every error. If absent, fall back
to error.code and the table above.
error.message — for logging / surfacing to humansHuman-readable. Signed-URL query params and bearer tokens are redacted. Use it for logs and for messages you show the user, not for branching logic.
Is `error.retryable` true?
├─ yes → retry with backoff (3-5 attempts)
└─ no
├─ Is `error.next_action` present?
│ ├─ yes → do what it says
│ └─ no → branch on `error.code`:
│ ├─ NotFound / AlreadyExists → input-shaped; agent decides
│ ├─ PermissionDenied / AuthRequired → surface to user
│ ├─ InvalidArgument → review your tool-call arguments
│ ├─ Unsupported → check ovstorage_capabilities; choose a different op
│ └─ Internal / IntegrityFailure / etc. → surface to user
Every error envelope is also reflected as isError: true on the MCP
CallToolResult. Both signals say the same thing — your client
library may surface them separately. Trust whichever is more natural;
they're never inconsistent.
error.message text. It's for humans. The text varies; the code doesn't.PermissionDenied won't suddenly succeed.next_action recovery steps when the field is absent. If you don't know what to do, surface the error rather than guess.ovstorage_doctor to investigate config-related errorsdocs/public/agent/envelope.md — envelope v=0.1 contractdocs/public/agent/mcp-tools.md — per-tool error specifics