@rubytech/taskmaster 1.0.98 → 1.0.100

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 (52) hide show
  1. package/README.md +1 -1
  2. package/dist/agents/system-prompt.js +2 -1
  3. package/dist/agents/taskmaster-tools.js +6 -0
  4. package/dist/agents/tool-policy.js +2 -0
  5. package/dist/agents/tools/image-generate-api.js +154 -0
  6. package/dist/agents/tools/image-generate-tool.js +145 -0
  7. package/dist/build-info.json +3 -3
  8. package/dist/control-ui/assets/{index-TI7yF6r_.js → index-BiXCzgVk.js} +244 -244
  9. package/dist/control-ui/assets/index-BiXCzgVk.js.map +1 -0
  10. package/dist/control-ui/assets/{index-6WdtDXJj.css → index-Bj8TaDNH.css} +1 -1
  11. package/dist/control-ui/index.html +2 -2
  12. package/dist/gateway/chat-sanitize.js +59 -4
  13. package/dist/gateway/control-ui.js +8 -7
  14. package/dist/gateway/server-methods/files.js +3 -3
  15. package/dist/hooks/bundled/license-request/HOOK.md +47 -0
  16. package/dist/hooks/bundled/license-request/handler.js +192 -0
  17. package/package.json +1 -1
  18. package/scripts/install.sh +2 -2
  19. package/skills/image-gen/SKILL.md +68 -0
  20. package/skills/image-gen/references/models.md +83 -0
  21. package/skills/image-gen/references/prompting.md +184 -0
  22. package/skills/image-gen/references/styles.md +113 -0
  23. package/skills/image-gen/references/troubleshooting.md +93 -0
  24. package/skills/taskmaster/SKILL.md +6 -6
  25. package/taskmaster-docs/USER-GUIDE.md +67 -6
  26. package/templates/beagle/agents/admin/AGENTS.md +2 -2
  27. package/templates/beagle/agents/public/AGENTS.md +2 -2
  28. package/templates/beagle/skills/beagle/SKILL.md +3 -3
  29. package/templates/beagle/skills/beagle/references/booking-schema.md +1 -1
  30. package/templates/beagle/skills/beagle/references/data-compliance.md +2 -2
  31. package/templates/beagle/skills/beagle/references/fee-collection.md +1 -1
  32. package/templates/beagle/skills/beagle/references/workflow.md +2 -2
  33. package/templates/maxy/TOOLS.md +15 -0
  34. package/templates/maxy/agents/admin/AGENTS.md +70 -0
  35. package/templates/maxy/agents/admin/BOOTSTRAP.md +30 -0
  36. package/templates/maxy/agents/admin/HEARTBEAT.md +6 -0
  37. package/templates/maxy/agents/admin/IDENTITY.md +13 -0
  38. package/templates/maxy/agents/admin/SOUL.md +21 -0
  39. package/templates/maxy/agents/admin/TOOLS.md +20 -0
  40. package/templates/maxy/agents/admin/USER.md +17 -0
  41. package/templates/maxy/agents/public/AGENTS.md +72 -0
  42. package/templates/maxy/agents/public/HEARTBEAT.md +2 -0
  43. package/templates/maxy/agents/public/IDENTITY.md +13 -0
  44. package/templates/maxy/agents/public/SOUL.md +60 -0
  45. package/templates/maxy/agents/public/TOOLS.md +20 -0
  46. package/templates/maxy/agents/public/USER.md +17 -0
  47. package/templates/maxy/memory/public/FAQ.md +241 -0
  48. package/templates/maxy/skills/maxy/SKILL.md +55 -0
  49. package/templates/maxy/skills/personal-assistant/SKILL.md +50 -0
  50. package/templates/taskmaster/agents/admin/AGENTS.md +20 -0
  51. package/templates/taskmaster/agents/public/AGENTS.md +9 -0
  52. package/dist/control-ui/assets/index-TI7yF6r_.js.map +0 -1
