[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DCYGGMEYW534FJB0G87WBW":3,"skill-same:01M6DCYGGMEYW534FJB0G87WBW":82},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":40,"linkOnly":41,"markdownContent":42,"markdownBody":43,"frontMatter":44,"refName":60,"commitSha":61,"skillDirectory":62,"forksCount":63,"repositoryHtmlUrl":64,"repositoryHomepageUrl":6,"ownerHtmlUrl":65,"ownerBlogUrl":6,"ownerDescription":66,"updatedAt":67,"install":68,"resources":81},"01M6DCYGGMEYW534FJB0G87WBW","osint-investigation",null,"Follow the money via public records and sanctions data.","zapabob\u002FSkills","zapabob","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F130830376?v=4","01M6DBMYZAGRTFQDSQYW3W764P","峯岸 亮","01M6DBMZ3GKDSJ01NZ9XTZD7JD",2,"MIT","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002F1e\u002F1e480fc9f76a14aa948d43668f18fdab6dda79245a45d3d7012dac2ab214b72f\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39],"osint","investigation","osint investigation","macos","linux","research","windows","registry","data","hermes","hermes agent","public","arxiv","money","domain","due-diligence","2026-11-10 10:12:30",false,"---\nname: osint-investigation\ndescription: Follow the money via public records and sanctions data.\nversion: 0.1.0\nplatforms: [linux, macos, windows]\nauthor: Hermes Agent (adapted from ShinMegamiBoson\u002FOpenPlanter, MIT)\nlicense: MIT\nmetadata:\n  hermes:\n    tags: [osint, investigation, public-records, sec, sanctions, corporate-registry, property, courts, due-diligence, journalism]\n    category: research\n    related_skills: [domain-intel, arxiv]\n---\n\n# OSINT Investigation — Public Records Cross-Reference\n\nInvestigative framework for public-records OSINT: government contracts,\ncorporate filings, lobbying, sanctions, offshore leaks, property records,\ncourt records, web archives, knowledge bases, and global news. Resolve\nentities across heterogeneous sources, build cross-links with explicit\nconfidence, run statistical timing tests, and produce structured evidence\nchains.\n\n**Python stdlib only.** Zero install. Works on Linux, macOS, Windows. Most\nsources work with no API key (OpenCorporates has an optional free token\nthat raises rate limits).\n\nAdapted from the MIT-licensed ShinMegamiBoson\u002FOpenPlanter project; expanded\nto cover identity \u002F property \u002F litigation \u002F archives \u002F news sources that\nthe original didn't address.\n\n## When to use this skill\n\nUse when the user asks for:\n\n- \"follow the money\" — government contracts, lobbying → legislation, sanctions\n- corporate due diligence — who controls company X, where are they\n  incorporated, who serves on their boards, what filings have they made\n- sanctions screening — is entity X on OFAC SDN, ICIJ offshore leaks\n- pay-to-play investigation — contractors with offshore ties, lobbying\n  clients winning awards\n- property ownership — find recorded deeds\u002Fmortgages by name or address\n  (NYC; for other counties point users at the relevant recorder)\n- litigation history — find federal + state court opinions and PACER dockets\n- multi-source entity resolution where naming varies (LLC suffixes, abbreviations)\n- evidence-chain construction with explicit confidence levels\n- \"what's been said about X\" — international news (GDELT) + Wikipedia\n  narrative + Wayback Machine to recover dead URLs\n\nDo NOT use this skill for:\n\n- general web research → `web_search` \u002F `web_extract`\n- domain\u002Finfrastructure OSINT → `domain-intel` skill\n- academic literature → `arxiv` skill\n- social-media profile discovery → `sherlock` skill (optional)\n- US **federal** campaign finance — FEC is intentionally NOT covered here\n  (the API is unreliable for ad-hoc contributor-name queries on the free\n  DEMO_KEY tier). For federal donations, point users at\n  https:\u002F\u002Fwww.fec.gov\u002Fdata\u002F directly.\n\n## Workflow\n\nThe agent runs scripts via the `terminal` tool. `SKILL_DIR` is the directory\nholding this SKILL.md.\n\n### 1. Identify which sources apply\n\nRead the data-source wiki entries to plan the investigation:\n\n```\nls SKILL_DIR\u002Freferences\u002Fsources\u002F\n\n# Federal financial \u002F regulatory\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fsec-edgar.md       # corporate filings\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fusaspending.md     # federal contracts\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fsenate-ld.md       # lobbying\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fofac-sdn.md        # sanctions\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Ficij-offshore.md   # offshore leaks\n\n# Identity \u002F property \u002F litigation \u002F archives \u002F news\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fnyc-acris.md       # NYC property records\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fopencorporates.md  # global corporate registry\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fcourtlistener.md   # court records (federal + state)\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fwayback.md         # Wayback Machine archives\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fwikipedia.md       # Wikipedia + Wikidata\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fgdelt.md           # global news monitoring\n```\n\nEach entry follows a 9-section template: summary, access, schema, coverage,\ncross-reference keys, data quality, acquisition, legal, references.\n\nThe **cross-reference potential** section maps join keys between sources — read\nthose first to pick the right pair.\n\n### 2. Acquire data\n\nEach source has a stdlib-only fetch script in `SKILL_DIR\u002Fscripts\u002F`:\n\n**Federal financial \u002F regulatory**\n\n```bash\n# SEC EDGAR filings (corporate disclosures)\npython SKILL_DIR\u002Fscripts\u002Ffetch_sec_edgar.py --cik 0000320193 \\\n    --types 10-K,10-Q --out data\u002Fedgar_filings.csv\n\n# USAspending federal contracts\npython SKILL_DIR\u002Fscripts\u002Ffetch_usaspending.py --recipient \"EXAMPLE CORP\" \\\n    --fy 2024 --out data\u002Fcontracts.csv\n\n# Senate LD-1 \u002F LD-2 lobbying disclosures\npython SKILL_DIR\u002Fscripts\u002Ffetch_senate_ld.py --client \"EXAMPLE CORP\" \\\n    --year 2024 --out data\u002Flobbying.csv\n\n# OFAC SDN sanctions list (full snapshot)\npython SKILL_DIR\u002Fscripts\u002Ffetch_ofac_sdn.py --out data\u002Fofac_sdn.csv\n\n# ICIJ Offshore Leaks — downloads ~70 MB bulk CSV on first use,\n# then searches it locally. Cached for 30 days under\n# $HERMES_OSINT_CACHE\u002Ficij\u002F (default: ~\u002F.cache\u002Fhermes-osint\u002Ficij\u002F).\npython SKILL_DIR\u002Fscripts\u002Ffetch_icij_offshore.py --entity \"EXAMPLE CORP\" \\\n    --out data\u002Ficij.csv\n```\n\n**Identity \u002F property \u002F litigation \u002F archives \u002F news**\n\n```bash\n# NYC property records (deeds, mortgages, liens) — ACRIS via Socrata\npython SKILL_DIR\u002Fscripts\u002Ffetch_nyc_acris.py --name \"SMITH, JOHN\" \\\n    --out data\u002Facris.csv\npython SKILL_DIR\u002Fscripts\u002Ffetch_nyc_acris.py --address \"571 HUDSON\" \\\n    --out data\u002Facris_addr.csv\n\n# OpenCorporates — 130+ jurisdiction corporate registry\n# (free token required; set OPENCORPORATES_API_TOKEN or pass --token)\npython SKILL_DIR\u002Fscripts\u002Ffetch_opencorporates.py --query \"Example Corp\" \\\n    --jurisdiction us_ny --out data\u002Fopencorporates.csv\n\n# CourtListener — federal + state court opinions, PACER dockets\npython SKILL_DIR\u002Fscripts\u002Ffetch_courtlistener.py --query \"Smith v. Example Corp\" \\\n    --type opinions --out data\u002Fcourts.csv\n\n# Wayback Machine — historical web captures\npython SKILL_DIR\u002Fscripts\u002Ffetch_wayback.py --url \"example.com\" \\\n    --match host --collapse digest --out data\u002Fwayback.csv\n\n# Wikipedia + Wikidata — narrative bio + structured facts\n# Set HERMES_OSINT_UA=your-app\u002F1.0 (your@email) to identify yourself\npython SKILL_DIR\u002Fscripts\u002Ffetch_wikipedia.py --query \"Bill Gates\" \\\n    --out data\u002Fwp.csv\n\n# GDELT — global news in 100+ languages, ~2015→present\npython SKILL_DIR\u002Fscripts\u002Ffetch_gdelt.py --query '\"Example Corp\"' \\\n    --timespan 1y --out data\u002Fgdelt.csv\n```\n\nAll outputs are normalized CSV with a header row. Re-run scripts idempotently.\n\nWhen a private individual won't be in a source (e.g. SEC EDGAR for a non-public-\ncompany person, USAspending for someone who isn't a federal contractor, Senate\nLDA for someone who isn't a lobbying client), the script returns 0 rows with a\nclear warning rather than silently writing an empty CSV. EDGAR specifically\nflags when the company-name resolver matched an individual Form 3\u002F4\u002F5 filer\nrather than a corporate registrant.\n\nRate-limit notes are in each source's wiki entry. Default fetchers sleep\npolitely between paginated requests. **API keys raise rate limits** for\nsources that support them (`SEC_USER_AGENT`, `SENATE_LDA_TOKEN`,\n`OPENCORPORATES_API_TOKEN`, `COURTLISTENER_TOKEN`). All scripts surface\n429 responses immediately with the upstream's quota message so the user\nknows to slow down or supply a key.\n\n### 3. Resolve entities across sources\n\nNormalize names and find matches between two CSV files:\n\n```bash\n# Match lobbying clients (Senate LDA) against contract recipients (USAspending)\npython SKILL_DIR\u002Fscripts\u002Fentity_resolution.py \\\n    --left  data\u002Flobbying.csv   --left-name-col  client_name \\\n    --right data\u002Fcontracts.csv  --right-name-col recipient_name \\\n    --out data\u002Fcross_links.csv\n```\n\nThree matching tiers with explicit confidence:\n\n| Tier | Method | Confidence |\n|------|--------|------------|\n| `exact` | Normalized strings equal after suffix\u002Fpunctuation strip | high |\n| `fuzzy` | Sorted-token equality (word-bag match) | medium |\n| `token_overlap` | ≥60% token overlap, ≥2 shared tokens, tokens ≥4 chars | low |\n\nOutput `cross_links.csv` columns: `match_type, confidence, left_name,\nright_name, left_normalized, right_normalized, left_row, right_row`.\n\n### 4. Statistical timing correlation (optional)\n\nTest whether two time series cluster suspiciously close together — e.g.\nlobbying filings near contract awards — using a permutation test:\n\n```bash\npython SKILL_DIR\u002Fscripts\u002Ftiming_analysis.py \\\n    --donations data\u002Flobbying.csv --donation-date-col filing_date \\\n        --donation-amount-col income --donation-donor-col client_name \\\n        --donation-recipient-col registrant_name \\\n    --contracts data\u002Fcontracts.csv --contract-date-col award_date \\\n        --contract-vendor-col recipient_name \\\n    --cross-links data\u002Fcross_links.csv \\\n    --permutations 1000 \\\n    --out data\u002Ftiming.json\n```\n\nThe script's column flags are intentionally generic — the original tool was\nwritten for donations vs awards, but it works for any (event, payee) time\nseries joined through cross-links. Null hypothesis: event timing is\nindependent of award dates. One-tailed p-value = fraction of permutations\nwith mean nearest-award distance ≤ observed. Minimum 3 events per (payer,\nvendor) pair to run the test.\n\n### 5. Build the findings JSON (evidence chain)\n\n```bash\npython SKILL_DIR\u002Fscripts\u002Fbuild_findings.py \\\n    --cross-links data\u002Fcross_links.csv \\\n    --timing data\u002Ftiming.json \\\n    --out data\u002Ffindings.json\n```\n\nEvery finding has `id, title, severity, confidence, summary, evidence[], sources[]`.\nEach evidence item points back to a specific row in a source CSV. The user (or a\nfollow-up agent) can verify every claim against its source.\n\n## Confidence and evidence discipline\n\nThis is the load-bearing rule of the skill. Tell the user:\n\n- Every claim must trace to a record. No naked assertions.\n- Confidence tier travels with the claim. `match_type=fuzzy` is \"probable\",\n  not \"confirmed.\"\n- Entity resolution produces candidates, NOT conclusions. A `fuzzy` match\n  between \"ACME LLC\" and \"Acme Holdings Group\" is a lead, not a fact.\n- Statistical significance ≠ wrongdoing. p \u003C 0.05 means the timing pattern\n  is unlikely under the null. It does not establish corruption.\n- All data sources here are public records. They may still contain\n  inaccuracies, stale info, or redactions (GDPR, sealed records).\n\n## Adding a new data source\n\nUse the template:\n\n```bash\ncp SKILL_DIR\u002Ftemplates\u002Fsource-template.md \\\n    SKILL_DIR\u002Freferences\u002Fsources\u002F\u003Cyour-source>.md\n```\n\nFill in all 9 sections. Write a `fetch_\u003Csource>.py` script in `scripts\u002F` that\nuses stdlib only and writes a normalized CSV. Update the source list in the\n\"When to use\" section above.\n\n## Tools and their limits\n\n- `entity_resolution.py` does NOT use external fuzzy libraries (no rapidfuzz,\n  no jellyfish). Token-bag matching is the upper bound here. If you need\n  Levenshtein, transliteration, or phonetic matching, pip-install separately.\n- `timing_analysis.py` uses Python's `random` for permutations. For\n  reproducibility, pass `--seed N`.\n- `fetch_*.py` scripts use `urllib.request` and respect `Retry-After`. Heavy\n  bulk usage may still violate ToS — read each source's legal section first.\n\n## Legal note\n\nAll Phase-1 sources are public records. Bulk acquisition is permitted under\ntheir respective access terms (FOIA, public records law, ICIJ explicit\npublication, OFAC public data). However:\n\n- Some sources rate-limit aggressively. Respect their headers.\n- Some redact registrant info (GDPR on WHOIS, sealed filings).\n- Cross-referencing public records to identify private individuals can have\n  ethical implications. The skill produces evidence chains, not accusations.\n","# OSINT Investigation — Public Records Cross-Reference\n\nInvestigative framework for public-records OSINT: government contracts,\ncorporate filings, lobbying, sanctions, offshore leaks, property records,\ncourt records, web archives, knowledge bases, and global news. Resolve\nentities across heterogeneous sources, build cross-links with explicit\nconfidence, run statistical timing tests, and produce structured evidence\nchains.\n\n**Python stdlib only.** Zero install. Works on Linux, macOS, Windows. Most\nsources work with no API key (OpenCorporates has an optional free token\nthat raises rate limits).\n\nAdapted from the MIT-licensed ShinMegamiBoson\u002FOpenPlanter project; expanded\nto cover identity \u002F property \u002F litigation \u002F archives \u002F news sources that\nthe original didn't address.\n\n## When to use this skill\n\nUse when the user asks for:\n\n- \"follow the money\" — government contracts, lobbying → legislation, sanctions\n- corporate due diligence — who controls company X, where are they\n  incorporated, who serves on their boards, what filings have they made\n- sanctions screening — is entity X on OFAC SDN, ICIJ offshore leaks\n- pay-to-play investigation — contractors with offshore ties, lobbying\n  clients winning awards\n- property ownership — find recorded deeds\u002Fmortgages by name or address\n  (NYC; for other counties point users at the relevant recorder)\n- litigation history — find federal + state court opinions and PACER dockets\n- multi-source entity resolution where naming varies (LLC suffixes, abbreviations)\n- evidence-chain construction with explicit confidence levels\n- \"what's been said about X\" — international news (GDELT) + Wikipedia\n  narrative + Wayback Machine to recover dead URLs\n\nDo NOT use this skill for:\n\n- general web research → `web_search` \u002F `web_extract`\n- domain\u002Finfrastructure OSINT → `domain-intel` skill\n- academic literature → `arxiv` skill\n- social-media profile discovery → `sherlock` skill (optional)\n- US **federal** campaign finance — FEC is intentionally NOT covered here\n  (the API is unreliable for ad-hoc contributor-name queries on the free\n  DEMO_KEY tier). For federal donations, point users at\n  https:\u002F\u002Fwww.fec.gov\u002Fdata\u002F directly.\n\n## Workflow\n\nThe agent runs scripts via the `terminal` tool. `SKILL_DIR` is the directory\nholding this SKILL.md.\n\n### 1. Identify which sources apply\n\nRead the data-source wiki entries to plan the investigation:\n\n```\nls SKILL_DIR\u002Freferences\u002Fsources\u002F\n\n# Federal financial \u002F regulatory\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fsec-edgar.md       # corporate filings\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fusaspending.md     # federal contracts\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fsenate-ld.md       # lobbying\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fofac-sdn.md        # sanctions\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Ficij-offshore.md   # offshore leaks\n\n# Identity \u002F property \u002F litigation \u002F archives \u002F news\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fnyc-acris.md       # NYC property records\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fopencorporates.md  # global corporate registry\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fcourtlistener.md   # court records (federal + state)\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fwayback.md         # Wayback Machine archives\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fwikipedia.md       # Wikipedia + Wikidata\ncat SKILL_DIR\u002Freferences\u002Fsources\u002Fgdelt.md           # global news monitoring\n```\n\nEach entry follows a 9-section template: summary, access, schema, coverage,\ncross-reference keys, data quality, acquisition, legal, references.\n\nThe **cross-reference potential** section maps join keys between sources — read\nthose first to pick the right pair.\n\n### 2. Acquire data\n\nEach source has a stdlib-only fetch script in `SKILL_DIR\u002Fscripts\u002F`:\n\n**Federal financial \u002F regulatory**\n\n```bash\n# SEC EDGAR filings (corporate disclosures)\npython SKILL_DIR\u002Fscripts\u002Ffetch_sec_edgar.py --cik 0000320193 \\\n    --types 10-K,10-Q --out data\u002Fedgar_filings.csv\n\n# USAspending federal contracts\npython SKILL_DIR\u002Fscripts\u002Ffetch_usaspending.py --recipient \"EXAMPLE CORP\" \\\n    --fy 2024 --out data\u002Fcontracts.csv\n\n# Senate LD-1 \u002F LD-2 lobbying disclosures\npython SKILL_DIR\u002Fscripts\u002Ffetch_senate_ld.py --client \"EXAMPLE CORP\" \\\n    --year 2024 --out data\u002Flobbying.csv\n\n# OFAC SDN sanctions list (full snapshot)\npython SKILL_DIR\u002Fscripts\u002Ffetch_ofac_sdn.py --out data\u002Fofac_sdn.csv\n\n# ICIJ Offshore Leaks — downloads ~70 MB bulk CSV on first use,\n# then searches it locally. Cached for 30 days under\n# $HERMES_OSINT_CACHE\u002Ficij\u002F (default: ~\u002F.cache\u002Fhermes-osint\u002Ficij\u002F).\npython SKILL_DIR\u002Fscripts\u002Ffetch_icij_offshore.py --entity \"EXAMPLE CORP\" \\\n    --out data\u002Ficij.csv\n```\n\n**Identity \u002F property \u002F litigation \u002F archives \u002F news**\n\n```bash\n# NYC property records (deeds, mortgages, liens) — ACRIS via Socrata\npython SKILL_DIR\u002Fscripts\u002Ffetch_nyc_acris.py --name \"SMITH, JOHN\" \\\n    --out data\u002Facris.csv\npython SKILL_DIR\u002Fscripts\u002Ffetch_nyc_acris.py --address \"571 HUDSON\" \\\n    --out data\u002Facris_addr.csv\n\n# OpenCorporates — 130+ jurisdiction corporate registry\n# (free token required; set OPENCORPORATES_API_TOKEN or pass --token)\npython SKILL_DIR\u002Fscripts\u002Ffetch_opencorporates.py --query \"Example Corp\" \\\n    --jurisdiction us_ny --out data\u002Fopencorporates.csv\n\n# CourtListener — federal + state court opinions, PACER dockets\npython SKILL_DIR\u002Fscripts\u002Ffetch_courtlistener.py --query \"Smith v. Example Corp\" \\\n    --type opinions --out data\u002Fcourts.csv\n\n# Wayback Machine — historical web captures\npython SKILL_DIR\u002Fscripts\u002Ffetch_wayback.py --url \"example.com\" \\\n    --match host --collapse digest --out data\u002Fwayback.csv\n\n# Wikipedia + Wikidata — narrative bio + structured facts\n# Set HERMES_OSINT_UA=your-app\u002F1.0 (your@email) to identify yourself\npython SKILL_DIR\u002Fscripts\u002Ffetch_wikipedia.py --query \"Bill Gates\" \\\n    --out data\u002Fwp.csv\n\n# GDELT — global news in 100+ languages, ~2015→present\npython SKILL_DIR\u002Fscripts\u002Ffetch_gdelt.py --query '\"Example Corp\"' \\\n    --timespan 1y --out data\u002Fgdelt.csv\n```\n\nAll outputs are normalized CSV with a header row. Re-run scripts idempotently.\n\nWhen a private individual won't be in a source (e.g. SEC EDGAR for a non-public-\ncompany person, USAspending for someone who isn't a federal contractor, Senate\nLDA for someone who isn't a lobbying client), the script returns 0 rows with a\nclear warning rather than silently writing an empty CSV. EDGAR specifically\nflags when the company-name resolver matched an individual Form 3\u002F4\u002F5 filer\nrather than a corporate registrant.\n\nRate-limit notes are in each source's wiki entry. Default fetchers sleep\npolitely between paginated requests. **API keys raise rate limits** for\nsources that support them (`SEC_USER_AGENT`, `SENATE_LDA_TOKEN`,\n`OPENCORPORATES_API_TOKEN`, `COURTLISTENER_TOKEN`). All scripts surface\n429 responses immediately with the upstream's quota message so the user\nknows to slow down or supply a key.\n\n### 3. Resolve entities across sources\n\nNormalize names and find matches between two CSV files:\n\n```bash\n# Match lobbying clients (Senate LDA) against contract recipients (USAspending)\npython SKILL_DIR\u002Fscripts\u002Fentity_resolution.py \\\n    --left  data\u002Flobbying.csv   --left-name-col  client_name \\\n    --right data\u002Fcontracts.csv  --right-name-col recipient_name \\\n    --out data\u002Fcross_links.csv\n```\n\nThree matching tiers with explicit confidence:\n\n| Tier | Method | Confidence |\n|------|--------|------------|\n| `exact` | Normalized strings equal after suffix\u002Fpunctuation strip | high |\n| `fuzzy` | Sorted-token equality (word-bag match) | medium |\n| `token_overlap` | ≥60% token overlap, ≥2 shared tokens, tokens ≥4 chars | low |\n\nOutput `cross_links.csv` columns: `match_type, confidence, left_name,\nright_name, left_normalized, right_normalized, left_row, right_row`.\n\n### 4. Statistical timing correlation (optional)\n\nTest whether two time series cluster suspiciously close together — e.g.\nlobbying filings near contract awards — using a permutation test:\n\n```bash\npython SKILL_DIR\u002Fscripts\u002Ftiming_analysis.py \\\n    --donations data\u002Flobbying.csv --donation-date-col filing_date \\\n        --donation-amount-col income --donation-donor-col client_name \\\n        --donation-recipient-col registrant_name \\\n    --contracts data\u002Fcontracts.csv --contract-date-col award_date \\\n        --contract-vendor-col recipient_name \\\n    --cross-links data\u002Fcross_links.csv \\\n    --permutations 1000 \\\n    --out data\u002Ftiming.json\n```\n\nThe script's column flags are intentionally generic — the original tool was\nwritten for donations vs awards, but it works for any (event, payee) time\nseries joined through cross-links. Null hypothesis: event timing is\nindependent of award dates. One-tailed p-value = fraction of permutations\nwith mean nearest-award distance ≤ observed. Minimum 3 events per (payer,\nvendor) pair to run the test.\n\n### 5. Build the findings JSON (evidence chain)\n\n```bash\npython SKILL_DIR\u002Fscripts\u002Fbuild_findings.py \\\n    --cross-links data\u002Fcross_links.csv \\\n    --timing data\u002Ftiming.json \\\n    --out data\u002Ffindings.json\n```\n\nEvery finding has `id, title, severity, confidence, summary, evidence[], sources[]`.\nEach evidence item points back to a specific row in a source CSV. The user (or a\nfollow-up agent) can verify every claim against its source.\n\n## Confidence and evidence discipline\n\nThis is the load-bearing rule of the skill. Tell the user:\n\n- Every claim must trace to a record. No naked assertions.\n- Confidence tier travels with the claim. `match_type=fuzzy` is \"probable\",\n  not \"confirmed.\"\n- Entity resolution produces candidates, NOT conclusions. A `fuzzy` match\n  between \"ACME LLC\" and \"Acme Holdings Group\" is a lead, not a fact.\n- Statistical significance ≠ wrongdoing. p \u003C 0.05 means the timing pattern\n  is unlikely under the null. It does not establish corruption.\n- All data sources here are public records. They may still contain\n  inaccuracies, stale info, or redactions (GDPR, sealed records).\n\n## Adding a new data source\n\nUse the template:\n\n```bash\ncp SKILL_DIR\u002Ftemplates\u002Fsource-template.md \\\n    SKILL_DIR\u002Freferences\u002Fsources\u002F\u003Cyour-source>.md\n```\n\nFill in all 9 sections. Write a `fetch_\u003Csource>.py` script in `scripts\u002F` that\nuses stdlib only and writes a normalized CSV. Update the source list in the\n\"When to use\" section above.\n\n## Tools and their limits\n\n- `entity_resolution.py` does NOT use external fuzzy libraries (no rapidfuzz,\n  no jellyfish). Token-bag matching is the upper bound here. If you need\n  Levenshtein, transliteration, or phonetic matching, pip-install separately.\n- `timing_analysis.py` uses Python's `random` for permutations. For\n  reproducibility, pass `--seed N`.\n- `fetch_*.py` scripts use `urllib.request` and respect `Retry-After`. Heavy\n  bulk usage may still violate ToS — read each source's legal section first.\n\n## Legal note\n\nAll Phase-1 sources are public records. Bulk acquisition is permitted under\ntheir respective access terms (FOIA, public records law, ICIJ explicit\npublication, OFAC public data). However:\n\n- Some sources rate-limit aggressively. Respect their headers.\n- Some redact registrant info (GDPR on WHOIS, sealed filings).\n- Cross-referencing public records to identify private individuals can have\n  ethical implications. The skill produces evidence chains, not accusations.\n",{"name":5,"author":45,"license":15,"version":46,"metadata":47,"platforms":59,"description":7},"Hermes Agent (adapted from ShinMegamiBoson\u002FOpenPlanter, MIT)","0.1.0",{"hermes":48},{"tags":49,"category":29,"related_skills":57},[24,25,50,51,52,53,54,55,39,56],"public-records","sec","sanctions","corporate-registry","property","courts","journalism",[58,36],"domain-intel",[28,27,30],"main","0d1434f89f4bc6b07e9d272accd8c1013768820f","archive\u002Fskill-md-reviewed\u002Fsha256\u002F1e\u002F1e480fc9f76a14aa948d43668f18fdab6dda79245a45d3d7012dac2ab214b72f",0,"https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills","https:\u002F\u002Fgithub.com\u002Fzapabob","The Open University of JAPAN　2019-now\r\n\r\nTokyo University of Science　2007-2010","2026-10-26 16:29:01",{"source":8,"skillName":5,"commands":69,"prompt":79,"zipAvailable":80},[70,73,76],{"tool":71,"command":72},"npx","npx skills add zapabob\u002FSkills --skill osint-investigation",{"tool":74,"command":75},"bunx","bunx skills add zapabob\u002FSkills --skill osint-investigation",{"tool":77,"command":78},"pnpm","pnpm dlx skills add zapabob\u002FSkills --skill osint-investigation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002F1e\u002F1e480fc9f76a14aa948d43668f18fdab6dda79245a45d3d7012dac2ab214b72f\u002FSKILL.md",true,[],[83,112,147,174,200,217],{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":98,"publishedAt":40},"01M6GJTE1GESGGF9K028Y7753E","xurl","X\u002FTwitter via xurl CLI: post, search, DM, media, v2 API.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fxurl\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[89,92,93],{"categoryNo":90,"categoryName":91,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[85,99,27,100,101,28,30,102,103,104,105,106,107,33,34,108,60,109,110,111],"openclaw","cli","github","official","search","https","social-media","api","Media","twitter","social","via","post",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":129,"publishedAt":40},"01M6GJT8S1PXQ8WPXT1HSNBWH2","writing-plans","Write implementation plans: bite-sized tasks, paths, code.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwriting-plans\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[118,121,124,125,126],{"categoryNo":119,"categoryName":120,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":122,"categoryName":123,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},{"categoryNo":127,"categoryName":128,"taxonomyType":96,"taxonomyTypeDesc":97},"01JBSEEDCAT000000000000036","内容创作者",[130,131,132,133,27,134,28,135,30,136,137,138,139,140,141,142,143,144,145,146],"writing","writing plans","plans","design","review","workflow","documentation","tasks","development","code","planning","code-review","subagent","write","superpowers","paths","test-driven-development",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":156,"publishedAt":40},"01M6GJST0H5X7WHBJ3BZK0DVKH","whisper","OpenAI's general-purpose speech recognition model. Supports 99 languages, transcription, translation to English, and language identification. Six model sizes from tiny (39M params) to large (1550M params). Use for speech-to-text, podcast transcription, or multilingual audio processing. Best for robust, multilingual ASR.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwhisper\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[153],{"categoryNo":154,"categoryName":155,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[149,27,28,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173],"openai","speech","multimodal","Transformers","ASR","Audio","text","model","speech recognition","use","general","multilingual","translation","english","identification","processing","Audio Processing",{"skillNo":175,"name":176,"nameZh":6,"description":177,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":178,"categories":179,"keywords":183,"publishedAt":40},"01M6GJSMRQ8EETZTYMG72P70EA","weights-and-biases","W&B: log ML experiments, sweeps, model registry, dashboards.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fweights-and-biases\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[180],{"categoryNo":181,"categoryName":182,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化",[184,27,185,186,30,187,188,31,189,190,191,164,192,193,194,195,196,197,198,199],"weights and biases","tensorflow","experiments","pytorch","visualization","real-time","tuning","dashboards","experiment","log","time","Experiment Tracking","Model Registry","Hyperparameter Tuning","WandB","Real-Time Visualization",{"skillNo":201,"name":202,"nameZh":6,"description":203,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":204,"categories":205,"keywords":207,"publishedAt":40},"01M6GJS19KDPRY112JTR326S06","watchers","Poll RSS, JSON APIs, and GitHub with watermark dedup.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwatchers\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[206],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[202,27,208,101,28,209,210,211,212,213,214,33,34,215,216],"terminal","automation","http","monitoring","cron","json","rss","devops","with",{"skillNo":218,"name":219,"nameZh":6,"description":220,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":221,"categories":222,"keywords":225,"publishedAt":40},"01M6GJRHJD2A6Q830SWF9W48BC","serving-llms-vllm","vLLM: high-throughput LLM serving, OpenAI API, quantization.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fvllm\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[223,224],{"categoryNo":90,"categoryName":91,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":94,"categoryName":95,"taxonomyType":96,"taxonomyTypeDesc":97},[226,227,228,28,29,157,229,230,231,160,232,106,233,234,235,236,237,238,239,240],"llms","vLLM","serving llms vllm","openai api","tensor","Inference Serving","Production","llm serving","High Throughput","PagedAttention","Continuous Batching","Quantization","Tensor Parallelism","high-throughput","throughput"]