@rubytech/taskmaster 1.11.0 → 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 +81 -23
- 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 +3 -3
- 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,12 +1,15 @@
|
|
|
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
|
+
|
|
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**.
|
|
4
6
|
|
|
5
7
|
---
|
|
6
8
|
|
|
7
9
|
## Prerequisites
|
|
8
10
|
|
|
9
11
|
- User has an email address they want OTP emails to come from (e.g. their business email)
|
|
12
|
+
- User has a mobile phone number (required by Brevo for account activation)
|
|
10
13
|
- Chat channel for sending instructions
|
|
11
14
|
|
|
12
15
|
---
|
|
@@ -21,50 +24,80 @@ Tell the user what Brevo is and why they need it:
|
|
|
21
24
|
|
|
22
25
|
## Step 2: Create a Brevo account
|
|
23
26
|
|
|
24
|
-
> "Go to **brevo.com** in your browser and click **Sign
|
|
27
|
+
> "Go to **brevo.com** in your browser and click **Sign Up Free** in the top-right corner.
|
|
25
28
|
>
|
|
26
29
|
> You'll need to enter:
|
|
27
|
-
> - Your email address
|
|
28
|
-
> - A password
|
|
30
|
+
> - Your **email address**
|
|
31
|
+
> - A **password**
|
|
32
|
+
>
|
|
33
|
+
> You can also sign up with Google or Apple if that's easier.
|
|
34
|
+
>
|
|
35
|
+
> After clicking **Create an account**, Brevo will send a confirmation email. Click the link in it to verify your account.
|
|
29
36
|
>
|
|
30
|
-
> Brevo will
|
|
37
|
+
> **Next, Brevo will ask for your mobile phone number.** This is for account activation only — they send a text to verify you're a real person. Enter your number and the code they text you.
|
|
38
|
+
>
|
|
39
|
+
> Let me know when you're past that and logged in."
|
|
40
|
+
|
|
41
|
+
Wait for the user to confirm they've completed signup and mobile verification.
|
|
42
|
+
|
|
43
|
+
### Getting past the onboarding
|
|
31
44
|
|
|
32
|
-
|
|
45
|
+
After signup, Brevo lands on a **"Getting Started"** page that tries to walk you through creating contacts, campaigns, and other marketing features. The user does NOT need any of this.
|
|
33
46
|
|
|
34
|
-
If the user
|
|
47
|
+
If the user mentions being on a "Getting Started" page, or asks about contacts/campaigns/templates:
|
|
35
48
|
|
|
36
|
-
> "
|
|
49
|
+
> "You can skip all of that — it's for email marketing campaigns, which we don't need. We just need two things from Brevo: a verified sender address and an API key. Both are in the account settings. Let me show you where."
|
|
50
|
+
|
|
51
|
+
If the user is asked onboarding questions (company name, team size, etc.):
|
|
52
|
+
|
|
53
|
+
> "Just fill in your business name and pick whatever options feel right — those are for Brevo's records and don't affect anything we're doing."
|
|
37
54
|
|
|
38
55
|
## Step 3: Verify a sender email address
|
|
39
56
|
|
|
40
57
|
This determines what email address OTP codes come from. Brevo sends a 6-digit code to the email — no DNS records needed.
|
|
41
58
|
|
|
59
|
+
**Navigation: Settings page (gear icon) → Organization settings → Senders, domains, IPs.**
|
|
60
|
+
|
|
42
61
|
> "Now we need to verify the email address that verification codes will be sent from. This is what your visitors will see in their inbox.
|
|
43
62
|
>
|
|
44
|
-
> 1. In the
|
|
45
|
-
> 2.
|
|
46
|
-
> 3. Click **Add
|
|
63
|
+
> 1. In the **top-right toolbar**, click the **gear icon** (⚙️) to open **Settings**
|
|
64
|
+
> 2. In the Settings left sidebar, under **Organization settings**, click **Senders, domains, IPs**
|
|
65
|
+
> 3. Click the **Add sender** button (top-right of the page)
|
|
47
66
|
> 4. Fill in:
|
|
48
67
|
> - **From Name** — your business name (e.g. "Acme Plumbing")
|
|
49
68
|
> - **From Email** — the email you want codes to come from (your business email works)
|
|
50
|
-
> 5. Click **
|
|
69
|
+
> 5. Click **Add sender**
|
|
70
|
+
> 6. A popup will appear saying **"Authenticate your domain now?"** — you have two options:
|
|
71
|
+
> - **"Do it later"** — skip domain authentication. Sender verification alone is enough to send verification codes. Choose this if you don't own the email domain or want the simplest setup.
|
|
72
|
+
> - **"Authenticate domain"** — lets Brevo's partner (Entri) automatically add DKIM and DMARC records to your domain. This improves email deliverability and makes your emails fully compliant with Gmail/Yahoo/Microsoft requirements. Choose this if you own the domain and want more robust delivery. Entri will ask you to log in to your domain provider and it handles the DNS records automatically — no technical knowledge needed.
|
|
51
73
|
>
|
|
52
|
-
> Brevo will send a **6-digit code** to
|
|
74
|
+
> Either way, Brevo will send a **6-digit code** to your email address. Check your inbox (and spam folder), enter the code, and click **Verify**. Let me know when it's done."
|
|
75
|
+
|
|
76
|
+
If the user says they can't find it:
|
|
77
|
+
|
|
78
|
+
> "In the top-right of the Brevo dashboard, there's a toolbar with several small icons. Click the **gear icon** (⚙️) — it should be between the help icon and the notification bell. That opens the Settings page. Then look in the left sidebar for **Senders, domains, IPs** under the **Organization settings** section."
|
|
79
|
+
|
|
80
|
+
**Do NOT direct users to "Transactional" in the main dashboard sidebar or to "Campaigns".** Those are marketing features, not what they need.
|
|
53
81
|
|
|
54
82
|
Wait for the user to confirm.
|
|
55
83
|
|
|
56
84
|
## Step 4: Get an API key
|
|
57
85
|
|
|
86
|
+
**Navigation: same Settings page → Organization settings → SMTP & API.**
|
|
87
|
+
|
|
58
88
|
> "Almost done. Now we need an API key:
|
|
59
89
|
>
|
|
60
|
-
> 1.
|
|
61
|
-
> 2. Click **
|
|
62
|
-
> 3. Click
|
|
63
|
-
> 4.
|
|
64
|
-
> 5.
|
|
65
|
-
> 6. Click **Generate**
|
|
90
|
+
> 1. You should still be on the Settings page. In the left sidebar under **Organization settings**, click **SMTP & API**
|
|
91
|
+
> 2. Click the **API keys & MCP** tab (not the SMTP tab)
|
|
92
|
+
> 3. Click **Generate a new API key**
|
|
93
|
+
> 4. Give it a name like **Taskmaster**
|
|
94
|
+
> 5. Click **Generate**
|
|
66
95
|
>
|
|
67
|
-
> You'll see the API key — it starts with **xkeysib-** and is quite long. **Copy it now
|
|
96
|
+
> You'll see the API key — it starts with **xkeysib-** and is quite long. **Copy it now** — Brevo only shows it once. If you lose it, you'll need to generate a new one. Send me the key."
|
|
97
|
+
|
|
98
|
+
If the user navigated away from Settings:
|
|
99
|
+
|
|
100
|
+
> "Click the **gear icon** (⚙️) in the top-right toolbar to get back to Settings, then click **SMTP & API** in the left sidebar."
|
|
68
101
|
|
|
69
102
|
Wait for the user to send the API key.
|
|
70
103
|
|
|
@@ -86,6 +119,14 @@ The key is applied immediately — no restart needed. Confirm to the user:
|
|
|
86
119
|
|
|
87
120
|
That's it. No further configuration is needed in Taskmaster — the verified sender address is detected automatically from Brevo.
|
|
88
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
|
+
|
|
89
130
|
---
|
|
90
131
|
|
|
91
132
|
## If the user already has a Brevo account
|
|
@@ -96,7 +137,20 @@ Check if they have a verified sender:
|
|
|
96
137
|
|
|
97
138
|
If yes, skip to Step 4. If they're unsure:
|
|
98
139
|
|
|
99
|
-
> "
|
|
140
|
+
> "Click the **gear icon** (⚙️) in the top-right toolbar to open Settings. Then click **Senders, domains, IPs** in the left sidebar. Check if there's a verified sender listed. If not, we'll set one up."
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Troubleshooting
|
|
145
|
+
|
|
146
|
+
| Problem | Solution |
|
|
147
|
+
|---------|----------|
|
|
148
|
+
| Can't find Senders or SMTP & API | Click the **gear icon** (⚙️) in the top-right toolbar to open the Settings page. Both options are in the left sidebar under **Organization settings**. |
|
|
149
|
+
| Landed on "Getting Started" or campaign builder | Ignore it — click the **gear icon** (⚙️) in the top-right toolbar to go straight to Settings. |
|
|
150
|
+
| "Transactional" page shows SMTP settings | Wrong place — that's in the main dashboard, not Settings. Click the **gear icon** (⚙️) in the top-right toolbar, then **SMTP & API** in the Settings sidebar. |
|
|
151
|
+
| Clicked "Authenticate domain" by mistake | If you end up on a Domains page or see DNS/Entri prompts, click **Cancel** or close the modal, then click the **Senders** tab to get back to sender verification. |
|
|
152
|
+
| Mobile verification code not arriving | Wait a minute and try again. Check you entered the right country code. Some VoIP numbers don't work — use a real mobile number. |
|
|
153
|
+
| Can't find the free plan | On brevo.com/pricing, the free tier is the green banner at the top of the page ("Free forever, no credit card needed"). Click **Sign up free** there. |
|
|
100
154
|
|
|
101
155
|
---
|
|
102
156
|
|
|
@@ -105,9 +159,13 @@ If yes, skip to Step 4. If they're unsure:
|
|
|
105
159
|
| Question | Answer |
|
|
106
160
|
|----------|--------|
|
|
107
161
|
| "Is it free?" | Yes — 300 emails per day, forever. No credit card required. For verification codes, that's more than enough. |
|
|
162
|
+
| "Why do they need my phone number?" | Brevo requires a mobile number for account activation — it's a one-time verification to prevent spam accounts. They won't call or text you after that. |
|
|
108
163
|
| "Can I use my Gmail/Outlook address?" | Yes, as long as you verify it by entering the 6-digit code Brevo sends to it. |
|
|
109
164
|
| "Will emails go to spam?" | OTP emails are solicited (the user just clicked 'send me a code'), so they almost always reach the inbox. If a visitor doesn't see it, tell them to check spam. |
|
|
110
|
-
| "I lost my API key" |
|
|
165
|
+
| "I lost my API key" | Click the gear icon (⚙️) in the top-right toolbar → SMTP & API → API keys & MCP tab, and generate a new one. |
|
|
111
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. |
|
|
112
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. |
|
|
113
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. |
|
|
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.
|