@audienti/cli 0.1.145 → 0.2.0-exora.10

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 (110) hide show
  1. package/README.md +47 -895
  2. package/bin/audienti-mcp.mjs +2 -0
  3. package/cli/account-intake-operations.mjs +28 -0
  4. package/cli/account-intake.mjs +33 -0
  5. package/cli/account-replies.mjs +35 -0
  6. package/cli/account-reply-operations.mjs +55 -0
  7. package/cli/agents.mjs +160 -0
  8. package/cli/assignment-operations.mjs +218 -0
  9. package/cli/assignment.mjs +116 -0
  10. package/cli/attachment-operations.mjs +9 -0
  11. package/cli/attachments.mjs +28 -0
  12. package/cli/audience-operations.mjs +21 -0
  13. package/cli/audiences.mjs +29 -0
  14. package/cli/audienti.mjs +217 -0
  15. package/cli/audit-operations.mjs +17 -0
  16. package/cli/audit.mjs +39 -0
  17. package/cli/budget-operations.mjs +8 -0
  18. package/cli/budgets.mjs +34 -0
  19. package/cli/campaign-find.mjs +155 -0
  20. package/cli/campaign-operations.mjs +30 -0
  21. package/cli/campaigns.mjs +61 -0
  22. package/cli/cohort-operations.mjs +22 -0
  23. package/cli/cohorts.mjs +45 -0
  24. package/cli/connection-registry-operations.mjs +8 -0
  25. package/cli/content.mjs +29 -0
  26. package/cli/discovery-operations.mjs +28 -0
  27. package/cli/discovery.mjs +15 -0
  28. package/cli/file-operations.mjs +29 -0
  29. package/cli/files.mjs +14 -0
  30. package/cli/guardrails-operations.mjs +12 -0
  31. package/cli/guardrails.mjs +37 -0
  32. package/cli/json-file.mjs +13 -0
  33. package/cli/kv-operations.mjs +17 -0
  34. package/cli/kv.mjs +58 -0
  35. package/cli/mcp.mjs +47 -0
  36. package/cli/notification-operations.mjs +8 -0
  37. package/cli/offer-operations.mjs +12 -0
  38. package/cli/offers.mjs +24 -0
  39. package/cli/outbound-operations.mjs +16 -0
  40. package/cli/outbound.mjs +54 -0
  41. package/cli/outcome-operations.mjs +26 -0
  42. package/cli/outcomes.mjs +16 -0
  43. package/cli/owner-account-client.mjs +18 -0
  44. package/cli/playbook-help.mjs +79 -0
  45. package/cli/playbook-operations.mjs +36 -0
  46. package/cli/profiles.mjs +29 -0
  47. package/cli/progress.mjs +26 -0
  48. package/cli/prospecting-settings-operations.mjs +16 -0
  49. package/cli/prospecting-settings.mjs +15 -0
  50. package/cli/question-operations.mjs +12 -0
  51. package/cli/questions.mjs +32 -0
  52. package/cli/queue-operations.mjs +12 -0
  53. package/cli/queue.mjs +25 -0
  54. package/cli/recipient-operations.mjs +13 -0
  55. package/cli/recipients.mjs +34 -0
  56. package/cli/rooms-operations.mjs +48 -0
  57. package/cli/rooms.mjs +160 -0
  58. package/cli/search-operations.mjs +9 -0
  59. package/cli/secret-operations.mjs +7 -0
  60. package/cli/secrets.mjs +30 -0
  61. package/cli/sender-account-operations.mjs +28 -0
  62. package/cli/sender-accounts.mjs +33 -0
  63. package/cli/skills-mcp.mjs +31 -0
  64. package/cli/skills.mjs +113 -0
  65. package/cli/suppression-operations.mjs +8 -0
  66. package/cli/suppression.mjs +12 -0
  67. package/cli/tools-operations.mjs +78 -0
  68. package/cli/tools.mjs +100 -0
  69. package/cli/usage-operations.mjs +8 -0
  70. package/cli/usage.mjs +41 -0
  71. package/cli/work-execution-operations.mjs +42 -0
  72. package/cli/work-execution.mjs +29 -0
  73. package/cli/work-feedback-operations.mjs +17 -0
  74. package/cli/work-feedback.mjs +18 -0
  75. package/cli/work-operations.mjs +30 -0
  76. package/cli/work.mjs +32 -0
  77. package/cli/workspaces.mjs +255 -0
  78. package/package.json +15 -26
  79. package/skills/agent-rooms/SKILL.md +140 -0
  80. package/skills/agent-rooms/references/commands.md +78 -0
  81. package/skills/audienti/SKILL.md +161 -317
  82. package/skills/audienti/references/helpers.md +162 -0
  83. package/skills/audienti/references/profile-workflows.md +214 -0
  84. package/skills/audienti/references/workflow-receipt.md +49 -0
  85. package/skills/audienti/scripts/contracts.mjs +72 -0
  86. package/skills/audienti/scripts/profile-helpers.mjs +138 -0
  87. package/skills/audienti/scripts/run.mjs +40 -0
  88. package/skills/getting-started/SKILL.md +227 -0
  89. package/skills/getting-started/references/audience.md +143 -0
  90. package/skills/getting-started/references/campaign-draft.md +80 -0
  91. package/skills/getting-started/references/capabilities.md +237 -0
  92. package/skills/getting-started/references/mailbox-check.md +64 -0
  93. package/skills/getting-started/references/outcome-checks.md +114 -0
  94. package/skills/getting-started/references/replies.md +186 -0
  95. package/skills/getting-started/references/reply-checks.md +54 -0
  96. package/skills/playbook-design/SKILL.md +136 -0
  97. package/skills/playbook-design/references/fields.md +130 -0
  98. package/source-manifest.json +104 -0
  99. package/.mcp.json +0 -13
  100. package/CHANGELOG.md +0 -1018
  101. package/bin/audienti-mcp.js +0 -5
  102. package/bin/audienti.js +0 -6
  103. package/install +0 -83
  104. package/skills/audienti/references/methodology.md +0 -111
  105. package/skills/audienti-gift-research/SKILL.md +0 -47
  106. package/src/agent-skills.js +0 -60
  107. package/src/api-client.js +0 -1639
  108. package/src/cli.js +0 -16992
  109. package/src/config.js +0 -130
  110. package/src/mcp.js +0 -103
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: playbook-design
3
+ description: Create, reuse or revise an Audienti playbook, the stages and steps a prospect moves through from first touch to the goal. Use during getting started, when a campaign has no playbook, and whenever you or the user have a new outreach idea.
4
+ ---
5
+
6
+ # Playbook design
7
+
8
+ A playbook is what a campaign follows: the stages a prospect moves
9
+ through, the steps in each stage (channel, action, wait), the goal stage, the ways out
10
+ (off-ramps) and the voice. Audienti stores every playbook with revisions, so a good one
11
+ is written once and reused by many campaigns. Planning tasks (`prospects.plan`) read the
12
+ campaign's playbook to decide each prospect's next step, so a campaign without one
13
+ cannot be worked.
14
+
15
+ Use this skill when:
16
+
17
+ - You are getting started and the workspace has no playbook yet.
18
+ - A queue task says a campaign needs a playbook (**Draft a playbook**, or a
19
+ **Get campaign ready** task that says "pick a playbook").
20
+ - You or the user have a new idea for how to reach people: a new channel order, a
21
+ different first touch, a new voice, a new goal.
22
+
23
+ ## Rules
24
+
25
+ - Reuse before you create. Most new campaigns fit a playbook that already exists.
26
+ - Use only channels you can cover with accounts you reported (LinkedIn, Email).
27
+ Do not draft a phone step if no one can call.
28
+ - One playbook is one strategy. A correction to the same strategy (a wait, a step's
29
+ wording, a missing off-ramp) is a new revision. A different strategy is a new
30
+ playbook, so the two can be compared in Analytics.
31
+ - Saving a playbook never changes campaigns already pinned to it. Pin the new
32
+ revision on purpose.
33
+ - Never invent results or proof points for the voice. Use the user's words.
34
+ - Every first email ends with one plain sentence that lets the prospect opt out, such
35
+ as "If this is not for you, reply and I will not write again." Say so in the first
36
+ email step's `instructions`. A prospect who opts out is suppressed for good.
37
+ - Ask the user before a new playbook is used for outreach. Nothing is sent without
38
+ their approval.
39
+
40
+ ## 1. Reuse first
41
+
42
+ 1. `audienti playbook list` shows one page of summaries: name, latest revision and stage and step
43
+ counts. Follow `nextCursor` for more; `--limit N` sets the page size.
44
+ Every workspace has three starter playbooks (`system: true`): Email first, LinkedIn
45
+ first and Email only. When your reported channels point to one, the list marks it
46
+ `recommended: true` and returns a `recommendation` with its `reason`. A confirmed
47
+ LinkedIn account gives LinkedIn first: the user registered it as a sender account and
48
+ authorized you on it, and your report for it is healthy and includes `send_message`.
49
+ Email with LinkedIn not yet confirmed gives Email first; email alone gives Email only.
50
+ 2. `audienti playbook show ID` shows the stages, steps, goal and voice.
51
+ 3. If one fits the campaign's offer, audience and your channels, use it. Say in one
52
+ line why it fits, then go to step 4 (pin it). A starter playbook can be pinned as it
53
+ is, but it is read-only: to change it, save its fields as a new playbook (no `id`,
54
+ `expectedRevision` 0) with a new name, and revise that copy. Saving a starter
55
+ playbook with its `id` fails with 409 `starter_playbook`.
56
+
57
+ ## 2. Draft a new playbook
58
+
59
+ Start from the user's offer, the audience and the channels you have. A good default
60
+ for founder-led or agent-led outbound has five to six stages:
61
+
62
+ 1. **Ready** (Agent): the prospect is in the campaign. No steps.
63
+ 2. **Warming** (Agent, optional): view the profile, like a recent post. Skip it when
64
+ LinkedIn is not available.
65
+ 3. **Outreach underway** (Agent): the touches, in order, with waits. For example a
66
+ connection request (wait 21 days), a message "Only if connected" (wait 5), a first
67
+ email (wait 4). Completes to the **Unresponsive** off-ramp when every step is done
68
+ and nobody replied.
69
+ 4. **In conversation** (Assignee): the prospect replied. A person drafts or approves
70
+ the reply. Completion `stay`.
71
+ 5. **Meeting requested** (Assignee).
72
+ 6. **Meeting booked** (Assignee, goal, `goalDays` 0).
73
+
74
+ Write `instructions` on each step as coaching for whoever does it: what to say, what
75
+ evidence to lead with, what to avoid. Write `voice` as two or three sentences in the
76
+ user's style. See [fields and an example request](references/fields.md) for every
77
+ field and the rules Audienti checks.
78
+
79
+ ## 3. Save it
80
+
81
+ 1. Write the request to a file: `expectedRevision` 0 and no `id` for a new playbook;
82
+ the playbook's `id` and its current revision number to revise one. Use a fresh
83
+ `requestId` (a UUID) and fresh UUIDs for every stage, step and off-ramp `key`.
84
+ Keep the same keys when you revise, so progress already recorded stays on its stage.
85
+ 2. `audienti playbook save --file REQUEST.json`. Over MCP use `playbook_save`.
86
+ 3. If the save fails, read the error: `field` is the path of the wrong value, `allowed` the
87
+ values that work and `next` what to do. Fix that field and retry with the same
88
+ `requestId`. Run `audienti playbook actions` for the step action ids, channels and event
89
+ names. If `next` says to ask your user (for example to turn on Allow workspace changes),
90
+ ask with `audienti ask` and carry on with what you can. If it reports a revision conflict, the error gives `currentRevision`: run
91
+ `playbook show ID`, apply your change to that revision and save with that `expectedRevision`.
92
+
93
+ ## 4. Ask the user and pin it
94
+
95
+ 1. Ask in Audienti, not in chat: `audienti ask "Use this playbook for CAMPAIGN?"
96
+ --context "SUMMARY" --option "Use it" --option "Change it"`. Put the stages, the
97
+ touches with their waits, the goal and the voice in the context as a short list.
98
+ 2. When they answer, apply their changes as a new revision.
99
+ 3. Pin it to the campaign with `playbookPin` `{ "id": PLAYBOOK_ID, "revision": N }`:
100
+ in `audienti campaign create` for a new campaign, or in the campaign's draft update
101
+ for a draft. An active campaign keeps its pin; to try a new playbook, make a
102
+ successor (below).
103
+
104
+ ## New ideas
105
+
106
+ When you or the user have a new idea for how to reach people:
107
+
108
+ 1. Write the idea as one change: "Lead with email instead of a connection request",
109
+ "Add a phone step after the second email", "Offer a teardown, not a demo".
110
+ 2. If it is a correction, save a new revision of the same playbook.
111
+ 3. If it is a different strategy, save a new playbook named for the idea.
112
+ 4. Test it with `audienti campaign successor ID` that changes only the playbook, so
113
+ the old and new campaigns can be compared. Name what changed in the campaign notes.
114
+ 5. Ask the user before the successor starts.
115
+
116
+ ## Record progress and ask for review
117
+
118
+ Read the playbook before doing work for a campaign pinned to it: `audienti playbook
119
+ show PLAYBOOK_ID`. Stage plays are instructions for you, the external agent; they are
120
+ not a hosted sequence that runs by itself.
121
+
122
+ - Progress: `audienti playbook record --file PATH` with exactly one of `stageKey`,
123
+ `offRampKey` or `finishStage: true`, the participation's pinned playbook version and
124
+ its current expected progress version, and stored evidence. Do not invent outcomes.
125
+ `audienti playbook` prints the command usage; the API schema has the required fields.
126
+ - Human review: `audienti playbook suggest --file PATH`. The user approves or dismisses
127
+ it in **Operator → Queue**. A suggestion does not move a stage, and agents cannot
128
+ approve one. A stay completion records work without moving the stage.
129
+ `audienti playbook suggestions` lists the suggestions you can see.
130
+ - None of these commands sends a message to a provider.
131
+
132
+ ## Done
133
+
134
+ Close your queue task with a note that names the playbook, its revision and the
135
+ campaign it is pinned to: `audienti queue done TASK --note "Saved Founder-led outbound
136
+ r1, pinned to Logistics UK test"`.
@@ -0,0 +1,130 @@
1
+ # Playbook fields
2
+
3
+ `audienti playbook save --file REQUEST.json` accepts one object:
4
+
5
+ | Field | Rule |
6
+ | --- | --- |
7
+ | `id` | Omit for a new playbook. The playbook ID to revise one. |
8
+ | `expectedRevision` | 0 for a new playbook, otherwise the latest revision number. |
9
+ | `requestId` | A fresh UUID. Reuse it only when you retry the same save. |
10
+ | `fields` | The playbook itself, below. |
11
+
12
+ ## fields
13
+
14
+ | Field | Rule |
15
+ | --- | --- |
16
+ | `name` | 1 to 120 characters. Name the strategy, not the campaign. |
17
+ | `stages` | 2 to 30 stages, in order. |
18
+ | `goalKey` | The `key` of the goal stage. Not the first stage. |
19
+ | `offRamps` | Up to 30 ways out: `{ key, name, reason }`. `reason` is `rejected`, `not_fit`, `nurture`, `unresponsive` or `other`. The system sets `taken_over`, `bounced` and `skipped` itself; do not choose them. "Bad data" and "repair" are not off-ramps. |
20
+ | `voice` | How messages should sound, in the user's style. |
21
+ | `eventRules` | Optional: what happens when an event reaches a person, for any stage and step. A new playbook starts with three (below); leave the field out to keep them, or send the whole list to replace it. See Event rules. |
22
+ | `rules` | Optional: `allowBackward` (boolean, default false): let a move go to an earlier stage. Approval of a move is a setting on the account, not a playbook rule. |
23
+
24
+ ## The Playbook check
25
+
26
+ Every read and save of a playbook returns `warnings`, a deterministic check that needs no agent. An item
27
+ is `{ id, level, message, stageKey, stepKey, fix }`. A save is refused with `playbook_cannot_work` (422,
28
+ the list in `errors`) when `offRamps` is empty or a stage has `on: []` and nothing sends people to it.
29
+ The other items are warnings; read them after each save and clear them:
30
+
31
+ | Item `id` | Meaning and default fix |
32
+ | --- | --- |
33
+ | `stage_never_ends` | A stage with steps and `completion` `stay`. Use `off_ramp` with the Unresponsive off-ramp. |
34
+ | `stage_by_hand_only` | Nothing opens a stage but a person or agent. Give it an `on` event or finish the stage before it with `next`. |
35
+ | `send_without_wait` | A send step with no `wait`, followed by another send on the same channel. Add a wait. |
36
+ | `goal_shorter_than_waits` | `goalDays` is below the waits added up. Use the waits plus 2 days. |
37
+ | `send_in_person_stage` | A send step in the goal stage or an `Assignee` stage writes to someone who already answered. Remove it. |
38
+ | `steps_after_break_up` | A step after the break-up email. Put it before the break-up step. |
39
+ | `message_without_connection` | A LinkedIn message with condition `Always` and no connection request before it. Use `Only if connected`. |
40
+ | `stages_loop` | Routes or rules send people between stages in a circle. |
41
+
42
+ ## Stage
43
+
44
+ | Field | Rule |
45
+ | --- | --- |
46
+ | `key` | A UUID, unique in the playbook. Keep it across revisions. |
47
+ | `name` | Unique in the playbook. |
48
+ | `movesInWhen` | What moves a prospect into this stage, for example "They replied". Shown to people; `on` decides. |
49
+ | `on` | The events that open this stage: `accept`, `reply`, `meeting` or `manual`. Defaults to `["manual"]`. An event moves the prospect to the furthest later stage that opens on it; the stages passed over are recorded as skipped, never as done. |
50
+ | `owner` | `Agent` or `Assignee` (the person assigned to the prospect). |
51
+ | `goalDays` | 0 to 365. The days after which a prospect in this stage is overdue (the pipeline card turns orange). 0 means never overdue. |
52
+ | `enabled` | Defaults to true. `false` skips the stage: no one is moved into it. The first stage and the goal stage cannot be skipped. |
53
+ | `steps` | Up to 20 steps. |
54
+ | `completion` | `{ "kind": "next" }`, `{ "kind": "stay" }` or `{ "kind": "off_ramp", "offRampKey": KEY }`. The last enabled stage cannot use `next`. |
55
+
56
+ ## Step
57
+
58
+ | Field | Rule |
59
+ | --- | --- |
60
+ | `key` | A UUID, unique in the playbook. A plan action that runs this step carries it as `playbookStepKey`; actions without it change no playbook progress. |
61
+ | `channel` | `LinkedIn` or `Email`. A phone call or a gift is not a step yet (#433): tell your user, and use an Email step with the call in its instructions. |
62
+ | `action` | A short label, for example "Send connection request". |
63
+ | `condition` | `Always`, `Only if viable` or `Only if connected`. Audienti does not check a connection itself: put an `Only if connected` step in a stage that opens on `accept`, so entering the stage on the accept is what gates it. |
64
+ | `viability` | Required with `Only if viable`: when the step makes sense. An Email step is skipped, without a card, for a person with no email on record, whatever its condition. |
65
+ | `instructions` | Coaching for whoever does the step. |
66
+ | `wait` | Optional: `{ "until": U, "days": N }`. `until` is `accept` (LinkedIn steps only), `reply`, `meeting` or `timeout`; `days` is 1 to 60. The wait starts when the agent reports the step's result with its step key: a plan action carries the step's `key` as `playbookStepKey`, and a succeeded result for that action starts the wait. A reply or a booked meeting ends every wait early; an accept ends only a wait until `accept`. Older playbooks used `waitDays: N`, which still reads as `{ "until": "timeout", "days": N }`. |
67
+ | `side` | Defaults to false. A side step runs while the main step before it waits, for example a profile view or a like. A stage with side steps needs a main step. |
68
+ | `onTimeout` | `next` (default) or `off_ramp`. With `off_ramp`, a main step whose wait runs out leaves the prospect through the `unresponsive` off-ramp. When nothing is left in the stage, its completion decides. |
69
+ | `routes` | Optional: `{ "accept"?: T, "reply"?: T, "meeting"?: T }`, where `T` is `{ "kind": "stage", "stageKey": "<uuid>" }` or `{ "kind": "off_ramp", "offRampKey": "<uuid>" }`. Where an event that reaches the person after this step ran sends them. The step's route wins over the stage's `on` list; an event with no route follows the stage. A main step only; `accept` only on a LinkedIn step. A route to an earlier stage needs `rules.allowBackward`. |
70
+ | `actionId` | Optional: an action id from the outreach rulebook, for example `linkedin.message.send`. It must match the step's `channel`. List the valid ids with their channel and label: `audienti playbook actions` (MCP `playbook_actions_list`). The `action` text stays the label the person reads. |
71
+ | `eventRules` | Optional, up to 10: event rules for this step only. See Event rules. |
72
+
73
+ ## Event rules
74
+
75
+ An event rule says what happens when an event reaches a person: do these things, then go here. It lives on the playbook (`fields.eventRules`, up to 30), on a stage (`eventRules`, up to 10) or on a step (up to 10). The nearest place wins, then the most specific event: a reply kind beats any reply. A step `routes` entry is the older form of the same thing.
76
+
77
+ | Field | Rule |
78
+ | --- | --- |
79
+ | `key` | A UUID, unique in the playbook. |
80
+ | `when` | The event: `accepted`, `replied`, `meeting_booked`, `wait_timeout`, `inbound_connection_request`, or a reply kind `reply.interested`, `reply.question`, `reply.later`, `reply.out_of_office`, `reply.wrong_person`, `reply.referral`. An unknown name is refused with the allowed names; `audienti playbook actions` lists them under `eventRules.when`. |
81
+ | `do` | Optional list of `stop_wait`, `snooze`, `redirect_to_named_person`, `ask_who_is_right`, `tell_me`, `hand_to_user`, `withdraw_pending_request`. Also under `eventRules.do`. |
82
+ | `snoozeDays` | 1 to 90. For `snooze`. |
83
+ | `goto` | Where the person goes after: `{ "kind": "stay" }`, `{ "kind": "gate" }` (the stage's own next step; the default), or `{ "kind": "stage", "stageKey": KEY }`, `{ "kind": "off_ramp", "offRampKey": KEY }` or `{ "kind": "step", "stepKey": KEY }`. |
84
+
85
+ Every new playbook starts with these three on the playbook, when you send no `eventRules`:
86
+
87
+ - `reply.interested`: `stop_wait`, then `gate`.
88
+ - `reply.out_of_office`: `snooze` for 7 days, then `stay`.
89
+ - `reply.wrong_person`: `stop_wait`, `redirect_to_named_person`, `ask_who_is_right`, then `stay`.
90
+
91
+ Taking someone off the list and a bounce always run first; no rule changes them.
92
+
93
+ A LinkedIn step whose `actionId` is `linkedin.inmail.send` runs only when the LinkedIn account reports InMail available. Otherwise it is skipped without a card.
94
+
95
+ ## Example request
96
+
97
+ Replace every `<uuid>` with a fresh UUID (`uuidgen` or `node -e "console.log(crypto.randomUUID())"`).
98
+ Use the same UUID wherever the same placeholder letter appears.
99
+
100
+ ```json
101
+ {
102
+ "expectedRevision": 0,
103
+ "requestId": "<uuid>",
104
+ "fields": {
105
+ "name": "Founder-led outbound",
106
+ "stages": [
107
+ { "key": "<A>", "name": "Ready", "owner": "Agent", "goalDays": 3, "steps": [], "completion": { "kind": "next" } },
108
+ { "key": "<B>", "name": "Warming", "owner": "Agent", "goalDays": 7, "steps": [
109
+ { "key": "<uuid>", "channel": "LinkedIn", "action": "View profile", "condition": "Always", "instructions": "Read their recent activity for a signal to mention." },
110
+ { "key": "<uuid>", "channel": "LinkedIn", "action": "Like a recent post", "condition": "Always", "instructions": "Only a post about their work.", "wait": { "until": "timeout", "days": 3 } }
111
+ ], "completion": { "kind": "next" } },
112
+ { "key": "<C>", "name": "Outreach underway", "owner": "Agent", "goalDays": 35, "steps": [
113
+ { "key": "<uuid>", "channel": "LinkedIn", "action": "Send connection request", "condition": "Always", "instructions": "No note, or one line on their signal.", "wait": { "until": "accept", "days": 21 } },
114
+ { "key": "<uuid>", "channel": "LinkedIn", "action": "View profile", "condition": "Always", "instructions": "A light touch while the request waits.", "side": true },
115
+ { "key": "<uuid>", "channel": "LinkedIn", "action": "Send message", "condition": "Only if connected", "instructions": "Lead with their signal and offer something useful.", "wait": { "until": "reply", "days": 5 } },
116
+ { "key": "<uuid>", "channel": "Email", "action": "Email 1", "condition": "Always", "instructions": "Three sentences: signal, offer, one short question.", "wait": { "until": "reply", "days": 4 }, "onTimeout": "off_ramp" }
117
+ ], "completion": { "kind": "off_ramp", "offRampKey": "<R>" } },
118
+ { "key": "<D>", "name": "In conversation", "movesInWhen": "They replied", "on": ["reply"], "owner": "Assignee", "goalDays": 3, "steps": [
119
+ { "key": "<uuid>", "channel": "Email", "action": "Draft a reply", "condition": "Always", "instructions": "Answer their question first. Propose a time only if they asked.", "wait": { "until": "reply", "days": 2 } }
120
+ ], "completion": { "kind": "stay" } },
121
+ { "key": "<E>", "name": "Meeting requested", "owner": "Assignee", "goalDays": 3, "steps": [], "completion": { "kind": "next" } },
122
+ { "key": "<F>", "name": "Meeting booked", "on": ["meeting"], "owner": "Assignee", "goalDays": 0, "steps": [], "completion": { "kind": "stay" } }
123
+ ],
124
+ "goalKey": "<F>",
125
+ "offRamps": [{ "key": "<R>", "name": "Unresponsive", "reason": "unresponsive" }],
126
+ "voice": "Write like a founder. Lead with their signal, offer something useful, and ask one short question.",
127
+ "rules": { "allowBackward": false }
128
+ }
129
+ }
130
+ ```
@@ -0,0 +1,104 @@
1
+ {
2
+ "repository": "https://github.com/omalab/exora",
3
+ "sourceCommit": "ba5f0ec81a55fdc5b04a77d29d2585187a364e1b",
4
+ "files": {
5
+ "LICENSE": "220f297cfcd5c38eb64e6b4b4a77cab4ebc7f4686d4d99c6260a475d02ca11e5",
6
+ "README.md": "7ff32cc8ac89dd54b64d7b39c0b41b1f37e154b7ea10ad5a7bceefc3df77d87f",
7
+ "bin/audienti-mcp.mjs": "6df1d6eb3a5bc65e7592e5b8f73cd4c98c159f2583723d042338633b356301df",
8
+ "cli/account-intake-operations.mjs": "b43d764c628beabafad753d711ddb2af2c64276e4a6506ed0b854839091ea5db",
9
+ "cli/account-intake.mjs": "aa77f2f96fd030f8830d6de278932186aea7c82cfda086a5a6cf569202feebc8",
10
+ "cli/account-replies.mjs": "699e34e5c736ba316df8f164b4c50f82a7e4e2d5e51303e6b13944c3f2c854ab",
11
+ "cli/account-reply-operations.mjs": "4359096dbf75d8c3602266588d2aea2b6cdecd903e2a094dbf25d26e2fab22b2",
12
+ "cli/agents.mjs": "e06a6097d9436c812a0623fe564b701c86defd599d7b78de3e8be783357c39bb",
13
+ "cli/assignment-operations.mjs": "fc74e3fd79975cfcbac14891d5dec5f25e662777050fc46a8ad3aae5cf361c59",
14
+ "cli/assignment.mjs": "90cb85e0df8aadca2ff8391c99e778b41261183b5f38e8c6c32afee2f98f871a",
15
+ "cli/attachment-operations.mjs": "dd29a50d073ded71ebd606fb3a9181bebcf2a1390f75f99cdcb61d84261d102a",
16
+ "cli/attachments.mjs": "2fee6b4abbf82da9847d4a927a3d4d3ca947a198a903a78927596a2ea858cbf4",
17
+ "cli/audience-operations.mjs": "133b72dc6b9e3a6b4f173ce28f1524163f9c7b049505b885115f83b9e4af7170",
18
+ "cli/audiences.mjs": "3c377346efc1a8bdde432a16c2d19a3f51f34f3333d344d3a2bfa94c188a017d",
19
+ "cli/audienti.mjs": "ade777be479e371633891508d74e4cd487a1b94df8c7effcc1ee25839b310b8e",
20
+ "cli/audit-operations.mjs": "184eb58bc479225314b77d6019a185670cd843895a10d9bf58a28de7f1355d91",
21
+ "cli/audit.mjs": "a7becaed67c58b063e668b5e66844b6dc15c11a63b428faa171b542ad922c001",
22
+ "cli/budget-operations.mjs": "d74916551ef393e29734c6e13cf9021251e0ed126eeaa529e18cf2332146e1e0",
23
+ "cli/budgets.mjs": "683e06cb4d410c851286fbd1cdd4fb9f1902726c60fd4fcddb2c13d164786525",
24
+ "cli/campaign-find.mjs": "9c0a44c69ab7ad3e24a0a2edc97b8f3a14f602e3b6caf7e1943b8e1b93609c4a",
25
+ "cli/campaign-operations.mjs": "c1ac42f53f8bf19957fac41cc2a80ab4e26a743a7c1cc0b42c8c0e85fcf6e61b",
26
+ "cli/campaigns.mjs": "a4c1e824b729cdaf1838db68785e62c55d4ba7d57c59d3f71666d2197be2fdf8",
27
+ "cli/cohort-operations.mjs": "91b1d1fc48e75581bb315f42d735ef94e21687dc216f352337d8a5d180bb691e",
28
+ "cli/cohorts.mjs": "c71940903430f3e6834608f113534910b75a98b3e410a5942f04051607488485",
29
+ "cli/connection-registry-operations.mjs": "888ea440d00ffc9ed68d4cc084ff73a5a00d0e60bd6293baba8bb4539a25ae62",
30
+ "cli/content.mjs": "db3fcbf7f96c314227a8172a442b70b46405126e0d61f8358cee1bfe6c627ebd",
31
+ "cli/discovery-operations.mjs": "cc132abae230cc84439bcd24da813e2798ee1eb83a06a7d1141202ab9c68215a",
32
+ "cli/discovery.mjs": "34b3794ee6ca539dbbccef77ec2085fd5411023046bdfb9b83e2537414542a41",
33
+ "cli/file-operations.mjs": "564f334dd9d52e9c56f44d58b5c3b0bda59ff72f54126b755bc472144069349e",
34
+ "cli/files.mjs": "2221b067d6ade7ef5cc8965929aea2eb485781953d3f2b50600995b65fbdedae",
35
+ "cli/guardrails-operations.mjs": "aa5a911663133b3287bea805df9e2a5d8b5bbc4a3df972c52f91fee315954ded",
36
+ "cli/guardrails.mjs": "e8b9c0a19956a9eab84475d3c56a4b6c77baf7ed9a55e8686d660ef1ad562aa8",
37
+ "cli/json-file.mjs": "96431b18215834c2531f5901e2526875c634dd2e85a9465fcffc937fbec52150",
38
+ "cli/kv-operations.mjs": "505d79d0d535d3441883f8a37817c30c73367216a35dddb07181f0f0e799df79",
39
+ "cli/kv.mjs": "05783610001dd002af07a4bb8f26e64d74aa4981bbe38a2100552b810cb3bc72",
40
+ "cli/mcp.mjs": "289f6a68554e54fe0dbad290bf710ff7fad1c598421a83d3fb9b96979dac1eaa",
41
+ "cli/notification-operations.mjs": "7225dbcfd87d29921e72ee247f61aaee323a4a2e5a48a9ba9c945b02f66e4978",
42
+ "cli/offer-operations.mjs": "a03d467622be38bbf52bbfbbd54e6969bdd55af15a627f54356bb03eb1b4f508",
43
+ "cli/offers.mjs": "4a97007e1e25352707bbecda0b2519affcd0024e52ae8d9446d76d459460feca",
44
+ "cli/outbound-operations.mjs": "52992bea63195efa8150c6ca2ff0b37ee6010f03fa366055c70c755ee0eb028e",
45
+ "cli/outbound.mjs": "23903eb0fec4d7af3aa0031d63488ed9a8697e07ccf1314d194b48e109d15f82",
46
+ "cli/outcome-operations.mjs": "25380db262c316ea1b34a5ae95abd01f2c8e92b7c877ebe3f0b18ccd5032a7fa",
47
+ "cli/outcomes.mjs": "e547aa889c3d356c66d122d8fe4fd8f4ff46b18531c1318ca6f238af102cdde9",
48
+ "cli/owner-account-client.mjs": "e7912f7c67571676cb94bcc9424b7d4a3bf9ef1461c9a5d6c31a2651e546a9ea",
49
+ "cli/playbook-help.mjs": "56a5b6ba4c94022931f9c751c954133239404048aba99d1ff28cd290eac22f41",
50
+ "cli/playbook-operations.mjs": "157d5c0ce1b2dda740a787c9834ca08511f8678d14e4cc1b8e54c9d0d2d62681",
51
+ "cli/profiles.mjs": "45929b224ffc916b6dbd7a94e06ac09a1ff7feec430633b10d160c1608fc2d32",
52
+ "cli/progress.mjs": "aeca47f4e59be306dac4592cf2e4209a30e322fc13e4e103e64e09faa370f5a8",
53
+ "cli/prospecting-settings-operations.mjs": "37b881a867c19d9e5f2d02316038284ea0cf09de4f37b6dee2370a1faedf245e",
54
+ "cli/prospecting-settings.mjs": "b09f47c84416d9892d7d5b17dcf684cbb560e1cacb25513826ff04ef9307626e",
55
+ "cli/question-operations.mjs": "c7070dd1b5ec9c5b0df93012ef08d0d6b4d6e5c8da267a37beb1acc5c3cf4ea1",
56
+ "cli/questions.mjs": "32bbe0b785b1e6438435faf4697332ea2da3133d4c896720d39377c35e9b2127",
57
+ "cli/queue-operations.mjs": "bc5f5b8f79f056f579c2d3965d143b45ded4665629e2c4d427adfbaf7e9687fb",
58
+ "cli/queue.mjs": "046f4dba92ac9eacbb1f12215ab2b49623bae597342da6b415f7afb3c3a1344e",
59
+ "cli/recipient-operations.mjs": "7d41c17ef2d59dbed982893e0989c9c076317b91adcd3d752cbe1d2e0b8c41b2",
60
+ "cli/recipients.mjs": "dc93d4a23ca1df9c84a0c9734d09491af179644eed48d856d1f1a24d42276ea8",
61
+ "cli/rooms-operations.mjs": "27e4c1c0dac7cf1256468bac5806fb2a3959d07d3cac3af8d785a50772148fd1",
62
+ "cli/rooms.mjs": "bc42cc3f040b23bd832c725cb0e2faf66fe6327cbc64571550586ce97ba40415",
63
+ "cli/search-operations.mjs": "903f12fffb6824872160c4136925ab5638142bb4e39236b37f927cd2c6a43776",
64
+ "cli/secret-operations.mjs": "faefe9c9ece81087dc7aab32e88f331ed942d0757ce5a978b5f0722d514f377f",
65
+ "cli/secrets.mjs": "cab4ea932e724ce3c807c7825869810b44fb8d75cdacec32f8101353f0e7c5f5",
66
+ "cli/sender-account-operations.mjs": "97d7a9236c2b72e9863d3d75ab93671348ff97a07d627a3e72350a17623b4d4d",
67
+ "cli/sender-accounts.mjs": "406abd62a489894bec2cb3c9ebcc1b19572ab8f2d0fab4854deb78ea7dd89d0a",
68
+ "cli/skills-mcp.mjs": "6a91b16a789f50035ae0fe33f8ae2758bb9829949db7efb05c6d65dde335a9e0",
69
+ "cli/skills.mjs": "ea8dfef32664714f9c63251d9a6bbdb44d77d41e272df46bb102ebfcd8df8b66",
70
+ "cli/suppression-operations.mjs": "d1f827a785670fc6e44d87b18e4cfb6596b09e5be7c4f84c4b9a75ed13a962c6",
71
+ "cli/suppression.mjs": "2b10be67e290deec9ed915139c3d98d45d7d10fd41abb67b5a35a630d636a4ed",
72
+ "cli/tools-operations.mjs": "aafa52336c0bda8b05d4a091548c18d8634608d282d433aee45a744044b68770",
73
+ "cli/tools.mjs": "6d9c7f27cc50e5e2fc0859c9c2d62bc3e77b5a46d0e2aeaa6cf31e2867138758",
74
+ "cli/usage-operations.mjs": "64dd1ae850f52bb72c7648be78a8ab2dfab986afba2d2d2cd08034c4f7b3ace6",
75
+ "cli/usage.mjs": "cd582c061f83ca4f220ddd3cd2a174a1a3a3c0ee308b3d5a5f47752a501e322e",
76
+ "cli/work-execution-operations.mjs": "842d706b36bb035aa54e1dee8bf950f0619c495bcae84faa1926fbb05f6842bc",
77
+ "cli/work-execution.mjs": "4b74923417eaa70dee0ba8806b64d0acf7c884fb77b76d5e86d567cf92e51b01",
78
+ "cli/work-feedback-operations.mjs": "a998f2b2dbe38ceb2bad74f7fa61c31f87f842755449248b7eb0c04185c0ee3d",
79
+ "cli/work-feedback.mjs": "f3b77ecfd7ea1aba9c9f03c9d894137547e9c5575d9daa359ed94505ad025852",
80
+ "cli/work-operations.mjs": "8b3a84ca15e8e4ad79ef92ced4c5adaffd5129f630e3bfc2c74a844a90867600",
81
+ "cli/work.mjs": "751107ecc3de5a6be9db4a068cddc41f3ad8e77c87e59686eaf522862caf9e9f",
82
+ "cli/workspaces.mjs": "3c27db13d805ac220608cb5374f52955d92054f333136468237079e13547fa1e",
83
+ "package.json": "f31e4da2874888ec971ee52236c37619184d84b3232105e756f2d542f9a052b2",
84
+ "skills/agent-rooms/SKILL.md": "08f917ff85fee1d23499a4499056ce845b39ce6727029b104819dad41ee87cc2",
85
+ "skills/agent-rooms/references/commands.md": "ef5afa5543ca9da967a147f638774647998ea1c1a2a821959f3bf87d54c292bd",
86
+ "skills/audienti/SKILL.md": "8f2124065bfc3a005b44e194e7dcce9bbf14062ab332e7db66d441eeccb518ed",
87
+ "skills/audienti/references/helpers.md": "e27aff0aa07b92f575d617612ed3def824765bac6ce1304cf227a4aca223369a",
88
+ "skills/audienti/references/profile-workflows.md": "80669b75eb5e8aeb614ce55ac046236d671af0de3ddd238853324579d5a3b251",
89
+ "skills/audienti/references/workflow-receipt.md": "349f9a85472832b8bdc6a5d16c5b10b8e32d48d3e81523ad8d42f9a03b3655ff",
90
+ "skills/audienti/scripts/contracts.mjs": "900428e067b7f8dae544012387bc3752f7b0d27777a80cd16ec0985848983f70",
91
+ "skills/audienti/scripts/profile-helpers.mjs": "7f62afdefd8e1b1bfec95f1ca6f48cfc4e204d1bff35f805261c45c6d5fcb46a",
92
+ "skills/audienti/scripts/run.mjs": "652094ff8b642d13f5e0bb30756bb49464c051511c37f202249fde917b319208",
93
+ "skills/getting-started/SKILL.md": "902fffe321a91acd2dc3583a372801df6952c7e974179198ce688b62ca8b8f21",
94
+ "skills/getting-started/references/audience.md": "6a2c061be5e299b3cbbd236578693ae5084d216425c500d3639a4d1fcb86ccb7",
95
+ "skills/getting-started/references/campaign-draft.md": "c2cbeb7de95734889698a5cd852268b9bed69e56f661153bb7ada237241a1a6b",
96
+ "skills/getting-started/references/capabilities.md": "b41ab2ec511db127c8e43c80c71aa4fd516ca816af393f5a1c7b3456e355af96",
97
+ "skills/getting-started/references/mailbox-check.md": "113574bb5a573125620dcde4e65ebf44164f7b0727cc936fb41234f5d57bba73",
98
+ "skills/getting-started/references/outcome-checks.md": "53919f2c2adf2bd24e602f4c2a21fbd47c807b115b2a1f9bb7893ebf48dc715a",
99
+ "skills/getting-started/references/replies.md": "865c97bea9c4bbecc2aba15be933356d11c37f3239be2cd436442230b5e0501e",
100
+ "skills/getting-started/references/reply-checks.md": "85fe692ad6b7bc73e204de313b27d225be3da1a0af71e8e7bb9945ae511a0dc3",
101
+ "skills/playbook-design/SKILL.md": "95c8c9d9cf0dd4d69b9634f9b1f4fb04628b1b9d4dd22d928ea135ce3b5a98da",
102
+ "skills/playbook-design/references/fields.md": "96a97654508cc8340df485e00d823c30d1e07e9f10e3ed94b231d375783de894"
103
+ }
104
+ }
package/.mcp.json DELETED
@@ -1,13 +0,0 @@
1
- {
2
- "mcpServers": {
3
- "audienti": {
4
- "title": "Audienti",
5
- "description": "Bridge MCP clients to Audienti's app-hosted /mcp endpoint for accounts, plays, prospects, lists, analytics, and operator workflows.",
6
- "cwd": ".",
7
- "command": "node",
8
- "args": [
9
- "./bin/audienti-mcp.js"
10
- ]
11
- }
12
- }
13
- }