GTM Meta Skill

GTM prospecting, enrichment, outreach, and Deepline Play work/audits.

by getaero-io·MIT license·★ 66 Stars on the repo·GitHub ↗

Use now

Inside this skill

SKILL.md · the author's own words
# GTM Meta Skill

## Quick Start

```bash
npm install -g deepline
deepline auth register --wait auto
deepline -h
```

## 1. Find the right guidance and capabilities

Identify the business outcome, target population, constraints, time horizon,
requested destination and spend/authority boundaries. Resolve implementation
details yourself: providers, queries, identifier recovery and workflow shape.
Ask one concise question with a recommendation only when a missing requirement

Word-for-word excerpt, not a result. Read the full SKILL.md ↓

Files of GTM Meta Skill

getaero-io/main1 file shown
SKILL.md
Show the full text307 lines

GTM Meta Skill

Quick Start

npm install -g deepline
deepline auth register --wait auto
deepline -h

1. Find the right guidance and capabilities

Identify the business outcome, target population, constraints, time horizon, requested destination and spend/authority boundaries. Resolve implementation details yourself: providers, queries, identifier recovery and workflow shape. Ask one concise question with a recommendation only when a missing requirement materially changes the result or external action. Otherwise state a reasonable assumption and proceed. User-specified values override workflow defaults.

Plays and Tools
  • Tool: one operation, such as looking up a profile or validating an email. Use direct tool calls for isolated spot checks.
  • Play: TypeScript that expresses GTM work as code. Combine tools with custom logic—transformations, conditions and fallbacks—and process batches of data. Deepline handles provider rate limits and retries, persists progress and results, and supports recovery after failures.
  • For workflows or batches: use a supplied Play, reuse or adapt a suitable prebuilt, or author one when none fits. Don't process batches by looping direct tool calls in scripts or repeated agent calls.
Domain guides

Read the relevant guide before new provider work; do not load unrelated guides just to inspect an existing run.

Job Read and apply
Find companies/people, build lead lists, portfolio/VC sourcing, ICP discovery, contact finding or coverage at scale Finding companies and contacts: filters, provider mix, parallel search, role matching and list-builder delegation.
Research people/companies; enrich CSVs; find emails, phones or LinkedIn; coalesce, transform, score or add custom signals Enriching and researching: Play routing, waterfalls, provider evidence and multi-pass research.
Write cold emails, qualification, personalization, sequences or inspect in Playground Writing outreach and its prompts.json templates. Also read enrichment guidance when research informs the writing. Keep outreach context active throughout sequence work.
Continuous provider event feeds / Monitors Run deepline monitors status --json. Read Monitors only after exit 0 with has_access: true. Exit 1 with has_access: false is rollout denial; exit 3 is auth/permission, exit 5 configuration/reachability. Other failures are not denial.
Public/social source discovery, community language, pre-research source planning or provider coverage/cost comparisons Use the standalone deepline-research skill.
Inspect logs or events from existing runs

Start with deepline runs logs --help for all known kinds and filter examples. A run ID alone reads text logs; omit it or add a search flag to search events. Use --out for all retained text, --kind for run/step outcomes, and --payloads for available details or saved results. Follow next.logs to page. These reads execute no providers. Read Run logs and events for more recipes and SDK fields.

Discover Plays and tools

For new work, look for a suitable prebuilt Play to reuse or adapt before authoring one from scratch. Search for the information needed and relevant controls, not only a provider name; describe the selected capability to confirm inputs, outputs and pricing. Names in guides are starting hints, not substitutes for the live contract.

For tool results, use the exact declared getters listed by tools describe or tools get. Other fields live under toolResponse.rawV2, preserving the provider/tool adapter envelope. .data and .data.data are different; view: "data" does not flatten rawV2. Inspect the original retained Play response and assert required fields on a pilot before bulk execution. An extraction mismatch is not a provider miss, invalid email, or business hold.

