Stateless terminal tool: you describe who you want to meet in natural language; it runs web search (Tavily or Brave), fetches public pages, and uses OpenAI to return a ranked list of people as one line each (short blurb + evidence URLs). The ranker still uses why_relevant, outreach_angle, and quoted evidence internally; grounding drops rows that are not supported by the fetched page text.
This is not a complete professional graph. Coverage depends on the search index and which pages are fetched in one run. Accuracy here means evidence-backed: unsupported rows are dropped after grounding checks, then strict filters remove hedged blurbs (unclear, ?, etc.) and enforce anchor groups from the planner. Each anchor group represents one required concept (e.g. "previously at Company X") with several alias variants; a person must have at least one variant from every group present in their evidence text. This is fully generic -- no company names are hardcoded in the tool.
Requires Python 3.11+. On Windows, if python --version is older, use the Python Launcher (for example py -3.12) for the commands below, or create a virtual environment so pip and python refer to the same interpreter.
cd networking-engine
py -3.12 -m venv .venv
.\.venv\Scripts\activate
python -m pip install -U pip
python -m pip install -e ".[dev]"
copy .env.example .envAfter install, with the venv activated, the scout command is on your PATH (for example .venv\Scripts\scout.exe on Windows). Try:
scout query --help
scout versionThe PYTHONPATH=src trick only lasts for that shell. To make scout query ... work whenever you open a terminal:
-
Use the project venv (above):
py -3.12 -m venv .venvthen activate thenpython -m pip install -e ".[dev]". After that, alwayscdinto this repo and.\.venv\Scripts\activate(Windows) orsource .venv/bin/activate(macOS/Linux) before running commands. The package and thescoutexecutable are installed into that venv'sScripts/orbin/, so no extra env vars are needed. -
If you skip a venv, run
py -3.12 -m pip install -e ".[dev]"(orpython -m pip ...for your chosen interpreter), then runscoutusing that interpreter'sScripts/binfolder on your PATH or callscout.exeby full path. Avoid mixingpipfrom one Python install with a differentpy -3.x(common on Windows with multiple installs).
Edit .env:
OPENAI_API_KEY-- required.OPENAI_MODEL-- set in.envonly (default in.env.exampleisgpt-4o).SEARCH_PROVIDER--tavilyorbrave.TAVILY_API_KEYorBRAVE_API_KEY-- matching your provider.- Optional:
MAX_URLS(default 25),MAX_PEOPLE(default 12),HTTP_TIMEOUT_S,HTTP_USER_AGENT.
If you see 429 / insufficient_quota, the key is valid but the account has no usable credits or billing is inactive. Fix it in OpenAI billing (add a payment method or top up), or use a key from an org/project that has quota. The CLI now prints a short message instead of a full traceback for common OpenAI errors.
scout query "Find Virginia Tech alumni working at OpenAI"Planner preview only (no search, no ranking):
scout query "Find ML infra engineers at trading firms" --dry-run- Planner (OpenAI) turns your question into several web search strings and emits anchor groups (required concepts with alias variants).
- Search API returns URLs and snippets.
- Fetcher downloads HTML and extracts readable text with trafilatura.
- Ranker (OpenAI) proposes people with
why_relevant,outreach_angle, andevidencequotes (using planner must_have and anchor_groups in the prompt). - Grounding keeps only rows whose evidence quotes appear in the text for that URL.
- Strict filters drop hedged rows and enforce anchor groups -- every group (AND) must have at least one variant (OR) present in the person's evidence text.
- Output prints one concise line per person (short blurb + evidence URLs).
Use your own API keys and respect provider ToS. Fetch only URLs returned by search; use a normal User-Agent and reasonable timeouts. Do not use this tool to bypass paywalls or log into sites as someone else.
pytestLive end-to-end runs need valid keys in .env and are not required for CI.