agentsclimarketplace

Scout

Skill indigokarasu/scout

Scout: structured OSINT research — lawful people, company, and organization research with full provenance.

Install
npx -y skills add indigokarasu/scout

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Structured OSINT research on people, companies, and organizations. Use for provenance-backed briefs, entity resolution across public sources, background research with cited sources, or free-first research workflows that escalate to paid sources only with explicit permission. Do not use for topic research without a person/org focus (use Sift) or illegal data collection.

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

18.8 KB, as published. Nobody here has run it

Interactive Menu

When invoked interactively, present a two-level menu. See references/interactive-menu.md for the full menu structure.

When to Use

  • OSINT research on people, companies, or topics
  • Structured investigation with source tracking
  • Due diligence and background research
  • Competitive intelligence gathering
  • When Sift needs deeper targeted research

When NOT to Use

  • General topic research (use Sift)
  • Image processing (use Look)
  • Knowledge graph writes (use Elephas)
  • Social graph management (use Weave)

Scout

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. This tiered approach exists because paid sources require explicit consent and rate-limited registries need careful quota management to avoid service degradation.

Scout integrates curated person-specific OSINT tools (theHarvester, Maigret, Holehe, h8mail, PhoneInfoga, and others), a public-records investigation framework (SEC EDGAR, USAspending, Senate lobbying, OFAC sanctions, ICIJ offshore leaks, NYC property records, OpenCorporates, CourtListener, Wayback Machine, Wikipedia/Wikidata, GDELT), and dynamically discovers new MCP-wrapped OSINT servers at runtime.

Responsibility boundary

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).

Ontology types

Scout works with these types from spec-ocas-ontology.md:

  • Entity/Person — people and their public profiles. The primary entity type Scout extracts.
  • Entity/AI — AI agents or organizations when relevant to research.
  • Thing/DigitalArtifact — public documents, profiles, and digital records found during research.

Scout emits Signals to Elephas after each completed research request, for each extracted entity with confidence >= med. Signal payload.type is "Person" or "AI". source_journal_type is "Research". Every emitted Signal must include a user_relevance field.

user_relevance field

Every Signal emitted by Scout carries a user_relevance field:

  • "user" — the signal is relevant to the user's personal knowledge graph
  • "agent_only" — agent-initiated research with no demonstrated user connection

Default is "agent_only". A signal receives user_relevance: "user" only when: (1) the user explicitly requested the research, OR (2) the entity connects to a user_relevance: "user" Chronicle entry. When in doubt, default to "agent_only".

Signal example:

{
  "signal_id": "sig-scout-20260402-001",
  "source_skill": "ocas-scout",
  "source_journal_type": "Research",
  "emitted_at": "2026-04-02T14:30:00Z",
  "user_relevance": "agent_only",
  "payload": {
    "type": "Person",
    "name": "Jane Doe",
    "confidence": "high",
    "source_refs": ["https://example.com/profile"]
  }
}

Commands

  • scout.research.start — begin a new research request with subject and goal
  • scout.research.expand --tier <1|2|3> — escalate to a higher source tier
  • scout.brief.render — generate the final markdown brief with findings and sources
  • scout.brief.render_pdf — optional PDF brief generation
  • scout.status — return current research state
  • scout.journal — write journal for the current run; called at end of every run
  • scout.update — pull latest from GitHub source; preserves journals and data
  • scout.sources.discover — discover new MCP servers relevant to current research
  • scout.sources.refresh — refresh curated source lists from GitHub
  • scout.sources.status — show state of dynamic source discovery

Invariants

  1. Legality-first — only publicly available sources without bypassing access controls
  2. Minimization — collect only what the research goal requires
  3. Provenance for every claim — at least one source reference with URL, retrieval timestamp, and quote
  4. Paid sources require explicit permission — Tier 3 needs a recorded PermissionGrant
  5. No doxxing by default — private details suppressed unless explicitly permitted
  6. Uncertainty must be surfaced — incomplete identity resolution stated clearly
  7. Identity gate — a profile is verified only when 2+ seed data points overlap (name + location, etc.). Username match alone = unverified_lead; exclude from synthesis
  8. Tiered verification — Sherlock results: top 3 verified immediately, 2-3 sampled, remainder only on explicit request
  9. Recursion cap — recursive handle discovery allowed for 1 additional pass; hard cap at 2 Sherlock passes per request
  10. Person-first tooling — always run theHarvester and OpenSanctions for person research. Run Holehe, h8mail, PhoneInfoga, Ghunt when relevant input data is available.

