@audienti/cli 0.2.0-exora.3 → 0.2.0-exora.5
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 +2 -2
- package/cli/account-reply-operations.mjs +24 -1
- package/cli/agents.mjs +42 -10
- package/cli/audience-operations.mjs +1 -1
- package/cli/audienti.mjs +54 -17
- package/cli/campaign-find.mjs +155 -0
- package/cli/campaign-operations.mjs +6 -3
- package/cli/campaigns.mjs +21 -3
- package/cli/cohort-operations.mjs +1 -1
- package/cli/discovery-operations.mjs +2 -1
- package/cli/discovery.mjs +3 -2
- package/cli/json-file.mjs +1 -1
- package/cli/kv-operations.mjs +17 -0
- package/cli/kv.mjs +58 -0
- package/cli/mcp.mjs +2 -2
- package/cli/outcome-operations.mjs +19 -0
- package/cli/outcomes.mjs +16 -0
- package/cli/owner-account-client.mjs +1 -1
- package/cli/{approach-operations.mjs → playbook-operations.mjs} +15 -15
- package/cli/progress.mjs +6 -6
- package/cli/question-operations.mjs +4 -4
- package/cli/questions.mjs +4 -4
- package/cli/queue-operations.mjs +7 -6
- package/cli/queue.mjs +4 -3
- package/cli/recipient-operations.mjs +1 -1
- package/cli/rooms-operations.mjs +6 -5
- package/cli/rooms.mjs +7 -6
- package/cli/secret-operations.mjs +7 -0
- package/cli/secrets.mjs +30 -0
- package/cli/sender-account-operations.mjs +6 -2
- package/cli/sender-accounts.mjs +13 -8
- package/cli/skills-mcp.mjs +6 -2
- package/cli/skills.mjs +55 -12
- package/cli/tools-operations.mjs +18 -10
- package/cli/tools.mjs +48 -20
- package/cli/work-execution-operations.mjs +6 -0
- package/cli/work-execution.mjs +3 -3
- package/cli/work-operations.mjs +4 -3
- package/cli/work.mjs +2 -2
- package/cli/workspaces.mjs +28 -16
- package/package.json +2 -2
- package/skills/agent-rooms/SKILL.md +104 -0
- package/skills/agent-rooms/references/commands.md +58 -0
- package/skills/audienti/SKILL.md +106 -5
- package/skills/audienti/references/helpers.md +15 -2
- package/skills/audienti/references/profile-workflows.md +4 -2
- package/skills/audienti/scripts/contracts.mjs +1 -1
- package/skills/getting-started/SKILL.md +180 -154
- package/skills/getting-started/references/audience.md +72 -7
- package/skills/getting-started/references/campaign-draft.md +54 -13
- package/skills/getting-started/references/capabilities.md +214 -0
- package/skills/getting-started/references/mailbox-check.md +64 -0
- package/skills/getting-started/references/outcome-checks.md +89 -0
- package/skills/getting-started/references/replies.md +152 -0
- package/skills/getting-started/references/reply-checks.md +54 -0
- package/skills/playbook-design/SKILL.md +132 -0
- package/skills/playbook-design/references/fields.md +89 -0
- package/source-manifest.json +58 -43
- package/skills/getting-started/references/inventory.md +0 -52
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Mailbox checks
|
|
2
|
+
|
|
3
|
+
Audienti never signs in to your user's mailbox. You send from it through your own email
|
|
4
|
+
connector (Gmail or Outlook, through Composio, a Claude connector or similar), so you also
|
|
5
|
+
prove it works and read it for replies. Two queue tasks ask for that. If you have no email
|
|
6
|
+
connector, tell your user exactly: "I need a Gmail or Outlook connector to send from your
|
|
7
|
+
mailbox." Never send them to Settings to connect a mailbox.
|
|
8
|
+
|
|
9
|
+
## The test email (`mailbox.confirm`)
|
|
10
|
+
|
|
11
|
+
A mailbox counts for campaigns only once you sent a test email from it to itself, read it
|
|
12
|
+
back and reported its code. [The mailbox test email](mailbox-check.md) gives the steps. Your
|
|
13
|
+
user does nothing in that check. It proves the mailbox sends and that you can read its
|
|
14
|
+
inbox, which the reply checks below need too.
|
|
15
|
+
|
|
16
|
+
## The reply check (`replies.check`)
|
|
17
|
+
|
|
18
|
+
Before any next step goes to someone you emailed, in a campaign or not, Audienti asks you to
|
|
19
|
+
check the mailbox the email went out from for their reply. Until you report each person, no
|
|
20
|
+
next step is planned or sent for them. Each task lists at most 100 people in `waiting`, each
|
|
21
|
+
with `person`, `name`, `participation` (null when the step is in no campaign), `attempt`
|
|
22
|
+
(the email) and `sentAt` (when it went out). A task for a mailbox you confirm is assigned to
|
|
23
|
+
you.
|
|
24
|
+
While you hold the task, its list stays as it was when you claimed it, even after a reply
|
|
25
|
+
you record. Report everyone on it.
|
|
26
|
+
|
|
27
|
+
1. Claim the task.
|
|
28
|
+
2. Search the mailbox with your connector for mail from the listed people since their
|
|
29
|
+
`sentAt` only. Do not read anything else.
|
|
30
|
+
3. Record each reply you find the way you record any reply: `audienti prospects
|
|
31
|
+
conversation append PERSON --workspace ID --file ITEM.json` with `direction: inbound`
|
|
32
|
+
and `conversationType: direct`. It returns the evidence id. Audienti then ends the
|
|
33
|
+
person's wait, holds their sends and gives you a reply task, as for any reply.
|
|
34
|
+
4. Report every listed person:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"results": [
|
|
39
|
+
{ "kind": "email.no_reply", "person": "PERSON_ID" },
|
|
40
|
+
{ "kind": "email.reply", "person": "PERSON_ID", "evidence": "EVIDENCE_ID" }
|
|
41
|
+
]
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
```sh
|
|
46
|
+
audienti outcomes report TASK_ID --file RESULTS.json
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
5. Report the task done. If you cannot read the mailbox now, release the task with a note.
|
|
50
|
+
|
|
51
|
+
An `email.reply` whose evidence is not an inbound message of that person is not recorded
|
|
52
|
+
(`reply_not_recorded`): record the reply first. A person you leave out comes back on the
|
|
53
|
+
next check, about an hour later. Reporting the same person again for the same email returns
|
|
54
|
+
`already_recorded`.
|
|
@@ -0,0 +1,132 @@
|
|
|
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, Phone).
|
|
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 the workspace's playbooks and their latest revision.
|
|
43
|
+
Every workspace has three starter playbooks (`system: true`): Email first, LinkedIn
|
|
44
|
+
first and Email only. When your reported channels point to one, the list marks it
|
|
45
|
+
`recommended: true` and returns a `recommendation` with its `reason`. A confirmed
|
|
46
|
+
LinkedIn account gives LinkedIn first: the user registered it as a sender account and
|
|
47
|
+
authorized you on it, and your report for it is healthy and includes `send_message`.
|
|
48
|
+
Email with LinkedIn not yet confirmed gives Email first; email alone gives Email only.
|
|
49
|
+
2. `audienti playbook show ID` shows the stages, steps, goal and voice.
|
|
50
|
+
3. If one fits the campaign's offer, audience and your channels, use it. Say in one
|
|
51
|
+
line why it fits, then go to step 4 (pin it). A starter playbook can be pinned as it
|
|
52
|
+
is, but it is read-only: to change it, save its fields as a new playbook (no `id`,
|
|
53
|
+
`expectedRevision` 0) with a new name, and revise that copy. Saving a starter
|
|
54
|
+
playbook with its `id` fails with 409 `starter_playbook`.
|
|
55
|
+
|
|
56
|
+
## 2. Draft a new playbook
|
|
57
|
+
|
|
58
|
+
Start from the user's offer, the audience and the channels you have. A good default
|
|
59
|
+
for founder-led or agent-led outbound has five to six stages:
|
|
60
|
+
|
|
61
|
+
1. **Ready** (Agent): the prospect is in the campaign. No steps.
|
|
62
|
+
2. **Warming** (Agent, optional): view the profile, like a recent post. Skip it when
|
|
63
|
+
LinkedIn is not available.
|
|
64
|
+
3. **Outreach underway** (Agent): the touches, in order, with waits. For example a
|
|
65
|
+
connection request (wait 21 days), a message "Only if connected" (wait 5), a first
|
|
66
|
+
email (wait 4). Completes to the **Unresponsive** off-ramp when every step is done
|
|
67
|
+
and nobody replied.
|
|
68
|
+
4. **In conversation** (Assignee): the prospect replied. A person drafts or approves
|
|
69
|
+
the reply. Completion `stay`.
|
|
70
|
+
5. **Meeting requested** (Assignee).
|
|
71
|
+
6. **Meeting booked** (Assignee, goal, `goalDays` 0).
|
|
72
|
+
|
|
73
|
+
Write `instructions` on each step as coaching for whoever does it: what to say, what
|
|
74
|
+
evidence to lead with, what to avoid. Write `voice` as two or three sentences in the
|
|
75
|
+
user's style. See [fields and an example request](references/fields.md) for every
|
|
76
|
+
field and the rules Audienti checks.
|
|
77
|
+
|
|
78
|
+
## 3. Save it
|
|
79
|
+
|
|
80
|
+
1. Write the request to a file: `expectedRevision` 0 and no `id` for a new playbook;
|
|
81
|
+
the playbook's `id` and its current revision number to revise one. Use a fresh
|
|
82
|
+
`requestId` (a UUID) and fresh UUIDs for every stage, step and off-ramp `key`.
|
|
83
|
+
Keep the same keys when you revise, so progress already recorded stays on its stage.
|
|
84
|
+
2. `audienti playbook save --file REQUEST.json`. Over MCP use `playbook_save`.
|
|
85
|
+
3. If the save fails, read the error, fix that field and retry with the same
|
|
86
|
+
`requestId`. If it reports a revision conflict, run `playbook show ID` and apply your
|
|
87
|
+
change to the newer revision.
|
|
88
|
+
|
|
89
|
+
## 4. Ask the user and pin it
|
|
90
|
+
|
|
91
|
+
1. Ask in Audienti, not in chat: `audienti ask "Use this playbook for CAMPAIGN?"
|
|
92
|
+
--context "SUMMARY" --option "Use it" --option "Change it"`. Put the stages, the
|
|
93
|
+
touches with their waits, the goal and the voice in the context as a short list.
|
|
94
|
+
2. When they answer, apply their changes as a new revision.
|
|
95
|
+
3. Pin it to the campaign with `playbookPin` `{ "id": PLAYBOOK_ID, "revision": N }`:
|
|
96
|
+
in `audienti campaign create` for a new campaign, or in the campaign's draft update
|
|
97
|
+
for a draft. An active campaign keeps its pin; to try a new playbook, make a
|
|
98
|
+
successor (below).
|
|
99
|
+
|
|
100
|
+
## New ideas
|
|
101
|
+
|
|
102
|
+
When you or the user have a new idea for how to reach people:
|
|
103
|
+
|
|
104
|
+
1. Write the idea as one change: "Lead with email instead of a connection request",
|
|
105
|
+
"Add a phone step after the second email", "Offer a teardown, not a demo".
|
|
106
|
+
2. If it is a correction, save a new revision of the same playbook.
|
|
107
|
+
3. If it is a different strategy, save a new playbook named for the idea.
|
|
108
|
+
4. Test it with `audienti campaign successor ID` that changes only the playbook, so
|
|
109
|
+
the old and new campaigns can be compared. Name what changed in the campaign notes.
|
|
110
|
+
5. Ask the user before the successor starts.
|
|
111
|
+
|
|
112
|
+
## Record progress and ask for review
|
|
113
|
+
|
|
114
|
+
Read the playbook before doing work for a campaign pinned to it: `audienti playbook
|
|
115
|
+
show PLAYBOOK_ID`. Stage plays are instructions for you, the external agent; they are
|
|
116
|
+
not a hosted sequence that runs by itself.
|
|
117
|
+
|
|
118
|
+
- Progress: `audienti playbook record --file PATH` with exactly one of `stageKey`,
|
|
119
|
+
`offRampKey` or `finishStage: true`, the participation's pinned playbook version and
|
|
120
|
+
its current expected progress version, and stored evidence. Do not invent outcomes.
|
|
121
|
+
`audienti playbook` prints the command usage; the API schema has the required fields.
|
|
122
|
+
- Human review: `audienti playbook suggest --file PATH`. The user approves or dismisses
|
|
123
|
+
it in **Operator → Queue**. A suggestion does not move a stage, and agents cannot
|
|
124
|
+
approve one. A stay completion records work without moving the stage.
|
|
125
|
+
`audienti playbook suggestions` lists the suggestions you can see.
|
|
126
|
+
- None of these commands sends a message to a provider.
|
|
127
|
+
|
|
128
|
+
## Done
|
|
129
|
+
|
|
130
|
+
Close your queue task with a note that names the playbook, its revision and the
|
|
131
|
+
campaign it is pinned to: `audienti queue done TASK --note "Saved Founder-led outbound
|
|
132
|
+
r1, pinned to Logistics UK test"`.
|
|
@@ -0,0 +1,89 @@
|
|
|
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`, `taken_over`, `bounced`, `skipped` or `other`. "Bad data" and "repair" are not off-ramps. |
|
|
20
|
+
| `voice` | How messages should sound, in the user's style. |
|
|
21
|
+
| `rules` | Optional: `autoMove`, `flagOverdue`, `allowBackward` (booleans), `emailWindow` (`weekdays_morning`, `weekdays`, `any_day`), `nurtureDays` (60, 90, 180 or null). |
|
|
22
|
+
|
|
23
|
+
## Stage
|
|
24
|
+
|
|
25
|
+
| Field | Rule |
|
|
26
|
+
| --- | --- |
|
|
27
|
+
| `key` | A UUID, unique in the playbook. Keep it across revisions. |
|
|
28
|
+
| `name` | Unique in the playbook. |
|
|
29
|
+
| `movesInWhen` | What moves a prospect into this stage, for example "They replied". Shown to people; `on` decides. |
|
|
30
|
+
| `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. |
|
|
31
|
+
| `owner` | `Agent` or `Assignee` (the person assigned to the prospect). |
|
|
32
|
+
| `goalDays` | 0 to 365. How long a prospect should stay before it is overdue. |
|
|
33
|
+
| `optional` | Only an optional stage can be disabled. |
|
|
34
|
+
| `enabled` | Defaults to true. |
|
|
35
|
+
| `steps` | Up to 20 steps. |
|
|
36
|
+
| `completion` | `{ "kind": "next" }`, `{ "kind": "stay" }` or `{ "kind": "off_ramp", "offRampKey": KEY }`. The last enabled stage cannot use `next`. |
|
|
37
|
+
|
|
38
|
+
## Step
|
|
39
|
+
|
|
40
|
+
| Field | Rule |
|
|
41
|
+
| --- | --- |
|
|
42
|
+
| `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. |
|
|
43
|
+
| `channel` | `LinkedIn`, `Email` or `Phone`. |
|
|
44
|
+
| `action` | A short label, for example "Send connection request". |
|
|
45
|
+
| `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. |
|
|
46
|
+
| `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. |
|
|
47
|
+
| `instructions` | Coaching for whoever does the step. |
|
|
48
|
+
| `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 }`. |
|
|
49
|
+
| `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. |
|
|
50
|
+
| `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. |
|
|
51
|
+
|
|
52
|
+
A LinkedIn step whose action names InMail runs only when the LinkedIn account reports InMail available. Otherwise it is skipped without a card.
|
|
53
|
+
|
|
54
|
+
## Example request
|
|
55
|
+
|
|
56
|
+
Replace every `<uuid>` with a fresh UUID (`uuidgen` or `node -e "console.log(crypto.randomUUID())"`).
|
|
57
|
+
Use the same UUID wherever the same placeholder letter appears.
|
|
58
|
+
|
|
59
|
+
```json
|
|
60
|
+
{
|
|
61
|
+
"expectedRevision": 0,
|
|
62
|
+
"requestId": "<uuid>",
|
|
63
|
+
"fields": {
|
|
64
|
+
"name": "Founder-led outbound",
|
|
65
|
+
"stages": [
|
|
66
|
+
{ "key": "<A>", "name": "Ready", "owner": "Agent", "goalDays": 3, "steps": [], "completion": { "kind": "next" } },
|
|
67
|
+
{ "key": "<B>", "name": "Warming", "owner": "Agent", "goalDays": 7, "optional": true, "steps": [
|
|
68
|
+
{ "key": "<uuid>", "channel": "LinkedIn", "action": "View profile", "condition": "Always", "instructions": "Read their recent activity for a signal to mention." },
|
|
69
|
+
{ "key": "<uuid>", "channel": "LinkedIn", "action": "Like a recent post", "condition": "Always", "instructions": "Only a post about their work.", "wait": { "until": "timeout", "days": 3 } }
|
|
70
|
+
], "completion": { "kind": "next" } },
|
|
71
|
+
{ "key": "<C>", "name": "Outreach underway", "owner": "Agent", "goalDays": 35, "steps": [
|
|
72
|
+
{ "key": "<uuid>", "channel": "LinkedIn", "action": "Send connection request", "condition": "Always", "instructions": "No note, or one line on their signal.", "wait": { "until": "accept", "days": 21 } },
|
|
73
|
+
{ "key": "<uuid>", "channel": "LinkedIn", "action": "View profile", "condition": "Always", "instructions": "A light touch while the request waits.", "side": true },
|
|
74
|
+
{ "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 } },
|
|
75
|
+
{ "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" }
|
|
76
|
+
], "completion": { "kind": "off_ramp", "offRampKey": "<R>" } },
|
|
77
|
+
{ "key": "<D>", "name": "In conversation", "movesInWhen": "They replied", "on": ["reply"], "owner": "Assignee", "goalDays": 3, "steps": [
|
|
78
|
+
{ "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 } }
|
|
79
|
+
], "completion": { "kind": "stay" } },
|
|
80
|
+
{ "key": "<E>", "name": "Meeting requested", "owner": "Assignee", "goalDays": 3, "steps": [], "completion": { "kind": "next" } },
|
|
81
|
+
{ "key": "<F>", "name": "Meeting booked", "on": ["meeting"], "owner": "Assignee", "goalDays": 0, "steps": [], "completion": { "kind": "stay" } }
|
|
82
|
+
],
|
|
83
|
+
"goalKey": "<F>",
|
|
84
|
+
"offRamps": [{ "key": "<R>", "name": "Unresponsive", "reason": "unresponsive" }],
|
|
85
|
+
"voice": "Write like a founder. Lead with their signal, offer something useful, and ask one short question.",
|
|
86
|
+
"rules": { "autoMove": true, "flagOverdue": true, "allowBackward": false, "emailWindow": "weekdays_morning", "nurtureDays": 90 }
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
```
|
package/source-manifest.json
CHANGED
|
@@ -1,86 +1,101 @@
|
|
|
1
1
|
{
|
|
2
2
|
"repository": "https://github.com/omalab/exora",
|
|
3
|
-
"sourceCommit": "
|
|
3
|
+
"sourceCommit": "9ef981e46b0c80a41b31c8352ff6b729180270af",
|
|
4
4
|
"files": {
|
|
5
5
|
"LICENSE": "220f297cfcd5c38eb64e6b4b4a77cab4ebc7f4686d4d99c6260a475d02ca11e5",
|
|
6
|
-
"README.md": "
|
|
6
|
+
"README.md": "7ff32cc8ac89dd54b64d7b39c0b41b1f37e154b7ea10ad5a7bceefc3df77d87f",
|
|
7
7
|
"bin/audienti-mcp.mjs": "6df1d6eb3a5bc65e7592e5b8f73cd4c98c159f2583723d042338633b356301df",
|
|
8
8
|
"cli/account-intake-operations.mjs": "b43d764c628beabafad753d711ddb2af2c64276e4a6506ed0b854839091ea5db",
|
|
9
9
|
"cli/account-intake.mjs": "aa77f2f96fd030f8830d6de278932186aea7c82cfda086a5a6cf569202feebc8",
|
|
10
10
|
"cli/account-replies.mjs": "699e34e5c736ba316df8f164b4c50f82a7e4e2d5e51303e6b13944c3f2c854ab",
|
|
11
|
-
"cli/account-reply-operations.mjs": "
|
|
12
|
-
"cli/agents.mjs": "
|
|
13
|
-
"cli/approach-operations.mjs": "a6554effe45d3b3b1caefa3c63203b8e18716a05a665907819795484bbca8be6",
|
|
11
|
+
"cli/account-reply-operations.mjs": "276b9d7adde52c981adbf82a1ba304b9129b47944385cdedad7221c439718a05",
|
|
12
|
+
"cli/agents.mjs": "6236de045344044d66c48c0d7a5c78a3fc31aa5af73a15477b2140ddc3d860c4",
|
|
14
13
|
"cli/assignment-operations.mjs": "fc74e3fd79975cfcbac14891d5dec5f25e662777050fc46a8ad3aae5cf361c59",
|
|
15
14
|
"cli/assignment.mjs": "90cb85e0df8aadca2ff8391c99e778b41261183b5f38e8c6c32afee2f98f871a",
|
|
16
|
-
"cli/audience-operations.mjs": "
|
|
15
|
+
"cli/audience-operations.mjs": "133b72dc6b9e3a6b4f173ce28f1524163f9c7b049505b885115f83b9e4af7170",
|
|
17
16
|
"cli/audiences.mjs": "3c377346efc1a8bdde432a16c2d19a3f51f34f3333d344d3a2bfa94c188a017d",
|
|
18
|
-
"cli/audienti.mjs": "
|
|
17
|
+
"cli/audienti.mjs": "87b2b44472c1d4da1e2ac9de08eba50a0dc74b3599bc3e0c544cb1708944de72",
|
|
19
18
|
"cli/audit-operations.mjs": "184eb58bc479225314b77d6019a185670cd843895a10d9bf58a28de7f1355d91",
|
|
20
19
|
"cli/audit.mjs": "a7becaed67c58b063e668b5e66844b6dc15c11a63b428faa171b542ad922c001",
|
|
21
20
|
"cli/budget-operations.mjs": "d74916551ef393e29734c6e13cf9021251e0ed126eeaa529e18cf2332146e1e0",
|
|
22
21
|
"cli/budgets.mjs": "683e06cb4d410c851286fbd1cdd4fb9f1902726c60fd4fcddb2c13d164786525",
|
|
23
|
-
"cli/campaign-
|
|
24
|
-
"cli/
|
|
25
|
-
"cli/
|
|
22
|
+
"cli/campaign-find.mjs": "9c0a44c69ab7ad3e24a0a2edc97b8f3a14f602e3b6caf7e1943b8e1b93609c4a",
|
|
23
|
+
"cli/campaign-operations.mjs": "ea236b7b456be2377f7c43f987ffe4cfae6aa2cfea4a8a489518dcca60cc645f",
|
|
24
|
+
"cli/campaigns.mjs": "8bda546e7f44c9ba7e1bf2f39d8e8cc12d231ee9051bb32ad31bde7bcecc794f",
|
|
25
|
+
"cli/cohort-operations.mjs": "91b1d1fc48e75581bb315f42d735ef94e21687dc216f352337d8a5d180bb691e",
|
|
26
26
|
"cli/cohorts.mjs": "c71940903430f3e6834608f113534910b75a98b3e410a5942f04051607488485",
|
|
27
27
|
"cli/connection-registry-operations.mjs": "888ea440d00ffc9ed68d4cc084ff73a5a00d0e60bd6293baba8bb4539a25ae62",
|
|
28
28
|
"cli/content.mjs": "db3fcbf7f96c314227a8172a442b70b46405126e0d61f8358cee1bfe6c627ebd",
|
|
29
|
-
"cli/discovery-operations.mjs": "
|
|
30
|
-
"cli/discovery.mjs": "
|
|
29
|
+
"cli/discovery-operations.mjs": "c029935ddd5a113ba617b5948d0df1f6edc5799c2ef7ea6cee7f6b2122ee358f",
|
|
30
|
+
"cli/discovery.mjs": "34b3794ee6ca539dbbccef77ec2085fd5411023046bdfb9b83e2537414542a41",
|
|
31
31
|
"cli/file-operations.mjs": "564f334dd9d52e9c56f44d58b5c3b0bda59ff72f54126b755bc472144069349e",
|
|
32
32
|
"cli/files.mjs": "2221b067d6ade7ef5cc8965929aea2eb485781953d3f2b50600995b65fbdedae",
|
|
33
33
|
"cli/guardrails-operations.mjs": "aa5a911663133b3287bea805df9e2a5d8b5bbc4a3df972c52f91fee315954ded",
|
|
34
34
|
"cli/guardrails.mjs": "e8b9c0a19956a9eab84475d3c56a4b6c77baf7ed9a55e8686d660ef1ad562aa8",
|
|
35
|
-
"cli/json-file.mjs": "
|
|
36
|
-
"cli/
|
|
35
|
+
"cli/json-file.mjs": "96431b18215834c2531f5901e2526875c634dd2e85a9465fcffc937fbec52150",
|
|
36
|
+
"cli/kv-operations.mjs": "505d79d0d535d3441883f8a37817c30c73367216a35dddb07181f0f0e799df79",
|
|
37
|
+
"cli/kv.mjs": "05783610001dd002af07a4bb8f26e64d74aa4981bbe38a2100552b810cb3bc72",
|
|
38
|
+
"cli/mcp.mjs": "289f6a68554e54fe0dbad290bf710ff7fad1c598421a83d3fb9b96979dac1eaa",
|
|
37
39
|
"cli/notification-operations.mjs": "7225dbcfd87d29921e72ee247f61aaee323a4a2e5a48a9ba9c945b02f66e4978",
|
|
38
40
|
"cli/offer-operations.mjs": "a03d467622be38bbf52bbfbbd54e6969bdd55af15a627f54356bb03eb1b4f508",
|
|
39
41
|
"cli/offers.mjs": "4a97007e1e25352707bbecda0b2519affcd0024e52ae8d9446d76d459460feca",
|
|
40
42
|
"cli/outbound-operations.mjs": "52992bea63195efa8150c6ca2ff0b37ee6010f03fa366055c70c755ee0eb028e",
|
|
41
43
|
"cli/outbound.mjs": "23903eb0fec4d7af3aa0031d63488ed9a8697e07ccf1314d194b48e109d15f82",
|
|
42
|
-
"cli/
|
|
44
|
+
"cli/outcome-operations.mjs": "d833c718be9e6877c122e95596bc6060a9796a24a991c62be4a28a2e1e531398",
|
|
45
|
+
"cli/outcomes.mjs": "e547aa889c3d356c66d122d8fe4fd8f4ff46b18531c1318ca6f238af102cdde9",
|
|
46
|
+
"cli/owner-account-client.mjs": "beb9736ac84a7ab57220ac1f1ea089b6401cf92fcf7c549417014d285f2340dc",
|
|
47
|
+
"cli/playbook-operations.mjs": "25c593a2276b06c7e35377e3f132e6eee15c0e34542df62f1cf37a339d4e4ad2",
|
|
43
48
|
"cli/profiles.mjs": "45929b224ffc916b6dbd7a94e06ac09a1ff7feec430633b10d160c1608fc2d32",
|
|
44
|
-
"cli/progress.mjs": "
|
|
49
|
+
"cli/progress.mjs": "c44af4937423432e92cd922afc6afefca0bd7e14bb07a82dd07df35549cffc9f",
|
|
45
50
|
"cli/prospecting-settings-operations.mjs": "37b881a867c19d9e5f2d02316038284ea0cf09de4f37b6dee2370a1faedf245e",
|
|
46
51
|
"cli/prospecting-settings.mjs": "b09f47c84416d9892d7d5b17dcf684cbb560e1cacb25513826ff04ef9307626e",
|
|
47
|
-
"cli/question-operations.mjs": "
|
|
48
|
-
"cli/questions.mjs": "
|
|
49
|
-
"cli/queue-operations.mjs": "
|
|
50
|
-
"cli/queue.mjs": "
|
|
51
|
-
"cli/recipient-operations.mjs": "
|
|
52
|
+
"cli/question-operations.mjs": "5d7a885f2d4e0d2ce2249aadce2b4478b95843d21761f25eabdfe2759582a3b6",
|
|
53
|
+
"cli/questions.mjs": "32bbe0b785b1e6438435faf4697332ea2da3133d4c896720d39377c35e9b2127",
|
|
54
|
+
"cli/queue-operations.mjs": "bc5f5b8f79f056f579c2d3965d143b45ded4665629e2c4d427adfbaf7e9687fb",
|
|
55
|
+
"cli/queue.mjs": "046f4dba92ac9eacbb1f12215ab2b49623bae597342da6b415f7afb3c3a1344e",
|
|
56
|
+
"cli/recipient-operations.mjs": "7d41c17ef2d59dbed982893e0989c9c076317b91adcd3d752cbe1d2e0b8c41b2",
|
|
52
57
|
"cli/recipients.mjs": "e5e30fc30ab325a43cffdc51ad8872cb657ce0f5d3cb304dd8af65c6d9224c75",
|
|
53
|
-
"cli/rooms-operations.mjs": "
|
|
54
|
-
"cli/rooms.mjs": "
|
|
58
|
+
"cli/rooms-operations.mjs": "09d36003183eccf2f6d2ee1ed6c4981519b8ae34fbffd0bb1a2234a8fc6cde68",
|
|
59
|
+
"cli/rooms.mjs": "7fd05b4cead1bab2e18bf724c56034e12b4304f55cc69e3fc7ea5c4536e5305c",
|
|
55
60
|
"cli/search-operations.mjs": "903f12fffb6824872160c4136925ab5638142bb4e39236b37f927cd2c6a43776",
|
|
56
|
-
"cli/
|
|
57
|
-
"cli/
|
|
58
|
-
"cli/
|
|
59
|
-
"cli/
|
|
61
|
+
"cli/secret-operations.mjs": "2b3481d608afcf8f243cbfc6b0d37aa633383d47f8224f69c903ee882eacb096",
|
|
62
|
+
"cli/secrets.mjs": "cab4ea932e724ce3c807c7825869810b44fb8d75cdacec32f8101353f0e7c5f5",
|
|
63
|
+
"cli/sender-account-operations.mjs": "3f5bc6b047916019a9266feb64041a7a338da94308910aa90eed6cb33e143ed0",
|
|
64
|
+
"cli/sender-accounts.mjs": "0c9be3e441aebf4bea2d2674ee54c4b17ed246c7a8476bcb4debbdad7cc1ec10",
|
|
65
|
+
"cli/skills-mcp.mjs": "6a91b16a789f50035ae0fe33f8ae2758bb9829949db7efb05c6d65dde335a9e0",
|
|
66
|
+
"cli/skills.mjs": "ea8dfef32664714f9c63251d9a6bbdb44d77d41e272df46bb102ebfcd8df8b66",
|
|
60
67
|
"cli/suppression-operations.mjs": "d1f827a785670fc6e44d87b18e4cfb6596b09e5be7c4f84c4b9a75ed13a962c6",
|
|
61
68
|
"cli/suppression.mjs": "2b10be67e290deec9ed915139c3d98d45d7d10fd41abb67b5a35a630d636a4ed",
|
|
62
|
-
"cli/tools-operations.mjs": "
|
|
63
|
-
"cli/tools.mjs": "
|
|
69
|
+
"cli/tools-operations.mjs": "aafa52336c0bda8b05d4a091548c18d8634608d282d433aee45a744044b68770",
|
|
70
|
+
"cli/tools.mjs": "6d9c7f27cc50e5e2fc0859c9c2d62bc3e77b5a46d0e2aeaa6cf31e2867138758",
|
|
64
71
|
"cli/usage-operations.mjs": "64dd1ae850f52bb72c7648be78a8ab2dfab986afba2d2d2cd08034c4f7b3ace6",
|
|
65
72
|
"cli/usage.mjs": "cd582c061f83ca4f220ddd3cd2a174a1a3a3c0ee308b3d5a5f47752a501e322e",
|
|
66
|
-
"cli/work-execution-operations.mjs": "
|
|
67
|
-
"cli/work-execution.mjs": "
|
|
73
|
+
"cli/work-execution-operations.mjs": "0313dacfd4ba7dcfb30d7a2f6ee016dd77b141de35bff999ed28393e2e86069a",
|
|
74
|
+
"cli/work-execution.mjs": "4b74923417eaa70dee0ba8806b64d0acf7c884fb77b76d5e86d567cf92e51b01",
|
|
68
75
|
"cli/work-feedback-operations.mjs": "a998f2b2dbe38ceb2bad74f7fa61c31f87f842755449248b7eb0c04185c0ee3d",
|
|
69
76
|
"cli/work-feedback.mjs": "f3b77ecfd7ea1aba9c9f03c9d894137547e9c5575d9daa359ed94505ad025852",
|
|
70
|
-
"cli/work-operations.mjs": "
|
|
71
|
-
"cli/work.mjs": "
|
|
72
|
-
"cli/workspaces.mjs": "
|
|
73
|
-
"package.json": "
|
|
74
|
-
"skills/
|
|
75
|
-
"skills/
|
|
76
|
-
"skills/audienti/
|
|
77
|
+
"cli/work-operations.mjs": "addcfcd5049168e27d224ff879e9fcccd146228e876bcae25c9dd7cfeaa3c9a9",
|
|
78
|
+
"cli/work.mjs": "751107ecc3de5a6be9db4a068cddc41f3ad8e77c87e59686eaf522862caf9e9f",
|
|
79
|
+
"cli/workspaces.mjs": "722c17a3daa7cc6f13eb50387bb53b3e5129e65330aeaf4c17127aaf3ee14973",
|
|
80
|
+
"package.json": "70015dd167a28f668a9a989d7c208932256b3ffcac189dc593dffeefcc6b39c0",
|
|
81
|
+
"skills/agent-rooms/SKILL.md": "3da993292bf50f1220d2d724d74b5f46af8c8f5f054ce18bb7cf27ef29d0437d",
|
|
82
|
+
"skills/agent-rooms/references/commands.md": "7cff1ecefd74a838146344ad928b3936dafc8eb14f6747ec02c0215f207818e9",
|
|
83
|
+
"skills/audienti/SKILL.md": "e6c366a14d9899def4980adda40799086013b15d92cbc11bfd6d30287118bca6",
|
|
84
|
+
"skills/audienti/references/helpers.md": "e27aff0aa07b92f575d617612ed3def824765bac6ce1304cf227a4aca223369a",
|
|
85
|
+
"skills/audienti/references/profile-workflows.md": "80669b75eb5e8aeb614ce55ac046236d671af0de3ddd238853324579d5a3b251",
|
|
77
86
|
"skills/audienti/references/workflow-receipt.md": "349f9a85472832b8bdc6a5d16c5b10b8e32d48d3e81523ad8d42f9a03b3655ff",
|
|
78
|
-
"skills/audienti/scripts/contracts.mjs": "
|
|
87
|
+
"skills/audienti/scripts/contracts.mjs": "900428e067b7f8dae544012387bc3752f7b0d27777a80cd16ec0985848983f70",
|
|
79
88
|
"skills/audienti/scripts/profile-helpers.mjs": "7f62afdefd8e1b1bfec95f1ca6f48cfc4e204d1bff35f805261c45c6d5fcb46a",
|
|
80
89
|
"skills/audienti/scripts/run.mjs": "652094ff8b642d13f5e0bb30756bb49464c051511c37f202249fde917b319208",
|
|
81
|
-
"skills/getting-started/SKILL.md": "
|
|
82
|
-
"skills/getting-started/references/audience.md": "
|
|
83
|
-
"skills/getting-started/references/campaign-draft.md": "
|
|
84
|
-
"skills/getting-started/references/
|
|
90
|
+
"skills/getting-started/SKILL.md": "a03a18cad9c11fbf6c6cd5fc429709daed25b020add6cf23d49e85dbe11b3468",
|
|
91
|
+
"skills/getting-started/references/audience.md": "6a2c061be5e299b3cbbd236578693ae5084d216425c500d3639a4d1fcb86ccb7",
|
|
92
|
+
"skills/getting-started/references/campaign-draft.md": "8a39eb73cca96705aee2e38c0038ba2d618365a2a9869c3a7566ae0a42707a29",
|
|
93
|
+
"skills/getting-started/references/capabilities.md": "badeb374537e74bd51e62325afe7b8c3fe13b293bef5559be4d282484558fb0d",
|
|
94
|
+
"skills/getting-started/references/mailbox-check.md": "113574bb5a573125620dcde4e65ebf44164f7b0727cc936fb41234f5d57bba73",
|
|
95
|
+
"skills/getting-started/references/outcome-checks.md": "05b2431b5f89bf05026ee4e5bac3ca8df594be97640eaca6a5e38907eca6e3dd",
|
|
96
|
+
"skills/getting-started/references/replies.md": "019247b3eb260b21bf66689409748a9bb140d768fd0470a73992162fa8a5efd2",
|
|
97
|
+
"skills/getting-started/references/reply-checks.md": "85fe692ad6b7bc73e204de313b27d225be3da1a0af71e8e7bb9945ae511a0dc3",
|
|
98
|
+
"skills/playbook-design/SKILL.md": "a012c55740f59b662f8ec75ba6d3dd37a8d5fc9fb3a17806366823243cdc47ec",
|
|
99
|
+
"skills/playbook-design/references/fields.md": "c9a5ee3dedae84193f6bd20e7f16b8c0f6ec55f1fc9620a032786dad66882e06"
|
|
85
100
|
}
|
|
86
101
|
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
# Tool inventory format
|
|
2
|
-
|
|
3
|
-
Report what your runtime can use right now. One entry per connector or tool family.
|
|
4
|
-
|
|
5
|
-
```json
|
|
6
|
-
{
|
|
7
|
-
"runtime": { "name": "Claude Code", "model": "claude-opus-5-5" },
|
|
8
|
-
"entries": [
|
|
9
|
-
{ "category": "web_search", "name": "Web search", "access": ["read"], "status": "connected" },
|
|
10
|
-
{ "category": "email", "name": "Gmail", "access": ["read", "write", "send"], "status": "connected", "via": "Composio", "tools": ["gmail.search", "gmail.create_draft"] },
|
|
11
|
-
{ "category": "spreadsheet", "name": "Google Sheets", "access": ["read", "write"], "status": "connected" },
|
|
12
|
-
{ "category": "linkedin", "name": "LinkedIn", "access": ["read", "send"], "status": "connected", "via": "Composio" },
|
|
13
|
-
{ "category": "crm", "name": "Salesforce", "access": ["read"], "status": "needs_sign_in" },
|
|
14
|
-
{ "category": "scheduling", "name": "Routines", "access": ["write"], "status": "connected" }
|
|
15
|
-
]
|
|
16
|
-
}
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Fields
|
|
20
|
-
|
|
21
|
-
- `runtime.name`: your product or runtime as the owner knows it. `runtime.model` is
|
|
22
|
-
optional.
|
|
23
|
-
- `category`: one of `web_search`, `web_browse`, `people_data`, `company_data`,
|
|
24
|
-
`email`, `linkedin`, `social`, `crm`, `spreadsheet`, `docs`, `chat`, `calendar`,
|
|
25
|
-
`tasks`, `files`, `code`, `scheduling`, `memory`, `other`.
|
|
26
|
-
- `name`: the connector name as the owner would recognize it (Gmail, HubSpot, Slack,
|
|
27
|
-
X). At most 80 characters. One entry per category and name.
|
|
28
|
-
- `access`: any of `read`, `write`, `send`. `send` means it can deliver a message to
|
|
29
|
-
another person (email, DM, post). Drafting is `write`.
|
|
30
|
-
- `status`: `connected` when you can call it now, `needs_sign_in` when it is installed
|
|
31
|
-
but signed out, `unavailable` when it exists but fails.
|
|
32
|
-
- `via`: optional. How you reach it when it is not built in: an integration hub or
|
|
33
|
-
aggregator such as Composio or Treg, or an MCP server name. Leave it out for native
|
|
34
|
-
connectors built into your runtime.
|
|
35
|
-
- `tools`: optional tool IDs you would call, at most 16.
|
|
36
|
-
|
|
37
|
-
At most 64 entries and 32 KiB. Leave out anything you cannot call. Never include
|
|
38
|
-
account secrets, tokens or personal data about the owner's contacts.
|
|
39
|
-
|
|
40
|
-
## Categories, with examples
|
|
41
|
-
|
|
42
|
-
| Category | Examples |
|
|
43
|
-
| --- | --- |
|
|
44
|
-
| `web_search`, `web_browse` | built-in search, a browser, a fetch tool |
|
|
45
|
-
| `people_data`, `company_data` | enrichment or lookup providers |
|
|
46
|
-
| `email` | Gmail, Outlook |
|
|
47
|
-
| `linkedin`, `social` | LinkedIn seat tools, X, Reddit |
|
|
48
|
-
| `crm` | Salesforce, HubSpot, Attio |
|
|
49
|
-
| `spreadsheet`, `docs` | Google Sheets, Excel, Notion, Google Docs |
|
|
50
|
-
| `chat`, `calendar`, `tasks` | Slack, Google Calendar, Linear |
|
|
51
|
-
| `files`, `code` | file storage, a code or shell sandbox |
|
|
52
|
-
| `scheduling`, `memory` | routines, cron, saved memories |
|