build-tam
Build a Total Addressable Market list by sourcing accounts and contacts from providers like Crustdata, Dropleads, and PDL.
Use for Deepline GTM work that searches, enriches, scores, collects signals, or automates a workflow: find companies or people, enrich a CSV, find emails or LinkedIn, compare providers, build a waterfall, create a webhook or cron, or write a Play. For live information work, run
$ npx -y skills add getaero-io/gtm-eng-skills --skill deepline-plays --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/deepline-playsContext preview
The summary Claude sees to decide when to auto-load this skill.
Use for Deepline GTM work that searches, enriches, scores, collects signals, or automates a workflow: find companies or people, enrich a CSV, find emails or LinkedIn, compare providers, build a waterfall, create a webhook or cron, or write a Play. For live information work, run
name: deepline-plays description: 'Use for Deepline GTM work that searches, enriches, scores, collects signals, or automates a workflow: find companies or people, enrich a CSV, find emails or LinkedIn, compare providers, build a waterfall, create a webhook or cron, or write a Play. For live information work, run a small heterogeneous experiment, exploit the observed winner, and reopen misses. Skip pure copywriting and non-GTM research.'
npm install -g deepline # Fallback for secure sandboxes: mkdir -p "$HOME/.local" && npm config set prefix "$HOME/.local" && export PATH="$HOME/.local/bin:$PATH" && npm install -g deepline --registry https://code.deepline.com/api/v2/npm/ deepline auth register --wait auto deepline auth wait --timeout 120 # completes Cowork/browser approval; no-op if already connected deepline auth status deepline -h
Run `deepline` when it is available. If the shell reports that command is missing, use `<workspace-root>/.deepline/runtime/bin/deepline` (or the npm-created `.cmd` shim on Windows). If neither exists, follow `https://code.deepline.com/INSTALL.md` to set up Deepline.
**Debug every Play run:** use `deepline plays run <file.play.ts> --input '<json>' --debug` while iterating, or `deepline runs logs <run-id> --debug` for an existing run. `completed` means the runtime finished, not that an external destination accepted the result; the debug logs retain caught non-2xx `ctx.fetch` responses with their key, method, destination origin, and HTTP status.
Before the first Deepline fanout in a task, run `deepline preflight --json` as one standalone command and wait for it to finish. Never submit preflight beside another Deepline command. After it succeeds, prefix every Deepline command that may run concurrently with `DEEPLINE_SKIP_SELF_UPDATE=1`; serial commands may stay bare.
contract → compare → exploit → recover → export → price
Ordinary TypeScript, no DSL. A `SearchProgram` is one function that calls a tool, a fetch, a child Play, a connector, or a local artifact and returns a typed attempt. `runSearchExperiment` owns the pilot, ranked waterfall, holdout, gap-only retries, and cost/coverage report.
| Part | Contents | | ------------------- | ----------------------------------------------------------------------- | | **Result line** | rows in / accepted / marginal credits per accepted row / run id | | **CSV** | the user's exact headers, per-claim source, `miss_reason` on every null | | **Unresolved rows** | in the same file; a null carries an absence receipt | | **Route table** | initial and final waterfall, cost and completions per route | | **COST RECEIPT** | the block `run-and-export-search-experiment.py` prints, verbatim | | **Next actions** | dormant routes and what each would buy, at measured cost deltas |
route whose real marginal cost was 0.21.
ceiling truncated recovery at ~12 credits actual, and two apparent logic regressions were budget artifacts.
Read the row that matches this job, and only that row. Each page is complete for its job: source geometry, route ladder, pilot sizing, stop conditions.
| The job | Page | | ----------------------------------------------- | --------------------- | | Companies or people that are not rows yet | `jobs/finding.md` | | Columns to fill on rows you already have | `jobs/enriching.md` | | Claims that need attributable evidence | `jobs/researching.md` | | A trigger, review gate, or external side effect | `jobs/automating.md` |
Two lookups, consulted on a trigger rather than read up front: `shared/authoring.md` for Play syntax outside the scaffold, and `references/debugging.md` for a failed, empty, or misshapen run.
For every public `definePlay`/`ctx.*` type, binding, durable-cache rule, and runtime error, read `references/sdk-reference.md`. It is generated from the authoring contract and SDK source; do not duplicate that surface in this skill.
**If your configuration forbids subagents, say so before starting serial work.** Resolving that conflict silently cost one run ~30 minutes.
Write `unit + decision + required facts + scale` before touching tools. Requested fields stay required; demoting one to promote a run is not a pass. A null needs an absence receipt: materially different routes tried, typed outcomes retained.
One shape. **Known rows:** one experiment over the supplied rows. **Open-world discovery:** rows are query/page/geography/registry partitions, never remembered companies. **Company → person:** two sequential stages, not consensus; only `companyExperiment.finalResults` become contact rows. **End-to-end:** compare only when every program produces the same complete final row from the same seam.
deepline tools search "<information role and controls>" --json
deepline tools grep "<substring>" --json # ranked search has returned the same
# irrelevant hits for three different queries
deepline tools list <returned-category> --json
deepline tools describe <tool-id> --json | python3 <skill-root>/scripts/show-declared-getters.py
python3 <skill-root>/scripts/show-declared-getters.py "$WORKDIR/<tool-id>.json" # saved contract`tools describe` is the authoring contract and can disagree with runtime: a declared getter has been absent, and a tool documenting one scalar has returned a full list. Bind a named declared `playExpression` and sentinel
AI agent skills that turn Claude Code into a GTM engineering workstation — lead enrichment, signal discovery, TAM building, and outbound automation. Powered by Deepline.
Repo: getaero-io/gtm-eng-skills
Build a Total Addressable Market list by sourcing accounts and contacts from providers like Crustdata, Dropleads, and PDL.
Convert a Clay table configuration into local Deepline scripts. Handles extraction (MCP or script), documentation, action mapping, script generation, and…
Use this skill when building, enriching, auditing, or uploading B2B paid ads audiences to Google Customer Match, Meta/Facebook Custom Audiences, or LinkedIn…
Use this skill when answering business analytics, RevOps, GTM metric, pipeline, revenue, funnel, customer, or warehouse questions with Deepline. Triggers on…
Build, publish, and verify a Deepline Play as a durable state machine over Customer DB tables, including a small paid pilot. Invoke this skill explicitly when…
Send feedback or bug reports to the Deepline team. Use when the user asks to report feedback or share a session, and proactively when a Deepline Play is…