Input contract

ResearchRequest requires: request_id, as_of, subject (type, name, aliases, known_locations, known_handles, known_emails, known_phones), goal, constraints (time_budget_minutes, minimize_pii). Read references/scout_schemas.md for exact schema.

Research workflow

Full step-by-step workflow with tool commands, handle expansion logic, identity gating, and verification tiers is in references/scout_schemas.md.

Phase summary:

  • Normalize — parse request, validate subject identity inputs
  • Tier 1 collection — run person-specific tools (theHarvester, OpenSanctions) and public web search in parallel
  • Handle expansion — extract handles, run Sherlock/Maigret, apply identity gate (inv 7), tiered verification (inv 8), recursion cap at 2 passes (inv 9)
  • Email/phone tools — run Holehe, h8mail, EmailRep, Ghunt (if Gmail), PhoneInfoga as data is available
  • Public records investigation — for company/org research or when person research reveals corporate ties, run public-records fetch scripts (SEC EDGAR, USAspending, Senate lobbying, OFAC sanctions, ICIJ offshore leaks, OpenCorporates, CourtListener, NYC ACRIS, Wayback Machine, Wikipedia/Wikidata, GDELT). See references/scout_public_records.md for source selection, execution order, and cross-reference keys.
  • Entity resolution across sources — normalize names, run entity_resolution.py to cross-link entities between public-records CSVs and person-tool findings. Three match tiers: exact (high), fuzzy (medium), token_overlap (low).
  • Timing correlation (optional) — run timing_analysis.py to test whether event time series (e.g., lobbying filings vs contract awards) cluster suspiciously. Permutation test, one-tailed p-value.
  • Dynamic MCP discovery — if Tier 1 + public records results are thin, discover and connect to MCP-wrapped OSINT servers
  • Compile — record provenance, assign confidence, escalate to Tier 2/3 only as permitted
  • Brief — render markdown brief (see Output requirements). Near-match profiles surfaced explicitly, not discarded.
  • Emit & journal — store findings, emit Signal files per confirmed entity (with user_relevance), write journal via scout.journal

When minimize_pii=true, suppress unnecessary sensitive details in the final brief.

Source waterfall

Read references/scout_source_waterfall.md for full tier logic.

  • Tier 1 — Person-specific tools — theHarvester, OpenSanctions, Sherlock, Maigret, Holehe, h8mail, EmailRep, Ghunt, PhoneInfoga. See references/scout_person_sources.md for full list and execution order.
  • Web + platform search — public web via SearchX (local SearXNG), including Twitter/X, Reddit, LinkedIn, GitHub. Always runs.
  • Tier 1.5 — Public records — SEC EDGAR, USAspending, Senate lobbying (LD-1/LD-2), OFAC SDN sanctions, ICIJ offshore leaks, NYC property records (ACRIS), OpenCorporates, CourtListener, Wayback Machine, Wikipedia/Wikidata, GDELT. Python stdlib-only fetch scripts. Runs for company/org research or when person research reveals corporate ties. See references/scout_public_records.md.
  • Tier 2 — rate-limited sources, registries, MCP-discovered servers. Only if enabled and useful.
  • Tier 3 — paid OSINT providers, background databases. Requires explicit permission grant.

Output requirements

