Agent skill

API Forge

by EliasOulkadi in EliasOulkadi/shokunin

Design REST/GraphQL APIs with OpenAPI 3.1, error handling, pagination, rate limiting, webhooks, and idempotency.

MITAuto-check passedBackend & APIs

Install API Forge

skills CLI
$ npx skills add EliasOulkadi/shokunin --skill api-forge -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install EliasOulkadi/shokunin api-forge --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/EliasOulkadi/shokunin.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.pack/skills/api-forge .claude/skills/api-forge && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
api-forge
GitHub stars
114
Token cost
~2.9k tokens
SKILL.md length
1,042 words
Files
1
Skills in repo
49
Repo updated
First seen
Licence
MIT

At a glance

Design REST/GraphQL APIs with OpenAPI 3.1, error handling, pagination, rate limiting, webhooks, and idempotency.

  • Works in 5 steps: Determine API type → Define resources and naming → Map HTTP methods → …
  • User asks to design an API
  • SKILL.md covers Sub-Commands, Workflow, Error Handling and Rate Limiting, plus 10 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

API Forge is an agent skill from EliasOulkadi/shokunin. Design REST/GraphQL APIs with OpenAPI 3.1, error handling, pagination, rate limiting, webhooks, and idempotency. Use when user asks to design an API, create endpoints, define REST/GraphQL schema, or generate OpenAPI spec. Do NOT use for database schema design, frontend API integration, or non-HTTP protocols (gRPC, WebSocket, MQTT).

Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts. Compatibility notes: opencode

It sits in Backend & APIs, covering OpenAPI specifications, Webhooks and GraphQL. It works with OpenAPI, GraphQL, gRPC and Stripe. The repository describes itself as: 職人 Shokunin 62 AI agent skills for OpenCode, Claude Code, Cursor, Windsurf. ChromaDB memory, MCP servers, declarative self-updates. Multi-model, open source, zero cost. The licence is MIT.

When your agent uses it

  • User asks to design an API
  • Create endpoints
  • Define REST/GraphQL schema
  • Generate OpenAPI spec

Example prompts

  • “/api-forge”

Requirements

  • Compatibility (from SKILL.md): opencode

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Determine API type
  2. Define resources and naming
  3. Map HTTP methods
  4. Design response format
  5. Implement pagination

What it can do on your machine

Read from SKILL.md and the folder at commit 4c68e5b. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    No scripts in the folder and no shell commands in SKILL.md (its code samples are json and typescript).

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    opencode

    From compatibility in the SKILL.md frontmatter.

Context cost

API Forge loads about 2.9k tokens when it runs. Until then it costs about 86 tokens; SKILL.md has 1,042 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~86
When it runs · the whole SKILL.md, loaded when a task matches
~2.9k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from EliasOulkadi/shokunin at commit 4c68e5b, republished under its MIT licence (© EliasOulkadi). 1,042 words, ~2,911 tokens.

