skillcheck

agent
Guvenlik Denetimi
Basarisiz
Health Uyari
  • License รขโ‚ฌโ€ License: MIT
  • Description รขโ‚ฌโ€ Repository has a description
  • Active repo รขโ‚ฌโ€ Last push 0 days ago
  • Low visibility รขโ‚ฌโ€ Only 7 GitHub stars
Code Basarisiz
  • network request รขโ‚ฌโ€ Outbound network request in dashboard/api/_lib/clerk.js
  • process.env รขโ‚ฌโ€ Environment variable access in dashboard/api/_lib/config.js
  • exec() รขโ‚ฌโ€ Shell command execution in dashboard/api/_lib/http.js
  • network request รขโ‚ฌโ€ Outbound network request in dashboard/api/_lib/nvidia.js
  • process.env รขโ‚ฌโ€ Environment variable access in dashboard/api/_lib/store.js
  • network request รขโ‚ฌโ€ Outbound network request in dashboard/api/_lib/store.js
Permissions Gecti
  • Permissions รขโ‚ฌโ€ No dangerous permissions requested

Bu listing icin henuz AI raporu yok.

SUMMARY

๐Ÿงช A/B test your agent skills โ€” skillcheck measures whether a SKILL.md actually improves an LLM's task performance, with blind grading, bootstrap confidence intervals, and a 0โ€“100 score. CLI for Claude Code, Codex & Cursor skills.

README.md
SKILLCHECK โ€” is your skill actually helping the model?

npm version npm downloads CI License: MIT Node โ‰ฅ20

Measure whether an agent skill actually improves a model's task performance.

Most published SKILL.md files have never been tested. You can't tell whether they
help your model or are just decoration. Skillcheck answers that with a controlled
experiment instead of a vibe check.

Point it at any Markdown skill file and it runs an A/B test: it generates fresh tasks
for the skill's declared domain, has the model solve every task with and
without the skill injected, grades both arms blind, and reports the measured
effect with a bootstrap confidence interval and a 0โ€“100 quality score.

$ skillcheck

โœ“ Evaluation tasks ready ยท 12s
โœ“ Trials complete (30/30) ยท 1m 38s
โœ“ Grading complete (30/30) ยท 41s
โœ“ Analysis complete ยท 2m 33s

โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ SKILLCHECK RESULT                                      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Skill         API Documentation                        โ”‚
โ”‚ Run size      5 tasks ร— 3 trials                       โ”‚
โ”‚                                                        โ”‚
โ”‚ Verdict       HELPS                                    โ”‚
โ”‚ The skill HELPED โ€” model passed 80% of tasks with it   โ”‚
โ”‚ vs 55% without.                                        โ”‚
โ”‚                                                        โ”‚
โ”‚ With skill    80.0% of tasks passed                    โ”‚
โ”‚ Without skill 55.0% of tasks passed                    โ”‚
โ”‚ Skill effect  +25.0 pp change in pass rate             โ”‚
โ”‚ Confidence    +8.0 pp to +42.0 pp (95% range)          โ”‚
โ”‚ Token cost    +480 tokens to include the skill         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Satisfaction  โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–‘โ–‘โ–‘โ–‘  75.0/100  GOOD       โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Table of contents

Install

npm install -g @sx4im/skillcheck

# or run it without installing:
npx @sx4im/skillcheck

Requires Node.js 20+. Works on Linux, macOS, and Windows.

Skillcheck checks npm for a newer version about once a day and offers to update
(like the Codex and Gemini CLIs). Disable with SKILLCHECK_NO_UPDATE_CHECK=1.

Quick start

skillcheck

On first run it asks for your Skillcheck API key (grab a free one from the dashboard โ€”
the URL is built in, and the free tier includes 10 checks). Key entry is masked, the
key is verified before it's saved, then a full-screen file picker opens: navigate
folders with the arrow keys, pick any .md file, choose an effort level from the
arrow-key menu, and watch the live progress tracker until the result card lands.
The picker runs on the terminal's alternate screen, so quitting hands your
scrollback right back.

Point it straight at a file or folder to skip the picker:

skillcheck check ./SKILL.md
skillcheck ./my-skill-folder            # a folder containing a .md
skillcheck check ./SKILL.md --json      # machine-readable output
skillcheck check ./SKILL.md --output result.json