Markdown brief: Executive Summary, Identity Resolution Notes, Findings, Social Graph (if handles found), Digital Footprint (if email/phone tools ran), Public Records (if public-records investigation ran), Risk and Uncertainty, Source Log. Every finding carries source-backed provenance.

  • Social Graph: verified profiles (platform, URL, discovery method, verification evidence) + unverified leads separately. Omit if no handles found.
  • Digital Footprint: email accounts (Holehe), breaches (h8mail/HIBP), Google data (Ghunt), phone metadata (PhoneInfoga), email risk (EmailRep), dark web (OnionClaw). Omit if no data available.
  • Public Records: corporate filings (SEC EDGAR), government contracts (USAspending), lobbying disclosures (Senate LD-1/LD-2), sanctions (OFAC SDN), offshore leaks (ICIJ), property records (NYC ACRIS), corporate registry (OpenCorporates), court records (CourtListener), web archives (Wayback), knowledge base (Wikipedia/Wikidata), news monitoring (GDELT). Omit if no public-records investigation was run.

Read references/scout_brief_template.md for the full template.

Inter-skill interfaces

Scout writes Signal files to Elephas (via journal signal payload). One Signal per confirmed entity or high-confidence relationship. Use schema from spec-ocas-shared-schemas.md. Every Signal must include user_relevance. See spec-ocas-interfaces.md for signal format.

Recovery Behavior

This section defines error handling and recovery procedures for all scout jobs.

Implements the recovery contract from spec-ocas-recovery.md.

  • Evidence: Every run writes to {agent_root}/commons/data/ocas-scout/evidence.jsonl (including no-op runs; not_activity_reason mandatory when no side effects).
  • Gap detection: On wake, checks evidence log. If gap exceeds cadence (24h update, 7d research), logs gap_detected.
  • Degraded mode: When tools unavailable, logs degraded: <tool> and continues with available sources.
  • Log compaction: Logs older than 30 days (no-op) or 90 days (error/gap) compacted. Last 7 days retained.

Storage layout

See references/storage-layout.md for directory structure. Read references/scout_config.md for default config.json and field descriptions.

OKRs

See references/okrs.md for skill OKR definitions.

Optional skill cooperation

  • Sherlock — username-to-platform expansion during handle expansion. Falls back to sift.search("site:<platform> '<handle>'") if unavailable.
  • Sift — web search during Tier 1; Sift-dork fallback when Sherlock unavailable
  • Look — reverse image search for person identification when photo available
  • Weave — read social graph for identity context before research (read-only)
  • Elephas — emit Signal files for Chronicle promotion
  • native-mcp / mcporter — connect to dynamically discovered MCP-wrapped OSINT servers
  • RapidAPI — structured social media enrichment via rapidapi_call (see RapidAPI Enrichment Workflow below)

RapidAPI Enrichment Workflow

During Phase 3 (Handle Expansion) and Phase 4 (Email/Phone Tools), use RapidAPI social media endpoints to enrich profiles with structured data that free tools (Sherlock/Maigret) can't provide. Full procedure including person/company enrichment pipelines, rate limiting, and tier integration: see references/rapidapi-enrichment-workflow.md.

Journal outputs

  • Observation Journal — research runs producing findings
  • Research Journal — structured multi-source research sessions

Journals must include an entities_observed array (name, type, confidence, user_relevance). See references/journal.md for schema.

Visibility

public

Initialization

On first invocation, run scout.init: create data dirs + default config, create empty JSONL files, create journal dir, register cron jobs, log DecisionRecord, set up SearchX (SearXNG + nginx), verify person-specific tools (install missing via pip), check dark web tools (OnionClaw + Tor, non-blocking).

Background tasks

JobScheduleCommand
scout:update0 0 * * * (midnight daily)scout.update
scout:research0 9 * * 1 (Monday 9am)scout.research
scout:sources-refresh0 6 * * 0 (Sunday 6am)scout.sources.refresh

Self-update

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.

Read references/self_update.md for the full self-update procedure.

External Catalog Review

Monitors: awesome-osint-mcp-servers (weekly), awesome-osint (monthly), API-s-for-OSINT (monthly). New tools classified by tier → added to references/scout_person_sources.md. See references/scout_mcp_discovery.md for dynamic discovery. See references/sources-refresh.md for the concrete refresh procedure that runs on the scout:sources-refresh cron.