deepline search "<information needed and controls>" --type tools,prebuilts --task "<input you have -> result you need>"
deepline plays describe <play-name> --json
deepline tools describe <tool-id>
Specialized recipes
Recipe Use when
Account org chart Account maps, buying committees, stakeholders and multi-threading around a person/company.
Build TAM Total addressable market or large company lists from ICP criteria.
Clay conversion Translate a Clay table's actions and data dependencies into a custom Play.
Monitors Access-gated event capture and downstream automation; apply the access and consent rules.
Play authoring Create/audit local or saved Plays, durable datasets, fallbacks, joins and orchestration.
Find qualified titles Nuanced roles at known companies: qualify actual company titles before revealing contacts.
LinkedIn URL lookup Resolve a person's URL from name/company with strict identity validation.
Portfolio prospecting Investor-backed companies, then contacts and personalized outbound.
Small-business prospecting Local/storefront/service-area businesses using Maps-style search.

2. Build, run and retrieve

  • Build: follow Play authoring and the SDK reference. Preserve supplied Plays unless a material mismatch needs a decision.

  • Check: inspect input headers and mappings; run deepline plays check <file> before executing local source.

  • Pilot: test costly or unproven work on a small authorized sample; inspect actual results and spend before scaling. Don't duplicate a small supplied run or reprocess pilot rows unnecessarily.

  • Run: plays run waits by default; --no-wait returns the run ID immediately. Follow an existing run with runs tail <run-id>; inspect it with runs get <run-id>. Reconnect after a timeout rather than launching again.

  • Inspect/transform: overview first, then follow the suggested commands. Play datasets persist in database tables. Prefer read-only SQL for filtering, joining, flattening and aggregating stored data before downloading. Inspect actual column types and sample values first; don't assume a JSON structure. After a type error, inspect the data rather than guessing another query. Adapt the suggested SQL, preserving its table and run filter.

    Get the run ID, physical tables and suggested SQL in one call:

    deepline runs get <run-id> --json run.id,datasets.storage,actions
    

    Check deepline runs get --help before using field selection. Older CLIs offer only bare --json; use it without a field list, or update the CLI. Save a tool contract with deepline tools describe <tool-id> --json > contract.json; tools describe does not accept --out. In Windows PowerShell 5.1, use cmd /d /c "deepline tools describe <tool-id> --json > contract.json" to keep the file UTF-8; direct PowerShell redirection writes UTF-16.

    Use the returned schema/table for <returned-table> (for example, "storage"."contact_email_waterfall_email_rows"). Copy the run-membership predicate from the suggested SQL into <returned-run-filter> (for example, _run_id = '<run-id>'); storage alone doesn't supply it. Check additional status filters and sample limits before computing whole-run totals. Use the dataset's actual columns and JSON structure:

    -- Aggregate before downloading.
    SELECT domain, COUNT(*) AS contacts, COUNT(email) AS emails_found
    FROM <returned-table>
    WHERE <returned-run-filter>
    GROUP BY domain;
    

    These are read-only projections, not changes to stored rows.

  • Export: use the suggested export command for complete rows: CSV for delivery, --format json for nested evidence. The response is a file receipt—read the file. Use csv show <file> --summary for local CSV summaries.

  • CLI hygiene: use -h; run deepline preflight --json as a standalone command and wait before parallel Deepline work. Prefer field selection or summaries when inspecting structured results. Preserve complete evidence responses, separate stderr from JSON, and check exit status (pipefail for pipelines).

  • Evidence: previews aren't complete results; completed runs can contain failed rows; nulls don't explain misses. Inspect affected rows, then use runs receipt <run-id> --key '<receipt-key>' for a key retained in the row. Otherwise use runs logs <run-id> --kind receipt.completed --payloads --json and select a returned eventId with --where. These reads don't execute tools. Inspect the actual evidence shape. Investigate unresolved requested conditions and stop once supported; repeating a provider isn't independent corroboration.

  • Save: keep deliverables in a durable project directory, not system temp; preserve source files, input identities and evidence.

  • Experiments: route comparisons, scaffolds and cost receipts apply when designing or comparing workflows—not every execution.

  • Authority: planning or inspection authorizes no paid execution. Returned actions are capabilities, not approval to retry, publish or write externally. A credit shortage blocks paid work, not accessible retained results.

3. Scope, spend and approval

For calibration, scope or prioritization decisions, show the actual records, comparison or supporting evidence and one recommendation:

<the table, comparison, draft, or evidence>

Recommendation: <one concrete next state and why>.
Want me to use that, or adjust it?

Use that final question only when a calibration decision is needed. For a paid scope decision use the approval format below instead, not both questions. When no decision is needed, proceed without manufacturing one.

