Native Shell
Native Shell: AI-generated UI, native in your app, on every platform. Apps on iOS, Android, macOS, Windows and Linux, GPUI apps and web pages load signed, sandboxed TSX modules at run time and draw th
Verified facts about what APIs actually return, for AI agents. pip install apifacts-pytest · POST https://apifacts.dev/v0/check
Translation pending
Developer toolsPython · ShellGitHub @IllouminusOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Open registry of verified facts about machine interfaces (APIs, SDKs, CLIs) for AI agents. Data CC BY 4.0, code MIT.
Taken from the repository README
Loading the full README.
Read the full README ↗A verified changelog of reality for AI agents. An open registry of typed, dated facts about what third-party machine interfaces (HTTP APIs, SDK packages, CLIs) actually do today, as opposed to what their docs say.
Interfaces change, docs lag, and nobody tells the agent. Every session pays tokens to rediscover the
same traps: a 200 with an empty array instead of a 429, a rate limit reported as status: 0 in the
body, an SDK release that silently dropped a field. Documentation tools answer "give me the right docs";
apifacts answers "the docs are wrong about this endpoint right now, here is the verified difference".
pip install apifacts-pytest # pytest plugin: a test failing on an HTTP error prints the known facts
uvx apifacts check https://api.stripe.com/v1/charges -X GET --status 401 # CLI (and library)
npx skills add Illouminus/apifacts # agent skill: on an API error, ask the registry first
Both packages are on PyPI, carry the same version and ship together from one tag
(release). The plugin sends nothing until a test fails. The skill
(skills/apifacts/SKILL.md) tells Claude Code and other agents when to
call apifacts check and how to read the answer.
Agents that fix a red build read the failing step's log, the annotations and the job summary. The
GitHub Action puts the known facts in all three (action/README.md):
- uses: Illouminus/apifacts/action@v0
with:
run: pytest -q # same exit code as without the action; scanned only when it fails
Anywhere else, pipe a log through apifacts scan (uvx apifacts scan build.log): it finds the
failed HTTP calls that requests, httpx, gh, axios and curl -f print, and asks about each.
One tool, check(target, method, status, body), over stdio; no resources, no prompts. Claude Code:
claude mcp add apifacts -- uvx --from 'apifacts[mcp]' apifacts mcp
Claude Desktop, Cursor and other clients (mcpServers in their JSON config):
{"mcpServers": {"apifacts": {"command": "uvx", "args": ["--from", "apifacts[mcp]", "apifacts", "mcp"]}}}
apifacts mcp --offline answers from the snapshot packaged in the wheel and sends nothing.
facts/<service>/, with a kind (error_meaning, rate_limit,
breaking_change, ...), the exact error signal, a one-sentence claim, dimensions (env, plan,
region, account_state) and evidence.check()One endpoint answers and learns at the same time: the request is the contribution. Send the target and, optionally, the error you got; receive matching facts with typed fixes and what the probes observe. If the target matches a registered template, a normalized observation is stored (no bodies, headers, query strings or raw IPs).
curl -s https://apifacts.dev/v0/check \
-H 'Content-Type: application/json' \
-d '{"target": {"method": "POST", "url": "https://api.stripe.com/v1/payment_intents"},
"error": {"status": 400, "body_excerpt": "Keys for idempotent requests can only be used with the same parameters they were first used with."}}'
The response is never empty: facts, observed, and an unknown.reason when nothing matches.
The API is live at https://apifacts.dev (/v0/check, /v0/services, /openapi.json, /healthz;
facts.baillot.dev, the old address, redirects there). The registry covers the services and facts listed at
apifacts.dev/registry, each fact page showing how it was
established; /llms.txt describes the API for agents. Design contracts
live in docs/specs/.
Running your own copy: the API reads facts/ and services/ once, at startup, so after a git pull
restart it; ops/deploy.sh checks out, syncs and restarts in one step.
Calling check() is contributing. Pull requests are for humans and API producers: see
CONTRIBUTING.md. Producer signatures are always free.
Code: MIT. Data (facts/ and the generated fact pages): CC BY 4.0.