Fully headless (CI, scripts) โ€” set the key via environment variable:

export SKILLCHECK_TOKEN=chk_live_...
skillcheck check ./SKILL.md --tasks 5 --trials 3 --json

How it works

Skillcheck treats a skill like a drug trial treats a drug:

  1. Normalize โ€” the skill file is parsed; its declared domain is read from
    front matter (domain:/description:) or the first heading.
  2. Generate โ€” a task generator sees only the domain, never the skill body,
    so the tasks can't leak the skill's instructions. It produces 2ร— candidate
    tasks; a seeded shuffle picks the final set.
  3. Run โ€” every task runs K trials in two arms: with the skill injected as
    a system prompt, and without it. Same model, same temperature.
  4. Grade โ€” a blind grader scores each output against the task's pass/fail
    criterion. It never knows which arm produced the output (outputs are shuffled),
    and grades at temperature 0 in JSON mode.
  5. Score โ€” pass rates are compared pairwise and a 1000-iteration paired
    bootstrap produces the effect size, a 95% confidence interval, and the verdict:
    HELPS (CI fully above zero), HARMS (fully below), or PLACEBO (overlaps zero).

Every run is fresh: tasks and outputs are generated anew each time and check
stores nothing locally, so a repeated check is an independent measurement. Full
methodology in METHODOLOGY.md.

Architecture

How a check flows from your terminal to the result card:

flowchart LR
    subgraph CLI["skillcheck CLI (local)"]
        direction TB
        A["User input<br/>skillcheck check ./SKILL.md"] --> B{API key<br/>configured?}
        B -- no --> C["Interactive setup<br/>masked key โ†’ verified โ†’ saved"]
        B -- yes --> D
        C --> D["Normalize skill<br/>name ยท domain ยท instructions"]
        D --> E["Generate tasks<br/>domain only โ€” never the skill body"]
        E --> F["Run trials<br/>each task ร— K trials ร— 2 arms"]
        F --> G["Blind grading<br/>shuffled outputs ยท temp 0 ยท JSON verdict"]
        G --> H["Paired bootstrap<br/>1000 resamples โ†’ effect ยท 95% CI ยท verdict"]
        H --> I{Output mode}
        I -->|terminal| J["Result card<br/>+ animated satisfaction bar"]
        I -->|"--json / --output"| K["JSON result<br/>task suite + transcript hashes"]
    end

    subgraph Cloud["Skillcheck Cloud (dashboard/, Vercel)"]
        direction TB
        P["Metered proxy<br/>/api/chat/completions<br/>authenticates chk_live key<br/>counts 1 run per check<br/>pins model ยท caps max_tokens"]
        V["/api/key/verify"]
        S["NVIDIA key<br/>stays server-side"]
        P ~~~ V ~~~ S
    end

    subgraph NIM["NVIDIA NIM"]
        direction TB
        M["openai/gpt-oss-120b<br/>default for all three roles"]
    end

    CLI ==>|"model calls<br/>(generate ยท run ยท grade)"| Cloud
    CLI -.->|"setup: key verify"| Cloud
    Cloud ==>|server-side key| NIM
    CLI -.->|"direct mode<br/>(NVIDIA_API_KEY)"| NIM

    style CLI fill:#0b2942,stroke:#2d7dd2,color:#e8f0fe
    style Cloud fill:#102a12,stroke:#3fa34d,color:#e8f5e9
    style NIM fill:#2a2210,stroke:#d2a52d,color:#fdf6e3

Key properties:

  • One metered run per check โ€” every model call in a check shares a run id, so
    the hosted proxy counts the whole check as a single run.
  • No provider key on your machine (hosted mode) โ€” the CLI talks to the proxy;
    the NVIDIA key lives only on the server.
  • Direct mode โ€” set NVIDIA_API_KEY to bypass the proxy entirely and call
    NVIDIA NIM with your own key.

Commands

skillcheck                                  # interactive: pick a file, pick effort, run
skillcheck check <path> [--tasks N] [--trials K] [--output file.json] [--json] [--explain]
skillcheck setup                            # connect / change your API key
skillcheck logout                           # remove your saved API key
skillcheck eval <path> [--tasks N] [--trials K] [--output file.json]   # raw JSON evaluator
skillcheck verify <result.json> [--sample n]  # independently re-measure a published result
skillcheck corpus run --corpus corpus.json [--results dir]             # batch-evaluate many skills
skillcheck rot [--results dir] [--output report.json]                  # detect skills that stopped helping
skillcheck --version

