Install
openclaw skills install @indigokarasu/ocas-reachLive world-data query engine. Queries real-time external APIs for factual ground truth — no synthesis, no opinion, no research. Routes requests through a registry of ~55 registered sources covering US government data, scholarly literature, weather and hazards, geocoding, finance and macro indicators, court records, nutrition, news events, property records, land due-diligence, academic papers, satellite imagery, and product manuals (3M+). Do not use for web research (use Sift), entity investigations (use Scout), or pattern analysis over historical signals.
openclaw skills install @indigokarasu/ocas-reachReach is the system's sensory layer for verified ground truth. It answers "what is" — not "what was," not "what should be," not "what might be." Each registered source is a deterministic connector: structured query in, structured response with citation out. No synthesis. No interpretation. Reach returns the fact; downstream skills synthesize.
For example, when the user asks "any recent FDA recalls of peanut butter," Reach queries the FDA API and returns the verbatim recall list with citations.
Reach owns: real-time external API calls, source-specific connector logic, source registry, query/response logging, monthly quota tracking, account ledger.
Reach does not own:
A query that needs synthesis after fetching is a two-step request: Reach returns the fact, the agent or downstream skill synthesizes.
When present:
Reach functions normally when none of these are present.
The authoritative source list lives in scripts/sources.yml (54 sources). Browsable index: references/sources/index.md. See references/credential-files.md for credential storage, references/account_provisioning.md for account registration.
Reach is explicitly authorized to register accounts at sources requiring them. See references/account_provisioning.md for the registration playbook. Not authorized to: pay for tiers, use different identity, accept arbitration waivers, register outside sources.yml.
8-step query pipeline: identify source → validate auth → check quota → build query → execute → log usage → write journal → return verbatim. No silent fall-through to alternative sources.
CLI via python3 scripts/reach.py. See references/sources/index.md for command reference and references/usage_tracking.md for quota management.
See references/source-evaluation-framework.md for the evaluation checklist and references/sources/_template.md for the source reference template.
katzilla and property_lookup predate the v3 registry. References: references/katzilla.md, references/property_lookup.md.
Reach/Sift boundary (Jun 12, 2026) — Reach owns: sources.yml, API connectors, MCP connections, quota tracking (CSAPI + all Reach-registered APIs), discovered APIs catalog (references/discovered-apis.md). Sift owns: research synthesis, web_search, entity extraction. NEVER manages own MCP/quota. Sift delegates to Reach for factual anchors via reach.csapi_check/increment and reach.query rapidapi.
RapidAPI is general-purpose marketplace (Jun 12, 2026) — 203 endpoints (finance, crypto, news, geo, weather, security, social, travel). NOT "local business search." Route via reach.query rapidapi. When one skill uses a narrow slice of a tool, don't let that define the tool for all skills. Always check canonical source/definition of a multi-skill shared tool.
ExchangeRate source doc is STALE (2026-07-24) — sources.yml declares exchangerate: with auth: none, but https://api.exchangerate.host now returns code 101 missing_access_key (requires access_key). Treat as effectively key-required until the source doc is updated to declare an env_var. Always live-verify a source's auth requirement rather than trusting the registry.
| File | When to read |
|---|---|
references/sources/index.md | Before picking which source to use for a query; when checking routing hints |
references/sources/<slug>.md | Before building a query for a specific source; when you need actions, params, response shape, or pitfalls |
references/credential-files.md | Credential storage, env_var names, which .env the active profile actually loads |
references/credential-files.md | When auditing whether a source is accessible — start here; misplaced keys (global root vs active profile) are the #1 cause of "key not found" |
references/usage_tracking.md | When checking quota status or usage counts; when debugging rate-limit issues |
references/source-evaluation-framework.md | Before adding a new source to the registry; when evaluating candidate APIs |
references/storage-layout.md | When inspecting or configuring the on-disk data and journal directories |
references/okrs.md | When reviewing OKR definitions or scoring skill performance |
references/api-mine-cron-notes.md | When debugging api-mine cron behavior; when "0 new APIs" result needs interpretation |
This skill implements the recovery contract from spec-ocas-recovery.md.
{agent_root}/commons/data/ocas-reach/evidence.jsonl, including no-op runs. The not_activity_reason field is mandatory when no side effects occur.gap_detected.degraded: <api> and returns partial results with error envelope.See references/storage-layout.md for the full directory structure.
Every reach.query run emits an Observation Journal. Account-registration runs (when Reach signs up at a new source) emit an Action Journal because side effects are involved (form submission, key storage).
Journal payload includes: source, action, params, outcome (success / auth_missing / source_error / parse_error / quota_blocked), and result_meta (extracted meta / citation / quality / http_status from the response — not the bulk payload).
| Job | Mechanism | Schedule | Command |
|---|---|---|---|
reach:update | cron | 0 0 * * * | Self-update from GitHub source |
reach:api-mine | cron | 0 4 * * * | Scan sessions for sites with APIs → references/discovered-apis.md |
The reach:api-mine cron job scans all session transcripts (not just research) for sites, services, databases, and archives that are used or needed by any skill. For each site found, it evaluates:
A site is only cataloged if it has a confirmed working API, the data is useful to an active skill/workflow, and the API is better than the current approach. Deduplicate against both sources.yml and references/discovered-apis.md.
Catalog: references/discovered-apis.md — fully evaluated candidates ready for integration into sources.yml.
Key principle: Not a general search index. Only sites that specific skills already use or need, where an API would reduce friction vs. the current method.
reach.init registers reach:update on first invocation. No operational background tasks beyond self-update — Reach is purely reactive to user/agent queries.
Session-retention limitation (Jun 18, 2026) — The session database (via session_search) only retains recent sessions (typically 48-72h of FTS5-indexed content). Older research sessions — even those with significant API discoveries — become unsearchable once they age out. This means:
references/discovered-apis.md (don't rely on the cron to catch it later)[SILENT] is correct — see references/api-mine-cron-notes.md § Cron-Skew.See references/self-update-reach.md.
A query is valid when:
source is registered in sources.ymlauth: optional)Otherwise return an explicit error envelope and write the failure to usage.jsonl with the appropriate status. Do not fall through to a different source silently — the operator will not know which source actually answered.
See references/gotchas.md for all operational pitfalls including quota exhaustion, User-Agent requirements, demo mode, rate-limit handling, account creation, non-commercial sources, and silent fall-through prevention.
Reach does not extract entities or emit Signals to Chronicle. It is a query passthrough — entity extraction from returned data is the responsibility of the calling skill.
See references/okrs.md.
public