@@ -0,0 +1,184 @@
1
+ # Expert Prompt Construction
2
+
3
+ A strong prompt is the difference between a usable image and a generic one. This reference covers prompt structure, quality modifiers, and business-specific examples.
4
+
5
+ ---
6
+
7
+ ## Prompt Structure
8
+
9
+ Build prompts in this order. Each element adds specificity. Not every element is needed for every image — use judgement based on the request.
10
+
11
+ ```
12
+ Subject → Style → Composition → Lighting → Mood → Quality modifiers
13
+ ```
14
+
15
+ **Subject:** What is in the image. Be concrete — "a golden retriever puppy sitting on grass" beats "a dog." Include materials, textures, and context when relevant.
16
+
17
+ **Style:** How the image looks. Photorealistic, illustration, watercolour, etc. See `styles.md` for vocabulary.
18
+
19
+ **Composition:** How the frame is arranged. Camera angle, framing, depth of field, negative space.
20
+
21
+ **Lighting:** How the scene is lit. Studio, golden hour, dramatic, etc. This has outsized impact on mood.
22
+
23
+ **Mood:** The emotional feel. Professional, cozy, dramatic, energetic. Guides the overall atmosphere.
24
+
25
+ **Quality modifiers:** Technical terms that push the model toward higher-quality output.
26
+
27
+ ---
28
+
29
+ ## Quality Modifiers
30
+
31
+ Append these to improve output quality. Use sparingly — 2-3 is effective, more can cause conflicting signals.
32
+
33
+ - "highly detailed" — encourages fine detail and texture
34
+ - "professional quality" — steers toward polished, commercial output
35
+ - "sharp focus" — reduces soft or blurry areas
36
+ - "4K" / "8K resolution" — emphasises resolution and clarity in the prompt
37
+ - "award-winning" — biases toward striking, well-composed results
38
+ - "editorial quality" — clean, publication-ready aesthetic
39
+
40
+ ---
41
+
42
+ ## Composition Terms
43
+
44
+ | Term | Effect |
45
+ |------|--------|
46
+ | "close-up" | Tight framing on subject |
47
+ | "wide angle" | Expansive view, more context |
48
+ | "bird's eye view" | Top-down perspective |
49
+ | "eye level" | Natural, relatable perspective |
50
+ | "rule of thirds" | Subject offset, balanced composition |
51
+ | "centered" | Subject in the middle, symmetrical |
52
+ | "symmetrical" | Mirror balance, architectural feel |
53
+ | "shallow depth of field" | Subject sharp, background blurred |
54
+ | "bokeh background" | Soft, circular blur behind subject |
55
+ | "negative space" | Large empty areas, minimalist feel |
56
+ | "minimalist composition" | Few elements, clean, focused |
57
+
58
+ ---
59
+
60
+ ## Business Use Case Examples
61
+
62
+ These are starting points. Adapt subject, colours, and details to the user's specific needs.
63
+
64
+ ### Product Photography
65
+
66
+ ```
67
+ Professional product photograph of [item] on a clean white surface, studio lighting,
68
+ shallow depth of field, commercial quality, highly detailed, 4K
69
+ ```
70
+
71
+ ```
72
+ Lifestyle product shot of [item] in a modern kitchen, natural window light,
73
+ warm tones, editorial quality, shallow depth of field
74
+ ```
75
+
76
+ ```
77
+ Flat lay arrangement of [items] on a marble surface, top-down view,
78
+ soft diffused lighting, minimalist composition, professional quality
79
+ ```
80
+
81
+ ### Social Media Graphics
82
+
83
+ ```
84
+ Vibrant flat design illustration of [concept], bold colours, clean lines,
85
+ modern aesthetic, Instagram-ready, 1:1 aspect ratio
86
+ ```
87
+
88
+ ```
89
+ Eye-catching social media graphic with [text/concept], gradient background,
90
+ bold typography space, energetic mood, vibrant colours
91
+ ```
92
+
93
+ ```
94
+ Minimalist quote background, soft pastel gradient, clean negative space
95
+ for text overlay, calming mood, 1:1
96
+ ```
97
+
98
+ ### Logo Concepts
99
+
100
+ ```
101
+ Minimalist logo design for [business type], clean vector style, simple geometric shapes,
102
+ professional, white background, scalable design
103
+ ```
104
+
105
+ ```
106
+ Modern logo mark for [business type], flat design, single accent colour on white,
107
+ memorable silhouette, minimalist
108
+ ```
109
+
110
+ Note: Image generation models produce raster images, not vectors. Generated logos work well as concepts and mood boards. For final logo files, the user will need a graphic designer to recreate the chosen concept as a vector.
111
+
112
+ ### Business Headshots
113
+
114
+ ```
115
+ Professional headshot portrait, studio lighting, neutral grey background,
116
+ sharp focus, natural expression, business attire, editorial quality
117
+ ```
118
+
119
+ ```
120
+ Approachable business portrait, natural window light, warm tones,
121
+ shallow depth of field, genuine smile, professional quality
122
+ ```
123
+
124
+ ### Illustrations
125
+
126
+ ```
127
+ Warm watercolour illustration of [scene], soft edges, pastel palette,
128
+ editorial style, hand-painted feel, gentle mood
129
+ ```
130
+
131
+ ```
132
+ Detailed line art illustration of [subject], black ink on white,
133
+ clean lines, technical precision, architectural style
134
+ ```
135
+
136
+ ```
137
+ Playful children's book illustration of [scene], bright colours,
138
+ rounded shapes, whimsical mood, hand-drawn style
139
+ ```
140
+
141
+ ### Marketing and Print
142
+
143
+ ```
144
+ Hero image for [business type] website, wide angle shot of [scene],
145
+ golden hour lighting, professional quality, 16:9, inviting mood
146
+ ```
147
+
148
+ ```
149
+ Business card background, abstract geometric pattern, [brand colours],
150
+ subtle texture, professional, minimalist, 3:2
151
+ ```
152
+
153
+ ---
154
+
155
+ ## Iteration Tips
156
+
157
+ When the first result isn't right, refine systematically rather than starting from scratch.
158
+
159
+ **Change one thing at a time.** If the lighting is wrong but the composition is good, adjust only the lighting terms. Changing everything at once makes it impossible to learn what works.
160
+
161
+ **Add specificity to fix vagueness.** Generic subjects produce generic results. "A dog" becomes "a golden retriever puppy sitting on freshly cut grass, looking at camera." Specificity is the most reliable way to improve output.
162
+
163
+ **Use Gemini models for iterative refinement.** Gemini supports multi-turn editing — generate an image, then ask to change specific elements ("make the background warmer," "remove the text," "zoom in on the product"). This is faster than re-prompting from scratch.
164
+
165
+ **Switch to Imagen for final output.** Once the concept is right (via Gemini iteration), re-generate with Imagen Standard or Ultra for maximum fidelity. Think of Gemini as the sketch pad and Imagen as the final print.
166
+
167
+ **Ask the user what to change, not whether they like it.** "What would you change?" gets more useful feedback than "Do you like it?" People find it easier to articulate what's wrong than to rate overall quality.
168
+
169
+ ---
170
+
171
+ ## Imagen-Specific Tips
172
+
173
+ Imagen models have constraints that affect prompt strategy:
174
+
175
+ - **English only** — prompts must be in English, even if the user's conversation is in another language. Translate the intent, then prompt in English.
176
+ - **480-token prompt limit** — be concise. Front-load the most important elements (subject, style) and put modifiers at the end so they get trimmed first if the prompt is too long.
177
+ - **Concrete over abstract** — Imagen produces better results with specific, visual descriptions than with abstract concepts. "A sunrise over a calm ocean" works better than "hope and renewal."
178
+ - **Person generation control** — use `personGeneration: "dont_allow"` when people aren't needed in the image. This avoids potential content policy issues and often produces cleaner results for product/object shots.
179
+
180
+ ---
181
+
182
+ ## Showing the Prompt
183
+
184
+ Show the user the crafted prompt AND call `image_generate` in the same turn. Do not wait for prompt approval before generating — generate immediately, then iterate. This avoids unnecessary round-trips and gives the user a concrete result to react to. Frame it as: "Here's what I'm generating:" followed by the tool call. Iterate after seeing the result.
@@ -0,0 +1,113 @@
1
+ # Style, Format & Visual Vocabulary
2
+
3
+ Use this reference when discussing visual style with the user. Suggest options based on their use case — most users know what they want to feel, not the technical vocabulary to express it.
4
+
5
+ ---
6
+
7
+ ## Style Categories
8
+
9
+ Each style has distinct strengths. Match the style to the purpose, not personal preference.
10
+
11
+ | Style | Character | When to suggest |
12
+ |-------|-----------|-----------------|
13
+ | **Photorealistic** | Lifelike, indistinguishable from a photograph | Product photography, headshots, real estate, food |
14
+ | **Illustration** | Hand-drawn feel, artistic interpretation | Editorial content, children's materials, storytelling |
15
+ | **Digital art** | Polished, vibrant, contemporary | Tech marketing, game assets, social media |
16
+ | **Watercolour** | Soft edges, translucent washes, organic | Invitations, fine art prints, greeting cards |
17
+ | **Oil painting** | Rich textures, visible brushwork, classical depth | Portraits, wall art, premium branding |
18
+ | **Minimalist** | Clean, sparse, essential shapes only | Logos, icons, modern branding |
19
+ | **3D render** | Dimensional, material-accurate, product-focused | Product mockups, architectural visualisation, tech |
20
+ | **Pixel art** | Blocky, nostalgic, 8/16-bit aesthetic | Gaming, retro branding, novelty |
21
+ | **Vector / flat** | Clean lines, solid fills, scalable | Infographics, UI elements, icons, print |
22
+ | **Sketch / line art** | Raw, conceptual, structural | Wireframes, concept art, technical illustration |
23
+ | **Pop art** | Bold outlines, high contrast, graphic | Marketing, social media, event posters |
24
+ | **Anime / manga** | Expressive, character-driven, stylised | Character design, storytelling, youth audience |
25
+ | **Vintage / retro** | Aged, film grain, muted tones, nostalgic | Heritage branding, event themes, editorial |
26
+
27
+ ---
28
+
29
+ ## Aspect Ratios
30
+
31
+ Aspect ratio should match the output medium. Ask the user where the image will be used if they haven't said.
32
+
33
+ | Ratio | Common uses | Notes |
34
+ |-------|-------------|-------|
35
+ | **1:1** | Social media posts, profile pictures, product shots | Universal default |
36
+ | **16:9** | Presentations, hero images, desktop wallpapers, YouTube thumbnails | Standard widescreen |
37
+ | **9:16** | Instagram/TikTok stories, mobile wallpapers, vertical ads | Vertical video format |
38
+ | **3:4 / 4:3** | Portrait/landscape photos, print | Classic photography |
39
+ | **3:2 / 2:3** | Traditional photo format, DSLR native | Gemini only |
40
+ | **21:9** | Ultrawide banners, website headers, cinematic | Gemini only |
41
+
42
+ When a requested ratio isn't available for the chosen model (e.g. 21:9 on Imagen), explain the limitation and suggest the closest alternative.
43
+
44
+ ---
45
+
46
+ ## Colour Vocabulary
47
+
48
+ Use these terms in prompts to steer colour treatment. Combine with style for precision.
49
+
50
+ | Term | Effect |
51
+ |------|--------|
52
+ | **Warm** | Reds, oranges, yellows — cozy, inviting |
53
+ | **Cool** | Blues, greens, purples — calm, professional |
54
+ | **Muted** | Desaturated, subdued — sophisticated, understated |
55
+ | **Vibrant** | Saturated, bold — energetic, attention-grabbing |
56
+ | **Monochrome** | Single hue or black/white — dramatic, editorial |
57
+ | **Pastel** | Soft, light tints — gentle, approachable |
58
+ | **Neon** | Electric, glowing — nightlife, tech, youth |
59
+ | **Earth tones** | Browns, tans, olive — natural, organic |
60
+ | **Jewel tones** | Deep emerald, sapphire, ruby — rich, luxurious |
61
+ | **Neutral** | Greys, whites, beiges — clean, unobtrusive |
62
+
63
+ ---
64
+
65
+ ## Mood Vocabulary
66
+
67
+ Mood shapes the overall emotional impression. It influences lighting, colour, composition, and subject expression.
68
+
69
+ | Mood | Visual impression |
70
+ |------|-------------------|
71
+ | **Dramatic** | High contrast, deep shadows, strong focal point |
72
+ | **Serene** | Soft light, open space, gentle colours |
73
+ | **Energetic** | Bright, dynamic angles, saturated colour |
74
+ | **Mysterious** | Low light, fog, obscured elements, cool tones |
75
+ | **Whimsical** | Playful, unexpected, fantasy elements |
76
+ | **Professional** | Clean, neutral, well-lit, no visual noise |
77
+ | **Playful** | Bright, rounded shapes, warm palette |
78
+ | **Dark** | Low-key lighting, muted palette, heavy shadows |
79
+ | **Ethereal** | Soft focus, glowing light, translucent elements |
80
+ | **Cozy** | Warm tones, soft textures, intimate framing |
81
+ | **Bold** | Strong shapes, high saturation, graphic composition |
82
+
83
+ ---
84
+
85
+ ## Lighting Vocabulary
86
+
87
+ Lighting is the single most impactful prompt element after subject and style. Specific lighting terms produce dramatically different results.
88
+
89
+ | Lighting | Character | Best for |
90
+ |----------|-----------|----------|
91
+ | **Golden hour** | Warm, directional, long shadows | Portraits, landscapes, lifestyle |
92
+ | **Studio** | Even, controlled, professional | Product shots, headshots |
93
+ | **Natural** | Ambient, unprocessed, authentic | Documentary, editorial |
94
+ | **Dramatic / chiaroscuro** | Strong contrast between light and shadow | Portraits, moody scenes |
95
+ | **Flat** | Even, shadowless, clean | Product photography, UI mockups |
96
+ | **Rim-lit** | Edge highlighting, subject separation | Silhouettes, athletic, cinematic |
97
+ | **Backlit** | Light behind subject, halo effect | Ethereal, spiritual, romantic |
98
+ | **Soft / diffused** | Gentle, wrapped light, minimal shadows | Beauty, fashion, food |
99
+ | **Neon** | Coloured artificial light, urban | Night scenes, tech, cyberpunk |
100
+ | **Candlelight** | Warm, flickering, intimate | Cozy scenes, romantic, vintage |
101
+
102
+ ---
103
+
104
+ ## Combining Vocabulary
105
+
106
+ A well-crafted style description combines one element from each category. Examples:
107
+
108
+ - Product shot: "photorealistic, studio lighting, neutral background, professional mood"
109
+ - Social post: "digital art, vibrant colours, energetic mood, flat lighting, 1:1"
110
+ - Business card: "minimalist, monochrome, clean, professional, 3:2"
111
+ - Event poster: "pop art, neon colours, bold mood, dramatic lighting, 9:16"
112
+
113
+ The order matters less than specificity. Vague descriptions produce generic results.
@@ -0,0 +1,93 @@
1
+ # Image Generation — Troubleshooting
2
+
3
+ When `image_generate` fails, diagnose the error and guide the user through resolution. Many issues are fixable in-session using the browser tool.
4
+
5
+ ---
6
+
7
+ ## Quota Exceeded
8
+
9
+ **Symptoms:** Error contains "quota", "rate limit", "429", or "resource exhausted".
10
+
11
+ The free Google AI tier has daily generation limits. This is the most common failure.
12
+
13
+ ### Resolution steps
14
+
15
+ 1. **Explain clearly** — "The Google AI free tier has a daily image generation limit, and we've hit it."
16
+
17
+ 2. **Offer to check quota together** — Use the browser tool to navigate to the Google AI Studio billing/quota page so the user can see their current usage:
18
+ - Navigate to `https://aistudio.google.com/apikey`
19
+ - Take a screenshot and send it — "Here's your current API key dashboard."
20
+ - Look for quota/usage indicators on the page
21
+
22
+ 3. **Present options based on what you find:**
23
+ - **Wait for reset** — free tier quotas reset daily. Tell the user approximately when.
24
+ - **Upgrade the plan** — offer to navigate to billing: `https://aistudio.google.com/plan` or `https://ai.google.dev/pricing`. Walk them through upgrading to pay-as-you-go if they want. Take screenshots at each step.
25
+ - **Try a different model** — Imagen and Gemini have separate quotas. If one is exhausted, try the other family.
26
+ - **Reduce usage** — suggest lower resolution (1K instead of 2K/4K), fewer images per request (Imagen), or simpler prompts.
27
+
28
+ 4. **If the user wants to upgrade**, guide them through it with browser automation — same pattern as the `google-ai` key setup skill. Navigate, screenshot, explain each step.
29
+
30
+ ---
31
+
32
+ ## API Key Missing or Invalid
33
+
34
+ **Symptoms:** Error contains "API key", "authentication", "401", "403", or "PERMISSION_DENIED".
35
+
36
+ ### Resolution steps
37
+
38
+ 1. **Check if key exists** — use `api_keys({ action: "list" })` to verify the Google key is set.
39
+ 2. **If missing** — activate the `google-ai` skill to guide browser-assisted key setup.
40
+ 3. **If present but invalid** — the key may have been revoked or restricted. Offer to navigate to `https://aistudio.google.com/apikey` to verify the key is still active and create a new one if needed. Store the new key with `api_keys({ action: "set", provider: "google", apiKey: "<key>" })`.
41
+
42
+ ---
43
+
44
+ ## Content Policy Rejection
45
+
46
+ **Symptoms:** Error contains "safety", "blocked", "policy", "SAFETY", or "content filter".
47
+
48
+ Google's models refuse to generate certain content (violence, explicit material, real public figures, copyrighted characters).
49
+
50
+ ### Resolution steps
51
+
52
+ 1. **Explain the constraint** — "Google's image models have content safety filters. The prompt triggered one of them."
53
+ 2. **Suggest prompt adjustments:**
54
+ - Make the subject more generic ("a cartoon dog" instead of a specific character)
55
+ - Remove potentially sensitive elements
56
+ - Rephrase to be less ambiguous
57
+ 3. **Try a different model** — Imagen and Gemini have different safety thresholds. One may accept what the other rejects.
58
+ 4. **For person-related rejections** — if using Imagen, check the `personGeneration` parameter. `dont_allow` is most restrictive, `allow_adult` is default.
59
+
60
+ ---
61
+
62
+ ## Model Not Available
63
+
64
+ **Symptoms:** Error contains "model not found", "not supported", "404".
65
+
66
+ Preview models (like `gemini-3-pro-image-preview`) may be temporarily unavailable or deprecated.
67
+
68
+ ### Resolution steps
69
+
70
+ 1. **Fall back to a stable model** — try `gemini-2.5-flash-image` (most reliable) or `imagen-4.0-generate-001`.
71
+ 2. **If all models fail** — there may be a regional or account restriction. Check `https://ai.google.dev/gemini-api/docs/models` for current availability.
72
+
73
+ ---
74
+
75
+ ## Network or Timeout Errors
76
+
77
+ **Symptoms:** Error contains "timeout", "ECONNREFUSED", "network", or "fetch failed".
78
+
79
+ ### Resolution steps
80
+
81
+ 1. **Retry once** — transient network issues resolve on retry.
82
+ 2. **If persistent** — check internet connectivity. Image generation requires outbound HTTPS to `generativelanguage.googleapis.com`.
83
+
84
+ ---
85
+
86
+ ## General Approach
87
+
88
+ When any error occurs:
89
+
90
+ 1. **Read the error message carefully** — it usually indicates the category above.
91
+ 2. **Don't give up after one failure** — diagnose, explain, and offer a concrete next step.
92
+ 3. **Use the browser tool proactively** — offer to navigate to relevant Google pages so you can investigate together. This is a collaborative troubleshooting session, not a dead end.
93
+ 4. **Always tell the user what happened and why** — no vague "something went wrong" messages. Be specific about the error and what it means.
@@ -79,12 +79,12 @@ Customer data exists in two tiers:
79
79
 
