Skip to content
Agentmart
Submit a tool

corp-osint

Maps a company to subsidiaries, brands, websites, urlscan/Playwright/DNSLytics GTM discoveries, IdefixTools Entra tenant→domains, RDAP/WHOIS, ASN/IP…

Skill by corp-OSINT

IndexedApache-2.0
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/salto7-corp-osint

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Maps a company to subsidiaries, brands, websites, urlscan/Playwright/DNSLytics GTM discoveries, IdefixTools Entra tenant→domains, RDAP/WHOIS, ASN/IP ownership, Azure tenant IDs, and dangling parked domains still verified in Entra. Use for corporate OSINT, GTM/tenant reverse domains, or dangling DNS/Entra findings.

Use cases: testing, cloud

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/corp-osint

What's inside

Skill name
corp-osint
Description
Maps a company to subsidiaries, brands, websites, urlscan/Playwright/DNSLytics GTM discoveries, IdefixTools Entra tenant→domains, RDAP/WHOIS, ASN/IP ownership, Azure tenant IDs, and dangling parked domains still verified in Entra. Use for corporate OSINT, GTM/tenant reverse domains, or dangling DNS/Entra findings.
License
Apache-2.0
Compatibility
Python 3.10+, network, aiohttp, tenacity, Playwright chromium; optional whois, URLSCAN_API_KEY, DNSLYTICS_API_KEY. Works with any agent that supports skills and/or MCP.
Metadata
author: corp-OSINT · version: 3.0.0 · category: osint
Instructions
261 lines in SKILL.md · view on GitHub

Agent Skills spec issues

  • name: "corp-osint" does not match folder "docs"

Files (4)

  • SKILL.md
  • mcp.md
  • report-schema.md
  • sources.md

SKILL.md (first lines)

# Corporate OSINT — Entity Expansion (v3)

Passive public-source recon only. **Plugin architecture:**

- One entrypoint: `uv run python main.py`
- One abstract base: `corp_osint.plugin.Plugin`
- All stages live in `corp_osint/plugins/` and inherit `Plugin`
- Orchestrator: `CorpOsintPipeline(Plugin)` runs registered plugins

## Install

From the **repo root** (`corp-OSINT/`), one-time:

```bash
cd /path/to/corp-OSINT

# https://docs.astral.sh/uv/getting-started/installation/
uv sync
uv run playwright install chromium

# optional (RDAP fallback / richer rate limits)
sudo apt install whois             # or: brew install whois
export SEC_USER_AGENT='CorpOSINT/3.0 (research; you@example.com)'
export URLSCAN_API_KEY=...         # optional — higher urlscan limits
export DNSLYTICS_API_KEY=...       # optional — paid GTM reverse API
# optional proxy (HTTP or SOCKS) for aiohttp + Playwright:
export CORP_OSINT_PROXY='socks5://127.0.0.1:1080'
# export HTTP_PROXY=... HTTPS_PROXY=... ALL_PROXY=...   # also honored
# export NO_PROXY=localhost,127.0.0.1,.local
```