Gotchas

  • Tier 3 sources require explicit permission — Paid OSINT providers and background databases (Tier 3) cannot be queried without a recorded PermissionGrant. The skill will silently skip Tier 3 even if credentials are configured.
  • User relevance defaults to agent_only — Signals emitted to Elephas default to user_relevance: "agent_only" unless the user explicitly requested the research or the entity connects to a known user Chronicle entry. This means most Scout entities won't be promoted.
  • Hard cap at 2 Sherlock passes — Recursive handle discovery is allowed for exactly 1 additional pass (2 total). Further recursion is silently blocked regardless of leads found.
  • Identity gate requires 2+ data points — A username match alone produces only unverified_lead status. Profiles are verified only when 2+ seed data points overlap (name + location, etc.).
  • minimize_pii suppresses home addresses and personal details — When the user sets minimize_pii=true, the final brief suppresses unnecessary sensitive details even if they were found during research. Re-run without the flag to see full data.
  • "Not subscribed" ≠ broken on RapidAPI. Many APIs return tools on tools/list but "You are not subscribed to this API" on actual calls. These are tier-gated by the provider, not broken. 3 genuinely broken LinkedIn APIs (linkedin-data-api, linkedin-api8, li-data-scraper) — provider shut down. 4 new ones work: fresh-linkedin-scraper-api (primary), linkedinscraper, linkedin-email-finder5, linkedin-lead-enrichment.
  • gh api base64 content is unreliable for countinggh api repos/<owner>/<repo>/readme --jq '.content' | base64 -d can silently return truncated or empty results. For fetching raw GitHub README content, use curl -s "https://raw.githubusercontent.com/<owner>/<repo>/<branch>/README.md" instead. This returns clean text that wc -l and grep can process directly.
  • Branch names vary across reposjivoi/awesome-osint uses master (not main). Always verify branch name with a quick curl -s -o /dev/null -w "%{http_code}" probe before fetching content.
  • curl timeout for unreliable endpoints — Some GitHub endpoints return 0 bytes under rate-limiting. Use --max-time 15 and check HTTP status code before processing output.
  • Public-records scripts use stdlib only — All fetch scripts in scripts/fetch_*.py use Python stdlib only (no pip installs required). They use urllib.request with retry logic and respect Retry-After headers. 429 responses surface immediately with the upstream's quota message.
  • Entity resolution is token-bag onlyentity_resolution.py does NOT use external fuzzy libraries (no rapidfuzz, no jellyfish). Token-bag matching is the upper bound. For Levenshtein, transliteration, or phonetic matching, pip-install separately.
  • ICIJ offshore leaks cache — First run downloads ~70 MB bulk CSV. Cached for 30 days under $HERMES_OSINT_CACHE/icij/ (default: ~/.cache/hermes-osint/icij/). Subsequent runs search the local cache.
  • Statistical significance ≠ wrongdoingtiming_analysis.py p < 0.05 means the timing pattern is unlikely under the null. It does not establish corruption. Always state this in the brief.

Support File Map

FileWhen to read
references/scout_schemas.mdBefore requests/findings/briefs; full workflow steps
references/scout_config.mdDefault config.json and field descriptions
references/scout_source_waterfall.mdBefore tier selection or escalation
references/scout_brief_template.mdBefore rendering briefs
references/scout_person_sources.mdAt start of every person research run
references/scout_public_records.mdAt start of every company/org research run; when person research reveals corporate ties; before Phase 5
references/scout_mcp_discovery.mdBefore scout.sources.discover; before Tier 2 escalation
references/sources-refresh.mdBefore scout.sources.refresh; before weekly cron refresh runs
references/rapidapi-osint-params.mdBefore RapidAPI enrichment; param patterns per platform
references/rapidapi-enrichment-workflow.mdDuring Phase 3/4 research; RapidAPI person/company enrichment pipelines
references/journal.mdBefore scout.journal; at end of every run
references/self_update.mdBefore running scout.update; when debugging self-update failures

Update command

This skill self-updates every 24 hours via:

scout.update

This pulls the latest version from GitHub and restarts the skill's background tasks if applicable.

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.