Download SKILL.mdSave it as .claude/skills/api-forge/SKILL.md (or your agent's skills folder).
name
api-forge
description
Design REST/GraphQL APIs with OpenAPI 3.1, error handling, pagination, rate limiting, webhooks, and idempotency. Use when user asks to design an API, create endpoints, define REST/GraphQL schema, or generate OpenAPI spec. Do NOT use for database schema design, frontend API integration, or non-HTTP protocols (gRPC, WebSocket, MQTT).
compatibility
opencode
triggers
design an API, create endpoints, REST API, GraphQL schema, OpenAPI spec, rate limiting, webhooks, idempotency, API pagination, API versioning, API security
negatives
database schema, frontend integration, gRPC, WebSocket, MQTT, database design
license
MIT
metadata.workflow
backend
metadata.audience
developers
metadata.version
4.0.0
metadata.author
shokunin

API Forge

Design APIs that developers love. Based on patterns from Stripe, GitHub, Twilio, Slack, and the OpenAPI 3.1 specification.

Sub-Commands

CommandCategoryDescription
designBuildDesign an API from user requirements. Generate OpenAPI 3.1 spec.
endpointBuildDesign a single endpoint with all methods, parameters, responses, and error codes.
auditEvaluateAudit an existing API against design rules, security checklist, and anti-patterns.
documentDocumentGenerate API documentation from OpenAPI spec or route handlers.
extractDocumentExtract OpenAPI spec from existing route handlers.
webhookBuildDesign webhook delivery, retry, and signature verification.

Workflow

Step 1: Determine API type
TypeUse CaseSpec
RESTCRUD, resource-orientedOpenAPI 3.1
GraphQLComplex queries, multiple resourcesSchema Definition Language
WebhookEvent-driven, async notificationsStandard webhooks (Stripe pattern)
Step 2: Define resources and naming
PatternExampleNotes
Nouns, plural/users, /ordersNever verbs
Nested (max 2 levels)/users/{id}/ordersFlat preferred over deep nesting
Actions as sub-resources/orders/{id}/cancelOnly for non-CRUD operations
Query for filters/users?role=adminNot /users/admins
kebab-case for paths/order-itemsNot /orderItems
snake_case for fieldsfirst_nameNot firstName in JSON:API
Step 3: Map HTTP methods
MethodPurposeIdempotentSafeBody
GETRead resourceYesYesNo
POSTCreate resourceNoNoYes
PUTFull replaceYesNoYes
PATCHPartial updateNoNoYes
DELETERemove resourceYesNoOptional
Step 4: Design response format

Stripe-style standard envelope:

json
{
  "data": {},
  "meta": {
    "page": 1,
    "per_page": 25,
    "total": 100
  },
  "error": null,
  "request_id": "req_abc123"
}

If using JSON:API or GraphQL, use their standard envelopes instead.

Step 5: Implement pagination

Cursor-based for production. Page-based only for admin/internal tools.

json
GET /items?cursor=abc123&limit=25
{
  "data": [...],
  "meta": {
    "next_cursor": "def456",
    "has_more": true
  }
}

Cursor must be opaque (base64-encoded compound key). Never expose internal IDs. Maximum limit: 100. Default: 25.

Error Handling

Every error response includes:

  • code: machine-readable error code (VALIDATION_ERROR, NOT_FOUND, RATE_LIMITED)
  • message: human-readable summary, max 150 chars
  • details: array of field-level errors for validation
  • request_id: UUIDv4 for debugging correlation
  • docs_url: link to error documentation (optional, strongly recommended)
json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Email is required",
    "details": [
      { "field": "email", "code": "required", "message": "Email is required" }
    ],
    "request_id": "req_a1b2c3d4e5f6",
    "docs_url": "https://docs.example.com/errors/validation"
  }
}
Status codes — exact mapping
CodeWhenWhat to return
200Success (GET, PUT, PATCH)Resource + meta
201Created (POST)Created resource + Location header
204No content (DELETE)Empty body
400Validation errorError details + fields
401Missing/invalid authGeneric message. Never reveal which part of auth failed.
403Insufficient permissionsGeneric message
404Resource not foundMinimal. Don't reveal if the resource ever existed.
409Conflict (duplicate, stale version)Details of conflicting field
422Unprocessable entityValidation details
429Rate limitedRetry-After header (seconds)
500Internal errorGeneric message. No stack traces. No internal state.
502Downstream failure"Service temporarily unavailable"
503Maintenance / overloadRetry-After header

Rate Limiting

Algorithm decision
AlgorithmBest forBehavior
Token BucketGeneral purpose, bursts allowedTokens refill at configurable rate. Allows bursts up to bucket size.
Sliding WindowStrict fairness, multi-tenantCounts requests in rolling time window. No burst edge at boundaries.
Fixed WindowSimple, non-criticalResets at interval. Budget edge problem at boundaries.

Default: Token Bucket.

Headers (every response)
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 42
X-RateLimit-Reset: 1700000000

Return 429 Too Many Requests with Retry-After header when exceeded.

Rate limit tiers (exact values)
TierRequestsWindowPer
Anonymous6060sIP
Authenticated100060sUser ID + endpoint group
Critical endpoints515minIP + identifier

Critical: login (5/15min per IP+username), password reset (3/60min per email), MFA (3/15min per user).

Versioning