Accepted inputs: any Markdown (.md) file โ€” SKILL.md, AGENTS.md, CLAUDE.md,
or any other .md โ€” or a folder containing one. --tasks is capped at 50 and
--trials at 10; mistyped options are rejected rather than silently ignored.

Reading the result

  • Verdict โ€” HELPS / PLACEBO / HARMS, decided by whether the 95%
    confidence interval clears zero. PLACEBO means no measurable difference,
    not necessarily a bad skill.

  • Skill effect โ€” the change in pass rate, in percentage points (pp).

  • Confidence โ€” the 95% range for the true effect. A wide range means the
    run was inconclusive; re-run at a higher effort for a clearer signal.

  • Token cost โ€” the prompt-token overhead of including the skill.

  • Satisfaction โ€” a 0โ€“100 quality score where 50 = no effect:

    Score Band Score Band
    โ‰ค10 Very bad 51โ€“60 Decent
    11โ€“30 Bad 61โ€“80 Good
    31โ€“50 Normal 81โ€“100 Excellent

Each run is an independent experiment โ€” tasks and model outputs are generated
fresh every time, so results vary run to run. That variance is what the
confidence interval quantifies.

Add --explain to see why a verdict landed where it did: a per-task breakdown
of the with/without pass rates, the change, and a contrasting example model output
from each arm โ€” printed below the card, and included in --json output under
explain. It reuses the outputs the run already produced, so it costs nothing
extra.

skillcheck check ./SKILL.md --explain
skillcheck check ./SKILL.md --explain --json    # breakdown under result.explain

Effort levels

The interactive run asks how thorough to be โ€” more tasks/trials means a tighter
confidence interval but a longer run:

Level Tasks ร— trials Typical time
Quick 2 ร— 1 ~30 sec
Standard 3 ร— 2 ~1โ€“2 min
Thorough 5 ร— 3 ~3โ€“4 min

For scripted runs, set it explicitly: skillcheck check ./SKILL.md --tasks 5 --trials 3.

Terminal experience

The CLI is built to feel like a first-class developer tool:

  • Live step tracker โ€” each phase persists as a receipt line
    (โœ“ Trials complete (30/30) ยท 1m 38s) while the active phase shows a spinner,
    a progress bar, and elapsed time. Progress renders on stderr, so piping
    stdout still gives you a clean result; piped stderr gets plain log lines
    instead of spinner frames.
  • Animated result card โ€” the satisfaction bar sweeps to its score on
    interactive terminals; non-TTY output is the same card, static.
  • Adaptive colour โ€” truecolor gradients where supported, 256/16-colour
    fallbacks elsewhere. NO_COLOR (any non-empty value)
    disables colour entirely; FORCE_COLOR=1|2|3 forces it on for piped output.
  • Quiet cancellation โ€” backing out of a menu with q/Ctrl+C exits with
    code 130 and a one-line note, not an error dump. Run failures print a
    concise โœ— block on stderr.
  • Masked secrets โ€” API-key entry never echoes; keys are stored at
    ~/.config/skillcheck/config.json with 0600 permissions.

Configuration

Credential precedence (highest wins):

Setting Mode Effect
<PROVIDER>_API_KEY direct Call OpenAI, Anthropic, Gemini, Groq, Mistral, OpenRouter, or NVIDIA NIM with your own key
SKILLCHECK_TOKEN hosted Use a Skillcheck Cloud key without saving anything
skillcheck setup interactive Setup assistant: choose Hosted mode or Bring Your Own Key (BYOK) with live model selection

