@rubytech/create-realagent 1.0.442 → 1.0.443

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rubytech/create-realagent",
3
- "version": "1.0.442",
3
+ "version": "1.0.443",
4
4
  "description": "Install Real Agent — Built for agents. By agents.",
5
5
  "bin": {
6
6
  "create-realagent": "./dist/index.js"
@@ -4480,13 +4480,13 @@ function parsePluginFrontmatter(pluginDir) {
4480
4480
  const tools = parseYamlList("tools");
4481
4481
  const hidden = parseYamlList("hidden");
4482
4482
  const requires = parseYamlList("requires");
4483
- let taskmaster = {};
4483
+ let platform = {};
4484
4484
  const metaMatch = fm.match(/^metadata:\s*(.+)$/m);
4485
4485
  if (metaMatch) {
4486
4486
  try {
4487
4487
  const metadata = JSON.parse(metaMatch[1]);
4488
- if (metadata.taskmaster && typeof metadata.taskmaster === "object") {
4489
- taskmaster = metadata.taskmaster;
4488
+ if (metadata.platform && typeof metadata.platform === "object") {
4489
+ platform = metadata.platform;
4490
4490
  }
4491
4491
  } catch {
4492
4492
  console.warn(`[plugins] ${pluginDir}/PLUGIN.md: invalid metadata JSON`);
@@ -4498,7 +4498,7 @@ function parsePluginFrontmatter(pluginDir) {
4498
4498
  tools,
4499
4499
  hidden,
4500
4500
  requires,
4501
- taskmaster
4501
+ platform
4502
4502
  };
4503
4503
  }
4504
4504
  function assemblePublicPluginContent(pluginDir) {
@@ -4608,15 +4608,15 @@ function loadEmbeddedPlugins(agentType, selectedPlugins, enabledPlugins) {
4608
4608
  for (const dir of dirs) {
4609
4609
  const parsed = parsePluginFrontmatter(dir);
4610
4610
  if (!parsed) continue;
4611
- const { taskmaster } = parsed;
4612
- const embed2 = taskmaster.embed;
4611
+ const { platform } = parsed;
4612
+ const embed2 = platform.embed;
4613
4613
  if (!Array.isArray(embed2) || !embed2.includes(agentType)) {
4614
4614
  if (typeof embed2 === "boolean") {
4615
4615
  console.warn(`[plugins] ${dir}/PLUGIN.md: embed must be an array of agent types, got boolean \u2014 skipping`);
4616
4616
  }
4617
4617
  continue;
4618
4618
  }
4619
- if (taskmaster.optional) {
4619
+ if (platform.optional) {
4620
4620
  const enabled = Array.isArray(enabledPlugins) ? enabledPlugins : [];
4621
4621
  if (!enabled.includes(dir)) {
4622
4622
  console.log(`[plugins] ${dir}: optional plugin not enabled \u2014 skipping embed`);
@@ -4628,7 +4628,7 @@ function loadEmbeddedPlugins(agentType, selectedPlugins, enabledPlugins) {
4628
4628
  const missing = parsed.requires.filter((req) => {
4629
4629
  if (enabled.includes(req)) return false;
4630
4630
  const reqParsed = parsePluginFrontmatter(req);
4631
- if (reqParsed && !reqParsed.taskmaster.optional) return false;
4631
+ if (reqParsed && !reqParsed.platform.optional) return false;
4632
4632
  return true;
4633
4633
  });
4634
4634
  if (missing.length > 0) {
@@ -4772,12 +4772,12 @@ async function buildPluginManifest(enabledPlugins) {
4772
4772
  for (const dir of dirs.sort()) {
4773
4773
  const parsed = parsePluginFrontmatter(dir);
4774
4774
  if (!parsed) continue;
4775
- if (parsed.taskmaster.optional && !enabled.includes(dir)) continue;
4775
+ if (parsed.platform.optional && !enabled.includes(dir)) continue;
4776
4776
  if (parsed.requires.length > 0) {
4777
4777
  const missing = parsed.requires.filter((req) => {
4778
4778
  if (enabled.includes(req)) return false;
4779
4779
  const reqParsed = parsePluginFrontmatter(req);
4780
- return !reqParsed || !!reqParsed.taskmaster.optional;
4780
+ return !reqParsed || !!reqParsed.platform.optional;
4781
4781
  });
4782
4782
  if (missing.length > 0) continue;
4783
4783
  }
@@ -4858,9 +4858,9 @@ ${toolLines.join("\n")}`);
4858
4858
  for (const dir of dirs.sort()) {
4859
4859
  const parsed = parsePluginFrontmatter(dir);
4860
4860
  if (!parsed) continue;
4861
- if (!parsed.taskmaster.optional) continue;
4861
+ if (!parsed.platform.optional) continue;
4862
4862
  if (enabled.includes(dir)) continue;
4863
- if (parsed.taskmaster.always) continue;
4863
+ if (parsed.platform.always) continue;
4864
4864
  let entry = `${dir} \u2014 ${parsed.description}`;
4865
4865
  if (parsed.tools.length > 0) {
4866
4866
  entry += `
@@ -5074,7 +5074,7 @@ function getMcpServers(accountId, enabledPlugins) {
5074
5074
  "whatsapp": {
5075
5075
  command: "node",
5076
5076
  args: [resolve4(PLATFORM_ROOT3, "plugins/whatsapp/mcp/dist/index.js")],
5077
- env: { ACCOUNT_ID: accountId, PLATFORM_ROOT: PLATFORM_ROOT3 }
5077
+ env: { ACCOUNT_ID: accountId, PLATFORM_ROOT: PLATFORM_ROOT3, PLATFORM_PORT: process.env.PORT ?? "19200" }
5078
5078
  },
5079
5079
  "admin": {
5080
5080
  command: "node",
@@ -5123,13 +5123,13 @@ function getMcpServers(accountId, enabledPlugins) {
5123
5123
  for (const dir of dirs) {
5124
5124
  if (servers[dir]) continue;
5125
5125
  const parsed = parsePluginFrontmatter(dir);
5126
- if (!parsed?.taskmaster.optional) continue;
5126
+ if (!parsed?.platform.optional) continue;
5127
5127
  if (!enabledPlugins.includes(dir)) continue;
5128
5128
  if (parsed.requires.length > 0) {
5129
5129
  const missing = parsed.requires.filter((req) => {
5130
5130
  if (enabledPlugins.includes(req)) return false;
5131
5131
  const reqParsed = parsePluginFrontmatter(req);
5132
- return !reqParsed || !!reqParsed.taskmaster.optional;
5132
+ return !reqParsed || !!reqParsed.platform.optional;
5133
5133
  });
5134
5134
  if (missing.length > 0) {
5135
5135
  console.warn(`[plugins] ${dir} MCP: requires [${missing.join(", ")}] not enabled \u2014 skipping`);
@@ -5232,7 +5232,7 @@ function getAdminAllowedTools(enabledPlugins) {
5232
5232
  for (const dir of dirs) {
5233
5233
  if (!enabledPlugins.includes(dir)) continue;
5234
5234
  const parsed = parsePluginFrontmatter(dir);
5235
- if (!parsed?.taskmaster.optional) continue;
5235
+ if (!parsed?.platform.optional) continue;
5236
5236
  for (const toolName of parsed.tools) {
5237
5237
  tools.push(`mcp__${dir}__${toolName}`);
5238
5238
  }
@@ -127,7 +127,7 @@ Connect Maxy to new capabilities by asking — finance tracking, home management
127
127
  2. **Open your browser and set a PIN.** Your PIN protects the admin chat. Only you can manage your Maxy.
128
128
  3. **Connect your Claude account.** Maxy is powered by Claude, Anthropic's AI. You sign up directly with Anthropic and connect via your browser.
129
129
  4. **Start talking.** Tell Maxy about your life, your business, your customers. It learns as you go.
130
- 5. **Access from anywhere.** Connect Telegram for notifications and mobile access. Pro users get their own branded domain via Cloudflare Tunnel. Maxy is also available at maxy.chat (live sales agent) and maxy.bot (technical support for existing customers).
130
+ 5. **Access from anywhere.** Connect WhatsApp or Telegram for notifications and mobile access. Pro users get their own branded domain via Cloudflare Tunnel. Maxy is also available at maxy.chat (live sales agent) and maxy.bot (technical support for existing customers).
131
131
 
132
132
  You're fully operational within 15 minutes. No software to install, no settings to configure, no training to complete. If you can send a text message, you can use Maxy.
133
133
 
@@ -137,7 +137,7 @@ You're fully operational within 15 minutes. No software to install, no settings
137
137
 
138
138
  ### Maxy Solo — for you
139
139
 
140
- One person, one assistant. Scheduling, contacts, tasks, notes, reminders, document generation. Web chat on your local network, plus Telegram when you're out. Email integration for formal documents. One public agent for your personal website or freelancer enquiries. Everything you need to stay on top of your life without another app to manage.
140
+ One person, one assistant. Scheduling, contacts, tasks, notes, reminders, document generation. Web chat on your local network, plus WhatsApp or Telegram when you're out. Email integration for formal documents. One public agent for your personal website or freelancer enquiries. Everything you need to stay on top of your life without another app to manage.
141
141
 
142
142
  ### Maxy Family — for your household
143
143
 
@@ -329,7 +329,11 @@ Price hikes, privacy concerns, and a UX that feels 20 years old. Using Google me
329
329
 
330
330
  ### vs WhatsApp Business
331
331
 
332
- Meta banned AI chatbots on WhatsApp in January 2026. New accounts start with a 250-message daily limit. The rules change without warning. Your business runs on someone else's terms. Maxy runs on yours.
332
+ WhatsApp Business lets you message customers on WhatsApp. Maxy does the same thing but through your own number, with no Meta Business account, no message templates, and no approval process. You scan a QR code and your existing WhatsApp number is connected. Your customers message you as they always have. The difference is that Maxy reads and responds on your behalf, routes conversations to the right agent, enforces access policies, and logs everything to your local CRM — all on your device, not Meta's servers.
333
+
334
+ WhatsApp Business is one channel doing one thing. Maxy is a complete business operating system that happens to include WhatsApp as one of many channels. It also does CRM, invoicing, quoting, scheduling, workflows, proactive briefings, email, Telegram, web chat, custom domains, customer-facing agents, document handling, and web research — all through conversation, all on your premises. WhatsApp Business has no path to any of this.
335
+
336
+ Meta banned AI chatbots on WhatsApp in January 2026, restricted new accounts to 250 messages per day, and changes the rules without warning. None of that affects Maxy — it connects as a linked device on your personal number, not as a Meta-managed bot. Your business runs on your terms, not Meta's.
333
337
 
334
338
  ### vs Claude Desktop (and Cowork)
335
339
 
@@ -421,6 +425,18 @@ Your primary interface. Open a browser on any device — phone, tablet, laptop
421
425
 
422
426
  Connect Telegram for notifications and mobile access. Get notified about customer enquiries, appointment reminders, and task updates on your phone. Maxy supports both an admin bot (for you) and a public bot (for your customers).
423
427
 
428
+ ### WhatsApp
429
+
430
+ Connect your existing WhatsApp number to Maxy — no new number, no Meta Business account, no message templates. You scan a QR code in the admin chat, and Maxy links to your phone as a paired device. Your number stays yours. Your contacts see your name, not a bot.
431
+
432
+ Inbound messages from customers route to your public agent automatically. Messages from your own phone route to your admin agent. You control who gets through — open to everyone, restricted to an allowlist, or gated behind a pairing handshake. Group messages work the same way, with separate policies for which groups the agent responds in and whether it needs to be mentioned first.
433
+
434
+ Multiple WhatsApp accounts are supported. Link a personal number and a business number, and Maxy routes outbound messages through the right one — business number for customer conversations, personal number for your own contacts.
435
+
436
+ Voice notes are supported in both directions. Maxy sends audio as native WhatsApp voice messages, not file attachments. If the connection drops, Maxy reconnects automatically with backoff — and messages sent while offline are recovered when it comes back.
437
+
438
+ Set up through conversation — tell the admin agent "connect WhatsApp" and it walks you through the QR pairing. No setup pages, no configuration files, no command line.
439
+
424
440
  ### Email
425
441
 
426
442
  Maxy gets its own dedicated email address — completely separate from your personal email. It sends quotes, invoices, confirmations, and follow-ups directly to your customers. It reads incoming emails to its own account, extracts verification codes during service setup, and searches its mailbox when you ask. Supports Gmail, Outlook, iCloud, Yahoo, Protonmail, and custom domains. If your business uses a custom domain, Maxy can send from your business address while authenticating through a separate mailbox. Set up through conversation — just tell Maxy the email address and app password.
@@ -565,7 +581,7 @@ Maxy works alongside your existing CRM — it doesn't replace it. Your data live
565
581
 
566
582
  ### What exactly is Maxy?
567
583
 
568
- Maxy is an AI assistant that runs on a small device on your premises — home or office. You talk to it through a web browser or Telegram. It handles admin tasks — scheduling, customer enquiries, reminders, quotes, invoices — so you don't have to.
584
+ Maxy is an AI assistant that runs on a small device on your premises — home or office. You talk to it through a web browser, WhatsApp, or Telegram. It handles admin tasks — scheduling, customer enquiries, reminders, quotes, invoices — so you don't have to.
569
585
 
570
586
  ### Do I need to be technical?
571
587
 
@@ -633,7 +649,7 @@ Maxy needs an internet connection to reach Claude (the AI). If your internet dro
633
649
 
634
650
  ### Can Maxy make phone calls?
635
651
 
636
- Not yet. Voice capability is planned for a future release. Currently, Maxy communicates through web chat, Telegram, and email.
652
+ Not yet. Voice capability is planned for a future release. Currently, Maxy communicates through web chat, WhatsApp, Telegram, and email.
637
653
 
638
654
  ### Can multiple people use Maxy at the same time?
639
655
 
@@ -681,7 +697,7 @@ Yes. Maxy has its own dedicated email address, separate from yours. It sends quo
681
697
 
682
698
  ### Can I access Maxy from outside my home?
683
699
 
684
- Yes. Connect Telegram for mobile access. Pro users also get a custom branded domain (e.g. admin.yourbusiness.com) via Cloudflare Tunnel — accessible from any browser, anywhere. Remote access is always password-protected with rate limiting.
700
+ Yes. Connect WhatsApp or Telegram for mobile access. Pro users also get a custom branded domain (e.g. admin.yourbusiness.com) via Cloudflare Tunnel — accessible from any browser, anywhere. Remote access is always password-protected with rate limiting.
685
701
 
686
702
  ### Does Maxy remember previous conversations?
687
703
 
@@ -23,7 +23,7 @@ Built-in plugins under `$PLATFORM_ROOT/plugins/`:
23
23
  - Enable: read `account.json` via `account-manage`, add the plugin name to the `enabledPlugins` array, write back via `Edit`. Activates the plugin's behaviour embed and MCP server from the next session. Plugins with scheduled behaviour (declared via `lifecycle` in PLUGIN.md frontmatter) are activated automatically by the platform heartbeat within one minute — no separate setup command needed.
24
24
  - Disable: same process, remove the name from the `enabledPlugins` array. Deactivates from the next session. Any scheduled Events owned by the plugin (`sourcePlugin` field) are cancelled automatically by the platform heartbeat.
25
25
  - Core plugins (admin, memory, docs, cloudflare, anthropic) cannot be disabled — they are always active.
26
- - Validate: before enabling, confirm the plugin directory exists under `$PLATFORM_ROOT/plugins/` and its PLUGIN.md has `optional: true` in `metadata.taskmaster`.
26
+ - Validate: before enabling, confirm the plugin directory exists under `$PLATFORM_ROOT/plugins/` and its PLUGIN.md has `optional: true` in `metadata.platform`.
27
27
 
28
28
  ## Premium Plugins
29
29
 
@@ -65,7 +65,7 @@ Present as a `select` field within the agent configuration `form` during creatio
65
65
 
66
66
  ### Plugin Selection
67
67
 
68
- Present available plugins as a `multi-select` component. Selected plugin names are stored in `config.json`. The platform filters embedded plugins per-agent at runtime — only plugins whose `metadata.taskmaster.embed` includes `"public"` are actually embedded.
68
+ Present available plugins as a `multi-select` component. Selected plugin names are stored in `config.json`. The platform filters embedded plugins per-agent at runtime — only plugins whose `metadata.platform.embed` includes `"public"` are actually embedded.
69
69
 
70
70
  Only present plugins from the curated list below. Before presenting, verify each plugin's directory exists under `$PLATFORM_ROOT/plugins/` (premium plugins are only available when delivered). Omit any plugin whose directory is absent.
71
71
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: business-assistant
3
3
  description: "Business assistant for small businesses. Handles customer enquiries, appointment booking, quote formatting, invoice generation, and daily briefings. Responds instantly, triages by urgency, and never lets a message fall through the cracks."
4
- metadata: {"taskmaster":{"always":true,"embed":["admin"],"pluginKey":"business-assistant","optional":true,"recommended":true}}
4
+ metadata: {"platform":{"always":true,"embed":["admin"],"pluginKey":"business-assistant","optional":true,"recommended":true}}
5
5
  ---
6
6
 
7
7
  # Business Assistant
@@ -6,7 +6,7 @@ The **contact record** is the highest-level directory for every customer relatio
6
6
 
7
7
  | Concept | What it is | Storage |
8
8
  |---------|-----------|---------|
9
- | **Contact record** | Structured directory entry (phone, name, pipeline status, address) | `~/.taskmaster/records.json` via `contact_*` tools |
9
+ | **Contact record** | Structured directory entry (phone, name, pipeline status, address) | Neo4j graph via `contact_*` tools |
10
10
  | **User memory** | Freeform narrative, conversation history, media, documents | `memory/users/{phone}/` via `memory_*` tools |
11
11
 
12
12
  The contact record determines the relationship. User memory provides the detail. A memory profile without a contact record is orphaned data. A contact record without memory is a directory entry awaiting context.
@@ -82,7 +82,7 @@ Update the status at each transition. This enables the business owner to see the
82
82
 
83
83
  ## Bot Number Registration
84
84
 
85
- Customers who operate their own bots (e.g. another Taskmaster instance, an automated service) can have those bot phone numbers registered on their contact record. This enables inbound bot detection — when a message arrives from a registered bot number, the system identifies it as automated rather than human.
85
+ Customers who operate their own bots (e.g. an automated service) can have those bot phone numbers registered on their contact record. This enables inbound bot detection — when a message arrives from a registered bot number, the system identifies it as automated rather than human.
86
86
 
87
87
  **Registering a bot number:** Use `contact_update` to set a `bot_number` field on the customer's contact record. The value is the bot's phone number in E.164 format. If a customer has multiple bots, use `bot_number_1`, `bot_number_2`, etc.
88
88
 
@@ -9,7 +9,7 @@ tools:
9
9
  - contact-list
10
10
  always: false
11
11
  embed: false
12
- metadata: {"taskmaster":{"optional":true,"recommended":true}}
12
+ metadata: {"platform":{"optional":true,"recommended":true}}
13
13
  ---
14
14
 
15
15
  # Contacts
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: docs
3
3
  description: "Comprehensive user guide and platform documentation for Maxy. Load references when users ask how-to, setup, or troubleshooting questions. Also contains platform architecture references for admin use."
4
- metadata: {"taskmaster":{"always":true,"embed":["public","admin"],"pluginKey":"docs"}}
4
+ metadata: {"platform":{"always":true,"embed":["public","admin"],"pluginKey":"docs"}}
5
5
  ---
6
6
 
7
7
  # Maxy Documentation
@@ -13,7 +13,7 @@ tools:
13
13
  - email-auto-respond-config
14
14
  always: false
15
15
  embed: ["admin"]
16
- metadata: {"taskmaster":{"optional":true,"recommended":true}}
16
+ metadata: {"platform":{"optional":true,"recommended":true}}
17
17
  ---
18
18
 
19
19
  # Email
@@ -3,7 +3,7 @@ name: projects
3
3
  description: "Structured project execution. Phased sprints, operational investigations, deliverable reviews, and retrospectives — backed by graph tasks with dependency tracking and health signals."
4
4
  requires:
5
5
  - tasks
6
- metadata: {"taskmaster":{"always":false,"embed":["admin"],"pluginKey":"projects","optional":true,"recommended":true}}
6
+ metadata: {"platform":{"always":false,"embed":["admin"],"pluginKey":"projects","optional":true,"recommended":true}}
7
7
  ---
8
8
 
9
9
  # Projects
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: sales
3
3
  description: "Unified sales plugin for Maxy Phase 0. Detects buying signals, closes sales, frames value, handles objections, and captures waitlist signups. Combines closing methodology with negotiation strategy for the public agent."
4
- metadata: {"taskmaster":{"always":true,"embed":["public"],"pluginKey":"sales","optional":true}}
4
+ metadata: {"platform":{"always":true,"embed":["public"],"pluginKey":"sales","optional":true}}
5
5
  ---
6
6
 
7
7
  # Sales
@@ -10,7 +10,7 @@ tools:
10
10
  - time-resolve
11
11
  always: false
12
12
  embed: false
13
- metadata: {"taskmaster":{"optional":true,"recommended":true}}
13
+ metadata: {"platform":{"optional":true,"recommended":true}}
14
14
  ---
15
15
 
16
16
  # Scheduling
@@ -11,7 +11,7 @@ tools:
11
11
  - task-ready
12
12
  - session-list
13
13
  - session-name
14
- metadata: {"taskmaster":{"always":false,"embed":false,"pluginKey":"tasks","optional":true,"recommended":true}}
14
+ metadata: {"platform":{"always":false,"embed":[],"pluginKey":"tasks","optional":true,"recommended":true}}
15
15
  ---
16
16
 
17
17
  # Tasks
@@ -11,7 +11,7 @@ tools:
11
11
  always: false
12
12
  embed: false
13
13
  lifecycle: {"activate": "waitlist-setup", "heal": "waitlist-heal"}
14
- metadata: {"taskmaster":{"optional":true}}
14
+ metadata: {"platform":{"optional":true}}
15
15
  ---
16
16
 
17
17
  # Waitlist
@@ -7,6 +7,7 @@ tools:
7
7
  - whatsapp-status
8
8
  - whatsapp-disconnect
9
9
  - whatsapp-send
10
+ metadata: {"platform":{"embed":["admin"]}}
10
11
  ---
11
12
 
12
13
  # WhatsApp
@@ -7,7 +7,10 @@
7
7
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
8
8
  import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
9
9
  import { z } from "zod";
10
- const PLATFORM_PORT = 19201;
10
+ const PLATFORM_PORT = process.env.PLATFORM_PORT;
11
+ if (!PLATFORM_PORT) {
12
+ throw new Error("PLATFORM_PORT environment variable is required — set by getMcpServers() in claude-agent.ts");
13
+ }
11
14
  const BASE_URL = `http://127.0.0.1:${PLATFORM_PORT}`;
12
15
  const server = new McpServer({
13
16
  name: "maxy-whatsapp",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  # WhatsApp Channels
2
2
 
3
- Taskmaster supports two WhatsApp connection methods via Baileys multi-account:
3
+ The platform supports two WhatsApp connection methods via Baileys multi-account:
4
4
 
5
5
  | Provider | Use Case | Connection |
6
6
  |----------|----------|------------|
@@ -16,7 +16,7 @@ Most users will have two Baileys accounts (two phone numbers, both linked via QR
16
16
  | **Personal** | Admin self-chat, groups, personal contacts |
17
17
  | **Business** | Customer-facing DMs (can be WhatsApp Business app or regular WhatsApp) |
18
18
 
19
- WhatsApp Business **app** vs personal WhatsApp is irrelevant from Taskmaster's perspective — Baileys connects to both identically via QR. The Business app just adds business profile, catalog, and labels in the phone UI.
19
+ WhatsApp Business **app** vs personal WhatsApp is irrelevant from the platform's perspective — Baileys connects to both identically via QR. The Business app just adds business profile, catalog, and labels in the phone UI.
20
20
 
21
21
  **Linked device note:** The primary phone must come online periodically (~every 14 days) to keep the Baileys linked-device session alive. It does NOT need to be on 24/7.
22
22
 
@@ -79,19 +79,19 @@ Cloud API requirements: Meta Business Account, System User Access Token, Cloudfl
79
79
 
80
80
  Baileys uses the same WebSocket protocol as WhatsApp Web/Desktop linked devices. Meta cannot blanket-block it without breaking their own official clients for hundreds of millions of users.
81
81
 
82
- **Responsibility model:** Taskmaster and its other users are not at risk — bans are per-number, targeting individual accounts for abusive behaviour. Users should be told: *"Don't use this for bulk messaging or spam. Meta may ban your number for abusive patterns. Normal business conversations are fine."*
82
+ **Responsibility model:** The platform and its other users are not at risk — bans are per-number, targeting individual accounts for abusive behaviour. Users should be told: *"Don't use this for bulk messaging or spam. Meta may ban your number for abusive patterns. Normal business conversations are fine."*
83
83
 
84
84
  - Normal conversational use (replies, scheduling, quotes) = effectively zero risk
85
85
  - Ack reactions, typing indicators, and reply delays mimic real linked-device behaviour
86
86
  - Risk increases only with spam patterns: mass messaging, rapid-fire sends to unknown contacts, broadcasting
87
- - If a user's number is banned, it's between them and Meta — other Taskmaster users are unaffected
87
+ - If a user's number is banned, it's between them and Meta — other users are unaffected
88
88
  - Cloud API code is available as a fallback for enterprise users who want official Meta support
89
89
 
90
90
  ## WhatsApp Outbound Policy — No Automated Broadcasts
91
91
 
92
92
  **WhatsApp's Terms of Service explicitly prohibit automated bulk/broadcast messaging.** This applies to both Baileys and Cloud API connections. Violations result in permanent number bans with no appeal.
93
93
 
94
- Taskmaster enforces this at multiple levels:
94
+ The platform enforces this at multiple levels:
95
95
 
96
96
  1. **Broadcast action blocked** — The `message broadcast` action (which sends to multiple targets) always excludes WhatsApp as a target channel, regardless of config. This is a hard block that cannot be overridden.
97
97
  2. **Agent tool suppression** — When an agent session is on WhatsApp, the `broadcast` action is removed from the message tool schema entirely. Agents cannot invoke it.
@@ -154,7 +154,7 @@ The Public Agent Settings modal includes a **Model** dropdown that sets the defa
154
154
  **How it works:**
155
155
  1. UI resolves the selected workspace's public agent ID (e.g. `joes-coffee-public`)
156
156
  2. On change, writes the model to config via `writeAgentModelToConfig` (two params: agentId + model)
157
- 3. Config stored in `agents.list[{agentId}].model` in `~/.taskmaster/taskmaster.json`
157
+ 3. Config stored in `agents.list[{agentId}].model` in `account.json`
158
158
  4. No gateway restart needed — `agents` prefix has `kind: "none"` reload rule (read dynamically)
159
159
 
160
160
  **Runtime model resolution — config is the single source of truth.** Every model read (LLM API call, `/status` display, chat UI initial load) calls `loadConfig()` fresh and resolves via `resolveDefaultModelForAgent({ cfg, agentId })`. There are no session-level model overrides — the model is always read from config at the point of use.
@@ -182,7 +182,7 @@ The Public Agent Settings modal includes a **Thinking** dropdown that sets the d
182
182
  **How it works:**
183
183
  1. UI resolves the selected workspace's public agent ID (e.g. `joes-coffee-public`)
184
184
  2. On change, writes the thinking level to config via `writeAgentThinkingToConfig` (two params: agentId + thinkingLevel)
185
- 3. Config stored in `agents.list[{agentId}].thinkingLevel` in `~/.taskmaster/taskmaster.json`
185
+ 3. Config stored in `agents.list[{agentId}].thinkingLevel` in `account.json`
186
186
  4. No gateway restart needed — `agents` prefix has `kind: "none"` reload rule (read dynamically)
187
187
 
188
188
  **Runtime thinking resolution — config is the single source of truth.** Every thinking level read calls `loadConfig()` fresh and resolves via `resolveThinkingDefault({ cfg, provider, model, catalog, agentId })`. There are no session-level thinking overrides — thinking is always read from config at the point of use.
@@ -254,22 +254,19 @@ Baileys stores WhatsApp session credentials (linked-device state) on disk. The a
254
254
  | Priority | Path | When |
255
255
  |----------|------|------|
256
256
  | 1. Explicit config | `channels.whatsapp.accounts.{id}.authDir` | User overrides in config |
257
- | 2. Default | `~/.taskmaster/credentials/whatsapp/{accountId}/` | Normal operation |
258
- | 3. Legacy fallback | `~/.taskmaster/credentials/` | Old single-account installs (only if creds exist here and not at default path) |
259
-
260
- The state dir (`~/.taskmaster/`) can be overridden via `TASKMASTER_STATE_DIR` env var; the credentials subdirectory via `TASKMASTER_OAUTH_DIR`.
257
+ | 2. Default | `~/.maxy/credentials/whatsapp/{accountId}/` | Normal operation |
261
258
 
262
259
  **Diagnostics on the Pi:**
263
260
 
264
261
  ```bash
265
262
  # List all WhatsApp auth directories
266
- ls -la ~/.taskmaster/credentials/whatsapp/
263
+ ls -la ~/.maxy/credentials/whatsapp/
267
264
 
268
265
  # Check if credentials exist for an account
269
- ls ~/.taskmaster/credentials/whatsapp/default/creds.json
266
+ ls ~/.maxy/credentials/whatsapp/default/creds.json
270
267
 
271
268
  # Check credential freshness (should be recent if just linked)
272
- stat ~/.taskmaster/credentials/whatsapp/default/creds.json
269
+ stat ~/.maxy/credentials/whatsapp/default/creds.json
273
270
  ```
274
271
 
275
272
  If `creds.json` is missing, the session was never linked or was deleted. If it exists but WhatsApp rejects it (401), the session was invalidated (cleared from phone, expired after 14 days offline, or account banned).
@@ -10,7 +10,7 @@ tools:
10
10
  - workflow-validate
11
11
  - workflow-execute
12
12
  - workflow-runs
13
- metadata: {"taskmaster":{"always":false,"embed":false,"pluginKey":"workflows","optional":true,"recommended":true}}
13
+ metadata: {"platform":{"always":false,"embed":[],"pluginKey":"workflows","optional":true,"recommended":true}}
14
14
  ---
15
15
 
16
16
  # Workflows