SkillBill

SkillBill docs: API and agent guide

SkillBill checks agent skills for security risks and measures whether a cheaper version does the same job with fewer tokens. People use it in the browser; agents and scripts use the same public API.

When to use it

  1. Before installing an agent skill (a SKILL.md and its folder) from someone else, to see what it can reach and whether its security review is clear.
  2. When a skill your agent runs often costs too many tokens, to get a cheaper version that was measured doing the same job on the same tasks.
  3. When choosing between published skills, to compare the measured results on the skill pages.

When not to use it

  1. To run a skill or an agent for you. It checks and measures skills; it does not host them.
  2. To judge whether a skill is useful at all. It compares a skill with its own optimized version, not with having no skill.
  3. For prompts, models or MCP servers that are not agent skills.

Check a skill through the API

  1. POST https://skillbill.sh/v1/checks with a JSON body such as {"kind": "url", "value": "https://github.com/<owner>/<repo>/tree/<ref>/<skill folder>"}, or {"kind": "paste", "value": "<the SKILL.md text>"}, and Accept: text/event-stream. No sign-in is needed.
  2. Read the stream: a check event carries the check's id first, then stage events, a result event with the analysis, and security events with the review as it runs.
  3. Read the stored check any time later with GET https://skillbill.sh/v1/checks/<id>, or open https://skillbill.sh/r/<id> for the result page.
  4. A measured test, which builds and runs the optimized version, starts only when a signed-in person clicks it on the result page. An agent cannot start one through the API.

Example

curl -N -X POST https://skillbill.sh/v1/checks \
  -H 'Content-Type: application/json' \
  -H 'Accept: text/event-stream' \
  -d '{"kind":"url","value":"https://github.com/<owner>/<repo>/tree/main/skills/<name>"}'

Reference

Markdown for agents

Pages on this site answer in Markdown when a request's Accept header prefers text/markdown, and in HTML otherwise. A path that does not exist answers 404 in the same format.