**Requirements:** [uv](https://docs.astral.sh/uv/), Python 3.10+, network access.
MCP hosts launch `corp-osint-mcp` via `uv run` (see `.mcp.json`, `docs/mcp.md`).

**Verify install:**

```bash
uv run python main.py --list-plugins
uv run python main.py --plugin azure_tenant --domain microsoft.com
```

Agents: run the Install block if `uv` is missing or Playwright/Chromium is not installed.

## Agent rules (quality)

1. **Pipeline JSON is raw evidence, not truth.** Regex/EDGAR parsers can emit
   header junk (`Name of the Subsidiary`) or invent slug domains. Critically
   filter before presenting findings.
2. **Present the compact `summary` first** (also `summary_text`). Each domain row:
   `domain`, `sources`, `evidence`, `confidence`, `verified`.
3. **Do not invent subsidiary `.com`s.** Subsidiaries are names until urlscan,
   Entra tenant domains, DNSLytics, or a verified homepage links them.
   If `--domain` / MCP `domain` is omitted, Playwright runs first to seed the
   parent site; inventing parent `.com`/`.net` is only a last-resort fallback.
   If `--domain` / MCP `domain` is omitted, Playwright runs first to seed the
   parent site; inventing parent `.com`/`.net` is only a last-resort fallback.
   If `--domain` / MCP `domain` is omitted, Playwright runs first to seed the
   parent site; inventing parent `.com`/`.net` is only a last-resort fallback.
4. Prefer AI judgment over brittle string matches when classifying parking pages,
   brand vs legal-shell names, and whether a domain belongs to the company.

## Quick run

```bash
uv run python main.py "Example Corp" --domain example.com --out report.json
uv run python main.py -v "Example Corp" --domain example.com --summary-only
uv run python main.py --list-plugins
uv run python main.py --plugin dnslytics_gtm --domain example.com
```

Logging (stderr via logger only — no ``print``): default INFO stage progress;
`-v` / `-vv` DEBUG; `-q` warnings for progress (result JSON still emitted).
Reports are **compact by default** (no WHOIS dumps); `summary` + `summary_text`
are always first keys. Use `--summary-only` for summary JSON alone.

Flags: `--skip STAGES`, `--only STAGES` (comma-separated:
`edgar,urlscan,playwright,asn,dnslytics,tenant_domains,entra_verify,dangling,resolve_sites`),
`--summary-only`, `--proxy URL`, `--direct`, `--no-proxy HOSTS`, `--plugin NAME`,
`--tenant-id`, `-v`/`-vv`, `-q`. Tuning caps live in `PipelineConfig.limits`
(defaults); not exposed on the CLI.

## Proxy (HTTP + SOCKS)

All aiohttp traffic and Playwright Chromium share one proxy setting:

```bash
# SOCKS5
uv run python main.py "Example Corp" --domain example.com --proxy socks5://127.0.0.1:1080

# HTTP proxy + bypass list
uv run python main.py --plugin azure_tenant --domain microsoft.com \
  --proxy http://127.0.0.1:8080 --no-proxy localhost,127.0.0.1

# Force direct (ignore env proxies)
uv run python main.py --plugin azure_tenant --domain microsoft.com --direct
```

Also: `CORP_OSINT_PROXY`, `ALL_PROXY`, `HTTPS_PROXY`, `HTTP_PROXY`, and
`NO_PROXY` / `CORP_OSINT_NO_PROXY`. Requires `aiohttp-socks` (in `requirements.txt`).

## Architecture

| Piece | Role |
|-------|------|
| `uv run python main.py` | **Single entrypoint** |
| `corp_osint.plugin.Plugin` | **Abstract base** — every module inherits this |
| `corp_osint.plugins.*` | Concrete plugins (`edgar`, `urlscan`, …) |
| `corp_osint.plugins.pipeline.CorpOsintPipeline` | Orchestrator plugin (`name="pipeline"`) |
| `corp_osint.http.AsyncHttpClient` | aiohttp + throttle + 429 retries |

To add a stage: subclass `Plugin`, implement `async def run(**kwargs)`, register in
`plugins/__init__.py` → `PLUGIN_REGISTRY`.

## Checklist

```
- [ ] 1 Parent (EDGAR CIK / legal name / domain)
- [ ] 2 Subsidiaries / brands (names; filter Exhibit 21 headers)
- [ ] 3 Resolve parent domain only (no mass subsidiary .com guessing)

From Salto7/Peon, Apache-2.0.

Signals

Stars
0
Forks
0
Open issues
0
Last commit (this folder)
Oct 17, 2026 (11 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Version
3.0.0
License
Apache-2.0
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

Same skill elsewhere

Copies of this SKILL.md published by others; search shows only one of them.

Cite this page

corp-osint skill. Agent Mart. https://agentmart.dev/skills/salto7-corp-osint (last updated 2026-10-24)