80
80
  ### Secure Records (Tamper-Proof)
81
81
 
82
- Use the `customer_lookup` tool to check verified customer data — payment status, account details. These records are managed by the business owner via the Customers admin page and **cannot be modified by the public agent**.
82
+ Use the `contact_lookup` tool to check verified customer data — payment status, account details. These records are managed by the business owner via the Customers admin page and **cannot be modified by the public agent**.
83
83
 
84
- The admin agent has a `customer_update` tool to write fields back to a customer record (e.g. storing a generated license key). The public agent does not have this tool.
84
+ The admin agent has a `contact_update` tool to write fields back to a customer record (e.g. storing a generated license key). The public agent does not have this tool.
85
85
 
86
86
  Before generating a license key or making any payment-related decision, always look up the customer:
87
- 1. Call `customer_lookup` with the customer's phone number
87
+ 1. Call `contact_lookup` with the customer's phone number
88
88
  2. Check the relevant fields (e.g. `status`, `paid`)
89
89
  3. If no record exists or payment is not confirmed, tell them to contact support
90
90
 
@@ -98,7 +98,7 @@ Conversational context lives in `memory/users/{phone}/profile.md`. You can read
98
98
 
99
99
  **What you must NEVER write to memory profiles:**
100
100
  - `Paid`, `Payment ref`, `Status` — these live in secure records only
