Scout conducts lawful OSINT research on people, companies, and organizations, assembling provenance-backed briefs where every claim carries a source reference, retrieval timestamp, and direct quote. It works through a tiered source waterfall — public web first, then rate-limited registries, then paid databases only with explicit permission — collecting no more than the stated research goal requires.
Scout owns lawful OSINT research on people and organizations with provenance-backed output.
Scout does not own: general topic research (Sift), image processing (Look), knowledge graph writes (Elephas), social graph (Weave), communications (Dispatch).
scout.research.start — begin a new research request with subject and goalscout.research.expand --tier <1|2|3> — escalate to a higher source tierscout.brief.render — generate the final markdown brief with findings and sourcesscout.brief.render_pdf — optional PDF brief generationscout.status — return current research statescout.journal — write journal for the current run; called at end of every runscout.update — pull latest from GitHub source; preserves journals and dataResearchRequest requires: request_id, as_of, subject (type, name, aliases, known_locations, known_handles), goal, constraints (time_budget_minutes, minimize_pii).
Read references/scout_schemas.md for exact schema.
~/openclaw/db/ocas-elephas/intake/{signal_id}.signal.json. Use Signal schema from spec-ocas-shared-schemas.md. One file per entity or relationship with sufficient confidence.scout.journalWhen minimize_pii=true, suppress unnecessary sensitive details in the final brief.
Read references/scout_source_waterfall.md for full tier logic.
Markdown brief with: Executive Summary, Identity Resolution Notes, Findings, Risk and Uncertainty, Source Log. Every finding carries source-backed provenance.
Scout writes Signal files to Elephas intake: ~/openclaw/db/ocas-elephas/intake/{signal_id}.signal.json
Emit one Signal file per confirmed entity or high-confidence relationship discovered during research. Use the Signal schema from spec-ocas-shared-schemas.md. Elephas decides promotion.
See spec-ocas-interfaces.md for signal format.
~/openclaw/data/ocas-scout/
config.json
requests.jsonl
sources.jsonl
findings.jsonl
decisions.jsonl
briefs/
reports/
~/openclaw/journals/ocas-scout/
YYYY-MM-DD/
{run_id}.json
Default config.json:
{
"skill_id": "ocas-scout",
"skill_version": "2.3.0",
"config_version": "1",
"created_at": "",
"updated_at": "",
"waterfall": {
"enabled_tiers": [1, 2]
},
"paid_sources": {
"enabled": false
},
"brief": {
"format": "markdown"
},
"retention": {
"days": 90,
"max_records": 10000
}
}
Universal OKRs from spec-ocas-journal.md apply to all runs.
skill_okrs:
- name: verified_claim_ratio
metric: fraction of findings with at least one verified source reference
direction: maximize
target: 0.70
evaluation_window: 30_runs
- name: entity_resolution_accuracy
metric: fraction of identity resolutions confirmed correct
direction: maximize
target: 0.90
evaluation_window: 30_runs
- name: source_diversity
metric: median unique source domains per brief
direction: maximize
target: 6
evaluation_window: 30_runs
public
On first invocation of any Scout command, run scout.init:
~/openclaw/data/ocas-scout/ and all subdirectories (briefs/, reports/)config.json with ConfigBase fields if absentrequests.jsonl, sources.jsonl, findings.jsonl, decisions.jsonl~/openclaw/journals/ocas-scout/~/openclaw/db/ocas-elephas/intake/ exists (create if missing)scout:update if not already present (check openclaw cron list first)decisions.jsonl| Job name | Mechanism | Schedule | Command |
|---|---|---|---|
| --- | --- | --- | --- |
scout:update | cron | 0 0 * (midnight daily) | scout.update |
openclaw cron add --name scout:update --schedule "0 0 * * *" --command "scout.update" --sessionTarget isolated --lightContext true --timezone America/Los_Angeles
scout.update pulls the latest package from the source: URL in this file's frontmatter. Runs silently — no output unless the version changed or an error occurred.
source: from frontmatter → extract {owner}/{repo} from URLskill.jsongh api "repos/{owner}/{repo}/contents/skill.json" --jq '.content' | base64 -d | python3 -c "import sys,json;print(json.load(sys.stdin)['version'])"```bash
TMPDIR=$(mktemp -d)
gh api "repos/{owner}/{repo}/tarball/main" > "$TMPDIR/archive.tar.gz"
mkdir "$TMPDIR/extracted"
tar xzf "$TMPDIR/archive.tar.gz" -C "$TMPDIR/extracted" --strip-components=1
cp -R "$TMPDIR/extracted/"* ./
rm -rf "$TMPDIR"
```
I updated Scout from version {old} to {new}| File | When to read |
|---|---|
| --- | --- |
references/scout_schemas.md | Before creating requests, findings, or briefs |
references/scout_source_waterfall.md | Before tier selection or escalation decisions |
references/scout_brief_template.md | Before rendering briefs |
references/journal.md | Before scout.journal; at end of every run |
共 2 个版本