theme-rest-api
REST API (headless, no UI) palette: variants, resources, entities, and flows for building a varied API. Use when theme_preset is rest_api.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
REST API (headless, no UI) palette: variants, resources, entities, and flows for building a varied API. Use when theme_preset is rest_api.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
This skill should be used when the user asks to query Logfire logs, inspect Logfire traces, fetch SQL trace data, get spans for a trace, inspect LLM spans, inspect tool calls, or check token usage from Logfire. Also use it to triage an ARENA spawn run — diagnose why a run failed, timed out, or took too long, get per-stage turns/cost/tokens, or compare a prod trace to a local one.
This skill should be used when the user asks to spawn or generate an ARENA lab from a spec, run a spec through the pipeline, run several specs in parallel, bring up / start up a generated lab's Docker container for inspection, or find and run a finished run's image.
Add a single supporting (non-vulnerable) feature to a working ARENA skeleton app — a catalog, detail page, profile, order history, cart, etc. Triggered when the prompt contains "add-supporting-feature", "ARENA supporting feature", or a Feature block whose vuln is "none". Builds a real, reachable, working page wired into the shared nav. No vulnerability, no solution writeup.
Add a single vulnerable feature to a working ARENA skeleton app. Triggered when the prompt contains "add-vuln-feature", "ARENA feature writer", or a Feature block. Implements the feature and writes a human-readable solution writeup. A usability judge then browser-drives the feature and an exploit verifier independently reproduces the vulnerability against the running lab.
Styling for the build-capable SPA stacks (react-express, vue-fastapi): Tailwind CSS (+ shadcn/ui on React) themed per-run through CSS-variable design tokens. Invoke on these stacks to give each lab a distinctive, coherent, believable-product look that is different every run.
Styling for the server-rendered / no-build stacks (php, vanilla-flask): a token-driven CSS sheet themed per-run by editing one `:root` variable block. Invoke on these stacks to give each lab a distinctive, coherent, believable look — different every run — without a build step.
| name | theme-rest_api |
| description | REST API (headless, no UI) palette: variants, resources, entities, and flows for building a varied API. Use when theme_preset is rest_api. |
A headless JSON API with no UI (deployment is API-only). Discovery happens
through the API surface itself — an OpenAPI/Swagger doc, a /api index, or
predictable resource routes. Authorization on each verb and ownership of
resources are the whole game here.
Note for the planner/skeleton: there are no pages and no UI. There is no frontend framework. Always surface a discoverable API description (
GET /api,/openapi.json, or/docs) so the lab is explorable.
Honor any hint in theme_free_text / custom_prompt; otherwise pick one.
Most exploits run as user (or a low-scope token). Auth is header-based
(Authorization: Bearer … / X-API-Key), not a cookie session.
Instead of pages, expose a coherent set of resources, each with the standard
verbs. Size the subset to endpoint_count. Candidates (variant-dependent):
/api/v1/users, /api/v1/items, /api/v1/orders, /api/v1/devices,
/api/v1/devices/{id}/telemetry, /api/v1/devices/{id}/commands,
/api/v1/charges, /api/v1/refunds, /api/v1/merchants, /api/v1/articles,
/api/v1/feeds, /api/v1/subscriptions, /api/v1/webhooks, plus GET /api
(index) and GET /openapi.json (schema).
Core (most variants):
IoT device fleet (variant):
Payments API (variant):
Content feed API (variant):
Internal microservice (variant):
Seed resources owned by ≥2 different principals (and ≥2 tenants where relevant) so cross-owner / cross-tenant access is testable.
(All start after whatever auth the spec specifies.)
?page=&limit=) and follow next links.GET /api / /openapi.json) → discover routes.firmware_version.Endpoints are a shared surface, not owned 1:1 by a feature (a single feature often spans several, and an endpoint can back multiple features). Pick a coherent subset alongside the resource collections above. Grouped by resource:
GET /api, GET /openapi.json, GET /docs, GET /healthGET /api/v1/users, GET/PUT /api/v1/users/{id}, GET /api/v1/users/meGET/POST /api/v1/api-keys, DELETE /api/v1/api-keys/{id}GET/POST /api/v1/items, GET/PUT/DELETE /api/v1/items/{id}, GET/POST /api/v1/orders, GET /api/v1/orders/{id}GET/POST /api/v1/devices, GET/PUT/DELETE /api/v1/devices/{id}, GET/POST /api/v1/devices/{id}/telemetry, POST /api/v1/devices/{id}/commandsGET/POST /api/v1/firmware, POST /api/v1/devices/{id}/firmwareGET/POST /api/v1/charges, GET /api/v1/charges/{id}, POST /api/v1/charges/{id}/refunds, GET /api/v1/refunds/{id}GET/POST /api/v1/webhooks, DELETE /api/v1/webhooks/{id}GET/POST /api/v1/articles, GET/PUT/DELETE /api/v1/articles/{id}, GET /api/v1/feeds/{id}, GET/POST /api/v1/subscriptionsGET /api/v1/admin/{resource}, POST /api/v1/admin/{resource}/{id}/...GET /api/v1/{resource}/{id} returning another principal's resource (no owner check).GET protected but DELETE not).filter / sort / q query params interpolated into SQL.POST/PUT body accepting privileged fields (role, owner_id, amount, status, scope)./api/v1/admin/....Pick ONE variant and a coherent subset of resources — a payments API and an
IoT fleet diverge sharply. Size the resource set to endpoint_count; let
theme_free_text / custom_prompt bias the variant and naming. Keep it
headless: no pages, no frontend, but always a discoverable API description.