@audienti/cli 0.2.0-exora.3 → 0.2.0-exora.30
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-replies.mjs +16 -2
- package/cli/account-reply-operations.mjs +28 -1
- package/cli/agents.mjs +56 -14
- package/cli/attachment-operations.mjs +9 -0
- package/cli/attachments.mjs +28 -0
- package/cli/audience-operations.mjs +1 -1
- package/cli/audienti.mjs +118 -27
- package/cli/audit-operations.mjs +2 -2
- package/cli/campaign-find.mjs +155 -0
- package/cli/campaign-operations.mjs +8 -4
- package/cli/campaigns.mjs +38 -3
- package/cli/cohort-operations.mjs +1 -1
- package/cli/content.mjs +2 -0
- package/cli/decision-operations.mjs +35 -0
- package/cli/decision.mjs +51 -0
- package/cli/discovery-operations.mjs +2 -1
- package/cli/discovery.mjs +3 -2
- package/cli/duplicate-operations.mjs +22 -0
- package/cli/duplicates.mjs +22 -0
- package/cli/hand-task-operations.mjs +11 -0
- package/cli/hand-tasks.mjs +18 -0
- package/cli/intent-operations.mjs +44 -0
- package/cli/intent.mjs +109 -0
- package/cli/json-file.mjs +1 -1
- package/cli/kv-operations.mjs +17 -0
- package/cli/kv.mjs +58 -0
- package/cli/mcp.mjs +4 -4
- package/cli/outcome-operations.mjs +28 -0
- package/cli/outcomes.mjs +16 -0
- package/cli/owner-account-client.mjs +5 -4
- package/cli/playbook-help.mjs +87 -0
- package/cli/playbook-operations.mjs +40 -0
- package/cli/progress.mjs +19 -8
- package/cli/prospecting-settings-operations.mjs +1 -1
- 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/recipients.mjs +6 -2
- package/cli/rooms-operations.mjs +26 -5
- package/cli/rooms.mjs +32 -6
- package/cli/secret-operations.mjs +7 -0
- package/cli/secrets.mjs +30 -0
- package/cli/sender-account-operations.mjs +8 -3
- package/cli/sender-accounts.mjs +20 -10
- package/cli/skills-mcp.mjs +6 -2
- package/cli/skills.mjs +55 -12
- package/cli/tools-operations.mjs +19 -10
- package/cli/tools.mjs +48 -20
- package/cli/work-execution-operations.mjs +7 -0
- package/cli/work-execution.mjs +3 -3
- package/cli/work-operations.mjs +5 -4
- package/cli/work.mjs +2 -2
- package/cli/workspaces.mjs +104 -22
- package/package.json +2 -2
- package/skills/agent-rooms/SKILL.md +140 -0
- package/skills/agent-rooms/references/commands.md +78 -0
- package/skills/audienti/SKILL.md +111 -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 +188 -154
- package/skills/getting-started/references/audience.md +72 -7
- package/skills/getting-started/references/campaign-draft.md +56 -13
- package/skills/getting-started/references/capabilities.md +238 -0
- package/skills/getting-started/references/mailbox-check.md +64 -0
- package/skills/getting-started/references/outcome-checks.md +125 -0
- package/skills/getting-started/references/replies.md +314 -0
- package/skills/getting-started/references/reply-checks.md +54 -0
- package/skills/playbook-design/SKILL.md +139 -0
- package/skills/playbook-design/references/fields.md +145 -0
- package/source-manifest.json +74 -48
- package/cli/approach-operations.mjs +0 -24
- package/skills/getting-started/references/inventory.md +0 -52
|
@@ -0,0 +1,145 @@
|
|
|
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. Leave it out for the default skeleton (see Defaults). |
|
|
18
|
+
| `goalKey` | The `key` of the goal stage. Not the first stage. Left out, it is the last stage (with `stages` left out too, the skeleton's last stage). |
|
|
19
|
+
| `offRamps` | Up to 30 ways out: `{ key, name, reason }`. `reason` is `rejected`, `not_fit`, `nurture`, `unresponsive` or `other`. The default rules end a person in the off-ramp with reason `rejected` when the reply says no thanks (`not_interested`), and in the one with reason `not_fit` when you record `not_a_fit`. A playbook without that off-ramp keeps the person where they are. 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
|
+
## Defaults
|
|
25
|
+
|
|
26
|
+
When you change a playbook you already have, a part you leave out (`stages`, `goalKey`, `offRamps`, `voice`) stays as it is. For a new playbook, leave a field out and the server fills the best-practice value, the same on the CLI, MCP, REST and in the editor. What you write is kept, even a weak choice; the Playbook check warns about those.
|
|
27
|
+
|
|
28
|
+
| Left out | Value |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| `stages` | Ready, Outreach underway (no steps; people who finish it leave as Unresponsive), In conversation (worked by a person) and Meeting booked as the goal. `playbook save` with only a `name` makes this. |
|
|
31
|
+
| `offRamps` | Unresponsive, Not interested and Not a fit. |
|
|
32
|
+
| an off-ramp `reason` | Guessed from the name (Not interested is `rejected`, Not a fit is `not_fit`, Unresponsive is `unresponsive`), else `other`. |
|
|
33
|
+
| `voice` | One plain, short sentence. A blank voice gets it too. |
|
|
34
|
+
| a stage `goalDays` | The waits of its main steps plus 2 days, at least 3. The goal stage gets 0. |
|
|
35
|
+
| a stage `completion` | A stage with steps that an agent works, other than the goal, closes people out as Unresponsive. Other stages stay. |
|
|
36
|
+
| a step `condition` | `Only if connected` for a LinkedIn message, else `Always`. |
|
|
37
|
+
| a step `instructions` | One coaching sentence for the kind of action. |
|
|
38
|
+
| a main step `wait` | Only for a step that is new in this save. A step that sends waits 3 days for a reply; a connection request waits 7 days for the accept; a step that sends nothing has no wait. A step the playbook already has keeps what it has, and `"wait": null` means no wait. The saved step carries the wait it got, so `playbook show` and the API read give the actual days. |
|
|
39
|
+
|
|
40
|
+
## The Playbook check
|
|
41
|
+
|
|
42
|
+
Every read and save of a playbook returns `warnings`, a deterministic check that needs no agent. An item
|
|
43
|
+
is `{ id, level, message, stageKey, stepKey, fix }`. A save is refused with `playbook_cannot_work` (422,
|
|
44
|
+
the list in `errors`) when `offRamps` is empty or a stage has `on: []` and nothing sends people to it.
|
|
45
|
+
The other items are warnings; read them after each save and clear them:
|
|
46
|
+
|
|
47
|
+
| Item `id` | Meaning and default fix |
|
|
48
|
+
| --- | --- |
|
|
49
|
+
| `stage_never_ends` | A stage with steps and `completion` `stay`. Use `off_ramp` with the Unresponsive off-ramp. |
|
|
50
|
+
| `stage_by_hand_only` | Nothing opens a stage but a person or agent. Give it an `on` event ("Jump forward to here when") or finish the stage before it with `next`. The first stage after Ready is not flagged. |
|
|
51
|
+
| `send_without_wait` | A send step with no `wait`, followed by another send on the same channel. Add a wait. |
|
|
52
|
+
| `goal_shorter_than_waits` | `goalDays` is below the waits added up. Use the waits plus 2 days. |
|
|
53
|
+
| `send_in_person_stage` | A send step in the goal stage or an `Assignee` stage writes to someone who already answered. Remove it. |
|
|
54
|
+
| `steps_after_break_up` | A step after the break-up email. Put it before the break-up step. |
|
|
55
|
+
| `message_without_connection` | A LinkedIn message with condition `Always` and no connection request before it. Use `Only if connected`. |
|
|
56
|
+
| `stages_loop` | Routes or rules send people between stages in a circle. |
|
|
57
|
+
|
|
58
|
+
## Stage
|
|
59
|
+
|
|
60
|
+
| Field | Rule |
|
|
61
|
+
| --- | --- |
|
|
62
|
+
| `key` | A UUID, unique in the playbook. Keep it across revisions. |
|
|
63
|
+
| `name` | Unique in the playbook. |
|
|
64
|
+
| `on` | The events that jump a prospect forward to this stage: `accept` (they accept your LinkedIn connection request, not a meeting invite), `reply`, `meeting_requested` (a meeting was asked for), `meeting_accepted` (they said yes, no time yet), `meeting_declined` or `meeting` (a booked meeting). Do not list `accept` or `reply` on the goal stage unless a reply or an accept should count as a win. An event moves the prospect to the furthest later stage that lists it; the stages passed over are recorded as skipped, never as done. Leave it out for a stage people reach when the stage before it finishes, or when a person moves them. Do not set it on the first stage. People and the pipeline read "Starts when they reply" from it. The older `movesInWhen` text and the value `manual` are accepted and ignored. |
|
|
65
|
+
| `owner` | `Agent` or `Assignee` (the person assigned to the prospect). |
|
|
66
|
+
| `goalDays` | 0 to 365. The days after which a prospect in this stage is overdue (the pipeline card turns orange). 0 means never overdue. |
|
|
67
|
+
| `enabled` | Defaults to true. `false` skips the stage: no one is moved into it. The first stage and the goal stage cannot be skipped. |
|
|
68
|
+
| `steps` | Up to 20 steps. |
|
|
69
|
+
| `completion` | `{ "kind": "next" }`, `{ "kind": "stay" }` or `{ "kind": "off_ramp", "offRampKey": KEY }`. The last enabled stage cannot use `next`. Spell the kind exactly: `off_ramp`, not `offRamp`. A kind that matches none is refused with the list of kinds that work. |
|
|
70
|
+
|
|
71
|
+
## Step
|
|
72
|
+
|
|
73
|
+
| Field | Rule |
|
|
74
|
+
| --- | --- |
|
|
75
|
+
| `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. |
|
|
76
|
+
| `channel` | `LinkedIn`, `Email` or `Custom`. A `Custom` step is something you cannot do, for example a phone call, a voicemail, a handwritten note, a video or a gift. You prepare the script, note or choice, and a person does it by hand and records what happened on the Hand tasks page. A Custom step is never a side step and sends nothing. |
|
|
77
|
+
| `action` | A short label, for example "Send connection request". |
|
|
78
|
+
| `condition` | `Always`, `Only if viable` or `Only if connected`. `Only if connected` is checked: a person who was sent a connection request and has not accepted is skipped for the step; a person with no request on record is not blocked, because they may already be connected. A stage that opens on `accept` gates the same way. Left out, a LinkedIn message gets `Only if connected` and everything else `Always`. |
|
|
79
|
+
| `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. |
|
|
80
|
+
| `instructions` | Coaching for whoever does the step. |
|
|
81
|
+
| `wait` | Optional: `{ "until": U, "days": N }`. `until` is `accept` (LinkedIn steps only), `reply`, `meeting`, `timeout` or `event` (Custom steps only); `days` is 1 to 60. An `event` wait also needs `"event": "Gift delivered"` (the name of what the person records); the person records it on the Hand tasks page and that ends the wait, and so does a reply, a booked meeting or the days running out. 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 }`. |
|
|
82
|
+
| `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. |
|
|
83
|
+
| `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. |
|
|
84
|
+
| `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`. |
|
|
85
|
+
| `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. |
|
|
86
|
+
| `eventRules` | Optional, up to 10: event rules for this step only. See Event rules. |
|
|
87
|
+
|
|
88
|
+
## Event rules
|
|
89
|
+
|
|
90
|
+
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.
|
|
91
|
+
|
|
92
|
+
| Field | Rule |
|
|
93
|
+
| --- | --- |
|
|
94
|
+
| `key` | A UUID, unique in the playbook. |
|
|
95
|
+
| `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`. |
|
|
96
|
+
| `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`. |
|
|
97
|
+
| `snoozeDays` | 1 to 90. For `snooze`. |
|
|
98
|
+
| `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 }`. |
|
|
99
|
+
|
|
100
|
+
Every new playbook starts with these three on the playbook, when you send no `eventRules`:
|
|
101
|
+
|
|
102
|
+
- `reply.interested`: `stop_wait`, then `gate`.
|
|
103
|
+
- `reply.out_of_office`: `snooze` for 7 days, then `stay`.
|
|
104
|
+
- `reply.wrong_person`: `stop_wait`, `redirect_to_named_person`, `ask_who_is_right`, then `stay`.
|
|
105
|
+
|
|
106
|
+
Taking someone off the list and a bounce always run first; no rule changes them.
|
|
107
|
+
|
|
108
|
+
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.
|
|
109
|
+
|
|
110
|
+
## Example request
|
|
111
|
+
|
|
112
|
+
Replace every `<uuid>` with a fresh UUID (`uuidgen` or `node -e "console.log(crypto.randomUUID())"`).
|
|
113
|
+
Use the same UUID wherever the same placeholder letter appears.
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"expectedRevision": 0,
|
|
118
|
+
"requestId": "<uuid>",
|
|
119
|
+
"fields": {
|
|
120
|
+
"name": "Founder-led outbound",
|
|
121
|
+
"stages": [
|
|
122
|
+
{ "key": "<A>", "name": "Ready", "owner": "Agent", "goalDays": 3, "steps": [], "completion": { "kind": "next" } },
|
|
123
|
+
{ "key": "<B>", "name": "Warming", "owner": "Agent", "goalDays": 7, "steps": [
|
|
124
|
+
{ "key": "<uuid>", "channel": "LinkedIn", "action": "View profile", "condition": "Always", "instructions": "Read their recent activity for a signal to mention." },
|
|
125
|
+
{ "key": "<uuid>", "channel": "LinkedIn", "action": "Like a recent post", "condition": "Always", "instructions": "Only a post about their work.", "wait": { "until": "timeout", "days": 3 } }
|
|
126
|
+
], "completion": { "kind": "next" } },
|
|
127
|
+
{ "key": "<C>", "name": "Outreach underway", "owner": "Agent", "goalDays": 35, "steps": [
|
|
128
|
+
{ "key": "<uuid>", "channel": "LinkedIn", "action": "Send connection request", "condition": "Always", "instructions": "No note, or one line on their signal.", "wait": { "until": "accept", "days": 21 } },
|
|
129
|
+
{ "key": "<uuid>", "channel": "LinkedIn", "action": "View profile", "condition": "Always", "instructions": "A light touch while the request waits.", "side": true },
|
|
130
|
+
{ "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 } },
|
|
131
|
+
{ "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" }
|
|
132
|
+
], "completion": { "kind": "off_ramp", "offRampKey": "<R>" } },
|
|
133
|
+
{ "key": "<D>", "name": "In conversation", "on": ["reply"], "owner": "Assignee", "goalDays": 3, "steps": [
|
|
134
|
+
{ "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 } }
|
|
135
|
+
], "completion": { "kind": "stay" } },
|
|
136
|
+
{ "key": "<E>", "name": "Meeting requested", "owner": "Assignee", "goalDays": 3, "steps": [], "completion": { "kind": "next" } },
|
|
137
|
+
{ "key": "<F>", "name": "Meeting booked", "on": ["meeting"], "owner": "Assignee", "goalDays": 0, "steps": [], "completion": { "kind": "stay" } }
|
|
138
|
+
],
|
|
139
|
+
"goalKey": "<F>",
|
|
140
|
+
"offRamps": [{ "key": "<R>", "name": "Unresponsive", "reason": "unresponsive" }],
|
|
141
|
+
"voice": "Write like a founder. Lead with their signal, offer something useful, and ask one short question.",
|
|
142
|
+
"rules": { "allowBackward": false }
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
```
|
package/source-manifest.json
CHANGED
|
@@ -1,86 +1,112 @@
|
|
|
1
1
|
{
|
|
2
2
|
"repository": "https://github.com/omalab/exora",
|
|
3
|
-
"sourceCommit": "
|
|
3
|
+
"sourceCommit": "580ab43854ad3b285cfdd05463e46cb2ab3acd00",
|
|
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
|
-
"cli/account-replies.mjs": "
|
|
11
|
-
"cli/account-reply-operations.mjs": "
|
|
12
|
-
"cli/agents.mjs": "
|
|
13
|
-
"cli/approach-operations.mjs": "a6554effe45d3b3b1caefa3c63203b8e18716a05a665907819795484bbca8be6",
|
|
10
|
+
"cli/account-replies.mjs": "80059e8cec767a3e33aa971acf467603ca83f05efe42c59cd57a19defc37c07e",
|
|
11
|
+
"cli/account-reply-operations.mjs": "12c3fa1533b09b7f5a376f24c9ef140cfe14211927d9780bf532503367b132da",
|
|
12
|
+
"cli/agents.mjs": "e311dd08d1dc09648881a37eb9765bf6d155786f0b713204f51de29bc8134293",
|
|
14
13
|
"cli/assignment-operations.mjs": "fc74e3fd79975cfcbac14891d5dec5f25e662777050fc46a8ad3aae5cf361c59",
|
|
15
14
|
"cli/assignment.mjs": "90cb85e0df8aadca2ff8391c99e778b41261183b5f38e8c6c32afee2f98f871a",
|
|
16
|
-
"cli/
|
|
15
|
+
"cli/attachment-operations.mjs": "dd29a50d073ded71ebd606fb3a9181bebcf2a1390f75f99cdcb61d84261d102a",
|
|
16
|
+
"cli/attachments.mjs": "2fee6b4abbf82da9847d4a927a3d4d3ca947a198a903a78927596a2ea858cbf4",
|
|
17
|
+
"cli/audience-operations.mjs": "133b72dc6b9e3a6b4f173ce28f1524163f9c7b049505b885115f83b9e4af7170",
|
|
17
18
|
"cli/audiences.mjs": "3c377346efc1a8bdde432a16c2d19a3f51f34f3333d344d3a2bfa94c188a017d",
|
|
18
|
-
"cli/audienti.mjs": "
|
|
19
|
-
"cli/audit-operations.mjs": "
|
|
19
|
+
"cli/audienti.mjs": "7d7103637f69824a263f47a7c3873293103db75483c8271398968f68dcd9147a",
|
|
20
|
+
"cli/audit-operations.mjs": "afaf87d592a1e5f6bff2a8649a6a64a8f471950b7d99e98995d9205aa5910398",
|
|
20
21
|
"cli/audit.mjs": "a7becaed67c58b063e668b5e66844b6dc15c11a63b428faa171b542ad922c001",
|
|
21
22
|
"cli/budget-operations.mjs": "d74916551ef393e29734c6e13cf9021251e0ed126eeaa529e18cf2332146e1e0",
|
|
22
23
|
"cli/budgets.mjs": "683e06cb4d410c851286fbd1cdd4fb9f1902726c60fd4fcddb2c13d164786525",
|
|
23
|
-
"cli/campaign-
|
|
24
|
-
"cli/
|
|
25
|
-
"cli/
|
|
24
|
+
"cli/campaign-find.mjs": "9c0a44c69ab7ad3e24a0a2edc97b8f3a14f602e3b6caf7e1943b8e1b93609c4a",
|
|
25
|
+
"cli/campaign-operations.mjs": "c1ac42f53f8bf19957fac41cc2a80ab4e26a743a7c1cc0b42c8c0e85fcf6e61b",
|
|
26
|
+
"cli/campaigns.mjs": "a4c1e824b729cdaf1838db68785e62c55d4ba7d57c59d3f71666d2197be2fdf8",
|
|
27
|
+
"cli/cohort-operations.mjs": "91b1d1fc48e75581bb315f42d735ef94e21687dc216f352337d8a5d180bb691e",
|
|
26
28
|
"cli/cohorts.mjs": "c71940903430f3e6834608f113534910b75a98b3e410a5942f04051607488485",
|
|
27
29
|
"cli/connection-registry-operations.mjs": "888ea440d00ffc9ed68d4cc084ff73a5a00d0e60bd6293baba8bb4539a25ae62",
|
|
28
|
-
"cli/content.mjs": "
|
|
29
|
-
"cli/
|
|
30
|
-
"cli/
|
|
30
|
+
"cli/content.mjs": "139dee5fd37fd89669c39e2120ac70a2e0286b207b055ff666f54ba3512ab061",
|
|
31
|
+
"cli/decision-operations.mjs": "0c4c2134c9615678def2b50f2a5254218b14f1174f1ce4e8ba7db78c751661af",
|
|
32
|
+
"cli/decision.mjs": "3d89d48b333e2620bce0191cf528ef25541ee841a7f8ae6d60249aead434b651",
|
|
33
|
+
"cli/discovery-operations.mjs": "9b6873d586d27bf67106a592db8ced75da1abf1a1330f192e69d34f81b2d080f",
|
|
34
|
+
"cli/discovery.mjs": "34b3794ee6ca539dbbccef77ec2085fd5411023046bdfb9b83e2537414542a41",
|
|
35
|
+
"cli/duplicate-operations.mjs": "a07ba6ff411bc27246a454ee43b0508e024974d2fa2b4258c709583767c17950",
|
|
36
|
+
"cli/duplicates.mjs": "341e5c8dae67a819340abdad3502470577cf8b6375bf60acb00068c7188344a7",
|
|
31
37
|
"cli/file-operations.mjs": "564f334dd9d52e9c56f44d58b5c3b0bda59ff72f54126b755bc472144069349e",
|
|
32
38
|
"cli/files.mjs": "2221b067d6ade7ef5cc8965929aea2eb485781953d3f2b50600995b65fbdedae",
|
|
33
39
|
"cli/guardrails-operations.mjs": "aa5a911663133b3287bea805df9e2a5d8b5bbc4a3df972c52f91fee315954ded",
|
|
34
40
|
"cli/guardrails.mjs": "e8b9c0a19956a9eab84475d3c56a4b6c77baf7ed9a55e8686d660ef1ad562aa8",
|
|
35
|
-
"cli/
|
|
36
|
-
"cli/
|
|
41
|
+
"cli/hand-task-operations.mjs": "473473fe95324c8c8733e037feab5ac468c07b0658fabd739cfd7d400a7faa83",
|
|
42
|
+
"cli/hand-tasks.mjs": "2c895cf6b30c594a7e27cc4ec4b7eddeb39f941cd195b9255c6e0d6b4a56371f",
|
|
43
|
+
"cli/intent-operations.mjs": "a51de06eb4775840834651e689c62946a30609edbebf53f76d98370153762c5d",
|
|
44
|
+
"cli/intent.mjs": "295375c527d864679e7692f46e4e6c78e42b46c1b7b6d95775def7486dcd1653",
|
|
45
|
+
"cli/json-file.mjs": "96431b18215834c2531f5901e2526875c634dd2e85a9465fcffc937fbec52150",
|
|
46
|
+
"cli/kv-operations.mjs": "505d79d0d535d3441883f8a37817c30c73367216a35dddb07181f0f0e799df79",
|
|
47
|
+
"cli/kv.mjs": "05783610001dd002af07a4bb8f26e64d74aa4981bbe38a2100552b810cb3bc72",
|
|
48
|
+
"cli/mcp.mjs": "9528ee184bddf2d178f914c96104ab01aa976cc703f6b8537506d34600c69510",
|
|
37
49
|
"cli/notification-operations.mjs": "7225dbcfd87d29921e72ee247f61aaee323a4a2e5a48a9ba9c945b02f66e4978",
|
|
38
50
|
"cli/offer-operations.mjs": "a03d467622be38bbf52bbfbbd54e6969bdd55af15a627f54356bb03eb1b4f508",
|
|
39
51
|
"cli/offers.mjs": "4a97007e1e25352707bbecda0b2519affcd0024e52ae8d9446d76d459460feca",
|
|
40
52
|
"cli/outbound-operations.mjs": "52992bea63195efa8150c6ca2ff0b37ee6010f03fa366055c70c755ee0eb028e",
|
|
41
53
|
"cli/outbound.mjs": "23903eb0fec4d7af3aa0031d63488ed9a8697e07ccf1314d194b48e109d15f82",
|
|
42
|
-
"cli/
|
|
54
|
+
"cli/outcome-operations.mjs": "cf133097799f240a006264a38a4c6bd4094078d6dec78a71679700ac3bdeacd5",
|
|
55
|
+
"cli/outcomes.mjs": "765ccb112a90fc4d228b2a41e5e19c5e1f3e2fe14bc1d8128b0090fc95cdbf3f",
|
|
56
|
+
"cli/owner-account-client.mjs": "aa2790fd3c16714b1a82922fe13012f261cced99025d692bca5d0c605a717cd1",
|
|
57
|
+
"cli/playbook-help.mjs": "664114538865a91dbcbd96bdd2a628c78505f078c9e6c7eb542e51d376fed60a",
|
|
58
|
+
"cli/playbook-operations.mjs": "be94b1a9e1c84fa2f56169c2af7c972ea8336cf8402150e4b57b08e354e7b4a9",
|
|
43
59
|
"cli/profiles.mjs": "45929b224ffc916b6dbd7a94e06ac09a1ff7feec430633b10d160c1608fc2d32",
|
|
44
|
-
"cli/progress.mjs": "
|
|
45
|
-
"cli/prospecting-settings-operations.mjs": "
|
|
60
|
+
"cli/progress.mjs": "6908f2937adb87a83ebefc1f4324ed18adac65228547b0524a474ac3513b5c67",
|
|
61
|
+
"cli/prospecting-settings-operations.mjs": "1829eb2fe7208f58601988143756072429adbfe00f8deb5a52613bf650a9eacc",
|
|
46
62
|
"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/recipients.mjs": "
|
|
53
|
-
"cli/rooms-operations.mjs": "
|
|
54
|
-
"cli/rooms.mjs": "
|
|
63
|
+
"cli/question-operations.mjs": "c7070dd1b5ec9c5b0df93012ef08d0d6b4d6e5c8da267a37beb1acc5c3cf4ea1",
|
|
64
|
+
"cli/questions.mjs": "32bbe0b785b1e6438435faf4697332ea2da3133d4c896720d39377c35e9b2127",
|
|
65
|
+
"cli/queue-operations.mjs": "bc5f5b8f79f056f579c2d3965d143b45ded4665629e2c4d427adfbaf7e9687fb",
|
|
66
|
+
"cli/queue.mjs": "046f4dba92ac9eacbb1f12215ab2b49623bae597342da6b415f7afb3c3a1344e",
|
|
67
|
+
"cli/recipient-operations.mjs": "7d41c17ef2d59dbed982893e0989c9c076317b91adcd3d752cbe1d2e0b8c41b2",
|
|
68
|
+
"cli/recipients.mjs": "dc93d4a23ca1df9c84a0c9734d09491af179644eed48d856d1f1a24d42276ea8",
|
|
69
|
+
"cli/rooms-operations.mjs": "27e4c1c0dac7cf1256468bac5806fb2a3959d07d3cac3af8d785a50772148fd1",
|
|
70
|
+
"cli/rooms.mjs": "bc42cc3f040b23bd832c725cb0e2faf66fe6327cbc64571550586ce97ba40415",
|
|
55
71
|
"cli/search-operations.mjs": "903f12fffb6824872160c4136925ab5638142bb4e39236b37f927cd2c6a43776",
|
|
56
|
-
"cli/
|
|
57
|
-
"cli/
|
|
58
|
-
"cli/
|
|
59
|
-
"cli/
|
|
72
|
+
"cli/secret-operations.mjs": "faefe9c9ece81087dc7aab32e88f331ed942d0757ce5a978b5f0722d514f377f",
|
|
73
|
+
"cli/secrets.mjs": "cab4ea932e724ce3c807c7825869810b44fb8d75cdacec32f8101353f0e7c5f5",
|
|
74
|
+
"cli/sender-account-operations.mjs": "cf1c04e6289937611f5bd666953389c96887881f2b46203d79b9d8f57c55f3b2",
|
|
75
|
+
"cli/sender-accounts.mjs": "febe2a21f8cda4999e14eb78c01e9924dcc1914ff3c5cadcd845b7dbc4523491",
|
|
76
|
+
"cli/skills-mcp.mjs": "6a91b16a789f50035ae0fe33f8ae2758bb9829949db7efb05c6d65dde335a9e0",
|
|
77
|
+
"cli/skills.mjs": "ea8dfef32664714f9c63251d9a6bbdb44d77d41e272df46bb102ebfcd8df8b66",
|
|
60
78
|
"cli/suppression-operations.mjs": "d1f827a785670fc6e44d87b18e4cfb6596b09e5be7c4f84c4b9a75ed13a962c6",
|
|
61
79
|
"cli/suppression.mjs": "2b10be67e290deec9ed915139c3d98d45d7d10fd41abb67b5a35a630d636a4ed",
|
|
62
|
-
"cli/tools-operations.mjs": "
|
|
63
|
-
"cli/tools.mjs": "
|
|
80
|
+
"cli/tools-operations.mjs": "f64e58f75ef0c02b9317c6b6e07ccc7b9891464cf29824cee75f0fcae9026eb2",
|
|
81
|
+
"cli/tools.mjs": "16967f23a2b2460d28e766c827721a254e83d34b2df5195981cc9f899f6a5ed0",
|
|
64
82
|
"cli/usage-operations.mjs": "64dd1ae850f52bb72c7648be78a8ab2dfab986afba2d2d2cd08034c4f7b3ace6",
|
|
65
83
|
"cli/usage.mjs": "cd582c061f83ca4f220ddd3cd2a174a1a3a3c0ee308b3d5a5f47752a501e322e",
|
|
66
|
-
"cli/work-execution-operations.mjs": "
|
|
67
|
-
"cli/work-execution.mjs": "
|
|
84
|
+
"cli/work-execution-operations.mjs": "842d706b36bb035aa54e1dee8bf950f0619c495bcae84faa1926fbb05f6842bc",
|
|
85
|
+
"cli/work-execution.mjs": "4b74923417eaa70dee0ba8806b64d0acf7c884fb77b76d5e86d567cf92e51b01",
|
|
68
86
|
"cli/work-feedback-operations.mjs": "a998f2b2dbe38ceb2bad74f7fa61c31f87f842755449248b7eb0c04185c0ee3d",
|
|
69
87
|
"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/
|
|
88
|
+
"cli/work-operations.mjs": "66a6155964d1af264b4aa3851cf43b9373155887ee2f9bcac3eb97d9f4680157",
|
|
89
|
+
"cli/work.mjs": "751107ecc3de5a6be9db4a068cddc41f3ad8e77c87e59686eaf522862caf9e9f",
|
|
90
|
+
"cli/workspaces.mjs": "7de635a78f80d75421447cc62686ab4cde7779a9dd7d0bb55e48143a5e4c8365",
|
|
91
|
+
"package.json": "145b9fae8227341aec956281dd53ce9bea07e4e7693dd4a47e5790c5b3fd7e39",
|
|
92
|
+
"skills/agent-rooms/SKILL.md": "08f917ff85fee1d23499a4499056ce845b39ce6727029b104819dad41ee87cc2",
|
|
93
|
+
"skills/agent-rooms/references/commands.md": "ef5afa5543ca9da967a147f638774647998ea1c1a2a821959f3bf87d54c292bd",
|
|
94
|
+
"skills/audienti/SKILL.md": "8f2124065bfc3a005b44e194e7dcce9bbf14062ab332e7db66d441eeccb518ed",
|
|
95
|
+
"skills/audienti/references/helpers.md": "e27aff0aa07b92f575d617612ed3def824765bac6ce1304cf227a4aca223369a",
|
|
96
|
+
"skills/audienti/references/profile-workflows.md": "80669b75eb5e8aeb614ce55ac046236d671af0de3ddd238853324579d5a3b251",
|
|
77
97
|
"skills/audienti/references/workflow-receipt.md": "349f9a85472832b8bdc6a5d16c5b10b8e32d48d3e81523ad8d42f9a03b3655ff",
|
|
78
|
-
"skills/audienti/scripts/contracts.mjs": "
|
|
98
|
+
"skills/audienti/scripts/contracts.mjs": "900428e067b7f8dae544012387bc3752f7b0d27777a80cd16ec0985848983f70",
|
|
79
99
|
"skills/audienti/scripts/profile-helpers.mjs": "7f62afdefd8e1b1bfec95f1ca6f48cfc4e204d1bff35f805261c45c6d5fcb46a",
|
|
80
100
|
"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/
|
|
101
|
+
"skills/getting-started/SKILL.md": "902fffe321a91acd2dc3583a372801df6952c7e974179198ce688b62ca8b8f21",
|
|
102
|
+
"skills/getting-started/references/audience.md": "6a2c061be5e299b3cbbd236578693ae5084d216425c500d3639a4d1fcb86ccb7",
|
|
103
|
+
"skills/getting-started/references/campaign-draft.md": "c2cbeb7de95734889698a5cd852268b9bed69e56f661153bb7ada237241a1a6b",
|
|
104
|
+
"skills/getting-started/references/capabilities.md": "982e3583a47ba4ac832efae2f6af3a4d8c0c18cace159c76b2a4ad1a8d8e910e",
|
|
105
|
+
"skills/getting-started/references/mailbox-check.md": "113574bb5a573125620dcde4e65ebf44164f7b0727cc936fb41234f5d57bba73",
|
|
106
|
+
"skills/getting-started/references/outcome-checks.md": "094d09d231b38d4935aa9eb8ac089e46ba8e698489852fa97040e6b5eac77a9b",
|
|
107
|
+
"skills/getting-started/references/replies.md": "e543f13b9fae2ad3a7a07b6289ca03258c75e64df60cd3b36d4686ac9298d799",
|
|
108
|
+
"skills/getting-started/references/reply-checks.md": "85fe692ad6b7bc73e204de313b27d225be3da1a0af71e8e7bb9945ae511a0dc3",
|
|
109
|
+
"skills/playbook-design/SKILL.md": "56aa5692c1bbe3843f11819f0f9270988ddd0424b16f38db72a854864155407f",
|
|
110
|
+
"skills/playbook-design/references/fields.md": "c7ba7a0bf8ac1325e70a5e4d98734716d752c311588d064bf2aba849925357aa"
|
|
85
111
|
}
|
|
86
112
|
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import {z} from 'zod';
|
|
2
|
-
const uuid=z.string().uuid(),scope={workspaceId:uuid.optional()};
|
|
3
|
-
const label=z.string().trim().min(1).max(120).refine(value=>!/[\u0000-\u001f\u007f]/.test(value),'Control characters are not allowed.');
|
|
4
|
-
const text=z.string().trim().max(5000);
|
|
5
|
-
const identity=z.object({key:z.string().uuid(),name:label}).strict();
|
|
6
|
-
const approachStepSchema=z.object({key:z.string().uuid(),channel:z.enum(['LinkedIn','Email','Phone']),action:label,condition:z.enum(['Always','Only if viable','Only if connected']),viability:text.optional(),instructions:text.optional(),waitDays:z.number().int().min(1).max(60)}).strict();
|
|
7
|
-
const completion=z.discriminatedUnion('kind',[z.object({kind:z.literal('next')}).strict(),z.object({kind:z.literal('stay')}).strict(),z.object({kind:z.literal('off_ramp'),offRampKey:z.string().uuid()}).strict()]);
|
|
8
|
-
const stage=identity.extend({movesInWhen:text.optional(),owner:z.enum(['Agent','Assignee']).optional(),goalDays:z.number().int().min(0).max(365).optional(),optional:z.boolean().optional(),enabled:z.boolean().optional(),steps:z.array(approachStepSchema).max(20).optional(),completion:completion.optional()});
|
|
9
|
-
const approachRulesSchema=z.object({autoMove:z.boolean().optional(),flagOverdue:z.boolean().optional(),allowBackward:z.boolean().optional(),emailWindow:z.enum(['weekdays_morning','weekdays','any_day']).optional(),nurtureDays:z.union([z.literal(60),z.literal(90),z.literal(180),z.null()]).optional()}).strict();
|
|
10
|
-
const approachFieldsSchema=z.object({name:label,stages:z.array(stage).min(2).max(30),goalKey:z.string().uuid(),offRamps:z.array(identity.extend({reason:z.enum(['rejected','not_fit','nurture','unresponsive','other'])})).max(30),voice:text.optional(),rules:approachRulesSchema.optional()}).strict();
|
|
11
|
-
const fields=approachFieldsSchema;
|
|
12
|
-
const base=a=>`/workspaces/${a.workspaceId}`,query=(a,skip=[])=>new URLSearchParams(Object.entries(a).filter(([k,v])=>k!=='workspaceId'&&!skip.includes(k)&&v!==undefined).map(([k,v])=>[k,String(v)]));
|
|
13
|
-
export const approachOperations={
|
|
14
|
-
approach_list:{schema:z.object({...scope,cursor:uuid.optional(),limit:z.number().int().min(1).max(100).optional()}).strict(),method:'GET',path:a=>`${base(a)}/approaches?${query(a)}`,scoped:true,description:'List immutable versioned approaches in the current workspace. Free CRM read.'},
|
|
15
|
-
approach_get:{schema:z.object({...scope,id:uuid,revision:z.number().int().positive().optional()}).strict(),method:'GET',path:a=>`${base(a)}/approaches/${a.id}?${query(a,['id'])}`,scoped:true,description:'Read an approach version: stage plays, step waits, completion, goal, voice and agent rules. Instructions are executed by the external agent, never by a hosted sequence runner.'},
|
|
16
|
-
approach_save:{schema:z.object({...scope,id:uuid.optional(),requestId:uuid,expectedRevision:z.number().int().nonnegative(),fields}).strict(),method:'POST',path:a=>`${base(a)}/approaches`,body:({workspaceId,...a})=>a,scoped:true,description:'Create or revise an approach with optimistic version and idempotent request. Does not change existing campaign or participation pins.'},
|
|
17
|
-
workspace_pipeline_get:{schema:z.object({...scope,campaignId:uuid.optional(),pinId:uuid.optional()}).strict(),method:'GET',path:a=>`${base(a)}/pipeline?${query(a)}`,scoped:true,description:'Read the pipeline board: stages of one approach version, the people currently in each stage, and counts of people closed out through each off-ramp. Free CRM read.'},
|
|
18
|
-
approach_progress_get:{schema:z.object({...scope,participationId:uuid}).strict(),method:'GET',path:a=>`${base(a)}/participations/${a.participationId}/progress`,scoped:true,description:'Read the participation’s admitted approach pin and recorded stage/outcome history.'},
|
|
19
|
-
approach_progress_record:{schema:z.object({...scope,participationId:uuid,expectedVersion:z.number().int().nonnegative(),requestId:uuid,stageKey:uuid.optional(),offRampKey:uuid.optional(),finishStage:z.literal(true).optional(),reason:z.string().trim().min(1).max(2000),evidence:z.array(z.object({kind:z.enum(['observation','conversation']),id:uuid}).strict()).max(20)}).strict(),method:'POST',path:a=>`${base(a)}/participations/${a.participationId}/progress`,body:({workspaceId,participationId,...a})=>a,scoped:true,description:'Report a stage, off-ramp, or finishStage:true after externally completing the current play and waits. Finish resolves next/stay/off-ramp from the admitted version. Stored evidence required for agents; human-review and backward-move rules apply. Assigned owner/Admin only. Goal ends prospecting; post-goal forward reporting never reactivates. No send or provider call.'},
|
|
20
|
-
approach_progress_suggest:{schema:z.object({...scope,participationId:uuid,expectedVersion:z.number().int().nonnegative(),requestId:uuid,stageKey:uuid.optional(),offRampKey:uuid.optional(),finishStage:z.literal(true).optional(),reason:z.string().trim().min(1).max(2000),evidence:z.array(z.object({kind:z.enum(['observation','conversation']),id:uuid}).strict()).max(20)}).strict(),method:'POST',path:a=>`${base(a)}/participations/${a.participationId}/suggestions`,body:({workspaceId,participationId,...a})=>a,scoped:true,description:'Suggest a pinned stage move, off-ramp or play completion for human review in Operator. Stored evidence required. Does not change progress or send anything. Assigned owner/Admin; current human approval revalidates progress.'},
|
|
21
|
-
approach_suggestion_decide:{schema:z.object({...scope,id:uuid,requestId:uuid,decision:z.enum(['approve','dismiss'])}).strict(),method:'POST',path:a=>`${base(a)}/approach-suggestions/${a.id}/decision`,body:({workspaceId,id,...a})=>a,scoped:true,description:'Approve or dismiss a pending stage suggestion. People only: the current owner or an Admin. Approving moves the participation to the suggested stage.'},
|
|
22
|
-
approach_suggestions_list:{schema:z.object({...scope,cursor:uuid.optional(),limit:z.number().int().min(1).max(100).optional()}).strict(),method:'GET',path:a=>`${base(a)}/approach-suggestions?${query(a)}`,scoped:true,description:'List pending stage suggestions visible to the current owner or Admin. Humans approve or dismiss in Operator; agents cannot approve.'},
|
|
23
|
-
workspace_analytics_get:{schema:z.object({...scope,campaignId:uuid.optional(),ownerUserId:uuid.optional(),offerId:uuid.optional(),audienceId:uuid.optional(),tag:z.string().min(1).max(64).optional(),pinId:uuid.optional(),from:z.string().datetime(),to:z.string().datetime()}).strict(),method:'GET',path:a=>`${base(a)}/analytics?${query(a)}`,scoped:true,description:'Read UTC-period distinct outcomes and explicit stage events. Missing activity or cost attribution is not tracked, never fabricated zero. Optional filters: campaignId, ownerUserId (campaign owner), offerId, audienceId, tag (campaign tag); list the values with workspace_analytics_filters. Maximum 366 days; narrow large scopes.'}
|
|
24
|
-
};
|
|
@@ -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 |
|