Install
openclaw skills install graceful-boundariesAssess any API or website's Graceful Boundaries conformance level and provide concrete guidance for reaching the next level. Use this skill when the user asks to check a URL's rate limit communication, evaluate API conformance to Graceful Boundaries, assess how a service handles 429s, or improve how an API communicates its limits to agents. Also trigger when the user says "check this API's boundaries", "what level is this service", "assess graceful boundaries compliance", "how does this API handle rate limits", or provides a URL and asks about rate limit quality, conformance, or structured refusal. Distinct from the agent-readiness-audit skill, which assesses overall AI discoverability -- this skill specifically evaluates rate limit communication quality per the Graceful Boundaries specification.
openclaw skills install graceful-boundariesAssesses a URL's Graceful Boundaries conformance level through direct HTTP inspection, then provides a concrete implementation plan for reaching the next level. The output is an actionable document with code examples the user can implement immediately. No special tooling or dependencies required — the skill works with any HTTP client.
Follow these phases in order. Each phase builds on the previous one.
Fetch the limits discovery endpoint directly. Try both standard paths:
GET <url>/api/limits
GET <url>/.well-known/limits
Use curl, fetch, or any HTTP client available in the current environment. No special tooling is required.
If either path returns a JSON response, record:
service fieldlimits objecttype, maxRequests,
windowSeconds, description)conformance field is present (self-declared level)Cache-Control header with s-maxagechangelog or feed URLs are present (v1.1 change discovery)resource-dedup entries include returnsCached: true (v1.1)If neither path returns a valid response, the service has no discovery endpoint and cannot be Level 2 or above.
Optional accelerator: If the graceful-boundaries repo is cloned locally, the automated checker provides a structured report:
node evals/check.js <url> --json
This is a convenience, not a requirement. The skill works entirely through direct HTTP inspection.
If the limits endpoint documents specific API endpoints, fetch one of them and check for proactive headers on the success response:
RateLimit: limit=N, remaining=N, reset=NRateLimit-Policy: N;w=NThese headers indicate Level 4 conformance.
Do NOT attempt to trigger 429s. That would require hammering the service and is not appropriate for an audit. Level 1 and Level 3 conformance cannot be verified without observing an actual refusal response — note these as unverifiable and explain why.
Map findings to the conformance levels defined in spec.md:
| Level | How to verify |
|---|---|
| N/A | Site has no API or agentic surface |
| 0 | Service exists but no limits endpoint, no structured responses |
| 1 | Cannot verify without a 429 response (note as unverifiable) |
| 2 | Limits endpoint exists and is well-formed |
| 3 | Cannot verify without a 429 response (note as unverifiable) |
| 4 | Level 2 confirmed + proactive headers present on success responses |
If the service self-declares a conformance level via the conformance
field, compare declared vs. validated. Flag any discrepancy.
Report the assessment as:
For each level above the current confirmed level, list exactly what is missing. Reference specific sections of spec.md:
To reach Level 1 (spec sections 2 and 6):
error, detail, and why? (v1.1: why is MUST for all error classes)error, detail,
limit, retryAfterSeconds, why)?error use a stable machine-parseable string (snake_case)?detail include a specific retry time in human-readable form?why explain the purpose, not restate the error?retryAfterSeconds a non-negative integer?Retry-After header?<meta name="retry-after" content="N">
tag or a <link rel="alternate" type="application/json" href="...">? (v1.1)To reach Level 2 (spec section 1):
/api/limits or /.well-known/limits?limits object?changelog or feed URLs for change discovery? (v1.1, optional but recommended)To reach Level 3 (spec sections 3 and 5):
cachedResultUrl, alternativeEndpoint,
upgradeUrl, humanUrl, cached)resource-dedup limits: does the service return cached results as a
200 instead of a 429? If so, does the discovery endpoint include
returnsCached: true so agents skip retry logic? (v1.1)To reach Level 4 (spec section 4):
RateLimit headers present on success responses?limit, remaining, reset?RateLimit-Policy header present?N;w=N?Provide concrete, copy-pasteable code for each gap. Use the service's actual domain and endpoints in examples.
Limits discovery endpoint skeleton:
{
"service": "<service name>",
"description": "<what the service does>",
"conformance": "level-2",
"changelog": "https://<domain>/api/changelog.json",
"feed": "https://<domain>/feed.json",
"limits": {
"<endpoint-key>": {
"endpoint": "<path>",
"method": "<HTTP method>",
"limits": [
{
"type": "ip-rate",
"maxRequests": 100,
"windowSeconds": 3600,
"description": "100 requests per IP per hour."
},
{
"type": "resource-dedup",
"maxRequests": 1,
"windowSeconds": 86400,
"returnsCached": true,
"description": "One operation per resource per day. Repeat requests return the cached result."
}
]
}
}
}
Structured refusal body:
{
"error": "rate_limit_exceeded",
"detail": "You have exceeded the limit of 100 requests per hour. Try again in <N> seconds.",
"limit": "100 requests per IP per hour",
"retryAfterSeconds": 1234,
"why": "<one sentence explaining why this limit exists — not just restating the error>"
}
Constructive guidance fields (add to the refusal body):
{
"cachedResultUrl": "/api/result?id=<resource>",
"alternativeEndpoint": "/api/<alternative>",
"upgradeUrl": "https://<domain>/pricing",
"humanUrl": "https://<domain>/contact"
}
Proactive headers (add to success responses):
RateLimit: limit=100, remaining=99, reset=3600
RateLimit-Policy: 100;w=3600
Reference security considerations where relevant:
why must describe the category of protection, not the mechanismexpected must use positive descriptionsOutput a structured markdown document:
# Graceful Boundaries Assessment: <domain>
## Summary
- Confirmed level: <N>
- Declared level: <N or "not declared">
- Likely level: <N>
## What was checked
- Limits endpoint: <path> — <found/not found>
- Proactive headers: <present/absent>
- Refusal format: <not verifiable without triggering a 429>
## Gaps to next level
<prioritized list with spec section references>
## Implementation plan
<concrete code examples using the service's actual domain>
## Security notes
<relevant SC-* considerations>