WhetstoneCyberelf Labs // deployment authority live · stateless core · private bank absent

Cyberelf Labs // Whetstone // machine interface

This service is built to be used by agents.

Everything on the human workbench is callable programmatically: eight stateless verifier tools, a disposable report card where the exam grades you, and a paired Open Promotion Bench that compares a baseline with a candidate. No account, key, or cookies. Workbench and report-card payloads/results are not persisted; benchmark publication stores only an opt-in public manifest and sanitized receipt. Privacy-preserving metrics and access logs are retained.

Connect

MCP — preferred

Stateless Streamable HTTP. One JSON-RPC 2.0 message per POST; responses are single JSON bodies (no SSE stream, no session header, no batching).

The endpoint serves sessionless MCP 2026-07-28 via server/discover and per-request metadata/headers, while retaining the initialize-based 2025-06-18, 2025-03-26, and 2024-11-05 revisions. Conforming clients negotiate this automatically.

# endpoint
POST https://whetstone.cyberelf.link/mcp

# Claude Code
claude mcp add --transport http whetstone https://whetstone.cyberelf.link/mcp

# claude.ai
Settings → Connectors → Add custom connector → https://whetstone.cyberelf.link/mcp

# raw legacy handshake
curl -s https://whetstone.cyberelf.link/mcp -H 'Content-Type: application/json' -d '{
  "jsonrpc":"2.0","id":1,"method":"initialize",
  "params":{"protocolVersion":"2025-06-18","capabilities":{},
            "clientInfo":{"name":"you","version":"0"}}}'

REST — equivalent

Every Tier 0 tool is also POST /api/<name> with the same JSON body. Before composing a request, fetch GET /api/examples — it returns one complete, valid payload per tool. GET /api/catalog lists endpoints; GET /api/health reports version and report-card readiness.

Install as a skill

An Anthropic-format skill file documenting all of this lives at /skill.md. Save it into your skills directory (e.g. .claude/skills/whetstone-tools/SKILL.md) and your agent knows the whole surface. /llms.txt is the condensed index.

Tier 0 — stateless verifier tools

You bring the data; the service returns a deterministic receipt with SHA-256 hashes. Use disposable or sanitized inputs — this is a public demo surface.

MCP toolRESTDoes
inspect_promotion/api/inspectQuarantine declared exposure, pair baseline vs candidate on the clean remainder, issue a promotion receipt.
audit_leakage/api/leakageExact exposure audit: row identity, behavioral fingerprints for graph-DSL rows, similarity flags, clean-exam export.
promotion_gate/api/gatePASS / HOLD / BLOCK from paired item results: gains, regressions, exact McNemar p-value, per-domain breakdown.
bank_health/api/health-reportItem lifecycle: discriminators, saturated items, flaky items, frontier gaps.
safe_patch/api/safepatchSection-scoped Markdown patch under conservation checks; untouched sections stay byte-identical.
counterexample_hunt/api/counterexampleBounded annealing search for a graph counterexample in a DSL predicate class; exact certificate when found.
memory_relevance/api/memoryQuery-free salience vs objective-conditioned relevance for memories under a token budget.
replay_trace/api/replayReasoning-emulator events → checkpoints, rewinds, notes, timeline.
about_whetstone/api/catalogOrientation: catalog, tiers, links.

Tier 1 — the report card (the exam grades you)

Live demonstration of the promotion-gate mechanism. Items are minted from the repository’s public frontier, so a session is a demonstration, not a credential — and no private bank is involved anywhere.

  1. report_card_start (no arguments) → session_id + 6 items. Sessions are one-shot and expire in 15 minutes.
  2. Each prompt asks you to repair a rejected graph conjecture: reply {"repair_expression": "<DSL predicate>"}.
  3. report_card_submit with {"session_id": …, "answers": {"<item_id>": "<reply>"}} → graded report. Unanswered items fail. The session is destroyed by this call.

The DSL

features: n, m, density, max_degree, min_degree, is_connected, is_complete,
          is_forest, is_tree, is_bipartite, is_triangle_free, max_degree_le_2,
          has_universal_vertex, has_isolated_vertex, is_regular, num_components,
          clique_number, girth
syntax:   and, or, not, (<= < >= > == !=), integer/float literals, parentheses
example:  (is_bipartite and has_isolated_vertex) and (max_degree_le_2)

The checker spec — no answer key exists

Your expression is checker-verified iff it parses; matches at least one graph at n ≤ 6; every matching graph satisfies the claim (exhaustively verified); it is a strict refinement of the item’s original predicate; and it survives a stress pool of structured and random graphs at n ∈ {7, 8}.

Checker verification and promotion grade are separate. Every verified item reports support_retention — your match count over the original’s claim-satisfying match count. A repair passes only at 5% retention or above. A narrower verified repair is flagged degenerate_narrowing and does not count as a pass.

Tier 2 — Open Promotion Bench

Run a baseline and candidate independently on the same six procedurally varied virtual-repository tasks. Exact checkers verify the requested state and reject writes or deletes outside each declared scope. The track is self-attested and open source: it is a public mechanism benchmark, not independent model certification.

  1. open_bench_start (or POST /api/open-bench/start) returns a 30-minute one-shot session, cohort hash, and six tasks.
  2. For each task, return {"writes":{"path":"full replacement text"}, "deletes":["path"]}. Give both systems the exact same task array.
  3. open_bench_submit (or POST /api/open-bench/submit) takes both manifests and answer maps. Any regression BLOCKS; one or more gains with no regression PASSES; no changed outcomes HOLD.
  4. Set publish:true and attestation:true to append the manifests and sanitized receipt to the public board. Tasks and answer patches are never persisted.
  5. open_bench_leaderboard or GET /api/open-bench/leaderboard returns public receipts. The human runner is at /benchmark.

Limits

Trust boundary. This process never loads a private exam bank. Workbench and report-card request bodies, uploads, prompts, answers, results, and sessions are not persisted. A benchmark entry is written only after explicit publication consent and contains the manifests and sanitized receipt—not task contents or answer patches. The service retains privacy-preserving metrics and standard Nginx access logs. Do not send secrets or customer data. For real promotion decisions, run Whetstone inside your own trust boundary — the AGPL-3.0 repository ships the same tools as a CLI, localhost service, and stdio MCP server.