A user-stated bounded row-processing scope (“these 5 contacts”, “everyone in this CSV”) authorizes completing that scope within stated constraints. Do not ask again merely because a pilot finished. For small supplied Plays, the requested run itself is the check; no mandatory extra pilot.

For larger or uncertain new work, use a small representative subset within the approved scope/budget to validate identity, coverage, shape and cost before scaling. Account for processed inputs rather than repeating them solely to satisfy a full-run ritual. Stop when wrong matches, low usable coverage or cost changes require a decision; don't enter an unbounded fix-and-rerun loop. For open-ended requests, agree bounded scope/spend before a paid pilot. Planning or inspection alone authorizes no paid execution.

Estimate with the Play contract, deepline plays list --show-cost where available and observed Deepline spend; label extrapolations. Prefer success-priced routes when appropriate, but verify the provider's actual price basis before assuming a one-result search pays for only one result. Monthly caps and estimates are not hard per-run controls. Do not advertise a runtime Play spending cap unless the current contract actually supports it.

When a paid scope decision is needed, show the following format and ask only its approval question. Use actual pilot evidence if one was authorized; label “not run” rather than spending or inventing a preview to fill the template.

Assumptions

- <intent and constraints>

CSV Preview (ASCII)
<real pilot rows, or "Not run — approval required before paid work.">

Credits + Scope + Cap

- Provider: <route>
- Estimated credits: <range and basis>
- Full-run scope: <rows/items>
- Spend cap: <user budget; distinguish monitored from enforced>
- Pilot summary: <observed findings, or not run>

Approval Question
Approve full run?

When approving only a pilot, replace “Full-run scope” / “Approve full run?” with “Pilot scope” / “Approve pilot?” so the question matches the authorized action.

Monitors are different: require explicit approval for every paid deploy, reactivate or historical widening, even when scope was stated. Inspect scope, reuse candidates, downstream actions/unknown consumers and live Deepline price before asking. Check Slack for an existing delivery channel; otherwise offer Slack or the configured CRM. Don't call a historical rung empty before its provider completion window. Follow the monitor recipe; bounded row permission does not authorize recurring work, outreach or CRM writes.

For credit issues use deepline billing balance, deepline billing usage or deepline billing limit as appropriate. For an exact charge, use deepline billing usage --request-id <job_id> --json; only posted is final, while holds and pending results are provisional. If credits are unavailable, stop paid work. When recovery information is returned, quote its top_up_command and checkout_command exactly, including --json and --no-open, and wait for approval before running them. Use live prices, not a hardcoded USD-to-credit conversion.

4. Deliver results

Show useful records and a plain-language summary: delivered population, coverage, missing/rejected values, actual failures and any evidence limits. Don't claim “nothing failed” when commands failed and recovered. An agent-written explanation is analysis, not a raw provider response. Link a person's name to a returned, verified LinkedIn profile. Keep raw IDs and plumbing internal unless they affect cost, scope or confidence.

For row-processing work, export the complete requested population to the intended final file, link it and the returned Play page, and verify identity, row count and requested columns. Preserve evidence and lineage fields (including authored _dl_meta and runtime _metadata) when transforming. A partial pilot is not completion of a larger request; label partial coverage explicitly.

When transforming CSVs, use a CSV writer rather than hand-joining fields: commas, quotes and embedded newlines otherwise shift data into the wrong columns. Before delivery, round-trip the saved file through a strict CSV reader and check every record has exactly the header's field count. Python DictReader alone accepts extra or missing fields; reject its None keys/values explicitly. Correct malformed records from source evidence, without dropping or padding them.

On multi-phase work, checkpoint the best-so-far deliverable at the intended path and update it as phases finish, so interruption doesn't erase useful results. Honor the requested destination and filename; don't invent a CSV or Play link for monitor-only, advisory or research work that produced neither.

5. Feedback and session sharing

Proactive issue reporting

Unless the user restricts external reporting, send deepline feedback send once per issue cluster when repeated failures, wrong output, a blocking bug, substantial workaround or avoidable latency/steps impair the task. Then continue. Include goal, tool/provider/model, exact error, attempted reproduction and whether work stopped. For latency include run ID, input size, timing and actual versus expected path; don't report legitimately long provider work.

Use --error-outcome terminal or --error-outcome continued for errors; omit it for non-errors. Issue reporting does not authorize paid reproduction or session upload.

After the substantive result is resolved, ask once in a separate message—not beside a table, recommendation, approval request or unresolved decision:

