deepline-sdk
Installation
SKILL.md
Deepline SDK Dense V3 Bootstrap
Deepline GTM work is paid uncertainty reduction. The play is the notebook, stable ids are the cache, datasets are durable row state, getters are the interface, and CSV is only an input/output boundary. Build a route-shaped V2 play, not a pile of console probes.
This is a multi-file skill suite: SKILL.md is the router, and references/ holds job-to-be-done docs.
Names in this skill are starting hints. The CLI is the source of truth: search, describe, check, then run. Preserve useful alpha as categories, contracts, failure modes, and gates rather than stale provider syntax.
Failure Modes
- Console archaeology: direct provider calls produce useful rows, then the agent hand-builds CSVs from rendered output. Guard: use direct prebuilt export when it fits; otherwise put composed work in a
.play.tswith stable ids. - Route replacement: a
company-people-emailtask silently becomes raw people search. Guard: preserve start entity and stage order; write the mismatch before changing route. - Dataset-backed child loop:
ctx.runPlaytries to call a prebuilt that ownsctx.dataset()state. Guard: ifplays checkreports direct-run/dataset-backed, run/export it as a boundary or copy the underlying described contract. - Getter archaeology: code reads
result.result.*, raw payload guesses, or optional chains instead of declared getters. Guard:tools describeownsextractedValues.*.get()andextractedLists.*.get(). - Healthcare/vertical drift: provider
industrysays "Healthcare" but no user-facing category/evidence column exists. Guard: add<vertical>_categoryorcategoryearly and keep fit evidence through export. - People-before-account: contact tasks for an ICP start with broad people search. Guard: source and fit domains first when account/category/portfolio/vertical matters.
- Fanout surprise: a small final CSV buys hundreds of people/email calls. Guard: cap source rows and people/account before row-level paid work; estimate before scale.
- Stale cell reuse: changing filter/getter/export logic does not rerun because persisted cells reused old values. Guard: change the affected column id or
staleAfterSeconds. - Replay corruption: play bodies use
Date.now(),Math.random(), localfs, rawfetch, env reads, or shell files. Guard: usectx.step,ctx.fetch,ctx.csv,ctx.tools.execute,ctx.runPlay,ctx.secrets. - Validation as discovery: validators are used to find channels. Guard: recover email/phone first, validate second, and skip nulls.