StrategyExampleWhenRisk
URL path/v1/usersDefault for REST APIsURL pollution
HeaderAccept: application/vnd.api+json;version=2Clean URLs neededHarder to discover
Query param/users?version=2Simple, transitionalCache poisoning risk

Prefer URL path for public APIs. Deprecate with sunset headers. 6-month migration window minimum.

Deprecation: true
Sunset: Sat, 12 May 2027 00:00:00 GMT

Webhooks

Delivery format (Stripe pattern)
json
{
  "id": "wh_abc123",
  "type": "order.created",
  "created": 1700000000,
  "data": {
    "id": "order_456",
    "status": "paid",
    "total": 2999
  }
}
Delivery protocol
  • Retry: exponential backoff (1s, 2s, 4s, 8s, 16s, 32s…)
  • Max retries: 3. Max TTL: 24 hours.
  • Expect 200 response within 5 seconds.
  • Signature: HMAC-SHA256.
Signature verification (exact implementation)
X-Webhook-Signature: t=1700000000,v1=abc123def456...
typescript
function verifyWebhook(payload: string, signature: string, secret: string): boolean {
  const [timestampStr, signatures] = signature.split(',').map(s => s.trim())
  const timestamp = timestampStr.split('=')[1]

  const expected = crypto
    .createHmac('sha256', secret)
    .update(`${timestamp}.${payload}`)
    .digest('hex')

  return crypto.timingSafeEqual(
    Buffer.from(expected),
    Buffer.from(signatures.split('=')[1])
  )
}

Idempotency

HeaderValueTTL
Idempotency-KeyUUIDv424 hours

Return cached response (same status, same body) if same key seen within TTL. Return 409 Conflict if different request body arrives with same key.

Show full SKILL.md (414 more words)Show less

API Security Checklist

  • HTTPS enforced (HTTP → 301 redirect)
  • TLS 1.2+ only (no TLS 1.0/1.1)
  • CORS whitelist per environment, never * with credentials
  • Input validation at boundary (Zod, Joi, Pydantic)
  • Parameterized queries (no SQL injection). Never string interpolation.
  • No secrets in responses, logs, or error messages
  • Rate limiting on auth + password endpoints
  • Request size limit: 1MB default, configurable per endpoint
  • Body parsing limits (depth, field count, string length)
  • Security headers: X-Content-Type-Options: nosniff, X-Frame-Options: DENY, Content-Security-Policy

OpenAPI 3.1 Generation

Every endpoint needs:

  • summary: one sentence. Verb + resource.
  • parameters: name, in, required, schema, description, example
  • responses: every possible status code
  • requestBody (for POST/PUT/PATCH): content, schema, required

GraphQL

Schema design
  • Queries for read, Mutations for write, Subscriptions for real-time
  • Max 3 nesting levels per query
  • @deprecated(reason: "Use fieldX instead") for removals
  • DataLoader for N+1 prevention
  • Complexity limits: max depth 5, max cost 1000
Error handling
json
{
  "errors": [
    {
      "message": "Validation error",
      "extensions": {
        "code": "VALIDATION_ERROR",
        "field": "email",
        "request_id": "req_abc123"
      }
    }
  ]
}

Anti-Patterns

Anti-patternFix
Verbs in URL (/getUsers)Use HTTP methods on noun resources
Page-based pagination for real-time dataCursor-based with opaque cursors
No rate limit headersInclude X-RateLimit-* on every response
Returning 500 with stack traceLog internally, return generic message
Breaking changes without migrationVersion via URL, deprecation + sunset headers
No idempotency on POST createsAdd Idempotency-Key header support
Inconsistent error format across endpointsStandard envelope for all errors
GraphQL without complexity limitsImplement query depth + cost analysis
Nested resources > 2 levelsRestructure. Deep nesting = tight coupling.
POST for everythingUse correct HTTP methods. GET=read, PUT=replace, PATCH=partial.