Would you like me to send this session activity to the Deepline team so they can improve the experience? (Yes/No)

Only after Yes, run deepline sessions send --current-session --rating <good|poor|neutral>. After No, do not send or ask again for that run/session. Rate by outcome, not tone. Respect a user prohibition on external sharing.

After a successful upload, output Session sent to Deepline. Rating: <rating> using the chosen good, poor, or neutral rating.

Don't ask after the terminal no-change outcome Change: none — I’m leaving it as is.; keep that as the final line.

1---
2name: deepline-gtm
3description: "GTM prospecting, enrichment, outreach, and Deepline Play work/audits. Providers: adyntel,affinity,ai_ark,akta,allegrow,amplemarket,apify,attention,attio,aviato,bettercontact,bigquery,bluesky,bounceban,brave,browserbase,builtwith,cbinsights,clay,clickhouse,cloudflare,contactout,contextdev,crustdata-v3,customer_db,databricks,dataforseo,datagma,dealroom,deepline_ip_to_company,deepline_native,deeplineagent,discolike,dropleads,edges,emailbison,emailguard,enformion,enigma,exa,findymail,firecrawl,fireflies,firmable,forager,fullenrich,fundable,generic_http,getleads,gong,google_ads_audiences,google_workspace,govfiles,grain,hackernews,harvestapi,heyreach,hubspot,hunter,icypeas,instantly,intercom,ipqs,kaspr,kernel,leadmagic,lemlist,limadata,linkedin_ads_audiences,luma,lusha,meta_audiences,millionverifier,nooks,notion,openmart,opensosdata,openwebninja,outreach,parallel,peopledatalabs,pitchbook,podscan,polymarket,postgres,predictleads,prospeo,quickenrich,rapidapi,redshift,rocketreach,salesforce,salesforge,salesloft,…."
4---
5 
6# GTM Meta Skill
7 
8## Quick Start
9 
10```bash
11npm install -g deepline
12deepline auth register --wait auto
13deepline -h
14```
15 
16## 1. Find the right guidance and capabilities
17 
18Identify the business outcome, target population, constraints, time horizon,
19requested destination and spend/authority boundaries. Resolve implementation
20details yourself: providers, queries, identifier recovery and workflow shape.
21Ask one concise question with a recommendation only when a missing requirement
22materially changes the result or external action. Otherwise state a reasonable
23assumption and proceed. User-specified values override workflow defaults.
24 
25### Plays and Tools
26 
27- **Tool:** one operation, such as looking up a profile or validating an email.
28 Use direct tool calls for isolated spot checks.
29- **Play:** TypeScript that expresses GTM work as code. Combine tools with custom
30 logic—transformations, conditions and fallbacks—and process batches of data.
31 Deepline handles provider rate limits and retries, persists progress and
32 results, and supports recovery after failures.
33- **For workflows or batches:** use a supplied Play, reuse or adapt a suitable
34 prebuilt, or author one when none fits. Don't process batches by looping direct
35 tool calls in scripts or repeated agent calls.
36 
37### Domain guides
38 
39Read the relevant guide before new provider work; do not load unrelated guides
40just to inspect an existing run.
41 
42| Job | Read and apply |
43| --- | --- |
44| Find companies/people, build lead lists, portfolio/VC sourcing, ICP discovery, contact finding or coverage at scale | [Finding companies and contacts](finding-companies-and-contacts.md): filters, provider mix, parallel search, role matching and list-builder delegation. |
45| Research people/companies; enrich CSVs; find emails, phones or LinkedIn; coalesce, transform, score or add custom signals | [Enriching and researching](enriching-and-researching.md): Play routing, waterfalls, provider evidence and multi-pass research. |
46| Write cold emails, qualification, personalization, sequences or inspect in Playground | [Writing outreach](writing-outreach.md) and its `prompts.json` templates. Also read enrichment guidance when research informs the writing. Keep outreach context active throughout sequence work. |
47| Continuous provider event feeds / Monitors | Run `deepline monitors status --json`. Read [Monitors](recipes/deepline-monitors.md) only after exit 0 with `has_access: true`. Exit 1 with `has_access: false` is rollout denial; exit 3 is auth/permission, exit 5 configuration/reachability. Other failures are not denial. |
48| Public/social source discovery, community language, pre-research source planning or provider coverage/cost comparisons | Use the standalone `deepline-research` skill. |
49 
50### Inspect logs or events from existing runs
51 
52Start with `deepline runs logs --help` for all known kinds and filter examples.
53A run ID alone reads text logs; omit it or add a search flag to search events.
54Use `--out` for all retained text, `--kind` for run/step outcomes, and
55`--payloads` for available details or saved results. Follow `next.logs` to page.
56These reads execute no providers. Read [Run logs and events](references/run-events.md)
57for more recipes and SDK fields.
58 
59### Discover Plays and tools
60 
61For new work, look for a suitable prebuilt Play to reuse or adapt before authoring
62one from scratch. Search for the information needed and relevant controls, not
63only a provider name; describe the selected capability to confirm inputs, outputs and
64pricing. Names in guides are starting hints, not substitutes for the live
65contract.
66 
67For tool results, use the exact declared getters listed by `tools describe` or
68`tools get`. Other fields live under `toolResponse.rawV2`, preserving the
69provider/tool adapter envelope. `.data` and `.data.data` are different;
70`view: "data"` does not flatten rawV2. Inspect the original retained Play
71response and assert required fields on a pilot before bulk execution. An
72extraction mismatch is not a provider miss, invalid email, or business hold.
73 
74```bash
75deepline search "<information needed and controls>" --type tools,prebuilts --task "<input you have -> result you need>"
76deepline plays describe <play-name> --json
77deepline tools describe <tool-id>
78```
79 
80### Specialized recipes
81 
82| Recipe | Use when |
83| --- | --- |
84| [Account org chart](recipes/account-orgchart.md) | Account maps, buying committees, stakeholders and multi-threading around a person/company. |
85| [Build TAM](recipes/build-tam.md) | Total addressable market or large company lists from ICP criteria. |
86| [Clay conversion](recipes/clay-to-deepline.md) | Translate a Clay table's actions and data dependencies into a custom Play. |
87| [Monitors](recipes/deepline-monitors.md) | Access-gated event capture and downstream automation; apply the access and consent rules. |
88| [Play authoring](recipes/deepline-plays.md) | Create/audit local or saved Plays, durable datasets, fallbacks, joins and orchestration. |
89| [Find qualified titles](recipes/find-qualified-titles.md) | Nuanced roles at known companies: qualify actual company titles before revealing contacts. |
90| [LinkedIn URL lookup](recipes/linkedin-url-lookup.md) | Resolve a person's URL from name/company with strict identity validation. |
91| [Portfolio prospecting](recipes/portfolio-prospecting.md) | Investor-backed companies, then contacts and personalized outbound. |
92| [Small-business prospecting](recipes/small-business-prospecting.md) | Local/storefront/service-area businesses using Maps-style search. |
93 
94## 2. Build, run and retrieve
95 
96- **Build:** follow [Play authoring](recipes/deepline-plays.md)
97 and the [SDK reference](references/plays-sdk-reference.md). Preserve supplied
98 Plays unless a material mismatch needs a decision.
99- **Check:** inspect input headers and mappings; run `deepline plays check <file>`
100 before executing local source.
101- **Pilot:** test costly or unproven work on a small authorized sample; inspect
102 actual results and spend before scaling. Don't duplicate a small supplied run
103 or reprocess pilot rows unnecessarily.
104- **Run:** `plays run` waits by default; `--no-wait` returns the run ID immediately.
105 Follow an existing run with `runs tail <run-id>`; inspect it with
106 `runs get <run-id>`. Reconnect after a timeout rather than launching again.
107- **Inspect/transform:** overview first, then follow the suggested commands.
108 Play datasets persist in database tables. Prefer read-only SQL for filtering,
109 joining, flattening and aggregating stored data before downloading. Inspect
110 actual column types and sample values first; don't assume a JSON structure.
111 After a type error, inspect the data rather than guessing another query.
112 Adapt the suggested SQL, preserving its table and run filter.
113 
114 Get the run ID, physical tables and suggested SQL in one call:
115 
116 ```bash
117 deepline runs get <run-id> --json run.id,datasets.storage,actions
118 ```
119 
120 Check `deepline runs get --help` before using field selection. Older CLIs
121 offer only bare `--json`; use it without a field list, or update the CLI.
122 Save a tool contract with `deepline tools describe <tool-id> --json > contract.json`;
123 `tools describe` does not accept `--out`.
124 In Windows PowerShell 5.1, use
125 `cmd /d /c "deepline tools describe <tool-id> --json > contract.json"`
126 to keep the file UTF-8; direct PowerShell redirection writes UTF-16.
127 
128 Use the returned schema/table for `<returned-table>` (for example,
129 `"storage"."contact_email_waterfall_email_rows"`). Copy the run-membership
130 predicate from the suggested SQL into `<returned-run-filter>` (for example,
131 `_run_id = '<run-id>'`); storage alone doesn't supply it. Check additional
132 status filters and sample limits before computing whole-run totals.
133 Use the dataset's actual columns and JSON structure:
134 
135 ```sql
136 -- Aggregate before downloading.
137 SELECT domain, COUNT(*) AS contacts, COUNT(email) AS emails_found
138 FROM <returned-table>
139 WHERE <returned-run-filter>
140 GROUP BY domain;
141 ```
142 
143 These are read-only projections, not changes to stored rows.
144 
145- **Export:** use the suggested export command for complete rows: CSV for
146 delivery, `--format json` for nested evidence. The response is a file
147 receipt—read the file. Use `csv show <file> --summary` for local CSV summaries.
148- **CLI hygiene:** use `-h`; run `deepline preflight --json` as a standalone command
149 and wait before parallel Deepline work. Prefer field selection or summaries
150 when inspecting structured results. Preserve complete evidence responses,
151 separate stderr from JSON, and check exit status (`pipefail` for pipelines).
152- **Evidence:** previews aren't complete results; completed runs can contain
153 failed rows; nulls don't explain misses. Inspect affected rows, then use
154 `runs receipt <run-id> --key '<receipt-key>'` for a key retained in the row.
155 Otherwise use `runs logs <run-id> --kind receipt.completed --payloads --json`
156 and select a returned `eventId` with `--where`. These reads don't execute tools.
157 Inspect the actual evidence shape. Investigate unresolved requested conditions
158 and stop once supported; repeating a provider isn't independent corroboration.
159- **Save:** keep deliverables in a durable project directory, not system temp;
160 preserve source files, input identities and evidence.
161- **Experiments:** route comparisons, scaffolds and cost receipts apply when
162 designing or comparing workflows—not every execution.
163- **Authority:** planning or inspection authorizes no paid execution. Returned
164 actions are capabilities, not approval to retry, publish or write externally.
165 A credit shortage blocks paid work, not accessible retained results.
166 
167## 3. Scope, spend and approval
168 
169For calibration, scope or prioritization decisions, show the actual records,
170comparison or supporting evidence and one recommendation:
171 
172```markdown
173<the table, comparison, draft, or evidence>
174 
175Recommendation: <one concrete next state and why>.
176Want me to use that, or adjust it?
177```
178 
179Use that final question only when a calibration decision is needed. For a paid
180scope decision use the approval format below instead, not both questions.
181When no decision is needed, proceed without manufacturing one.
182 
183A user-stated bounded row-processing scope (“these 5 contacts”, “everyone in this
184CSV”) authorizes completing that scope within stated constraints. Do not ask
185again merely because a pilot finished. For small supplied Plays, the requested
186run itself is the check; no mandatory extra pilot.
187 
188For larger or uncertain new work, use a small representative subset within the
189approved scope/budget to validate identity, coverage, shape and cost before
190scaling. Account for processed inputs rather than repeating them solely to
191satisfy a full-run ritual. Stop when wrong matches, low usable coverage or cost
192changes require a decision; don't enter an unbounded fix-and-rerun loop.
193For open-ended requests, agree bounded scope/spend before a paid pilot.
194Planning or inspection alone authorizes no paid execution.
195 
196Estimate with the Play contract, `deepline plays list --show-cost` where
197available and observed Deepline spend; label extrapolations. Prefer
198success-priced routes when appropriate, but verify the provider's actual price
199basis before assuming a one-result search pays for only one result. Monthly
200caps and estimates are not hard per-run controls. Do not advertise a runtime
201Play spending cap unless the current contract actually supports it.
202 
203When a paid scope decision is needed, show the following format and ask only
204its approval question. Use actual pilot evidence if one was authorized; label
205“not run” rather than spending or inventing a preview to fill the template.
206 
207```markdown
208Assumptions
209 
210- <intent and constraints>
211 
212CSV Preview (ASCII)
213<real pilot rows, or "Not run — approval required before paid work.">
214 
215Credits + Scope + Cap
216 
217- Provider: <route>
218- Estimated credits: <range and basis>
219- Full-run scope: <rows/items>
220- Spend cap: <user budget; distinguish monitored from enforced>
221- Pilot summary: <observed findings, or not run>
222 
223Approval Question
224Approve full run?
225```
226 
227When approving only a pilot, replace “Full-run scope” / “Approve full run?” with
228“Pilot scope” / “Approve pilot?” so the question matches the authorized action.
229 
230**Monitors are different:** require explicit approval for every paid deploy,
231reactivate or historical widening, even when scope was stated. Inspect scope,
232reuse candidates, downstream actions/unknown consumers and live Deepline price
233before asking. Check Slack for an existing delivery channel; otherwise offer
234Slack or the configured CRM. Don't call a historical rung empty before its
235provider completion window. Follow the monitor recipe; bounded row permission
236does not authorize recurring work, outreach or CRM writes.
237 
238For credit issues use `deepline billing balance`, `deepline billing usage` or
239`deepline billing limit` as appropriate. For an exact charge, use
240`deepline billing usage --request-id <job_id> --json`; only `posted` is final,
241while holds and pending results are provisional. If credits are unavailable,
242stop paid work. When recovery information is returned, quote its
243`top_up_command` and `checkout_command` exactly, including `--json` and
244`--no-open`, and wait for approval before running them. Use live prices, not a
245hardcoded USD-to-credit conversion.
246 
247## 4. Deliver results
248 
249Show useful records and a plain-language summary: delivered population,
250coverage, missing/rejected values, actual failures and any evidence limits.
251Don't claim “nothing failed” when commands failed and recovered.
252An agent-written explanation is analysis, not a raw provider response.
253Link a person's name to a returned, verified LinkedIn profile. Keep raw IDs
254and plumbing internal unless they affect cost, scope or confidence.
255 
256For row-processing work, export the complete requested population to the
257intended final file, link it and the returned Play page, and verify identity,
258row count and requested columns. Preserve evidence and lineage fields
259(including authored `_dl_meta` and runtime `_metadata`) when transforming.
260A partial pilot is not completion of a larger request; label partial coverage
261explicitly.
262 
263When transforming CSVs, use a CSV writer rather than hand-joining fields: commas,
264quotes and embedded newlines otherwise shift data into the wrong columns.
265Before delivery, round-trip the saved file through a strict CSV reader and check
266every record has exactly the header's field count. Python `DictReader` alone
267accepts extra or missing fields; reject its `None` keys/values explicitly.
268Correct malformed records from source evidence, without dropping or padding them.
269 
270On multi-phase work, checkpoint the best-so-far deliverable at the intended path
271and update it as phases finish, so interruption doesn't erase useful results.
272Honor the requested destination and filename; don't invent a CSV or Play link
273for monitor-only, advisory or research work that produced neither.
274 
275## 5. Feedback and session sharing
276 
277### Proactive issue reporting
278 
279Unless the user restricts external reporting, send `deepline feedback send`
280once per issue cluster when repeated failures, wrong output, a blocking bug,
281substantial workaround or avoidable latency/steps impair the task. Then
282continue. Include goal, tool/provider/model, exact error, attempted reproduction
283and whether work stopped. For latency include run ID, input size, timing and
284actual versus expected path; don't report legitimately long provider work.
285 
286Use `--error-outcome terminal` or `--error-outcome continued` for errors; omit
287it for non-errors. Issue reporting does not authorize paid reproduction or
288session upload.
289 
290### End-of-session consent
291 
292After the substantive result is resolved, ask once in a separate message—not
293beside a table, recommendation, approval request or unresolved decision:
294 
295`Would you like me to send this session activity to the Deepline team so they can improve the experience? (Yes/No)`
296 
297Only after Yes, run
298`deepline sessions send --current-session --rating <good|poor|neutral>`.
299After No, do not send or ask again for that run/session. Rate by outcome, not
300tone. Respect a user prohibition on external sharing.
301 
302After a successful upload, output `Session sent to Deepline. Rating: <rating>`
303using the chosen `good`, `poor`, or `neutral` rating.
304 
305Don't ask after the terminal no-change outcome
306`Change: none — I’m leaving it as is.`; keep that as the final line.
307 

Discussion