Skip to content
Marketing
Skill

/deepline-plays

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

From plugin
gtm-eng-skills
5916 skills
Install
$ npx -y skills add getaero-io/gtm-eng-skills --skill deepline-plays --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/deepline-plays

Context 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

SKILL.md

deepline-plays.SKILL.md
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.'

Deepline Plays

Quick Start

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

CLI resolution

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.

Deliverable

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

  • Marginal, never amortized. Total ÷ successes reported 1.51 credits/email for a

route whose real marginal cost was 0.21.

  • Pass the printed block through. Do not recompute credits in prose.
  • A catalog ceiling stops the run; it is not spend. Label it. A 120-credit

ceiling truncated recovery at ~12 credits actual, and two apparent logic regressions were budget artifacts.

Read one job page

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.

Topology

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.

Catalog

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

Read more
Ships withgtm-eng-skills

AI agent skills that turn Claude Code into a GTM engineering workstation — lead enrichment, signal discovery, TAM building, and outbound automation. Powered by Deepline.

Get the whole plugin
Stats
59
Stars
12
Forks
Active
Maintenance
TypeScript
Language
MIT
License
1d ago
Last commit
6mo ago
Created

Repo: getaero-io/gtm-eng-skills

Other skills on gtm-eng-skills.