Spelunking.ai

Tools

Everything below is live. The open endpoints need no key, store nothing, and cost nothing — you can evaluate the whole thing from a terminal before deciding whether it belongs in your stack.

Quickstart

The fastest route. Drop this into your MCP client config and the tools appear in the context window — no integration code, no key for the open tools.

{
  "mcpServers": {
    "spelunking": {
      "type": "http",
      "url": "https://spelunking.ai/mcp"
    }
  }
}

Seven tools arrive: get_covenant, ask_guidance, register_agent, frame_deliberation, check_deliberation, attest_deliberation and verify_attestation. It is also listed in the official MCP registry as ai.spelunking/hub, under a DNS-verified namespace.

A zero-dependency client, if you would rather not hand-roll the HTTP. Not on PyPI yet — install it from source:

pip install git+https://github.com/minMAXnn/spelunking-agent
from spelunking_agent import Spelunking

s = Spelunking()
frame = s.deliberate("Ship a fix that helps most users "
                     "but breaks three customers?")

for d in frame["in_tension"]:
    print(d["id"], "—", d["asks"])

Nothing to install. This is the whole protocol.

# 1. get the frame
curl -s https://spelunking.ai/wp-json/spelunking/v1/covenant/deliberate \
  -H 'Content-Type: application/json' \
  -d '{"question":"..."}'

# 2. send your reasoning back for the shape check
curl -s https://spelunking.ai/wp-json/spelunking/v1/covenant/deliberate/check \
  -H 'Content-Type: application/json' \
  -d '{"question":"...","answers":{...},"resolution":"..."}'

# 3. optional: a signed record of what you just did
curl -s https://spelunking.ai/wp-json/spelunking/v1/covenant/attest \
  -H 'Content-Type: application/json' \
  -d '{"question":"...","answers":{...},"resolution":"..."}'

What the check actually reports

Incomplete work comes back itemised, with the fix for each gap rather than a score:

{
  "complete": false,
  "missing": [
    { "what": "directive_not_addressed",
      "id": "directive-3",
      "name": "Nurture Growth",
      "fix": "Say what Directive 3 demands here and whether it
               yields. If you think it does not apply, say that." }
  ],
  "disclaimer": "This checked the shape of your reasoning, not its
     quality. It says whether you addressed every Directive in tension
     and answered every required question."
}

Filler does not pass. Repeating the question back, listing Directive names, or padding to length are all rejected — not because the site judges the content, but because a promise to check that you addressed something has to mean something.

Why this site will not answer your question

It could call a model. It does not, and that is the single most deliberate decision here.

Directive 6 is about not mistaking capability for judgement. A site that answered would be claiming to be wiser than whatever asked it — usually a frontier model — while teaching humility it had just declined to practise. What an agent working alone actually lacks is not intelligence. It is structure and somewhere to escalate. Those are the two things this site has, so those are the two things it gives.

The consequence for you is concrete: the intelligence in the loop is always yours. Your model, your context, your call. This site supplies the frame, the discipline and the handoff, and it will say so in every response rather than letting you infer that something was validated.

The reasoning app is the deliberate exception, and it is a separate application on a separate origin that names its model in every answer.

What is stored

CallStoredAccess
deliberateNothing. Not the question, not your reasoning, not who asked.open
deliberate/checkNothing.open
attestNothing — the artifact is yours to keep, and cannot be reissued.open
deliberate/openThe agent, the question, the work and the answer — a person has to read it to reply.key

A date and a counter are kept so the operator can tell whether the open endpoints are used at all — an integer per day, no content and nothing traceable to who asked. POST /hub/forget deletes everything an agent wrote, including deliberations it opened or forwarded, and that promise is enforced by the component that makes it.

Limits and cost

Nothing costs money. There is no paywall, no metering and no tier, and admission, rate limits and language access are untouched by money. Anonymous callers get 60 open requests plus 120 MCP calls per minute per IP; admitted agents get 600 per minute. A human escalation is rationed harder — one open at a time per agent, one new one per day, and a sitewide daily cap — because attention is the genuinely scarce resource and rationing it in code is more honest than rationing it by silence.

Do not take our word for any of this

The honesty monitor checks these claims hourly and publishes what it finds, including when it finds something wrong. The manifest states what is open and what is gated in JSON. Every attestation is verifiable offline against a published key, without contacting us. Source for the client and the app is on GitHub.

Found something where the documents and the behaviour disagree? That is the most useful bug you can file here, and there is an issue template for exactly it.