Production Checklist

  • All endpoints documented with OpenAPI 3.1
  • Envelope: { data, meta, error, request_id } on every response
  • Cursor-based pagination for public endpoints
  • Rate limit headers on every response
  • Rate limiting on auth endpoints (5/15min login, 3/60min reset)
  • Idempotency-Key support on POST/PATCH
  • Webhook signature verification (HMAC-SHA256)
  • Security headers on every response
  • CORS whitelist (never * with credentials)
  • Input validation at boundary
  • Parameterized queries everywhere
  • Error responses include request_id and code
  • Versioning strategy defined (URL path preferred)
  • Deprecation + Sunset headers on deprecated endpoints

Sources

  • Stripe API Reference — idempotency, pagination, webhooks, error format
  • GitHub REST API — resource naming, versioning
  • Twilio API — webhook signature verification
  • OpenAPI 3.1 Specification (openapis.org)
  • JSON:API Specification (jsonapi.org)
  • GraphQL Relay Connection Specification
  • IETF RFC 7231 — HTTP semantics
  • IETF RFC 6585 — Additional HTTP status codes
  • Slack API — rate limiting headers

Checklist

  • Skill loads without errors in the AI agent
  • YAML frontmatter is valid (description, compatibility, audience)
  • Workflow section provides clear step-by-step instructions
  • Error handling section covers common failure modes
  • All referenced files (references/, scripts/, assets/) exist
  • Skill triggers correctly for intended use cases
  • No broken links or missing resources

© EliasOulkadi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .pack/skills/api-forge of EliasOulkadi/shokunin.

Open the folder on GitHubat commit 4c68e5b

Compare with similar skills

API Forge next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

API Forge compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
API Forge this skillEliasOulkadi/shokunin114—~2.9kAutomated safety check: PassMIT
System Design CommunicationHoangNguyen0403/agent-skills-standard571—~894Automated safety check: PassMIT
API Architectcuriositech/some_claude_skills243—~1.4kAutomated safety check: PassMIT
API Contract Detectionprime-radiant-inc/greenfield292—~4.2kAutomated safety check: PassApache-2.0
Implementing API Patternsancoleman/ai-design-components526—~3kAutomated safety check: PassMIT
API Designmajiayu000/spellbook287—~2.1kAutomated safety check: PassMIT

Similar skills

  • System Design Communication

    HoangNguyen0403/agent-skills-standard

    Select how services talk: REST, gRPC, GraphQL, WebSocket, SSE, or webhook per hop, sync versus async per flow, service discovery mode, and DNS/edge routing.

    571 GitHub stars~894 tokensUpdated today
    Backend & APIsAuto-check passed
  • API Architect

    curiositech/some_claude_skills

    Expert API designer for REST, GraphQL, gRPC architectures. An agent skill from curiositech/some_claude_skills.

    243 GitHub stars~1.4k tokensUpdated 1 mo ago
    Backend & APIsAuto-check passed
  • API Contract Detection

    prime-radiant-inc/greenfield

    Finds OpenAPI, GraphQL, Protobuf and JSON Schema files in a codebase and extracts behavioral claims from them as part of a reverse-engineering workflow.

    292 GitHub stars~4.2k tokensUpdated 2 mo ago
    Backend & APIsAuto-check passed
  • Implementing API Patterns

    ancoleman/ai-design-components

    API design and implementation across REST, GraphQL, gRPC, and tRPC patterns.

    526 GitHub stars~3k tokensUpdated 10 mo ago
    Backend & APIsAuto-check passed
  • API Design

    majiayu000/spellbook

    REST/GraphQL/gRPC API design best practices. An agent skill from majiayu000/spellbook.

    287 GitHub stars~2.1k tokensUpdated today
    Backend & APIsAuto-check passed
  • API Protocol Security

    zhaji2333/CkSKILLS

    当目标存在REST/GraphQL/gRPC/WebSocket接口、Swagger/OpenAPI文档、调试端点(actuator/console)、旧版本API、内部接口、微服务网关,或需要测试HTTP走私、DoS、速率限制时调用。负责API全方法测试、BOLA越权、GraphQL深度攻击、协议层漏洞挖掘。

    114 GitHub stars~520 tokensUpdated 24 days ago
    Backend & APIsAuto-check passed

More from EliasOulkadi/shokunin