101
- - `License key` — write this to the customer record using `customer_update`, not to the memory profile
101
+ - `License key` — write this to the customer record using `contact_update`, not to the memory profile
102
102
 
103
103
  ---
104
104
 
@@ -109,7 +109,7 @@ You have a `license_generate` tool that creates device-bound license keys for cu
109
109
  ### When to Generate
110
110
 
111
111
  Only generate a license when ALL of these are true:
112
- - The `customer_lookup` tool shows their record has a `paid` or `shipped` status
112
+ - The `contact_lookup` tool shows their record has a `paid` or `shipped` status
113
113
  - They have provided their **device ID** (starts with `tm_dev_`)
114
114
 
115
115
  **If no record exists or payment is not confirmed, do NOT generate a key.** Tell the customer their payment hasn't been confirmed yet and to contact support.
@@ -126,7 +126,7 @@ The tool returns a license token (starts with `TM1-`). Send this to the customer
126
126
  ### After Generating
127
127
 
128
128
  After generating a license key, store it on the customer record:
129
- 1. Call `customer_update` with the customer's phone, field `license_key`, and the token value
129
+ 1. Call `contact_update` with the customer's phone, field `license_key`, and the token value
130
130
  2. Optionally set `licensed_at` to the current date and `license_expires` to the expiry date