Supported providers for Bring-Your-Own-Key (BYOK) direct mode:

  • OpenAI (OPENAI_API_KEY, models list via https://api.openai.com/v1/models)
  • Anthropic (ANTHROPIC_API_KEY, models list via https://api.anthropic.com/v1/models)
  • Google Gemini (GEMINI_API_KEY / GOOGLE_API_KEY, models list via https://generativelanguage.googleapis.com/v1beta/models)
  • Groq (GROQ_API_KEY, models list via https://api.groq.com/openai/v1/models)
  • Mistral AI (MISTRAL_API_KEY, models list via https://api.mistral.ai/v1/models)
  • OpenRouter (OPENROUTER_API_KEY, models list via https://openrouter.ai/api/v1/models)
  • NVIDIA NIM (NVIDIA_API_KEY, models list via https://integrate.api.nvidia.com/v1/models)

Optional environment variables:

Variable Default Purpose
SKILLCHECK_API_URL hosted cloud URL Point at a self-hosted proxy deployment
SKILLCHECK_MODEL provider default Override the model for all three roles
<PROVIDER>_GENERATOR_MODEL / <PROVIDER>_RUNNER_MODEL / <PROVIDER>_GRADER_MODEL โ€” Per-role model overrides for any provider (e.g. OPENAI_RUNNER_MODEL, ANTHROPIC_RUNNER_MODEL)
OPENAI_BASE_URL / ANTHROPIC_BASE_URL / ... provider default Custom API base URL per provider
SKILLCHECK_TIMEOUT_MS / NVIDIA_TIMEOUT_MS 120000 Per-request timeout
SKILLCHECK_REQUEST_DELAY_MS / NVIDIA_REQUEST_DELAY_MS 750 Minimum delay between requests (rate-limit safety)
SKILLCHECK_MAX_ATTEMPTS 8 Retry budget for retryable failures (429/5xx)
SKILLCHECK_NO_UPDATE_CHECK โ€” 1 disables the daily update check
SKILLCHECK_DEBUG โ€” 1 enables verbose per-call logging
NO_COLOR โ€” Any non-empty value disables colour (spec)
FORCE_COLOR โ€” 1/2/3 forces colour on, even when piped

Model choice

All three roles (task generator, runner, blind grader) default to the selected provider's optimal model (e.g., gpt-4o for OpenAI, claude-3-5-sonnet-20241022 for Anthropic, gemini-1.5-pro for Gemini, openai/gpt-oss-120b for NVIDIA NIM).

When running skillcheck setup, choosing Bring Your Own Key queries your provider's live /models endpoint, letting you pick any available model directly from your provider.

Role model overrides let you benchmark your specific production model while maintaining a strong generator and grader:
OPENAI_RUNNER_MODEL=gpt-4o-mini skillcheck check ./SKILL.md or ANTHROPIC_RUNNER_MODEL=claude-3-5-haiku-20241022 skillcheck check ./SKILL.md.

Self-hosting

Skillcheck's hosted tier runs behind a metered proxy so end users never need a provider key. The dashboard/ folder is a deployable Vercel app (Clerk sign-in, free-tier metering, optional Stripe upgrade) that issues chk_live_โ€ฆ keys and forwards completions to your server-side NVIDIA key. See the dashboard/README.md for deployment notes.

To bypass the hosted proxy, run skillcheck setup and select Bring Your Own Key, or set provider environment variables (e.g., OPENAI_API_KEY, ANTHROPIC_API_KEY, NVIDIA_API_KEY โ€” see .env.example).

Development

npm ci
npm run build          # compile to dist/
npm test               # vitest (131 tests)
npm run test:coverage  # vitest + v8 coverage gate (85% lines/stmts/funcs, 70% branches)
npm run lint           # eslint (flat config, typescript-eslint)
npm run typecheck      # strict TS, src + tests

The CLI lives in packages/cli (bin/skillcheck.ts โ†’ src/cli.ts).
packages/site is the static leaderboard site; dashboard/ is the hosted cloud.

The suite runs fully offline: the model adapter is mocked, so an end-to-end test
drives the whole normalize โ†’ generate โ†’ run โ†’ grade โ†’ score pipeline (plus the
retry adapter, metering, and every command) without a single API call. The
interactive terminal shell is verified behaviourally rather than counted toward the
coverage percentage.

Every push and pull request runs ci.yml โ€” lint,
typecheck, coverage, and a clean build on Node 20 and 22, a published-tarball
validation, and the dashboard's offline tests โ€” and it makes no model calls, so it
runs on forks too. Tagging a release (npm version patch && git push --follow-tags)
triggers release.yml, which republishes to npm
with provenance. Separately, a scheduled rot workflow
re-runs the live corpus weekly and opens a PR when a skill's verdict regresses.

Star history

If Skillcheck saved you from shipping a placebo skill, a โญ helps other people find it.

Star History Chart

License

MIT

Yorumlar (0)

Sonuc bulunamadi