@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.
- package/README.md +63 -2
- package/dist/amdahl.js +789 -348
- 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
|
|
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
|