All 49 skills in this repo
  • CI CD

    EliasOulkadi/shokunin

    Design CI/CD pipelines for GitHub Actions, GitLab CI, and CircleCI with matrix builds, test sharding, caching, Docker layer caching, OIDC auth, deployment strategies (rolling, blue-green, canary)…

    114 GitHub stars~3.4k tokensUpdated 4 days ago
    Auto-check: notes
  • Component Forge

    EliasOulkadi/shokunin

    Build production-grade components for React, Vue 3, and Svelte 5 with all states (loading, empty, error, success, idle), TypeScript strict, WCAG 2.2 accessibility, server components (RSC), and…

    114 GitHub stars~3.6k tokensUpdated 4 days ago
    Auto-check: notes
  • DB Admin

    EliasOulkadi/shokunin

    PostgreSQL database administration — backup/restore (pgdump, PITR, WAL archiving), health monitoring (connections, bloat, cache hit ratio, dead tuples), connection pooling (PgBouncer), replication…

    114 GitHub stars~2k tokensUpdated 4 days ago
    Auto-check: notes
  • DB Sculptor

    EliasOulkadi/shokunin

    Design database schemas with Prisma/Drizzle, PostgreSQL index strategy (B-tree, GIN, GiST, BRIN, Hash), query optimization (EXPLAIN ANALYZE), migration safety (expand/contract, zero-downtime), and…

    114 GitHub stars~3.1k tokensUpdated 4 days ago
    Auto-check: notes
  • Docker

    EliasOulkadi/shokunin

    Optimize Docker images with multi-stage builds, distroless bases, BuildKit cache mounts, multi-arch builds, compose watch, security hardening (non-root, seccomp, capabilities drop), and…

    114 GitHub stars~3.8k tokensUpdated 4 days ago
    Auto-check: notes
  • Error Handler

    EliasOulkadi/shokunin

    Design error handling, structured logging, and observability with OpenTelemetry (traces, metrics, logs), error classification, recovery patterns (retry with jitter, circuit breaker, bulkhead…

    114 GitHub stars~3.6k tokensUpdated 4 days ago
    Auto-check: notes

Categories

Questions about API Forge

What does API Forge do?

Design REST/GraphQL APIs with OpenAPI 3.1, error handling, pagination, rate limiting, webhooks, and idempotency. API Forge is an agent skill from EliasOulkadi/shokunin.1, error handling, pagination, rate limiting, webhooks, and idempotency.

When should I use API Forge?

API Forge fits situations like: user asks to design an API; create endpoints; define REST/GraphQL schema; generate OpenAPI spec.

How do I install API Forge in Claude Code?

Run `npx skills add EliasOulkadi/shokunin --skill api-forge -a claude-code`. Or copy the skill folder (.pack/skills/api-forge in EliasOulkadi/shokunin) into .claude/skills/api-forge in your project. Claude Code loads it when a task matches its description.

How do I install API Forge in Codex?

Run `npx skills add EliasOulkadi/shokunin --skill api-forge -a codex`. Or copy the skill folder (.pack/skills/api-forge in EliasOulkadi/shokunin) into .agents/skills/api-forge in your project. Codex loads it when a task matches its description.

Can I use API Forge in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add EliasOulkadi/shokunin --skill api-forge -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/api-forge, .gemini/skills/api-forge, .github/skills/api-forge and .opencode/skills/api-forge in your project.

What does API Forge need to run?

SKILL.md names no scripts, command-line tools or credentials: API Forge is instructions for the agent only. Compatibility (from SKILL.md): opencode.

Does API Forge access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is API Forge safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does API Forge use?

API Forge is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does API Forge use?

About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to API Forge?

Skills that share tags, products or a category with API Forge: System Design Communication (HoangNguyen0403/agent-skills-standard, 571 stars), API Architect (curiositech/some_claude_skills, 243 stars), API Contract Detection (prime-radiant-inc/greenfield, 292 stars) and Implementing API Patterns (ancoleman/ai-design-components, 526 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains API Forge?

EliasOulkadi (a GitHub user) maintains it in EliasOulkadi/shokunin, which has 114 GitHub stars. The repository holds 49 skills in this directory. The repository was last updated on October 5, 2026.

Source: EliasOulkadi/shokunin on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.