@amdahl/cli 0.4.1 → 0.4.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +63 -2
  2. package/dist/amdahl.js +789 -348
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -319,6 +319,7 @@ amdahl whoami # the account, workspace and role you are signed in
319
319
  amdahl status # can this workspace optimize, and what blocks it
320
320
  amdahl optimize draft.md # rewrite one message (or pipe it in with -, or run it bare and paste)
321
321
  amdahl optimize --list drafts.csv # rewrite a whole list in one batch
322
+ amdahl optimize --list drafts.csv --for lemlist --channel email # and a CSV lemlist imports
322
323
  amdahl search "what objections came up in lost deals?" # ask about your customers
323
324
  amdahl connections # what is connected, and whether it is healthy
324
325
  amdahl connect hubspot # open the console's add page, to add a CRM or call recorder
@@ -363,7 +364,7 @@ amdahl auth token
363
364
  amdahl status
364
365
  amdahl optimize [<file>... | -] [--channel email|linkedin] [--evidence off|workspace]
365
366
  [--on-unsupported flag|remove] [--tries] [--context <file.json>]
366
- amdahl optimize --list <file.csv|file.jsonl> [--no-wait] [--batch <id>] [--force] [the optimize flags]
367
+ amdahl optimize --list <file.csv|file.jsonl> [--no-wait] [--batch <id>] [--force] [--for <tool>] [the optimize flags]
367
368
  amdahl search "<question>" [--research] [--limit <n>]
368
369
  amdahl connections [--all]
369
370
  amdahl connect [<connector>] [--no-browser]
@@ -507,7 +508,8 @@ The list is a CSV file with a header row, or a JSONL file (`.jsonl` or
507
508
  `.ndjson`) with one batch item, a JSON object, per line. A CSV has a
508
509
  `message` column and may have `item_id`, `channel`, `evidence`,
509
510
  `on_unsupported`, `facts` and `rules`; facts and rules take one per line
510
- inside the cell. Any other column (a CRM export has many) is not sent: one
511
+ inside the cell, and a channel is read in any case (`LinkedIn` is `linkedin`).
512
+ Any other column (a CRM export has many) is not sent: one
511
513
  line names it, and it is copied to the results file in its place. Only a
512
514
  missing `message` column, or a column Amdahl reads that appears twice (a
513
515
  doubled `message`, say), is refused. A JSONL item takes any field a single
@@ -544,6 +546,65 @@ results go next to that list and the list must have as many messages as the
544
546
  batch has items (exit 2 otherwise), otherwise they go to `<id>.optimized.jsonl`
545
547
  here. `--no-wait` with `--batch` exits 2: it only queues a new list.
546
548
 
549
+ ### Send the list to your sequencer
550
+
551
+ ```sh
552
+ amdahl optimize --list drafts.csv --for lemlist --channel email
553
+ ```
554
+
555
+ `--for <tool>` (a CSV list only) also writes the messages Amdahl wrote as a
556
+ file that tool imports, next to the results, and prints three steps: where to
557
+ import it, what to map, and what to paste into the step. The file is
558
+ `<list>-<tool>.csv`: `drafts.csv` for lemlist gets `drafts-lemlist.csv`. The
559
+ console's Send to writes the same file for the same list.
560
+
561
+ ```
562
+ Results: drafts.optimized.csv
563
+ Import file for lemlist: drafts-lemlist.csv
564
+ 38 messages ready for lemlist. 2 left out: 1 failed, 1 with no email.
565
+ 1. Import: In your campaign, open Leads list > Import new leads > CSV.
566
+ 2. email and the name columns map on their own. amdahl_subject and
567
+ amdahl_message become custom variables.
568
+ 3. Paste into your step: Subject {{amdahl_subject}}, Body {{amdahl_message}}
569
+ ```
570
+
571
+ - **Tools:** `instantly`, `smartlead`, `lemlist`, `heyreach`, `reply_io`,
572
+ `apollo`, `outreach`, `salesloft`, `hubspot`, `lgm` (La Growth Machine),
573
+ `woodpecker`, and `other` for any tool with a CSV import. Gmail and Outlook
574
+ send from a mailbox, so they have no import file.
575
+ - **Channel:** a file is for one channel. A tool that takes one channel needs no
576
+ flag: HeyReach and La Growth Machine are LinkedIn, and the rest are email,
577
+ except lemlist, Reply.io and `other`, which take both. For those, add
578
+ `--channel email` or `--channel linkedin`, or put the channel in the list's
579
+ `channel` column. A list with both channels is refused.
580
+ - **Rows:** only leads Amdahl wrote. A lead that failed, needed input or was not
581
+ written is left out, and so is one with no email (no LinkedIn URL for
582
+ LinkedIn; HeyReach also needs a first and a last name). The line after the
583
+ count says how many and why.
584
+ - **Columns:** your list's `email`, `first_name`, `last_name`, `company` and
585
+ `linkedin_url`, found by header in any common spelling and named as the tool
586
+ names them (lemlist `firstName`, `companyName`; Instantly and Smartlead
587
+ `company_name`), then `amdahl_subject` and `amdahl_message` (just
588
+ `amdahl_message` for LinkedIn), then every other column of your list in its
589
+ order, as lowercase snake_case. The column the message came from (the first
590
+ whose header names a draft, such as `message`, `draft` or `body`) and the columns Amdahl
591
+ reads itself (`message`, `channel`, `evidence`, `on_unsupported`, `facts`,
592
+ `rules` and `item_id`, matched on the snake_case header, so `Item ID` too)
593
+ are not in the file. Your tool imports a value as it is, so no cell gets the `'`
594
+ guard that the results file has: a `-20% off` subject or a `+1 415...` phone
595
+ number arrives as written. Line breaks are CRLF, and there is no byte-order
596
+ mark.
597
+ - **Checked first:** before anything is queued, a list the tool cannot import
598
+ exits 2: no email column for an email file, no LinkedIn URL column for a
599
+ LinkedIn one, a JSONL list (the file keeps your columns), a file that already
600
+ exists (`--force` replaces it). `--no-wait` queues the batch, and the line it
601
+ prints to pick it up carries `--for` and `--channel`.
602
+ - **Under `--json`:** the file is still written, no steps are printed, and the
603
+ batch gains `send_to`: `tool`, `channel`, `file` (null when no lead was
604
+ ready), `ready`, `left_out` (`failed`, `not_written`, `needs_input`,
605
+ `no_contact`) and `over_limit`. With no lead ready, no file is written and
606
+ the exit is 1.
607
+
547
608
  ## After you send
548
609
 
549
610
  ```sh