docs/topics/SKILL.md
# yapi — LLM Skill Guide yapi is a CLI-first, git-friendly API client. You define requests in YAML files and run them from the terminal. No GUI, no accounts, no state — just files and a binary. ## When to Use yapi - Send HTTP, gRPC, GraphQL, or TCP requests - Chain multiple requests together (auth flow, then use the token) - Assert on responses (status codes, body content via JQ) - Run API test suites with `yapi test` - Poll endpoints until a condition is met ## Core Concepts **Every reques
npx skillsauth add jamierpond/yapi docs/topicsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
yapi is a CLI-first, git-friendly API client. You define requests in YAML files and run them from the terminal. No GUI, no accounts, no state — just files and a binary.
yapi testEvery request file starts with yapi: v1. This is required.
File extension: .yapi.yml (or .yapi.yaml). Test files use .test.yapi.yml.
Project config: yapi.config.yml at the project root defines environments and base URLs. yapi walks up the directory tree to find it.
Variables: Use ${VAR} syntax. Resolved from: chain step outputs > environment vars > shell env > defaults. Default values: ${VAR:-fallback}.
yapi run request.yapi.yml
yapi run request.yapi.yml -e prod # with environment
yapi send https://api.example.com/users # GET
yapi send https://api.example.com/users '{"name":"Alice"}' # POST (auto-detected)
yapi send -X PUT https://api.example.com/users/1 '{"name":"Bob"}' -H 'Authorization: Bearer tok'
yapi send https://api.example.com/users --jq '.[0].name'
yapi: v1
url: https://api.example.com/users
method: GET
yapi: v1
url: https://api.example.com/users
method: POST
body:
name: Alice
role: admin
yapi: v1
chain:
- name: login
url: https://api.example.com/auth
method: POST
body:
username: ${USERNAME}
password: ${PASSWORD}
expect:
status: 200
- name: get_profile
url: https://api.example.com/me
method: GET
headers:
Authorization: Bearer ${login.token}
expect:
status: 200
assert:
- .email != null
expect:
status: 200
assert:
- . | length > 0 # JQ expression, must evaluate to true
- .[0].id != null
- .count >= 10
yapi test ./tests # run all *.test.yapi.yml files
yapi test ./tests -e staging # against a specific environment
yapi test ./tests -p 8 # parallel execution
Define in yapi.config.yml:
yapi: v1
default_environment: local
environments:
local:
url: http://localhost:3000
vars:
API_KEY: dev_key
prod:
url: https://api.example.com
vars:
API_KEY: ${PROD_API_KEY}
Then in request files, use ${url} and ${API_KEY} — they resolve from the active environment.
The docs are split into topics (concepts/features) and commands (CLI reference). Read only what you need.
docs/topics/)| File | Read this when you need to... |
|------|-------------------------------|
| config.md | Know all available YAML fields (full schema reference) |
| chain.md | Chain multiple requests, pass data between steps |
| assert.md | Write assertions on status, body, or headers |
| variables.md | Understand ${VAR} interpolation and resolution order |
| environments.md | Set up dev/staging/prod environments |
| jq.md | Filter or transform response bodies with JQ |
| testing.md | Use the built-in test runner (yapi test) |
| polling.md | Poll an endpoint until a condition is met (wait_for) |
| send.md | Use yapi send for quick curl-like requests |
| protocols.md | Use gRPC, GraphQL, or TCP (not just HTTP) |
docs/commands/)Each file documents one CLI command: yapi_run.md, yapi_send.md, yapi_test.md, yapi_stress.md, yapi_watch.md, etc. Refer to these for flag details and usage examples.
Auth flow then use token:
Chain with ${login.token} in the Authorization header of subsequent steps.
Validate an API contract:
Use expect.assert with JQ expressions. Chain variable assertions let you compare across steps: .id == ${create.id}.
Wait for async job:
Use wait_for.until with a period or backoff and timeout.
Filter noisy responses:
Use jq_filter in the YAML or --jq on the CLI.
yapi: v1 at the top of every file — missing it is the most common error${VAR}, not $VARtruegrpc://, tcp://, or HTTP by defaulttools
# yapi CLI-first API testing for HTTP, GraphQL, gRPC, and TCP. ## The Workflow yapi enables test-driven API development. Write the test first, then implement until it passes: 1. **Write the test** - Create a `.yapi.yml` file with the expected behavior 2. **Run it** - `yapi run file.yapi.yml` (it will fail) 3. **Implement/fix** - Build the API endpoint 4. **Iterate** - Refine assertions, add edge cases This loop is the core of agentic API development with yapi. --- ## Environment Setup (Do
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------