Browse documentation
The Agent Skill: install unlob into a coding agent
A SKILL.md a coding agent can install: the ground → receipt → get_document → why_not loop, with the exit semantics of status.
The API serves this file at /skill.md
in the SKILL.md shape coding agents install — YAML front matter naming the skill, then
the instructions. Save it as .claude/skills/unlob/SKILL.md (or your agent's
equivalent) and the agent knows how to use the API before it has read a page of this
site.
unlob compiles the open web into the smallest defensible evidence set for a task, and tells you when the evidence is not enough. One call returns evidence with provenance (who originally said it, who republished it, whether sources are independent), a coverage receipt (what was searched, what was not, how fresh it is), and what to do next.
You do not get a generated answer. You get the evidence and its structure; the reasoning is yours.
Setup
- Key:
UNLOB_API_KEY(starts withulb_). Get one at https://console.unlob.com — the free tier needs no card. - Base URL:
https://api.unlob.com. Send the key asx-api-key. - Discover the live surface before assuming anything:
GET /describe(unauthenticated).
The loop
Ground. One call per objective.
curl -sG -H "x-api-key: $UNLOB_API_KEY" https://api.unlob.com/ground \ --data-urlencode 'objective=what changed in the UK AI regulation position this week' \ -d max_age=7d -d min_independent_origins=2 -d token_budget=3000Read
statusfirst, thencoverage.statusMeaning Do sufficientEnough independent origins, a primary or official source present Read evidenceand actinsufficientEvidence exists but does not meet the bar Follow next_actions, or say the evidence is thinstaleNothing inside max_age;stale_evidenceshows what older evidence existsWiden max_ageor report that nothing recent was foundpartialPart of the index was unreachable Retry; never treat the answer as complete emptyNothing found Reformulate, or use why_notbefore asserting absenceUse the provenance. Each evidence item carries
source_role(official, primary, secondary, aggregator, ugc),origin_type(original, wire, press_release, republish), itsoriginandowner, and anindependence_score.coverage.independent_originscounts origins with distinct owners — seventeen URLs of one wire story are one origin.Check
risk_flagson each item before quoting it.instruction_likemeans the text addresses an AI system rather than a reader. Passstrip_instruction_like=trueto have those sentences removed server-side.Fetch full text only when you need it.
snippetis the passage. When anext_actionsentry saysget_document, callGET /doc/{id}.Before asserting that something does not exist, ask
GET /why_not?url=…. An absent URL and an absent topic are different findings, and the receipt'sknown_gapstells you which parts of the corpus were not searched.
Watching for change
GET /changes?objective=…&since=7d&known_urls=<url1>,<url2> reports what appeared since
then — new evidence, origins gained, an official or primary source appearing, evidence that
newly contradicts a claim — and whether each URL you relied on is still present,
removed (with the reason and its replacement) or unknown. provenance.limitations
says what it cannot know: removed passages are not reconstructable, so before-counts are
lower bounds.
Budgets
token_budgetcaps the evidence returned;budget.context_tokensreports what was packed. Default 3000.latency_budget_msbounds the per-story lookups; when it cuts in,coverage.not_searched.story_expansion_truncatedis true.- Calls cost credits:
ground5 andchanges10, however many stories they expand; a search or a document 1; a call that runs and fails 1.GET /describelists every cost, and each response says what it charged inx-credits-charged.
Over MCP
Connect to https://api.unlob.com/mcp with the same header. ?profile=grounding lists
only ground and get_document, which is the right surface for most tasks; the default
profile lists every tool, including the graph operations (corroborate, dossier,
authorities, related, path, assemble_context).
Rules of thumb
- Prefer
groundfor "what should I know about X". Prefersearchfor "find the page that says Y". - Never restate
partial: trueresults as complete. - Quote the
urlof the origin, not of a republish. - When two evidence items share an
owner, they are not independent confirmation.