@rubytech/taskmaster 1.11.1 → 1.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/taskmaster-tools.js +14 -0
- package/dist/agents/tool-policy.js +18 -0
- package/dist/agents/tools/brand-settings-tool.js +101 -0
- package/dist/agents/tools/channel-settings-tool.js +116 -0
- package/dist/agents/tools/logs-read-tool.js +67 -0
- package/dist/agents/tools/public-chat-settings-tool.js +128 -0
- package/dist/agents/tools/skill-manage-tool.js +105 -0
- package/dist/agents/tools/system-status-tool.js +64 -0
- package/dist/agents/tools/usage-report-tool.js +46 -0
- package/dist/build-info.json +3 -3
- package/dist/control-ui/assets/{index-YAjVyXqJ.js → index-s8s_YKvR.js} +494 -526
- package/dist/control-ui/assets/index-s8s_YKvR.js.map +1 -0
- package/dist/control-ui/index.html +1 -1
- package/dist/gateway/public-chat/deliver-otp.js +8 -6
- package/dist/gateway/public-chat/deliver-sms.js +61 -24
- package/package.json +1 -1
- package/skills/brevo/SKILL.md +9 -8
- package/skills/brevo/references/browser-setup.md +13 -3
- package/skills/brevo/references/sms-credits.md +68 -0
- package/skills/system-admin/SKILL.md +68 -0
- package/skills/twilio/SKILL.md +14 -11
- package/skills/twilio/references/browser-setup.md +15 -24
- package/taskmaster-docs/USER-GUIDE.md +2 -2
- package/dist/control-ui/assets/index-YAjVyXqJ.js.map +0 -1
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
<title>Taskmaster Control</title>
|
|
7
7
|
<meta name="color-scheme" content="dark light" />
|
|
8
8
|
<link rel="icon" type="image/png" href="./favicon.png" />
|
|
9
|
-
<script type="module" crossorigin src="./assets/index-
|
|
9
|
+
<script type="module" crossorigin src="./assets/index-s8s_YKvR.js"></script>
|
|
10
10
|
<link rel="stylesheet" crossorigin href="./assets/index-CpaEIgQy.css">
|
|
11
11
|
</head>
|
|
12
12
|
<body>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Deliver OTP verification codes via WhatsApp (primary), SMS (fallback), or email (Brevo).
|
|
3
|
+
* Both SMS and email use the same Brevo API key — SMS requires prepaid credits.
|
|
3
4
|
*/
|
|
4
5
|
import { getActiveWebListener } from "../../web/active-listener.js";
|
|
5
6
|
import { sendMessageWhatsApp } from "../../web/outbound.js";
|
|
6
|
-
import { resolveSmsCredentials, sendSms } from "./deliver-sms.js";
|
|
7
|
+
import { hasSmsApiKey, resolveSmsCredentials, sendSms } from "./deliver-sms.js";
|
|
7
8
|
import { hasEmailApiKey, resolveEmailCredentials, sendEmail } from "./deliver-email.js";
|
|
8
9
|
/** Detect whether an identifier is an email address. */
|
|
9
10
|
function isEmail(identifier) {
|
|
@@ -17,7 +18,7 @@ export function detectOtpChannels(whatsappAccountId) {
|
|
|
17
18
|
const channels = [];
|
|
18
19
|
if (getActiveWebListener(whatsappAccountId))
|
|
19
20
|
channels.push("whatsapp");
|
|
20
|
-
if (
|
|
21
|
+
if (hasSmsApiKey())
|
|
21
22
|
channels.push("sms");
|
|
22
23
|
if (hasEmailApiKey())
|
|
23
24
|
channels.push("email");
|
|
@@ -26,12 +27,13 @@ export function detectOtpChannels(whatsappAccountId) {
|
|
|
26
27
|
/**
|
|
27
28
|
* Deliver a verification code to the given identifier.
|
|
28
29
|
*
|
|
29
|
-
* Email identifiers (containing @) are sent via Brevo.
|
|
30
|
+
* Email identifiers (containing @) are sent via Brevo email API.
|
|
30
31
|
* Phone identifiers use the existing WhatsApp -> SMS fallback chain.
|
|
32
|
+
* Both SMS and email share the same Brevo API key.
|
|
31
33
|
*/
|
|
32
34
|
export async function deliverOtp(identifier, code, accountId) {
|
|
33
35
|
const message = `Your verification code is: ${code}`;
|
|
34
|
-
// Email identifiers — deliver via Brevo
|
|
36
|
+
// Email identifiers — deliver via Brevo email API
|
|
35
37
|
if (isEmail(identifier)) {
|
|
36
38
|
const emailCreds = await resolveEmailCredentials();
|
|
37
39
|
if (!emailCreds) {
|
|
@@ -42,7 +44,7 @@ export async function deliverOtp(identifier, code, accountId) {
|
|
|
42
44
|
}
|
|
43
45
|
// Phone identifiers — WhatsApp first, SMS fallback
|
|
44
46
|
const hasWhatsApp = !!getActiveWebListener(accountId);
|
|
45
|
-
const smsCreds = resolveSmsCredentials();
|
|
47
|
+
const smsCreds = await resolveSmsCredentials();
|
|
46
48
|
if (hasWhatsApp) {
|
|
47
49
|
try {
|
|
48
50
|
await sendMessageWhatsApp(identifier, message, { verbose: false, accountId });
|
|
@@ -59,5 +61,5 @@ export async function deliverOtp(identifier, code, accountId) {
|
|
|
59
61
|
if (hasWhatsApp) {
|
|
60
62
|
throw new Error("Failed to send verification code via WhatsApp and SMS is not configured.");
|
|
61
63
|
}
|
|
62
|
-
throw new Error("No verification channel available. Connect WhatsApp or
|
|
64
|
+
throw new Error("No verification channel available. Connect WhatsApp or add a Brevo API key with SMS credits.");
|
|
63
65
|
}
|
|
@@ -1,44 +1,81 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Lightweight
|
|
2
|
+
* Lightweight Brevo SMS sender — single HTTP POST, no SDK dependency.
|
|
3
|
+
*
|
|
4
|
+
* Uses the same Brevo API key as email delivery. The sender name is
|
|
5
|
+
* auto-detected from the verified email sender's display name.
|
|
6
|
+
* SMS requires prepaid credits in the Brevo account.
|
|
3
7
|
*/
|
|
4
8
|
import { loadConfig } from "../../config/config.js";
|
|
9
|
+
/** Cached sender name — avoids hitting the API on every SMS. */
|
|
10
|
+
let cachedSenderName = null;
|
|
5
11
|
/**
|
|
6
|
-
*
|
|
7
|
-
* Returns
|
|
12
|
+
* Query Brevo for the first active sender's display name.
|
|
13
|
+
* Returns the sender name or "Verify" as a safe fallback.
|
|
8
14
|
*/
|
|
9
|
-
|
|
15
|
+
async function fetchSenderName(apiKey) {
|
|
16
|
+
try {
|
|
17
|
+
const res = await fetch("https://api.brevo.com/v3/senders", {
|
|
18
|
+
headers: { "api-key": apiKey, Accept: "application/json" },
|
|
19
|
+
});
|
|
20
|
+
if (!res.ok)
|
|
21
|
+
return "Verify";
|
|
22
|
+
const json = (await res.json());
|
|
23
|
+
const active = json.senders?.find((s) => s.active && s.name);
|
|
24
|
+
return active?.name ?? json.senders?.[0]?.name ?? "Verify";
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return "Verify";
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Sync check: is a Brevo API key configured?
|
|
32
|
+
* Used by detectOtpChannels() for capability reporting.
|
|
33
|
+
*/
|
|
34
|
+
export function hasSmsApiKey() {
|
|
10
35
|
const cfg = loadConfig();
|
|
11
|
-
|
|
12
|
-
|
|
36
|
+
return !!cfg.publicChat?.email?.apiKey;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Resolve SMS credentials from config.
|
|
40
|
+
*
|
|
41
|
+
* Uses the same Brevo API key as email. The sender name is resolved
|
|
42
|
+
* from the cached value or fetched from the Brevo senders API.
|
|
43
|
+
* Returns null if no API key is configured.
|
|
44
|
+
*/
|
|
45
|
+
export async function resolveSmsCredentials() {
|
|
46
|
+
const cfg = loadConfig();
|
|
47
|
+
const apiKey = cfg.publicChat?.email?.apiKey;
|
|
48
|
+
if (!apiKey)
|
|
13
49
|
return null;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
};
|
|
50
|
+
if (cachedSenderName && cachedSenderName.apiKey === apiKey) {
|
|
51
|
+
return { apiKey, sender: cachedSenderName.name };
|
|
52
|
+
}
|
|
53
|
+
const name = await fetchSenderName(apiKey);
|
|
54
|
+
cachedSenderName = { apiKey, name };
|
|
55
|
+
return { apiKey, sender: name };
|
|
19
56
|
}
|
|
20
57
|
/**
|
|
21
|
-
* Send an SMS via the
|
|
58
|
+
* Send an SMS via the Brevo transactional SMS API.
|
|
22
59
|
*/
|
|
23
60
|
export async function sendSms(to, body, creds) {
|
|
24
|
-
const
|
|
25
|
-
const auth = Buffer.from(`${creds.accountSid}:${creds.authToken}`).toString("base64");
|
|
26
|
-
const params = new URLSearchParams();
|
|
27
|
-
params.set("To", to);
|
|
28
|
-
params.set("From", creds.fromNumber);
|
|
29
|
-
params.set("Body", body);
|
|
30
|
-
const res = await fetch(url, {
|
|
61
|
+
const res = await fetch("https://api.brevo.com/v3/transactionalSMS/sms", {
|
|
31
62
|
method: "POST",
|
|
32
63
|
headers: {
|
|
33
|
-
|
|
34
|
-
"Content-Type": "application/
|
|
64
|
+
"api-key": creds.apiKey,
|
|
65
|
+
"Content-Type": "application/json",
|
|
66
|
+
Accept: "application/json",
|
|
35
67
|
},
|
|
36
|
-
body:
|
|
68
|
+
body: JSON.stringify({
|
|
69
|
+
type: "transactional",
|
|
70
|
+
sender: creds.sender,
|
|
71
|
+
recipient: to,
|
|
72
|
+
content: body,
|
|
73
|
+
}),
|
|
37
74
|
});
|
|
38
75
|
if (!res.ok) {
|
|
39
76
|
const text = await res.text().catch(() => "");
|
|
40
|
-
throw new Error(`
|
|
77
|
+
throw new Error(`Brevo SMS failed (${res.status}): ${text}`);
|
|
41
78
|
}
|
|
42
79
|
const json = (await res.json());
|
|
43
|
-
return {
|
|
80
|
+
return { id: String(json.messageId ?? "unknown") };
|
|
44
81
|
}
|
package/package.json
CHANGED
package/skills/brevo/SKILL.md
CHANGED
|
@@ -1,29 +1,30 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: brevo
|
|
3
|
-
description: Guide users through getting a free Brevo API key for email
|
|
3
|
+
description: Guide users through getting a free Brevo API key for email and SMS verification.
|
|
4
4
|
metadata: {"taskmaster":{"emoji":"🔑"}}
|
|
5
5
|
---
|
|
6
6
|
|
|
7
7
|
# Brevo Setup
|
|
8
8
|
|
|
9
|
-
Walks users through creating a Brevo account, verifying a sender email address, and obtaining an API key. Brevo uses single sender verification — the user verifies one email address by entering a 6-digit code sent to it. No DNS records or domain ownership required.
|
|
9
|
+
Walks users through creating a Brevo account, verifying a sender email address, and obtaining an API key. One API key powers both email OTP and SMS OTP — no separate provider needed. Brevo uses single sender verification — the user verifies one email address by entering a 6-digit code sent to it. No DNS records or domain ownership required.
|
|
10
10
|
|
|
11
11
|
## When to activate
|
|
12
12
|
|
|
13
|
-
- User enables Email OTP or Visitor Chooses mode for Public Chat and
|
|
14
|
-
- User asks about email verification setup or Brevo
|
|
15
|
-
- BOOTSTRAP detects missing Brevo API key when email verification is enabled
|
|
13
|
+
- User enables Email OTP, Phone OTP, or Visitor Chooses mode for Public Chat and Brevo is not configured
|
|
14
|
+
- User asks about email or SMS verification setup, or about Brevo
|
|
15
|
+
- BOOTSTRAP detects missing Brevo API key when email or SMS verification is enabled
|
|
16
|
+
- User asks about SMS fallback for phone verification
|
|
16
17
|
|
|
17
18
|
## What it unlocks
|
|
18
19
|
|
|
19
|
-
- Email OTP verification
|
|
20
|
-
-
|
|
21
|
-
- Free tier: 300 emails per day, no credit card required
|
|
20
|
+
- **Email OTP** — verification codes delivered via email to any address. Free tier: 300 emails per day, no credit card required.
|
|
21
|
+
- **SMS OTP** — verification codes delivered via text message when WhatsApp is unavailable. Requires prepaid SMS credits in Brevo (purchased separately). Same API key as email — no additional configuration.
|
|
22
22
|
|
|
23
23
|
## References
|
|
24
24
|
|
|
25
25
|
| Task | When to use | Reference |
|
|
26
26
|
|------|-------------|-----------|
|
|
27
27
|
| Guided setup | User wants help getting the key | `references/browser-setup.md` |
|
|
28
|
+
| SMS credits | User wants to enable SMS fallback | `references/sms-credits.md` |
|
|
28
29
|
|
|
29
30
|
Load the reference and follow its instructions.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Brevo
|
|
1
|
+
# Brevo — Guided Setup
|
|
2
2
|
|
|
3
|
-
Walk the user through getting Brevo credentials. Brevo uses single sender verification — the user verifies an email address by entering a 6-digit code sent to it. No DNS records required. Guide with clear instructions.
|
|
3
|
+
Walk the user through getting Brevo credentials. One API key powers both email OTP and SMS OTP. Brevo uses single sender verification — the user verifies an email address by entering a 6-digit code sent to it. No DNS records required. Guide with clear instructions.
|
|
4
4
|
|
|
5
5
|
**Important:** Brevo is primarily a marketing email platform. The signup flow and dashboard are oriented around marketing campaigns, contacts, and newsletters. The user does NOT need any of that. Guide them directly to the two things they need: a verified sender and an API key. Both are in the **Settings** page — accessed via the **gear icon** in the top-right toolbar. On the Settings page, both options are in the left sidebar under **Organization settings**.
|
|
6
6
|
|
|
@@ -119,6 +119,14 @@ The key is applied immediately — no restart needed. Confirm to the user:
|
|
|
119
119
|
|
|
120
120
|
That's it. No further configuration is needed in Taskmaster — the verified sender address is detected automatically from Brevo.
|
|
121
121
|
|
|
122
|
+
## SMS fallback (optional)
|
|
123
|
+
|
|
124
|
+
If the user wants SMS verification codes (for when WhatsApp is unavailable), they can enable it with the same Brevo account. No additional API key or configuration is needed — just SMS credits.
|
|
125
|
+
|
|
126
|
+
> "Your Brevo API key also works for SMS — same key, no extra setup. You just need SMS credits in your Brevo account. I can walk you through that if you'd like."
|
|
127
|
+
|
|
128
|
+
If the user wants to proceed, load `references/sms-credits.md` and follow it.
|
|
129
|
+
|
|
122
130
|
---
|
|
123
131
|
|
|
124
132
|
## If the user already has a Brevo account
|
|
@@ -158,4 +166,6 @@ If yes, skip to Step 4. If they're unsure:
|
|
|
158
166
|
| "Do I need to set up DNS records?" | No. Single sender verification works without DNS. Brevo will recommend domain authentication for better deliverability, but it's not required. |
|
|
159
167
|
| "Can I change the sender address later?" | Yes — add and verify a new sender in Brevo. Taskmaster auto-detects the verified sender, so no changes needed on this end. |
|
|
160
168
|
| "Where does Taskmaster get the sender address?" | Automatically from the Brevo API. When you verify a sender in Brevo, Taskmaster detects it — you don't need to enter it anywhere else. |
|
|
161
|
-
| "What about all the marketing stuff?" | Ignore it. Brevo is a full marketing platform, but we only use its transactional email
|
|
169
|
+
| "What about all the marketing stuff?" | Ignore it. Brevo is a full marketing platform, but we only use its transactional email and SMS APIs. You don't need to set up contacts, campaigns, or templates. |
|
|
170
|
+
| "Can Brevo also send SMS?" | Yes — the same API key works for both email and SMS. You just need to purchase SMS credits in your Brevo account. See the SMS credits reference. |
|
|
171
|
+
| "Do I need a separate provider for SMS?" | No. Brevo handles both email and SMS verification with the same API key. No Twilio or other SMS provider needed. |
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Brevo SMS Credits — Guided Setup
|
|
2
|
+
|
|
3
|
+
Walk the user through purchasing SMS credits in Brevo. SMS verification uses the same Brevo API key as email — no additional configuration in Taskmaster. The user just needs credits in their Brevo account.
|
|
4
|
+
|
|
5
|
+
**Important:** SMS credits are prepaid and never expire. Pricing varies by country (see below). The SMS sender name is auto-detected from the user's verified email sender in Brevo — no manual configuration needed.
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Prerequisites
|
|
10
|
+
|
|
11
|
+
- User already has a Brevo account with an API key configured in Taskmaster (if not, use `references/browser-setup.md` first)
|
|
12
|
+
- Chat channel for sending instructions
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## Step 1: Explain
|
|
17
|
+
|
|
18
|
+
> "Your Brevo API key already works for SMS — no extra setup needed on our end. You just need SMS credits in your Brevo account. Credits are prepaid and never expire, so you only pay for what you need.
|
|
19
|
+
>
|
|
20
|
+
> Let me walk you through purchasing credits. It takes about 2 minutes."
|
|
21
|
+
|
|
22
|
+
## Step 2: Purchase SMS credits
|
|
23
|
+
|
|
24
|
+
> "1. Go to **brevo.com** and log in
|
|
25
|
+
> 2. In the **top-right toolbar**, click the **gear icon** (⚙️) to open **Settings**
|
|
26
|
+
> 3. In the left sidebar, look for **Your plan** or **Billing** under your account settings
|
|
27
|
+
> 4. Find the **SMS credits** section and click **Buy credits**
|
|
28
|
+
> 5. Choose how many credits you need:
|
|
29
|
+
> - **100 credits** is a good starting amount for verification codes
|
|
30
|
+
> - Each SMS uses 1 credit
|
|
31
|
+
> - Credits never expire
|
|
32
|
+
> 6. Complete the purchase
|
|
33
|
+
>
|
|
34
|
+
> Let me know when that's done."
|
|
35
|
+
|
|
36
|
+
Wait for the user to confirm.
|
|
37
|
+
|
|
38
|
+
## Step 3: Confirm
|
|
39
|
+
|
|
40
|
+
> "SMS verification is now enabled. When a visitor verifies their phone number and WhatsApp is unavailable, the verification code will be sent by text message instead. No restart or configuration change needed — it works automatically with your existing Brevo API key."
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Pricing reference
|
|
45
|
+
|
|
46
|
+
Approximate SMS credit costs (varies by country):
|
|
47
|
+
|
|
48
|
+
| Region | Cost per 100 credits |
|
|
49
|
+
|--------|---------------------|
|
|
50
|
+
| US / Canada | ~$1.09 |
|
|
51
|
+
| UK | ~$3.45 |
|
|
52
|
+
| Australia | ~$5.50 |
|
|
53
|
+
| EU (varies) | ~$3.00–$7.00 |
|
|
54
|
+
|
|
55
|
+
Exact pricing is shown during purchase in the Brevo dashboard.
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## Common questions
|
|
60
|
+
|
|
61
|
+
| Question | Answer |
|
|
62
|
+
|----------|--------|
|
|
63
|
+
| "Do credits expire?" | No — prepaid SMS credits never expire. |
|
|
64
|
+
| "How many credits per SMS?" | One credit per message. Each verification code is one SMS. |
|
|
65
|
+
| "What phone number do SMS come from?" | Brevo assigns a sender automatically based on the destination country. You don't need to buy or manage a phone number. |
|
|
66
|
+
| "What name appears on the SMS?" | The sender name from your verified email sender in Brevo (e.g. your business name). Taskmaster detects this automatically. |
|
|
67
|
+
| "Do I need to change anything in Taskmaster?" | No. If your Brevo API key is already configured, SMS works automatically when you have credits. |
|
|
68
|
+
| "Can I use SMS without email?" | The Brevo API key is configured through the email setup, but once configured it serves both email and SMS. You need at least one verified sender. |
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: system-admin
|
|
3
|
+
description: "System administration through conversation. Monitors system health, manages channels, branding, public chat, skills, and usage — replacing the need to navigate the control panel UI."
|
|
4
|
+
metadata: {"taskmaster":{"always":true,"emoji":"⚙️","skillKey":"system-admin"}}
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# System Administration
|
|
8
|
+
|
|
9
|
+
You are the system administrator — the single point of contact for everything the business owner would otherwise need the control panel for. Your goal is to make the control panel unnecessary for day-to-day operations.
|
|
10
|
+
|
|
11
|
+
## Philosophy
|
|
12
|
+
|
|
13
|
+
The user chose Taskmaster because they want ONE conversation, not a dozen apps. Every time they'd have to leave this chat to check a dashboard, toggle a setting, or review logs — that's a failure. Handle it here.
|
|
14
|
+
|
|
15
|
+
## Available Tools
|
|
16
|
+
|
|
17
|
+
You have seven system administration tools. Use them proactively and reactively.
|
|
18
|
+
|
|
19
|
+
### Monitoring (read-only, always safe)
|
|
20
|
+
|
|
21
|
+
- **system_status** — System health, auth status, license, channel connections, software version. Use `overview` for a combined snapshot when the user asks "how's the system?" or at the start of any admin session.
|
|
22
|
+
- **usage_report** — Token counts and cost data. Use `summary` for token breakdown, `cost` for spend over time. Offer monthly cost reports proactively.
|
|
23
|
+
- **logs_read** — System logs and session transcripts. Use `system` for gateway errors, `sessions` for conversation traces. Essential for debugging any "it's not working" report.
|
|
24
|
+
|
|
25
|
+
### Configuration (read + write, check before acting)
|
|
26
|
+
|
|
27
|
+
- **channel_settings** — WhatsApp/iMessage connection status and settings. Change the AI model, thinking level, DM policy, or group chat policy per account.
|
|
28
|
+
- **brand_settings** — Accent color, background color, logo status. Set colors via hex values. Logo upload requires the UI (binary data).
|
|
29
|
+
- **public_chat_settings** — Enable/disable the public chat widget, manage the greeting, set access mode (open/verified/visitor-chooses).
|
|
30
|
+
- **skill_manage** — List, create, update, delete, or install skills. Preloaded skills cannot be deleted.
|
|
31
|
+
|
|
32
|
+
### Already available (from other tools)
|
|
33
|
+
|
|
34
|
+
- **api_keys** — Manage provider API keys (Google, Tavily, OpenAI, etc.)
|
|
35
|
+
- **software_update** — Check for updates, install them, restart the gateway
|
|
36
|
+
- **cron** — Schedule recurring events and reminders
|
|
37
|
+
- **gateway** — Restart the gateway, apply config changes
|
|
38
|
+
|
|
39
|
+
## When to Use These Tools
|
|
40
|
+
|
|
41
|
+
### Reactively — the user asks
|
|
42
|
+
|
|
43
|
+
| User says | You do |
|
|
44
|
+
|-----------|--------|
|
|
45
|
+
| "How's the system?" / "Is everything working?" | `system_status` overview |
|
|
46
|
+
| "What's my usage?" / "How much am I spending?" | `usage_report` cost + summary |
|
|
47
|
+
| "Is WhatsApp connected?" | `channel_settings` status |
|
|
48
|
+
| "Change the color to blue" | `brand_settings` set_colors |
|
|
49
|
+
| "Enable the public chat" | `public_chat_settings` enable |
|
|
50
|
+
| "What model am I using?" | `channel_settings` status |
|
|
51
|
+
| "Switch to a cheaper model" | `channel_settings` set_model |
|
|
52
|
+
| "Show me the logs" | `logs_read` system |
|
|
53
|
+
| "Something isn't working" | `logs_read` system + `system_status` overview |
|
|
54
|
+
| "Is there an update?" | `software_update` check |
|
|
55
|
+
|
|
56
|
+
### Proactively — you notice something
|
|
57
|
+
|
|
58
|
+
- After a restart or reconnection, check `system_status` and report any issues.
|
|
59
|
+
- When discussing costs, offer to pull `usage_report` data.
|
|
60
|
+
- If a user reports a message not going through, check `channel_settings` status and `logs_read`.
|
|
61
|
+
- When generating a greeting for a new public chat setup, use `public_chat_settings` regenerate_greeting.
|
|
62
|
+
|
|
63
|
+
## Principles
|
|
64
|
+
|
|
65
|
+
- **Explain, don't just execute.** When changing a setting, tell the user what you're doing and what it means. "I've switched your WhatsApp to Sonnet — it's faster and cheaper than Opus, while still handling most conversations well."
|
|
66
|
+
- **Confirm destructive actions.** Before disabling public chat, deleting a skill, or changing access modes — confirm with the user. Read operations never need confirmation.
|
|
67
|
+
- **Surface the important, hide the noise.** The user doesn't need to see raw JSON. Summarize system status in plain language. "Everything's running smoothly — WhatsApp connected, Claude authenticated, license active. You've used about $4.20 this month."
|
|
68
|
+
- **Know your limits.** Some things still need the UI: scanning WhatsApp QR codes, uploading logos, managing WiFi, Tailscale setup, PIN changes, OAuth re-authentication. When these come up, direct the user to the specific page: "Open the Setup page and scroll to WhatsApp to scan a new QR code."
|
package/skills/twilio/SKILL.md
CHANGED
|
@@ -1,29 +1,32 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: twilio
|
|
3
|
-
description: Guide users through getting Twilio
|
|
4
|
-
metadata: {"taskmaster":{"emoji":"
|
|
3
|
+
description: Guide users through getting Twilio credentials for the voice-call extension.
|
|
4
|
+
metadata: {"taskmaster":{"emoji":"📞"}}
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
# Twilio Setup
|
|
7
|
+
# Twilio Setup (Voice Calling)
|
|
8
8
|
|
|
9
|
-
Walks users through creating a Twilio account and obtaining
|
|
9
|
+
Walks users through creating a Twilio account and obtaining credentials for the voice-call extension. Twilio is used exclusively for voice calling — SMS verification uses Brevo instead.
|
|
10
10
|
|
|
11
11
|
## When to activate
|
|
12
12
|
|
|
13
|
-
- User
|
|
14
|
-
- User asks about
|
|
15
|
-
-
|
|
13
|
+
- User wants to set up the voice-call extension with Twilio as the telephony provider
|
|
14
|
+
- User asks about Twilio setup for voice calling
|
|
15
|
+
- BOOTSTRAP detects missing Twilio credentials when voice-call extension is configured with Twilio provider
|
|
16
|
+
|
|
17
|
+
## Important
|
|
18
|
+
|
|
19
|
+
Twilio is NOT used for SMS verification. If the user asks about SMS for public chat verification, direct them to the **Brevo** skill instead — Brevo handles both email and SMS OTP with one API key.
|
|
16
20
|
|
|
17
21
|
## What it unlocks
|
|
18
22
|
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
- Free trial includes credit for testing; pay-as-you-go after that
|
|
23
|
+
- Inbound and outbound voice calls via the voice-call extension
|
|
24
|
+
- Twilio as a telephony provider alongside Plivo and Telnyx
|
|
22
25
|
|
|
23
26
|
## References
|
|
24
27
|
|
|
25
28
|
| Task | When to use | Reference |
|
|
26
29
|
|------|-------------|-----------|
|
|
27
|
-
| Guided setup | User wants help getting Twilio credentials | `references/browser-setup.md` |
|
|
30
|
+
| Guided setup | User wants help getting Twilio credentials for voice calling | `references/browser-setup.md` |
|
|
28
31
|
|
|
29
32
|
Load the reference and follow its instructions.
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
# Twilio
|
|
1
|
+
# Twilio Voice — Guided Setup
|
|
2
2
|
|
|
3
|
-
Walk the user through getting Twilio credentials
|
|
3
|
+
Walk the user through getting Twilio credentials for the voice-call extension. Twilio signup requires identity verification — guide with clear instructions rather than browser automation.
|
|
4
|
+
|
|
5
|
+
**Important:** This skill is for voice calling only. If the user needs SMS verification for public chat, direct them to the Brevo skill — Brevo handles both email and SMS OTP.
|
|
4
6
|
|
|
5
7
|
---
|
|
6
8
|
|
|
7
9
|
## Prerequisites
|
|
8
10
|
|
|
9
11
|
- User has an email address and phone number
|
|
12
|
+
- User wants to use Twilio as their voice-call telephony provider
|
|
10
13
|
- Chat channel for sending instructions
|
|
11
14
|
|
|
12
15
|
---
|
|
@@ -15,7 +18,7 @@ Walk the user through getting Twilio credentials themselves. Unlike Tavily or Go
|
|
|
15
18
|
|
|
16
19
|
Tell the user what Twilio is and why they need it:
|
|
17
20
|
|
|
18
|
-
> "
|
|
21
|
+
> "Twilio is a telephony provider that lets your assistant make and receive phone calls. There's a free trial with enough credit to get started — no payment needed upfront.
|
|
19
22
|
>
|
|
20
23
|
> I'll walk you through the setup. You'll need to create the account yourself since Twilio asks for some personal details, but I'll tell you exactly what to do at each step."
|
|
21
24
|
|
|
@@ -35,13 +38,13 @@ Wait for the user to confirm they've completed signup.
|
|
|
35
38
|
|
|
36
39
|
If the user asks about onboarding questions Twilio shows after signup:
|
|
37
40
|
|
|
38
|
-
> "Those are just survey questions — pick anything. You can select **
|
|
41
|
+
> "Those are just survey questions — pick anything. You can select **Voice**, **Notifications**, and **No code**. They don't affect your account."
|
|
39
42
|
|
|
40
43
|
## Step 4: Get a phone number
|
|
41
44
|
|
|
42
45
|
> "On the Twilio dashboard, you should see a **trial phone number** offered to you. Click **'Get this number'** to claim it.
|
|
43
46
|
>
|
|
44
|
-
> If you don't see one, go to **Phone Numbers → Manage → Buy a number** in the left sidebar and get one with
|
|
47
|
+
> If you don't see one, go to **Phone Numbers → Manage → Buy a number** in the left sidebar and get one with Voice capability.
|
|
45
48
|
>
|
|
46
49
|
> Copy the phone number — it should look like **+15551234567**. Send it to me."
|
|
47
50
|
|
|
@@ -60,28 +63,15 @@ Wait for the user to send the credentials.
|
|
|
60
63
|
|
|
61
64
|
## Step 6: Save to Taskmaster
|
|
62
65
|
|
|
63
|
-
Once you have all three values (Account SID, Auth Token, phone number)
|
|
64
|
-
|
|
65
|
-
> "Now open your Taskmaster setup page:
|
|
66
|
-
>
|
|
67
|
-
> 1. Make sure **Public Chat** is enabled with **Phone OTP** or **Visitor chooses** mode
|
|
68
|
-
> 2. Click **'Edit'** on the **SMS Fallback** row
|
|
69
|
-
> 3. Paste in your **Account SID**, **Auth Token**, and **From Number**
|
|
70
|
-
> 4. Click **Save**
|
|
71
|
-
>
|
|
72
|
-
> Let me know when it's done!"
|
|
73
|
-
|
|
74
|
-
## Step 7: Confirm
|
|
75
|
-
|
|
76
|
-
Once the user confirms:
|
|
66
|
+
Once you have all three values (Account SID, Auth Token, phone number), save them as Twilio credentials for the voice-call extension using the appropriate configuration tool.
|
|
77
67
|
|
|
78
|
-
> "
|
|
68
|
+
> "I've saved your Twilio credentials. The voice-call extension can now make and receive calls through Twilio."
|
|
79
69
|
|
|
80
70
|
---
|
|
81
71
|
|
|
82
72
|
## If the user already has Twilio credentials
|
|
83
73
|
|
|
84
|
-
Skip to Step 5 — just ask for the Account SID, Auth Token, and a Twilio phone number with
|
|
74
|
+
Skip to Step 5 — just ask for the Account SID, Auth Token, and a Twilio phone number with Voice capability.
|
|
85
75
|
|
|
86
76
|
---
|
|
87
77
|
|
|
@@ -89,7 +79,8 @@ Skip to Step 5 — just ask for the Account SID, Auth Token, and a Twilio phone
|
|
|
89
79
|
|
|
90
80
|
| Question | Answer |
|
|
91
81
|
|----------|--------|
|
|
92
|
-
| "Is it free?" | The trial includes credit for
|
|
93
|
-
| "Can I
|
|
82
|
+
| "Is it free?" | The trial includes credit for testing. No card required. After that it's pay-as-you-go. |
|
|
83
|
+
| "Can I use Twilio for SMS too?" | Twilio is used for voice calling only in Taskmaster. For SMS verification codes, use Brevo instead — it handles both email and SMS with one API key. |
|
|
94
84
|
| "Where do I find my credentials later?" | Always at **console.twilio.com** — the Account SID and Auth Token are on the main dashboard. |
|
|
95
|
-
| "I already have Twilio but use it for something else" | That's fine — the same credentials work. Just make sure the phone number has
|
|
85
|
+
| "I already have Twilio but use it for something else" | That's fine — the same credentials work. Just make sure the phone number has Voice capability enabled. |
|
|
86
|
+
| "Can I use a different telephony provider?" | Yes — Taskmaster also supports Plivo and Telnyx for voice calling. |
|
|
@@ -1473,9 +1473,9 @@ By default, anyone who opens the public chat can start a conversation immediatel
|
|
|
1473
1473
|
|--------|-------------|---------------|
|
|
1474
1474
|
| **Anonymous** | No verification — visitors chat immediately | Nothing (default) |
|
|
1475
1475
|
| **Email OTP** | Visitors enter their email, receive a one-time code | A [Brevo](https://brevo.com) API key and a verified sender (free, no credit card). The sender address is configured in Brevo, not in Taskmaster. |
|
|
1476
|
-
| **SMS OTP** | Visitors enter their phone number, receive a one-time code | [
|
|
1476
|
+
| **SMS OTP** | Visitors enter their phone number, receive a one-time code | Same [Brevo](https://brevo.com) API key as email, plus prepaid SMS credits in your Brevo account |
|
|
1477
1477
|
|
|
1478
|
-
5. Enter your provider credentials —
|
|
1478
|
+
5. Enter your provider credentials — add the Brevo API key in the **API Keys** section on the Setup page. The same key serves both email and SMS verification. For SMS, purchase SMS credits in your Brevo dashboard.
|
|
1479
1479
|
6. Settings auto-save when you leave each field
|
|
1480
1480
|
|
|
1481
1481
|
Once enabled, visitors must authenticate before they can send their first message. Verified contact details are stored and available to the agent via the `verify_contact` tool, so your assistant knows who it's talking to.
|