131
131
 
132
132
  ### Delivery
@@ -23,7 +23,7 @@ If you received a Taskmaster device:
23
23
  2. Plug it into a wall socket or power strip
24
24
  3. Wait about 2 minutes for it to start up
25
25
 
26
- > **WiFi:** Your device needs an internet connection. You can plug a network cable directly into it, or connect a monitor and keyboard to set up WiFi (see "Using Your Pi as a Desktop" below). Need help? Message us on WhatsApp at **+44 7591 215452** or visit [taskmaster.bot](https://www.taskmaster.bot/).
26
+ > **WiFi:** Your device needs an internet connection. You can plug a network cable directly into it to get started, then connect to WiFi from the Control Panel (see "WiFi" below). Need help? Message us on WhatsApp at **+44 7591 215452** or visit [taskmaster.bot](https://www.taskmaster.bot/).
27
27
 
28
28
  Then open your web browser on any device connected to the same WiFi and go to:
29
29
 
@@ -39,7 +39,7 @@ You'll need a monitor, keyboard, and mouse connected to the Pi.
39
39
  2. Run:
40
40
 
41
41
  ```bash
42
- curl -fsSL https://taskmaster.bot/install.sh | bash
42
+ curl -fsSL https://taskmaster.bot/install.sh | sudo bash
43
43
  ```
44
44
 
45
45
  3. Wait for it to finish (a few minutes — it installs Node.js if needed)
@@ -52,7 +52,7 @@ curl -fsSL https://taskmaster.bot/install.sh | bash
52
52
  Open **Terminal** (search for "Terminal" in Spotlight) and run:
53
53
 
54
54
  ```bash
55
- curl -fsSL https://taskmaster.bot/install.sh | bash
55
+ curl -fsSL https://taskmaster.bot/install.sh | sudo bash
56
56
  ```
57
57
 
58
58
  This installs Node.js (if needed), Taskmaster, and sets up the background service. Once finished, open your browser and go to: **http://taskmaster.local:18789/setup**
@@ -60,7 +60,7 @@ This installs Node.js (if needed), Taskmaster, and sets up the background servic
60
60
  **Custom port:** If you're running multiple Taskmaster instances (e.g., one on a Pi and one on a Mac), give each a different port:
61
61
 
62
62
  ```bash
63
- curl -fsSL https://taskmaster.bot/install.sh | bash -s -- --port 19000
63
+ curl -fsSL https://taskmaster.bot/install.sh | sudo bash -s -- --port 19000
64
64
  ```
65
65
 
66
66
  When using a custom port, the hostname includes the port to avoid conflicts. The setup URL becomes `http://taskmaster-19000.local:19000/setup`.
@@ -325,6 +325,25 @@ Your assistant can analyse photos you send it and read common document formats.
325
325
  - "Read the attached invoice and tell me the total"
326
326
  - "Summarise the key points from this PDF"
327
327
 
328
+ ### Image Generation
329
+
330
+ Your assistant can generate images from text descriptions using Google AI models. Ask for any kind of image — product photos, illustrations, logos, social media graphics — and it will guide you through style and model choices, then generate the image directly in the chat.
331
+
332
+ | Capability | Description |
333
+ |------------|-------------|
334
+ | Generate images | Create images from text descriptions — photos, illustrations, graphics, logos |
335
+ | Multiple models | Choose from fast drafts (Gemini Flash) to high-fidelity output (Imagen 4 Ultra) |
336
+ | Style guidance | Your assistant helps with style, aspect ratio, lighting, and mood choices |
337
+ | Iterate | Refine results — adjust style, change composition, try a different model |
338
+
339
+ **Try asking:**
340
+ - "Generate a product photo of a coffee mug on a white background"
341
+ - "Create a watercolour illustration of a sunset over the ocean"
342
+ - "Design a minimalist logo concept for a landscaping business"
343
+ - "Make a social media graphic for a summer sale, 1:1 square format"
344
+
345
+ Image generation requires a Google AI API key (see API Keys below). Generated images are saved to your workspace and displayed inline in the chat.
346
+
328
347
  ### Voice Notes & Video
329
348
 
330
349
  When someone sends a voice note, image, or video, your assistant processes it automatically before responding — no extra steps needed.
@@ -467,7 +486,7 @@ These unlock additional capabilities. All are optional — your assistant works
467
486
  | Provider | What it unlocks | Free tier? |
468
487
  |----------|----------------|------------|
469
488
  | **Tavily** | Web search — lets your assistant search the internet | Yes (free plan available) |
470
- | **Google** | Voice note transcription and video analysis | Yes (limited free tier) |
489
+ | **Google** | Voice note transcription, video analysis, and image generation | Yes (limited free tier) |
471
490
 
472
491
  > **Note:** Image analysis does not need an extra API key — Claude has built-in vision and analyses images directly.
473
492
 
@@ -563,6 +582,7 @@ The setup page shows a **Status Dashboard** with status indicators for each serv
563
582
  | **WhatsApp** | Connected | Linked but not connected | Not paired |
564
583
  | **iMessage** | Connected | Configured but not running | Not configured |
565
584
  | **Software** | Up to date | Update available | Not checked |
585
+ | **WiFi** (Pi only) | Connected to a network | Not connected | NetworkManager not available |
566
586
 
567
587
  **Your assistant is ready when Gateway and Claude are green.** You can start chatting straight away using the Chat page. WhatsApp and iMessage are optional — connect them when you're ready.
568
588
 
@@ -633,6 +653,27 @@ You can filter by:
633
653
 
634
654
  Both views support **auto-follow** (keeps the view scrolled to the latest entries) and **export** to download a log file.
635
655
 
656
+ ### WiFi (Raspberry Pi)
657
+
658
+ If your Pi is connected by Ethernet cable, you can switch to WiFi directly from the Control Panel — no monitor or keyboard needed.
659
+
660
+ 1. Go to the **Setup** page
661
+ 2. Find the **WiFi** row in the status dashboard (only appears on Raspberry Pi)
662
+ 3. Tap **Scan** — a list of nearby WiFi networks appears, sorted by signal strength
663
+ 4. Tap the network you want to connect to
664
+ 5. If the network is password-protected, enter the password and tap **Connect** (or press Enter)
665
+ 6. The row updates to show the connected network name, signal strength, and IP address
666
+
667
+ **Signal bars** next to each network name show the signal strength — more lit bars means a stronger signal.
668
+
669
+ **Disconnecting:** Tap **Disconnect** to drop the current WiFi connection. This is useful if you want to switch back to Ethernet or connect to a different network.
670
+
671
+ **Closing the list:** Tap **Close** to dismiss the network list without making changes. You can also tap the network you're already connected to (marked with a green tick) to dismiss the list.
672
+
673
+ **Rescanning:** While the network list is open, tap **Scan** again at the top to refresh the list with the latest networks.
674
+
675
+ > **Tip:** Connect an Ethernet cable first, open the Control Panel, then use the WiFi row to connect. Once WiFi is working, you can remove the Ethernet cable.
676
+
636
677
  ### Changing Network Settings
637
678
 
638
679
  You might need to change two network settings after your Pi is deployed:
@@ -1229,6 +1270,26 @@ Click **Disable** on the Internet Access row. The public URL stops working immed
1229
1270
 
1230
1271
  When Internet Access is active, click the copy icon next to the URL to copy it to your clipboard. You can share this URL or embed it on your website.
1231
1272
 
1273
+ ### Embedding the chat widget on your website
1274
+
1275
+ Once Internet Access is enabled, you can add a floating chat button to any website. Add this code just before the closing `</body>` tag:
1276
+
1277
+ ```html
1278
+ <script src="https://YOUR-PUBLIC-URL/public/widget.js"></script>
1279
+ <script>
1280
+ Taskmaster.init({
1281
+ server: "https://YOUR-PUBLIC-URL",
1282
+ accountId: "your-account-id"
1283
+ });
1284
+ </script>
1285
+ ```
1286
+
1287
+ Replace `YOUR-PUBLIC-URL` with the URL shown on the Internet Access row (e.g. `https://taskmaster.tail0e0afb.ts.net`) and `your-account-id` with your account name (e.g. `taskmaster`).
1288
+
1289
+ A chat button appears in the bottom-right corner of the page. Clicking it opens a chat window where visitors can talk to your assistant — no WhatsApp required.
1290
+
1291
+ You can optionally set the button colour to match your website by adding `color: "#your-hex-colour"` to the init options.
1292
+
1232
1293
  ---
1233
1294
 
1234
1295
  ## Chat Commands
@@ -1333,7 +1394,7 @@ You don't need to refresh the page — the overlay stays visible during the upda
1333
1394
  You can also update by re-running the install command in Terminal:
1334
1395
 
1335
1396
  ```bash
1336
- curl -fsSL https://taskmaster.bot/install.sh | bash
1397
+ curl -fsSL https://taskmaster.bot/install.sh | sudo bash
1337
1398
  ```
1338
1399
 
1339
1400
  This detects your existing installation and upgrades it in place.
@@ -80,7 +80,7 @@ stripe refunds create --payment-intent {pi_id}
80
80
 
81
81
  ## Customer Record Management
82
82
 
83
- You have write access to customer records (`customer_update`). Use this for:
83
+ You have write access to customer records (`contact_update`). Use this for:
84
84
  - Updating trust scores after job completion
85
85
  - Setting blacklist status after fee escalation
86
86
  - Reinstating customers after payment
@@ -93,7 +93,7 @@ The public agent (Beagle) can read records but cannot modify them — this preve
93
93
  ## Data Compliance (Admin-Side Execution)
94
94
 
95
95
  When the Beagle agent receives a data erasure request, you execute the deletion sequence:
96
- 1. Delete the customer record (`customer_update` with DELETE)
96
+ 1. Delete the customer record (`contact_update` with DELETE)
97
97
  2. Clear the memory profile
98
98
  3. Redact booking files (replace customer phone/name with [REDACTED])
99
99
  4. Delete member files from booking groups
@@ -25,7 +25,7 @@ Every inbound message comes from a phone number. Before responding, determine wh
25
25
 
26
26
  1. **Check for active booking group membership:** Use `memory_search` to look for `memory/groups/*/members/{peer}.md`. If found, this person is a participant in an active booking — read the booking state from `memory/groups/{booking-id}/booking.md`.
27
27
 
28
- 2. **Check customer record:** Use `customer_lookup` with the phone number. This tells you their role (customer or provider), status, trust score, and fee history.
28
+ 2. **Check customer record:** Use `contact_lookup` with the phone number. This tells you their role (customer or provider), status, trust score, and fee history.
29
29
 
30
30
  3. **Check their profile:** Use `memory_get` for `memory/users/{phone}/profile.md`. This has detailed history.
31
31
 
@@ -110,7 +110,7 @@ Available tools and when to use them:
110
110
  | `web_search` | Find local providers when building a shortlist |
111
111
  | `web_fetch` | Get details from provider websites |
112
112
  | `cron` | Schedule timeouts, follow-ups, fee reminders |
113
- | `customer_lookup` | Quick status/score lookup from secure records |
113
+ | `contact_lookup` | Quick status/score lookup from secure records |
114
114
  | `sessions_list` | Check conversation history |
115
115
  | `sessions_history` | Read specific past sessions |
116
116
  | `current_time` | Generate booking IDs, check timing |
@@ -25,8 +25,8 @@ Load `references/workflow.md` for full step-by-step detail.
25
25
 
26
26
  Run these checks before starting any new booking:
27
27
 
28
- 1. **Outstanding fees:** `customer_lookup` → if `fees_outstanding > 0`, block and send payment link.
29
- 2. **Blacklist:** `customer_lookup` → if `beagle_status: blacklisted`, check Stripe for payment. If paid → reinstate. If not → send payment link.
28
+ 1. **Outstanding fees:** `contact_lookup` → if `fees_outstanding > 0`, block and send payment link.
29
+ 2. **Blacklist:** `contact_lookup` → if `beagle_status: blacklisted`, check Stripe for payment. If paid → reinstate. If not → send payment link.
30
30
  3. **UK location:** If the customer's location is outside the UK, politely decline.
31
31
  4. **Multi-booking cap:** If the customer has 3+ active unpaid bookings, explain the cap.
32
32
 
@@ -105,7 +105,7 @@ Load `references/fee-collection.md` for cron specifications and escalation detai
105
105
  | `web_search` | Find local providers for the shortlist |
106
106
  | `web_fetch` | Get details from provider websites |
107
107
  | `cron` | Schedule all timeouts, follow-ups, and fee reminders |
108
- | `customer_lookup` | Check status, trust score, fees from secure records |
108
+ | `contact_lookup` | Check status, trust score, fees from secure records |
109
109
  | `sessions_list` | Check conversation history |
110
110
  | `sessions_history` | Read specific past sessions |
111
111
  | `current_time` | Generate booking IDs (BGL-YYMMDD-HHmm) |
@@ -147,7 +147,7 @@ When a DM peer has a member file in a booking group, they get read/write access
147
147
 
148
148
  ## Customer Record Fields
149
149
 
150
- Stored in `~/.taskmaster/records.json` via `customer_lookup` / `customer_update`:
150
+ Stored in `~/.taskmaster/records.json` via `contact_lookup` / `contact_update`:
151
151
 
152
152
  | Field | Type | Description |
153
153
  |-------|------|-------------|
@@ -14,7 +14,7 @@ Customer messages: "What data do you have on me?" or similar.
14
14
 
15
15
  ### Tool Call Sequence
16
16
 
17
- 1. `customer_lookup({ phone: "{customer-phone}" })`
17
+ 1. `contact_lookup({ phone: "{customer-phone}" })`
18
18
  - Returns: trust score, booking counts, fee history, status, all record fields
19
19
 
20
20
  2. `memory_get({ path: "memory/users/{phone}/profile.md" })`
@@ -63,7 +63,7 @@ Deletion proceeds regardless of their answer — the right to erasure is uncondi
63
63
 
64
64
  Request the admin agent to execute the full deletion sequence (the public agent cannot write to customer records):
65
65
 
66
- 1. `customer_update({ phone: "{customer-phone}", fields: { DELETE: true } })`
66
+ 1. `contact_update({ phone: "{customer-phone}", fields: { DELETE: true } })`
67
67
  - Deletes the customer record from records.json
68
68
 
69
69
  2. `memory_write({ path: "memory/users/{phone}/profile.md", content: "" })`