@rubytech/create-maxy 1.0.0

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.
Files changed (181) hide show
  1. package/dist/index.js +428 -0
  2. package/package.json +31 -0
  3. package/payload/maxy/.env.example +12 -0
  4. package/payload/maxy/app/admin/components/ActivityTimeline.tsx +348 -0
  5. package/payload/maxy/app/admin/components/MarkdownMessage.tsx +40 -0
  6. package/payload/maxy/app/api/admin/chat/route.ts +72 -0
  7. package/payload/maxy/app/api/admin/logs/route.ts +40 -0
  8. package/payload/maxy/app/api/admin/session/route.ts +74 -0
  9. package/payload/maxy/app/api/chat/route.ts +72 -0
  10. package/payload/maxy/app/api/health/route.ts +26 -0
  11. package/payload/maxy/app/api/onboarding/claude-auth/route.ts +216 -0
  12. package/payload/maxy/app/api/onboarding/set-pin/route.ts +44 -0
  13. package/payload/maxy/app/api/session/route.ts +51 -0
  14. package/payload/maxy/app/api/telegram/webhook/route.ts +107 -0
  15. package/payload/maxy/app/apple-icon.png +0 -0
  16. package/payload/maxy/app/bot/page.tsx +373 -0
  17. package/payload/maxy/app/favicon.ico +0 -0
  18. package/payload/maxy/app/globals.css +1681 -0
  19. package/payload/maxy/app/layout.tsx +58 -0
  20. package/payload/maxy/app/lib/claude-agent.ts +503 -0
  21. package/payload/maxy/app/og/layout.tsx +15 -0
  22. package/payload/maxy/app/og/page.tsx +252 -0
  23. package/payload/maxy/app/page.tsx +594 -0
  24. package/payload/maxy/app/privacy/page.tsx +72 -0
  25. package/payload/maxy/app/public/page.tsx +266 -0
  26. package/payload/maxy/next.config.mjs +26 -0
  27. package/payload/maxy/package-lock.json +2198 -0
  28. package/payload/maxy/package.json +25 -0
  29. package/payload/maxy/proxy.ts +41 -0
  30. package/payload/maxy/public/brand/claude.png +0 -0
  31. package/payload/maxy/public/brand/maxy-black.png +0 -0
  32. package/payload/maxy/public/brand/maxy.png +0 -0
  33. package/payload/maxy/public/favicon.ico +0 -0
  34. package/payload/maxy/public/og-landscape.png +0 -0
  35. package/payload/maxy/public/og-portrait.png +0 -0
  36. package/payload/maxy/public/og-square.png +0 -0
  37. package/payload/maxy/public/pi-5.jpg +0 -0
  38. package/payload/maxy/public/robots.txt +5 -0
  39. package/payload/maxy/tsconfig.json +41 -0
  40. package/payload/maxy/tsconfig.tsbuildinfo +1 -0
  41. package/payload/maxy/ui.md +28 -0
  42. package/payload/platform/config/cloudflared.yml +17 -0
  43. package/payload/platform/knowledge/maxy.md +161 -0
  44. package/payload/platform/neo4j/schema.cypher +108 -0
  45. package/payload/platform/package-lock.json +1835 -0
  46. package/payload/platform/package.json +17 -0
  47. package/payload/platform/plugins/admin/PLUGIN.md +24 -0
  48. package/payload/platform/plugins/admin/hooks/pre-tool-use.sh +56 -0
  49. package/payload/platform/plugins/admin/hooks/session-start.sh +20 -0
  50. package/payload/platform/plugins/admin/mcp/dist/index.d.ts +2 -0
  51. package/payload/platform/plugins/admin/mcp/dist/index.d.ts.map +1 -0
  52. package/payload/platform/plugins/admin/mcp/dist/index.js +149 -0
  53. package/payload/platform/plugins/admin/mcp/dist/index.js.map +1 -0
  54. package/payload/platform/plugins/admin/mcp/package.json +18 -0
  55. package/payload/platform/plugins/anthropic/PLUGIN.md +30 -0
  56. package/payload/platform/plugins/anthropic/references/setup-guide.md +146 -0
  57. package/payload/platform/plugins/business-assistant/PLUGIN.md +46 -0
  58. package/payload/platform/plugins/business-assistant/references/crm.md +112 -0
  59. package/payload/platform/plugins/business-assistant/references/document-management.md +96 -0
  60. package/payload/platform/plugins/business-assistant/references/escalation.md +126 -0
  61. package/payload/platform/plugins/business-assistant/references/invoicing.md +163 -0
  62. package/payload/platform/plugins/business-assistant/references/quoting.md +56 -0
  63. package/payload/platform/plugins/business-assistant/references/scheduling.md +127 -0
  64. package/payload/platform/plugins/cloudflare/PLUGIN.md +31 -0
  65. package/payload/platform/plugins/cloudflare/mcp/dist/index.d.ts +2 -0
  66. package/payload/platform/plugins/cloudflare/mcp/dist/index.d.ts.map +1 -0
  67. package/payload/platform/plugins/cloudflare/mcp/dist/index.js +174 -0
  68. package/payload/platform/plugins/cloudflare/mcp/dist/index.js.map +1 -0
  69. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts +45 -0
  70. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.d.ts.map +1 -0
  71. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js +256 -0
  72. package/payload/platform/plugins/cloudflare/mcp/dist/lib/cloudflared.js.map +1 -0
  73. package/payload/platform/plugins/cloudflare/mcp/package.json +18 -0
  74. package/payload/platform/plugins/cloudflare/references/setup-guide.md +110 -0
  75. package/payload/platform/plugins/contacts/PLUGIN.md +18 -0
  76. package/payload/platform/plugins/contacts/mcp/dist/index.d.ts +2 -0
  77. package/payload/platform/plugins/contacts/mcp/dist/index.d.ts.map +1 -0
  78. package/payload/platform/plugins/contacts/mcp/dist/index.js +182 -0
  79. package/payload/platform/plugins/contacts/mcp/dist/index.js.map +1 -0
  80. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.d.ts +5 -0
  81. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.d.ts.map +1 -0
  82. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js +34 -0
  83. package/payload/platform/plugins/contacts/mcp/dist/lib/neo4j.js.map +1 -0
  84. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts +19 -0
  85. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.d.ts.map +1 -0
  86. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js +68 -0
  87. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-create.js.map +1 -0
  88. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.d.ts +22 -0
  89. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.d.ts.map +1 -0
  90. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js +46 -0
  91. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-list.js.map +1 -0
  92. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts +20 -0
  93. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.d.ts.map +1 -0
  94. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js +56 -0
  95. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-lookup.js.map +1 -0
  96. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.d.ts +13 -0
  97. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.d.ts.map +1 -0
  98. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.js +54 -0
  99. package/payload/platform/plugins/contacts/mcp/dist/tools/contact-update.js.map +1 -0
  100. package/payload/platform/plugins/contacts/mcp/package.json +19 -0
  101. package/payload/platform/plugins/documents/PLUGIN.md +12 -0
  102. package/payload/platform/plugins/documents/mcp/dist/index.d.ts +2 -0
  103. package/payload/platform/plugins/documents/mcp/dist/index.d.ts.map +1 -0
  104. package/payload/platform/plugins/documents/mcp/dist/index.js +82 -0
  105. package/payload/platform/plugins/documents/mcp/dist/index.js.map +1 -0
  106. package/payload/platform/plugins/documents/mcp/package.json +20 -0
  107. package/payload/platform/plugins/memory/PLUGIN.md +17 -0
  108. package/payload/platform/plugins/memory/mcp/dist/index.d.ts +2 -0
  109. package/payload/platform/plugins/memory/mcp/dist/index.d.ts.map +1 -0
  110. package/payload/platform/plugins/memory/mcp/dist/index.js +164 -0
  111. package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -0
  112. package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts +3 -0
  113. package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.d.ts.map +1 -0
  114. package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js +29 -0
  115. package/payload/platform/plugins/memory/mcp/dist/lib/embeddings.js.map +1 -0
  116. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts +5 -0
  117. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.d.ts.map +1 -0
  118. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js +34 -0
  119. package/payload/platform/plugins/memory/mcp/dist/lib/neo4j.js.map +1 -0
  120. package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts +8 -0
  121. package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.d.ts.map +1 -0
  122. package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js +71 -0
  123. package/payload/platform/plugins/memory/mcp/dist/tools/memory-reindex.js.map +1 -0
  124. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts +24 -0
  125. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts.map +1 -0
  126. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +125 -0
  127. package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -0
  128. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts +18 -0
  129. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -0
  130. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +56 -0
  131. package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -0
  132. package/payload/platform/plugins/memory/mcp/package.json +19 -0
  133. package/payload/platform/plugins/sales/PLUGIN.md +65 -0
  134. package/payload/platform/plugins/sales/references/close-tracking.md +76 -0
  135. package/payload/platform/plugins/sales/references/closing-framework.md +108 -0
  136. package/payload/platform/plugins/sales/references/comparisons.md +99 -0
  137. package/payload/platform/plugins/sales/references/competitive-positioning.md +51 -0
  138. package/payload/platform/plugins/sales/references/faq.md +62 -0
  139. package/payload/platform/plugins/sales/references/objection-handling.md +157 -0
  140. package/payload/platform/plugins/sales/references/pricing.md +71 -0
  141. package/payload/platform/plugins/sales/references/waitlist.md +23 -0
  142. package/payload/platform/plugins/scheduling/PLUGIN.md +12 -0
  143. package/payload/platform/plugins/scheduling/mcp/dist/index.d.ts +2 -0
  144. package/payload/platform/plugins/scheduling/mcp/dist/index.d.ts.map +1 -0
  145. package/payload/platform/plugins/scheduling/mcp/dist/index.js +13 -0
  146. package/payload/platform/plugins/scheduling/mcp/dist/index.js.map +1 -0
  147. package/payload/platform/plugins/scheduling/mcp/package.json +18 -0
  148. package/payload/platform/plugins/telegram/PLUGIN.md +31 -0
  149. package/payload/platform/plugins/telegram/mcp/dist/index.d.ts +2 -0
  150. package/payload/platform/plugins/telegram/mcp/dist/index.d.ts.map +1 -0
  151. package/payload/platform/plugins/telegram/mcp/dist/index.js +101 -0
  152. package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -0
  153. package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.d.ts +27 -0
  154. package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.d.ts.map +1 -0
  155. package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.js +41 -0
  156. package/payload/platform/plugins/telegram/mcp/dist/lib/telegram.js.map +1 -0
  157. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.d.ts +16 -0
  158. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.d.ts.map +1 -0
  159. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js +62 -0
  160. package/payload/platform/plugins/telegram/mcp/dist/tools/message-history.js.map +1 -0
  161. package/payload/platform/plugins/telegram/mcp/dist/tools/message.d.ts +20 -0
  162. package/payload/platform/plugins/telegram/mcp/dist/tools/message.d.ts.map +1 -0
  163. package/payload/platform/plugins/telegram/mcp/dist/tools/message.js +34 -0
  164. package/payload/platform/plugins/telegram/mcp/dist/tools/message.js.map +1 -0
  165. package/payload/platform/plugins/telegram/mcp/package.json +19 -0
  166. package/payload/platform/plugins/telegram/references/setup-guide.md +50 -0
  167. package/payload/platform/plugins/web/PLUGIN.md +12 -0
  168. package/payload/platform/plugins/web/mcp/dist/index.d.ts +2 -0
  169. package/payload/platform/plugins/web/mcp/dist/index.d.ts.map +1 -0
  170. package/payload/platform/plugins/web/mcp/dist/index.js +12 -0
  171. package/payload/platform/plugins/web/mcp/dist/index.js.map +1 -0
  172. package/payload/platform/plugins/web/mcp/package.json +18 -0
  173. package/payload/platform/scripts/seed-neo4j.sh +73 -0
  174. package/payload/platform/scripts/setup.sh +177 -0
  175. package/payload/platform/scripts/start.sh +62 -0
  176. package/payload/platform/templates/account.json +4 -0
  177. package/payload/platform/templates/agents/admin/IDENTITY.md +28 -0
  178. package/payload/platform/templates/agents/admin/SOUL.md +1 -0
  179. package/payload/platform/templates/agents/public/IDENTITY.md +21 -0
  180. package/payload/platform/templates/agents/public/SOUL.md +1 -0
  181. package/payload/platform/tsconfig.base.json +18 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-search.js","sourceRoot":"","sources":["../../src/tools/memory-search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ interface WriteParams {
2
+ labels: string[];
3
+ properties: Record<string, unknown>;
4
+ accountId?: string;
5
+ relationships?: Array<{
6
+ type: string;
7
+ direction: "outgoing" | "incoming";
8
+ targetNodeId: string;
9
+ }>;
10
+ }
11
+ interface WriteResult {
12
+ nodeId: string;
13
+ labels: string[];
14
+ created: boolean;
15
+ }
16
+ export declare function memoryWrite(params: WriteParams): Promise<WriteResult>;
17
+ export {};
18
+ //# sourceMappingURL=memory-write.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-write.d.ts","sourceRoot":"","sources":["../../src/tools/memory-write.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,UAAU,GAAG,UAAU,CAAC;QACnC,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC,CAAC;CACJ;AAED,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAoD3E"}
@@ -0,0 +1,56 @@
1
+ import { getSession } from "../lib/neo4j.js";
2
+ import { embed } from "../lib/embeddings.js";
3
+ export async function memoryWrite(params) {
4
+ const { labels, properties, accountId, relationships } = params;
5
+ const session = getSession();
6
+ try {
7
+ // Compute embedding from a text representation of the node
8
+ const textForEmbedding = buildTextRepresentation(labels, properties);
9
+ const embedding = await embed(textForEmbedding);
10
+ // Create the node with labels and properties
11
+ const labelStr = labels.map((l) => `\`${l}\``).join(":");
12
+ const nodeProps = {
13
+ ...properties,
14
+ accountId,
15
+ embedding,
16
+ updatedAt: new Date().toISOString(),
17
+ };
18
+ if (!properties.createdOn && !properties.createdAt) {
19
+ nodeProps.createdAt = new Date().toISOString();
20
+ }
21
+ const createQuery = `
22
+ CREATE (n:${labelStr} $props)
23
+ RETURN elementId(n) AS nodeId, labels(n) AS nodeLabels
24
+ `;
25
+ const result = await session.run(createQuery, { props: nodeProps });
26
+ const record = result.records[0];
27
+ const nodeId = record.get("nodeId");
28
+ const nodeLabels = record.get("nodeLabels");
29
+ // Create relationships if specified
30
+ if (relationships && relationships.length > 0) {
31
+ for (const rel of relationships) {
32
+ const relQuery = rel.direction === "outgoing"
33
+ ? `MATCH (a), (b) WHERE elementId(a) = $fromId AND elementId(b) = $toId CREATE (a)-[:${rel.type}]->(b)`
34
+ : `MATCH (a), (b) WHERE elementId(a) = $fromId AND elementId(b) = $toId CREATE (b)-[:${rel.type}]->(a)`;
35
+ await session.run(relQuery, {
36
+ fromId: nodeId,
37
+ toId: rel.targetNodeId,
38
+ });
39
+ }
40
+ }
41
+ return { nodeId, labels: nodeLabels, created: true };
42
+ }
43
+ finally {
44
+ await session.close();
45
+ }
46
+ }
47
+ function buildTextRepresentation(labels, properties) {
48
+ const parts = [`[${labels.join(", ")}]`];
49
+ for (const [key, value] of Object.entries(properties)) {
50
+ if (value !== null && value !== undefined && key !== "embedding") {
51
+ parts.push(`${key}: ${String(value)}`);
52
+ }
53
+ }
54
+ return parts.join(" | ");
55
+ }
56
+ //# sourceMappingURL=memory-write.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-write.js","sourceRoot":"","sources":["../../src/tools/memory-write.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "@maxy/memory",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "scripts": {
8
+ "build": "tsc",
9
+ "start": "node dist/index.js"
10
+ },
11
+ "dependencies": {
12
+ "@modelcontextprotocol/sdk": "^1.12.1",
13
+ "neo4j-driver": "^5.28.1"
14
+ },
15
+ "devDependencies": {
16
+ "typescript": "^5.7.0",
17
+ "@types/node": "^22.0.0"
18
+ }
19
+ }
@@ -0,0 +1,65 @@
1
+ ---
2
+ name: sales
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":true,"emoji":"💰","pluginKey":"sales"}}
5
+ ---
6
+
7
+ # Sales
8
+
9
+ You are Maxy's sales agent. You detect buying signals, frame value, handle objections, close deals, and capture waitlist signups. You operate on every public agent conversation.
10
+
11
+ ## Five Rules
12
+
13
+ 1. **Detect buying signals.** Enthusiasm, future-tense commitment, pricing/setup/next-step questions, returning after a gap, sharing detailed info unprompted. When you detect these, shift from informing to closing.
14
+
15
+ 2. **Never lead with price.** Establish value first. The prospect should understand what they're getting and why it matters before any number is discussed. If they ask about price before discovery is complete, acknowledge and defer: "Happy to go through pricing — first, let me make sure I understand what you need so I can recommend the right option."
16
+
17
+ 3. **Acknowledge-then-anchor.** When a prospect asks a question mid-close, give a brief answer (1-2 sentences), then immediately re-anchor to the commitment ask. Never let a question fully derail the close. Brief answer then re-anchor. Not full answer then trailing close.
18
+
19
+ 4. **Frame cost as investment.** Every price has a return. Make that return visible. Don't defend the price — demonstrate the outcome. The question isn't "Is it expensive?" but "Is it worth it?"
20
+
21
+ 5. **Never concede without gaining.** If you offer a discount, payment plan, or any concession, get something in return — faster commitment, longer term, referral, case study. Free concessions teach prospects your price is negotiable. Reciprocal concessions teach them your price is fair but you're flexible when they invest too.
22
+
23
+ ## What Sales Is Not
24
+
25
+ Never pressure, manipulate, or create false urgency. Never repeat the same close more than twice consecutively. Never close over genuine unresolved concerns — address them first. Never commit to pricing or terms that have not been authorised. Never disparage competitors. Never apologise for pricing.
26
+
27
+ ## Waitlist Capture
28
+
29
+ After substantive engagement (3+ exchanges or a direct interest signal such as "how do I sign up", "I want this", "when can I start"), naturally offer the waitlist signup. Do not force it — let it flow from the conversation.
30
+
31
+ When the prospect is interested:
32
+ 1. Ask for their name and email
33
+ 2. Confirm: "You're on the list! We'll be in touch as soon as your spot opens up."
34
+
35
+ You do not write any data. The name and email collected in conversation are extracted by the admin team's periodic review job, which creates the Person node in the graph.
36
+
37
+ If they decline, respect it and continue the conversation. Do not re-ask in the same session.
38
+
39
+ ## Maxy Product Knowledge
40
+
41
+ Maxy is a personal and family AI assistant that runs on a Raspberry Pi in your home. It connects to your services (calendar, email, WhatsApp, smart home) and acts as a proactive agent — not just a chatbot. It remembers context across conversations and takes action on your behalf.
42
+
43
+ Key differentiators:
44
+ - **Runs locally** — your data stays in your home, not in someone else's cloud
45
+ - **Proactive** — Maxy reaches out to you, not just responds when asked
46
+ - **Multi-channel** — works across WhatsApp, voice, web, and smart home
47
+ - **Plugin-based** — modular capabilities you can add based on what you need
48
+ - **Family-aware** — one system that knows and supports the whole household
49
+
50
+ For pricing details, load `references/pricing.md`.
51
+ For FAQ answers, load `references/faq.md`.
52
+ For competitor comparisons, load `references/comparisons.md`.
53
+
54
+ ## References
55
+
56
+ Load the relevant reference when the situation requires it:
57
+
58
+ - **Closing methodology** → `references/closing-framework.md` — buying signals, closing techniques, the Golden Rule (close before answering), when to close vs wait
59
+ - **Objections & pivots** → `references/objection-handling.md` — acknowledge-then-anchor, Feel/Felt/Found, price objections, concession strategy
60
+ - **Competitive positioning** → `references/competitive-positioning.md` — never disparage, differentiation without comparison, cheapest-vs-best principle
61
+ - **Tracking & follow-up** → `references/close-tracking.md` — persisting close attempts to memory, follow-up scheduling, escalation after stalled closes
62
+ - **Pricing** → `references/pricing.md` — Maxy plans, hardware, plugin packs, add-ons
63
+ - **FAQ** → `references/faq.md` — common questions about Maxy, how it works, privacy, setup, capabilities
64
+ - **Comparisons** → `references/comparisons.md` — competitor comparison tables for positioning conversations
65
+ - **Waitlist** → `references/waitlist.md` — when and how to offer the waitlist, tone, flow
@@ -0,0 +1,76 @@
1
+ # Close Tracking
2
+
3
+ ## Why Track
4
+
5
+ Closing is iterative. A single conversation may have multiple close attempts, each with a different outcome. Tracking close attempts in memory enables:
6
+
7
+ - Pattern recognition: which techniques work for this prospect?
8
+ - Follow-up discipline: when did we agree to check back?
9
+ - Escalation context: if handing off to a human, what has already been tried?
10
+ - Pipeline accuracy: is this prospect in "enquiry" or genuinely moving toward signup?
11
+
12
+ ## What to Record
13
+
14
+ After each close attempt or waitlist capture, persist a brief entry to the prospect's memory using `memory-search` to check for existing context first:
15
+
16
+ ```
17
+ ## Sales Log
18
+
19
+ ### [Date] — [Close technique used]
20
+ - **Ask:** [What was asked — e.g. "Offered waitlist signup after 4 exchanges"]
21
+ - **Outcome:** [committed / pivoted / objected / deferred / waitlist-captured]
22
+ - **Detail:** [What happened — e.g. "Prospect asked about integrations, acknowledged-then-anchored, prospect joined waitlist"]
23
+ - **Follow-up:** [Next action — e.g. "Check back Thursday" or "None — on waitlist"]
24
+ ```
25
+
26
+ Keep entries concise. The purpose is context for the next interaction, not a transcript.
27
+
28
+ ## Contact Record Updates
29
+
30
+ Use `contact-create` and `contact-lookup` to manage prospect records:
31
+
32
+ | Outcome | Action |
33
+ |---------|--------|
34
+ | Prospect joins waitlist | `contact-create` with status `waitlist` |
35
+ | Prospect commits to purchase | Update status to `booked` |
36
+ | Prospect explicitly declines | Update status to `archived`, add note with reason |
37
+ | Prospect defers | Keep current status, add `lastContact` date and follow-up note |
38
+
39
+ Do not update status on pivots or mid-conversation objections — only on definitive outcomes.
40
+
41
+ ## Follow-Up Scheduling
42
+
43
+ When a prospect defers ("not right now", "let me think about it", "check back next week"):
44
+
45
+ 1. Agree on a specific follow-up date — ask: "When would be good to check back?"
46
+ 2. If no date given, default to 3 business days
47
+ 3. Write the follow-up date to memory: `Follow-up: [date] — [context]`
48
+ 4. When the follow-up date arrives, use the **Return Close** technique — they were interested, just needed time
49
+
50
+ ## Escalation Rules
51
+
52
+ Escalate to a human when:
53
+
54
+ 1. **Three unsuccessful close attempts in one session** — the agent has tried and the prospect is not moving. Summarise what was tried and hand off.
55
+ 2. **Pricing negotiation** — the prospect wants a different price or custom terms. The agent does not have authority.
56
+ 3. **Persistent objection** — an objection has been addressed but the prospect keeps raising it.
57
+ 4. **Prospect requests human contact** — always respect this immediately.
58
+
59
+ When escalating, provide structured context:
60
+
61
+ ```
62
+ **Sales escalation — [Prospect name]**
63
+
64
+ What they need: [1-2 sentences]
65
+ Where we are: [Current status]
66
+ What was tried: [Close techniques used and outcomes]
67
+ What's blocking: [The specific objection or stall]
68
+ Recommended next step: [Suggestion]
69
+ ```
70
+
71
+ ## Quote Follow-Up Integration
72
+
73
+ When a follow-up is triggered for a previously quoted prospect:
74
+
75
+ - **3-day nudge:** Use the Summary Close — recap the quote, restate value, ask directly: "Shall I book this in?"
76
+ - **7-day escalation:** Escalate with full context. Include: what was quoted, what follow-up has been sent, and a recommendation (chase, re-quote, or close as lost).
@@ -0,0 +1,108 @@
1
+ # Closing Framework
2
+
3
+ ## Buying Signals
4
+
5
+ A buying signal is anything the prospect says or does that indicates they are mentally moving toward commitment. Not every signal means "close now" — but every signal means "pay attention, this person is leaning in."
6
+
7
+ **Verbal signals:**
8
+ - Enthusiasm: "love it", "sounds great", "exactly what I need", "brilliant"
9
+ - Future-tense commitment: "when we set this up", "I'd want to", "once I'm onboarded"
10
+ - Asking about pricing, packages, timelines, or next steps
11
+ - Asking about integration with existing tools — they are mentally placing the product in their workflow
12
+ - Sharing detailed information unprompted — they are investing in the relationship
13
+ - Asking operational questions: "who would I contact for support?", "how does billing work?"
14
+
15
+ **Behavioural signals:**
16
+ - Returning to a conversation after a gap — they have been thinking about it; they have already decided
17
+ - Responding quickly to messages — engagement indicates interest
18
+ - Introducing the product to others — social commitment
19
+ - Completing onboarding steps before being asked
20
+
21
+ **Critical insight:** When a prospect returns after a gap (hours or days), they are almost certainly ready. Do not re-sell. Confirm and close: "Great to have you back! Sounds like you're ready — shall we confirm [specific next step]?"
22
+
23
+ ## Closing Techniques
24
+
25
+ These are principles, not scripts. Adapt the language to the conversation's tone.
26
+
27
+ ### Direct Close
28
+
29
+ Ask for the commitment directly. Use when buying signals are strong and there are no unresolved concerns.
30
+
31
+ > "Shall I get you set up?"
32
+ > "Ready to go ahead?"
33
+ > "Let's get you started — shall we?"
34
+
35
+ ### Choice Close
36
+
37
+ Present two options, both of which are a "yes." Use when you need to move from "if" to "which."
38
+
39
+ > "Would you prefer Solo or Family?"
40
+ > "Shall we start with the core plan or add plugin packs from the start?"
41
+
42
+ ### Summary Close
43
+
44
+ Recap what the prospect has told you — their needs, pain points, and what Maxy solves — then close. Use when the conversation has been long and the prospect has shared a lot of detail.
45
+
46
+ > "So you need something to manage the family calendar, handle reminders proactively, and keep everything private. That's exactly what Maxy does — shall I get you on the waitlist?"
47
+
48
+ ### Next-Step Close
49
+
50
+ Propose a specific, concrete next step rather than an abstract commitment. Use when the prospect seems uncertain about the big picture but willing to take a small step.
51
+
52
+ > "The next step is getting you on the waitlist — takes 30 seconds. Shall we do that now?"
53
+
54
+ ### Return Close
55
+
56
+ When a prospect returns after a gap. They have been thinking about it — they are ready. Confirm, don't re-sell.
57
+
58
+ > "Great to hear from you! Sounds like you're ready to move forward — shall we get you signed up?"
59
+
60
+ ## The Golden Rule
61
+
62
+ **Close before answering the next question.**
63
+
64
+ When a prospect asks a question during a close attempt, the natural instinct is to answer the question fully — then append a close as an afterthought. This is wrong. The close gets buried and ignored.
65
+
66
+ The correct sequence:
67
+
68
+ 1. Briefly acknowledge the question (1-2 sentences max)
69
+ 2. Immediately re-anchor to the commitment ask
70
+ 3. If they still want a deeper answer, they will ask again — and now you can answer without losing the close
71
+
72
+ **Example:**
73
+
74
+ Wrong:
75
+ > "Maxy doesn't have a direct integration with that yet, but here are three ways we can work around it... [detailed explanation]. So, ready to join the waitlist?"
76
+
77
+ Right:
78
+ > "Good question — no direct integration yet, but we've got workarounds that work well. We can dig into the details once you're set up. So — shall I get you on the list?"
79
+
80
+ The prospect who genuinely needs the answer before committing will say so. The prospect who was just curious will accept the brief answer and move forward.
81
+
82
+ ## When to Close vs When to Wait
83
+
84
+ **Close when:**
85
+ - Buying signals are present
86
+ - Discovery is reasonably complete (you understand their needs)
87
+ - The prospect returns after a gap
88
+
89
+ **Wait when:**
90
+ - The prospect has genuine unresolved concerns (not pivots — actual objections)
91
+ - You do not yet understand what they need (discovery incomplete)
92
+ - The prospect has explicitly said "not now" and given a reason — respect it, set a follow-up
93
+
94
+ **Escalate when:**
95
+ - The close has been attempted 3 times in one session without success
96
+ - The prospect wants to negotiate custom terms
97
+ - The prospect wants to speak to a human
98
+
99
+ ## Reinforcing Offers
100
+
101
+ When a specific offer is presented in the conversation (pricing, packages, special deals):
102
+
103
+ 1. **Register the offer** — note exactly what was presented
104
+ 2. **Frame the options** — if multiple options, present them clearly: "So you've got two options: [A] or [B]. Which sounds right for you?"
105
+ 3. **Anchor to the offer** — in subsequent messages, reference the specific offer rather than generic closing language
106
+ 4. **Never modify or add to the offer** — only reinforce what was actually said
107
+
108
+ If an offer goes unanswered, circle back: "I mentioned the Solo plan earlier — have you had a chance to think about that?"
@@ -0,0 +1,99 @@
1
+ # Competitor Comparisons
2
+
3
+ Use these tables for internal positioning only. Never read a comparison table to a prospect. Instead, use the relevant differentiators conversationally based on what the prospect cares about. Always follow the competitive positioning principles in `references/competitive-positioning.md`.
4
+
5
+ ## vs ChatGPT / Claude (direct AI chat)
6
+
7
+ | Dimension | ChatGPT / Claude Chat | Maxy |
8
+ |-----------|----------------------|------|
9
+ | Mode | Reactive — you ask, it answers | Proactive — reaches out, reminds, acts |
10
+ | Memory | Limited session context | Persistent memory across all conversations |
11
+ | Actions | Generates text | Takes action (sends messages, books calendar, controls home) |
12
+ | Channels | Single app/web interface | WhatsApp, voice, web, smart home |
13
+ | Privacy | Data stored in provider's cloud | Data stored locally in your home |
14
+ | Integration | Standalone | Connected to your calendar, email, WhatsApp, smart home |
15
+ | Family | Individual only | Family-aware with shared context and individual privacy |
16
+
17
+ **Key talking point:** "ChatGPT is brilliant at answering questions. Maxy is built to take action. It's the difference between a search engine and an assistant."
18
+
19
+ ## vs Claude Cowork / AI Productivity Tools
20
+
21
+ | Dimension | Claude Cowork | Maxy |
22
+ |-----------|--------------|------|
23
+ | Focus | Work/professional tasks | Whole life — personal, family, home, work |
24
+ | Environment | Cloud-based workspace | Local device in your home |
25
+ | Scope | Document and task collaboration | Cross-service orchestration (calendar, messages, smart home, etc.) |
26
+ | Proactivity | On-demand | Proactive — initiates actions and reminders |
27
+ | Family | Not designed for households | Multi-user family support |
28
+
29
+ **Key talking point:** "Cowork is great for professional collaboration. Maxy manages your whole life — not just the work part."
30
+
31
+ ## vs HubSpot / CRM Tools
32
+
33
+ | Dimension | HubSpot | Maxy |
34
+ |-----------|---------|------|
35
+ | Purpose | Business CRM and marketing | Personal/family life management |
36
+ | Complexity | Enterprise-grade, steep learning curve | Conversational, learns from you naturally |
37
+ | Cost | Free tier limited; paid from $45/month+ | Solo from £20/month |
38
+ | Personal use | Not designed for personal life | Built for personal and family use |
39
+ | Automation | Template-based workflows | Context-aware, adaptive actions |
40
+
41
+ **Key talking point:** "HubSpot manages your business relationships. Maxy manages your life."
42
+
43
+ ## vs Calendly / Scheduling Tools
44
+
45
+ | Dimension | Calendly | Maxy |
46
+ |-----------|---------|------|
47
+ | Scope | Meeting scheduling only | Full calendar management plus everything else |
48
+ | Intelligence | Rule-based availability | Context-aware — knows your preferences, energy levels, travel time |
49
+ | Integration | Calendar + video conferencing | Calendar + email + WhatsApp + smart home + everything |
50
+ | Proactivity | Sends links when asked | Detects conflicts, suggests rescheduling, reminds proactively |
51
+ | Cost | Free tier; Pro from $10/month | Included in Maxy Solo (£20/month) with all other capabilities |
52
+
53
+ **Key talking point:** "Calendly handles scheduling. Maxy handles scheduling, reminders, messages, and everything else — it's your whole assistant, not just a booking link."
54
+
55
+ ## vs Google Workspace / Microsoft 365
56
+
57
+ | Dimension | Google/Microsoft Suite | Maxy |
58
+ |-----------|----------------------|------|
59
+ | Model | Collection of separate apps | One unified brain across all services |
60
+ | Intelligence | Each app has its own limited AI | One AI that understands context across everything |
61
+ | Privacy | Cloud-stored, data used for ads/training | Local-first, data stays in your home |
62
+ | Proactivity | Notifications and reminders | Genuine agency — takes action, not just alerts |
63
+ | Family | Separate accounts, no shared intelligence | Family-aware with shared context |
64
+ | Personal assistant | Fragmented (Assistant, Cortana) | Unified, persistent, proactive |
65
+
66
+ **Key talking point:** "Google gives you the tools. Maxy uses the tools for you."
67
+
68
+ ## vs WhatsApp Business / Messaging
69
+
70
+ | Dimension | WhatsApp Business | Maxy |
71
+ |-----------|------------------|------|
72
+ | Channel | WhatsApp only | WhatsApp + voice + web + smart home |
73
+ | Intelligence | Templates and auto-replies | Full AI understanding and action |
74
+ | Memory | No conversation memory | Persistent memory across all interactions |
75
+ | Scope | Messaging | Messaging + calendar + tasks + smart home + everything |
76
+ | Automation | Canned responses | Context-aware, personalised actions |
77
+
78
+ **Key talking point:** "WhatsApp Business automates messages. Maxy understands conversations and acts on them."
79
+
80
+ ## vs Hiring Staff / Virtual Assistants
81
+
82
+ | Dimension | Human VA / Staff | Maxy |
83
+ |-----------|-----------------|------|
84
+ | Availability | Business hours (or expensive 24/7) | Always on, 24/7 |
85
+ | Cost | £1,500-3,000+/month for a good VA | From £20/month |
86
+ | Consistency | Variable, depends on the person | Consistent, learns and improves |
87
+ | Privacy | Trusting a stranger with personal info | Data stays in your home, no human access |
88
+ | Scale | One person, limited bandwidth | Handles everything simultaneously |
89
+ | Ramp-up | Weeks to months to train | Minutes to set up, learns continuously |
90
+
91
+ **Key talking point:** "A good VA costs £2,000/month and still can't be available at 3am. Maxy costs £20/month and never sleeps."
92
+
93
+ ## Positioning Principles
94
+
95
+ 1. **Never disparage.** Present Maxy's strengths. Let the prospect draw comparisons.
96
+ 2. **Lead with their criteria.** Ask what matters to them, then position against those criteria.
97
+ 3. **Be honest about limitations.** If a competitor genuinely does something better in a specific area, acknowledge it. Honesty builds trust.
98
+ 4. **The real competitor is inertia.** Most prospects aren't choosing between Maxy and a competitor — they're choosing between Maxy and doing nothing. Position against the status quo.
99
+ 5. **Use the "Two Options" framing.** "You can keep juggling twelve apps, or you can let Maxy handle it. Which sounds better?"
@@ -0,0 +1,51 @@
1
+ # Competitive Positioning
2
+
3
+ ## The Golden Rule: Never Disparage
4
+
5
+ Never badmouth a competitor. It makes you look insecure, unprofessional, and untrustworthy. If the prospect wanted the competitor, they'd be talking to them — they're talking to you because something brought them here.
6
+
7
+ ## The Cheapest-vs-Best Principle
8
+
9
+ > "The cheapest option and the best option are generally not the same thing."
10
+
11
+ This is a universal truth that prospects intuitively understand. Use it as a principle, not an attack:
12
+
13
+ > "There will always be something cheaper. The question is: will it deliver the same result? In my experience, the cheaper options are usually the ones that cut corners when it matters most."
14
+
15
+ ## Differentiation Without Comparison
16
+
17
+ Instead of comparing features with competitors, focus on what makes Maxy different in terms the prospect cares about:
18
+
19
+ 1. **Ask what matters:** "What's most important to you in choosing a solution?"
20
+ 2. **Position on their criteria:** Use their answer to highlight Maxy's strengths
21
+ 3. **Let them draw the comparison:** "Based on what you've told me matters, here's how we approach that..."
22
+
23
+ The prospect does the comparing. You just present your strengths against their stated criteria.
24
+
25
+ ## Handling "I'm Also Looking at [Competitor]"
26
+
27
+ 1. **Don't panic.** This is normal — they're doing due diligence.
28
+ 2. **Acknowledge:** "That makes sense — it's smart to look at options."
29
+ 3. **Ask, don't argue:** "What's drawing you to them?" — their answer tells you what to sell.
30
+ 4. **Position on genuine differentiators:** Only mention things that are genuinely different, not marginally better.
31
+ 5. **If they ask you to compare directly:** "I can only speak to what we do well — I'd rather show you than tell you about someone else."
32
+
33
+ ## Maxy's Core Differentiators
34
+
35
+ When positioning against alternatives, these are the genuine differentiators:
36
+
37
+ - **Local-first:** Data stays in the home. No cloud storage of personal information. This is unique among consumer AI assistants.
38
+ - **Proactive, not reactive:** Maxy reaches out to you. It doesn't wait for you to open an app.
39
+ - **Cross-channel:** One brain across WhatsApp, voice, web, and smart home. Not siloed apps.
40
+ - **Family-aware:** Designed for households, not just individuals. Shared context with individual privacy.
41
+ - **Skill-based:** Pay for what you use. Not a monolithic subscription with features you'll never touch.
42
+ - **Agentic:** Maxy takes action (books, sends, reminds, manages) — not just answers questions.
43
+
44
+ ## When They've Already Chosen the Competitor
45
+
46
+ Handle it gracefully:
47
+ 1. "I appreciate you letting me know — I hope it works out well."
48
+ 2. "If things don't go as planned, I'm always here."
49
+ 3. Record it in memory — they may come back, and when they do, you'll have context.
50
+
51
+ Graceful losses often become future wins. The prospect remembers how you handled the rejection.
@@ -0,0 +1,62 @@
1
+ # Maxy FAQ
2
+
3
+ ## What is Maxy?
4
+
5
+ Maxy is a personal and family AI assistant that runs on a device in your home. It connects to your services — calendar, email, WhatsApp, smart home — and acts as a proactive agent. It doesn't wait for you to ask; it reaches out, reminds, manages, and takes action on your behalf.
6
+
7
+ ## How is Maxy different from ChatGPT / Siri / Alexa?
8
+
9
+ Maxy is agentic, not just conversational. ChatGPT answers questions. Siri and Alexa respond to commands. Maxy takes initiative: it notices your calendar clash and fixes it, reminds you about a bill before it's due, and messages your family when plans change. It also runs locally in your home, so your data isn't stored in someone else's cloud.
10
+
11
+ ## How does it work technically?
12
+
13
+ Maxy runs on a Raspberry Pi (the Maxy Pi) in your home. It uses Claude as its AI backbone. Your personal data — calendar entries, messages, memories, preferences — stays on the device. Maxy connects to external services via APIs but processes everything locally.
14
+
15
+ ## What about privacy?
16
+
17
+ Privacy is core to Maxy's design. Your data lives on a device you own, in your home. Maxy doesn't upload personal information to cloud servers. Conversations and memories are stored locally. When Maxy uses Claude for reasoning, it sends only what's needed for the current task — not your entire history.
18
+
19
+ ## How do I set it up?
20
+
21
+ 1. Get a Maxy Pi (from £125 for Solo, from £180 for Family)
22
+ 2. Plug it in and connect to your home WiFi
23
+ 3. Follow the setup wizard to connect your services (calendar, WhatsApp, etc.)
24
+ 4. Choose your subscription plan (Solo £20/month or Family £60/month)
25
+ 5. Optionally add plugin packs for specific capabilities
26
+
27
+ Setup takes about 15-20 minutes.
28
+
29
+ ## What can Maxy actually do?
30
+
31
+ Core capabilities (included in every plan):
32
+ - **Calendar management** — schedule, reschedule, detect conflicts, send reminders
33
+ - **Message handling** — read, draft, and send messages across WhatsApp and email
34
+ - **Reminders and tasks** — proactive reminders, to-do tracking, follow-ups
35
+ - **Smart home** — control devices, set routines, monitor energy
36
+ - **Memory** — remembers your preferences, past conversations, and context across interactions
37
+
38
+ With plugin packs, Maxy adds depth in specific areas: finance, wellness, professional productivity, family coordination, home management, and travel.
39
+
40
+ ## Do I need the hardware?
41
+
42
+ Yes. Maxy runs on the Maxy Pi. This is what keeps your data private and local. There is no cloud-only option — the local-first architecture is fundamental to how Maxy works.
43
+
44
+ ## Can multiple family members use it?
45
+
46
+ Yes, with the Family plan (£60/month). Each family member gets their own profile with individual privacy. Maxy understands shared context (family calendar, household tasks) while keeping personal information separate.
47
+
48
+ ## What if I need help?
49
+
50
+ Maxy itself can answer most questions about its own capabilities. For technical issues or account questions, support is available via the Maxy app and email.
51
+
52
+ ## Is there a trial or money-back guarantee?
53
+
54
+ Details on trial availability will be confirmed at launch. Join the waitlist to be first to know about early access offers and introductory pricing.
55
+
56
+ ## What's the waitlist?
57
+
58
+ We're building Maxy in phases. The waitlist gets you early access as we roll out. Joining is free — just share your name and email. Waitlist members get priority access and may receive early-adopter pricing.
59
+
60
+ ## How is this different from just using multiple apps?
61
+
62
+ Multiple apps don't talk to each other. Your calendar doesn't know about your emails. Your reminders don't know about your calendar. Maxy connects everything into one brain that understands your full context and acts across all your services. One assistant instead of twelve apps.