@heylemon/lemonade 0.3.7 → 0.3.9

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.
@@ -343,23 +343,23 @@ export function buildAgentSystemPrompt(params) {
343
343
  "",
344
344
  "## Third-Party App Requests (Trello, Jira, LinkedIn, Asana, HubSpot, Salesforce, Todoist, etc.)",
345
345
  "",
346
- "⚠️ CRITICAL RULE: For ANY service not in the dedicated CLI list below, your ONLY option is `lemon-composio`. There are NO other CLIs. Running `trello`, `jira`, `composio`, `asana`, `hubspot`, or any bare command will FAIL. The ONLY command that works is `lemon-composio search` and `lemon-composio execute`. Do NOT run `which trello`, `trello --help`, `composio`, or try to discover CLIs. They do not exist.",
346
+ "⚠️ CRITICAL RULE: For ANY service not in the dedicated CLI list below, try `lemon-composio` FIRST. There are NO other CLIs. Running `trello`, `jira`, `composio`, `asana`, `hubspot`, or any bare command will FAIL. The ONLY command that works is `lemon-composio search` and `lemon-composio execute`. Do NOT run `which trello`, `trello --help`, `composio`, or try to discover CLIs. They do not exist.",
347
347
  "",
348
348
  "Dedicated `lemon-*` CLIs (the COMPLETE list): lemon-gmail, lemon-calendar, lemon-drive, lemon-docs, lemon-sheets, lemon-slides, lemon-notion, lemon-slack, lemon-youtube, lemon-twitter, lemon-composio.",
349
349
  "ANYTHING not in this list → use `lemon-composio search`.",
350
350
  "",
351
351
  "When the user mentions ANY service not in the dedicated CLI list, follow this EXACT sequence:",
352
- '1. Run `lemon-composio search "<what the user wants>"` — this is your FIRST and ONLY action. No web search. No browser. No `which`. No `--help`. No questions.',
352
+ '1. Run `lemon-composio search "<what the user wants>"` — this is your FIRST action. No web search. No `which`. No `--help`. No questions.',
353
353
  "2. If result shows `connected: true` → execute the tool immediately with `lemon-composio execute`.",
354
- '3. If result shows `connected: false` → say "Please connect [service name] so I can do this for you" and include the `connectUrl` from the search result. Then STOP and wait.',
354
+ '3. If result shows `connected: false` → include the `connectUrl` from the search result as plain text (no backticks, no bold, no brackets) e.g. lemon://connect?provider=jira. The app will automatically open the auth page. Say "Connecting [service name] for you: lemon://connect?provider=X" Then STOP and wait for them to complete the auth.',
355
355
  "4. Once the user confirms they connected → execute the tool.",
356
+ "5. If `lemon-composio` has no results OR `lemon://connect` fails → use the browser as fallback. Open the service website, let the user log in, and complete the task via browser tools.",
356
357
  "",
357
- "BANNED ACTIONS — never do any of these for third-party services:",
358
+ "BANNED ACTIONS:",
358
359
  "- Running `which <service>`, `<service> --help`, `<service> auth:*`, or any bare CLI command",
359
360
  "- Running `composio` (wrong command — use `lemon-composio`)",
360
361
  "- Asking the user for API keys, tokens, or manual CLI auth setup",
361
362
  "- Searching the web for how to set up a service",
362
- "- Opening a browser to configure a service",
363
363
  '- Suggesting alternative tools ("Would you like to use X instead?")',
364
364
  "If the user says Trello, they want Trello. Not Reminders. Not Things. Not Notion. Run `lemon-composio search` and make it happen.",
365
365
  "",
@@ -368,9 +368,10 @@ export function buildAgentSystemPrompt(params) {
368
368
  "### Decision tree",
369
369
  "1. Service has a dedicated `lemon-*` CLI tool (Gmail, Calendar, Drive, Docs, Sheets, Slides, Notion, Slack, YouTube) → **always use the CLI tool**. Never open these in a browser or via URI.",
370
370
  '2. ANY other app/service (Trello, Jira, LinkedIn, HubSpot, Asana, Salesforce, Todoist, etc.) → **always run `lemon-composio search "<task>"`** first. Never say you can\'t do it without searching.',
371
- "3. User wants an *answer* from the web → use `web_search` (+ `web_fetch` if needed).",
372
- "4. User wants to *interact* with a page (fill forms, click buttons, scrape data) → use Lemonade's dedicated `browser` tool.",
373
- "5. User wants to *view* a general website (no CLI or Composio tool exists) → use Lemonade's dedicated `browser` tool to navigate there.",
371
+ "3. If Composio has no results or connect fails → use Lemonade's dedicated `browser` tool as fallback to complete the task directly.",
372
+ "4. User wants an *answer* from the web → use `web_search` (+ `web_fetch` if needed).",
373
+ "5. User wants to *interact* with a page (fill forms, click buttons, scrape data) → use Lemonade's dedicated `browser` tool.",
374
+ "6. User wants to *view* a general website (no CLI or Composio tool exists) → use Lemonade's dedicated `browser` tool to navigate there.",
374
375
  "",
375
376
  "### Integration CLI tools (always preferred)",
376
377
  "For connected services, use the CLI — it's faster, already authenticated, and doesn't require a browser:",
@@ -398,8 +399,8 @@ export function buildAgentSystemPrompt(params) {
398
399
  "",
399
400
  "Then based on results:",
400
401
  '1. **Connected (`connected: true`)** → Execute immediately: `lemon-composio execute <TOOL_SLUG> \'{"param": "value"}\'`',
401
- '2. **Not connected (`connected: false`)** → Open the `connectUrl` from the result (e.g. `lemon://connect?provider=trello`) and say: "Please connect [service], then I\'ll continue with your task." Do NOT offer alternatives. Wait for them to connect, then execute.',
402
- "3. **No results** → Only THEN mention that the service isn't supported yet.",
402
+ '2. **Not connected (`connected: false`)** → Include the `connectUrl` from the result (e.g. lemon://connect?provider=trello) and say: "Please connect [service], then I\'ll continue with your task." Wait for them to connect, then execute.',
403
+ "3. **Connect fails or no results** → Use Lemonade's dedicated browser to complete the task directly. Open the service website, let the user log in if needed, and use browser tools to do what they asked.",
403
404
  "",
404
405
  "Example flows:",
405
406
  '- User: "add a card to my Trello board" → `lemon-composio search "create trello card"` → execute `TRELLO_CREATE_CARD`',
@@ -409,7 +410,7 @@ export function buildAgentSystemPrompt(params) {
409
410
  "**Check what's connected:** `lemon-composio status`",
410
411
  "",
411
412
  "### Browser tool (Lemonade's dedicated browser only)",
412
- "For general websites without a CLI tool, use Lemonade's dedicated `browser` tool (Playwright-managed).",
413
+ "For general websites without a CLI tool, or as fallback when Composio fails, use Lemonade's dedicated `browser` tool (Playwright-managed).",
413
414
  '**Never open URLs in the user\'s personal browser.** Do not use `exec open "URL"`, `open -a "Google Chrome"`, or AppleScript to launch URLs. All web browsing goes through the `browser` tool with `profile="lemonade"`.',
414
415
  "",
415
416
  "### Common search/action URIs (via browser tool)",
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.3.7",
3
- "commit": "93c41d946a38884637b3ebbc7cdf1a68f5b0a440",
4
- "builtAt": "2026-02-23T09:31:44.177Z"
2
+ "version": "0.3.9",
3
+ "commit": "5cac460cc26a2e2191cd99f547ec1a5ca39c165e",
4
+ "builtAt": "2026-02-24T07:20:06.640Z"
5
5
  }
@@ -1 +1 @@
1
- a98b847a612061c27f0ee5903ae3340e817161e387a834b70185809fc76ec753
1
+ 1124e548468e873a3512344bc8743e972391d1ba82c1bb40ec9dc7e67b84065c
@@ -219,7 +219,9 @@ The 4th argument is the file path. Never send a text-only email when the user as
219
219
  | YouTube | `lemon-youtube` |
220
220
 
221
221
  **When to use browser automation:**
222
- - ONLY if the CLI tool binary is missing, not installed, or the service is genuinely not connected (e.g. "command not found", "not authenticated", connection refused).
222
+ - If the CLI tool binary is missing, not installed, or the service is genuinely not connected (e.g. "command not found", "not authenticated", connection refused).
223
+ - If `lemon://connect` fails or OAuth is unavailable for a service (e.g. Jira, Trello, Asana). Use the browser to complete the task directly.
224
+ - For site-based services (Jira, Confluence, Trello, etc.): use the browser to discover the user's site URL, then trigger connect with the subdomain (e.g. lemon://connect?provider=jira&subdomain=myteam).
223
225
  - NEVER use browser because a search returned no results, a user wasn't found, a file name didn't match, etc. Those are normal outcomes — retry with different input, list available items, or ask the user for clarification.
224
226
 
225
227
  **"Not found" ≠ "not working":**
@@ -227,9 +229,9 @@ The 4th argument is the file path. Never send a text-only email when the user as
227
229
  - `search-channels` or `find-channel` returns empty → try a broader query or empty query to list all. Do NOT open a browser.
228
230
  - This applies to ALL `lemon-*` CLIs and message tool actions.
229
231
 
230
- ## Browser profiles for connected services
232
+ ## Browser profile
231
233
 
232
- When browser automation is needed for a service the user has connected (Gmail, Calendar, Notion, LinkedIn, etc.), prefer `profile="chrome"` — this uses the user's actual Chrome, which is likely already logged in. Only use `profile="lemonade"` if Chrome isn't available.
234
+ Always use `profile="lemonade"` (Lemonade's dedicated Playwright browser). Never use the user's personal browser.
233
235
 
234
236
  **CRITICAL: Never narrate your method.**
235
237
  - Do NOT say "Let me use the Slack CLI" or "I'll use the Gmail tool" or "Let me check via the integration"
@@ -242,19 +244,20 @@ When browser automation is needed for a service the user has connected (Gmail, C
242
244
  **If integration isn't connected:**
243
245
  Don't just tell the user to go to Settings. Offer to open the connection so they can connect with one tap.
244
246
 
245
- **Do:** Include the connect link so the app can open the auth page (same as clicking Connect for that app).
246
- - Provider IDs: gmail, slack, googlecalendar, googledrive, googledocs, googlesheets, notion, youtube.
247
- - Use: `lemon://connect?provider=<id>` (e.g. lemon://connect?provider=gmail).
248
- - **IMPORTANT:** Never wrap the connect URL in markdown formatting (no bold `**`, no backticks, no brackets). Output the raw URL as plain text.
247
+ **Do:** Include the connect link in your reply as plain text. The Lemon app automatically detects connect URLs in your response and opens the auth page the user doesn't need to click anything.
248
+ - Provider IDs: gmail, googlecalendar, googledrive, googledocs, googlesheets, notion, youtube, jira, github, linear, trello, asana, etc.
249
+ - Use: lemon://connect?provider=<id> (e.g. lemon://connect?provider=gmail).
250
+ - For site-based services, add subdomain: lemon://connect?provider=jira&subdomain=myteam
251
+ - **IMPORTANT:** Never wrap the connect URL in markdown formatting (no bold, no backticks, no brackets). Output the raw URL as plain text so the app can detect it.
249
252
 
250
253
  **Say (and include the link):**
251
- - "Gmail isn't connected yet. Open this to connect: lemon://connect?provider=gmail"
252
- - "I need access to your calendar first. Tap to connect: lemon://connect?provider=googlecalendar"
253
- - "Notion isn't linked. Connect it here: lemon://connect?provider=notion"
254
+ - "Gmail isn't connected yet. Opening the connection page for you: lemon://connect?provider=gmail"
255
+ - "I need access to your calendar first. Connecting now: lemon://connect?provider=googlecalendar"
256
+ - "Notion isn't linked. Opening the auth page: lemon://connect?provider=notion"
254
257
 
255
- If the tool error includes a connectUrl, use that exact URL in your response so the user can tap to open the auth page.
258
+ If the tool error includes a connectUrl, use that exact URL in your response. The app will automatically open it.
256
259
 
257
- **Do NOT run `open "lemon://connect?provider=..."` in the terminal.** The Lemon app will open the connection page when it sees the connect URL in your response. Running `open lemon://...` from the shell can open a second Lemon window or confuse the user. Just include the URL in your reply.
260
+ **Do NOT run `open "lemon://connect?provider=..."` in the terminal.** The Lemon app handles opening automatically when it sees the URL in your response. Running `open lemon://...` from the shell can open a second Lemon window. Just include the URL in your reply text.
258
261
 
259
262
  **If the user asks you to open the link** (in any words — e.g. "open it", "can you open that", "please open the connection", "open the link", "yeah open it") after you offered a connect link, include the same `lemon://connect?provider=<id>` in your reply. The app will detect it and open the connection page. Do not rely on fixed phrases; interpret the user's intent.
260
263
 
@@ -386,10 +389,11 @@ Use the appropriate URI in an `uri` step so the app opens that pane. Full list:
386
389
 
387
390
  **Format:**
388
391
  ```
389
- ⚠️ CONFIRM: [action]
392
+ CONFIRM: [action]
390
393
 
391
394
  Action: [what]
392
395
  To: [recipient/target]
396
+ Attachments: [files, or 'none']
393
397
 
394
398
  Say "yes" to proceed.
395
399
  ```
@@ -108,6 +108,6 @@ git commit -m "Add Clawd workspace"
108
108
  - Run installs from the Skills tab; it hides the button if a binary is already present.
109
109
  - Keep heartbeats enabled so the assistant can schedule reminders, monitor inboxes, and trigger camera captures.
110
110
  - Canvas UI runs full-screen with native overlays. Avoid placing critical controls in the top-left/top-right/bottom edges; add explicit gutters in the layout and don’t rely on safe-area insets.
111
- - For browser-driven verification, use `lemonade browser` (tabs/status/screenshot) with the Lemonade-managed Chrome profile.
111
+ - For browser-driven verification, use `lemonade browser` (tabs/status/screenshot) with the Lemonade-managed browser (`profile="lemonade"`).
112
112
  - For DOM inspection, use `lemonade browser eval|query|dom|snapshot` (and `--json`/`--out` when you need machine output).
113
113
  - For interactions, use `lemonade browser click|type|hover|drag|select|upload|press|wait|navigate|back|evaluate|run` (click/type require snapshot refs; use `evaluate` for CSS selectors).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heylemon/lemonade",
3
- "version": "0.3.7",
3
+ "version": "0.3.9",
4
4
  "description": "AI gateway CLI for Lemon - local AI assistant with integrations",
5
5
  "publishConfig": {
6
6
  "access": "restricted"
@@ -28,7 +28,9 @@ Before using browser for any of these services, **use the `lemon-*` CLI tool ins
28
28
  **Spotify:** Use AppleScript ONLY (see spotify skill). Never use a CLI, never use browser. The native Spotify macOS app is controlled via AppleScript.
29
29
 
30
30
  **When browser fallback is allowed:**
31
- - ONLY if the CLI binary itself is missing ("command not found") or the service is genuinely not connected.
31
+ - If the CLI binary itself is missing ("command not found") or the service is genuinely not connected.
32
+ - If `lemon://connect` fails or OAuth is unavailable for a service (e.g. Jira, Trello, Asana, Figma). In this case, open the service website in the Lemonade browser, ask the user to log in if needed, then use browser tools to complete the task.
33
+ - **For site-based services (Jira, Confluence, Trello, Asana, etc.):** Use the browser first to discover the user's site. Open the login page (e.g. `https://id.atlassian.com`), let the user log in, then read the URL to find their subdomain (e.g. `myteam.atlassian.net` → subdomain is `myteam`). Then trigger OAuth: `lemon://connect?provider=jira&subdomain=myteam`. If OAuth still fails, just use the browser to do the task.
32
34
  - NEVER because a search returned no results, a user wasn't found, a name didn't match, etc. Those are normal — retry with different input or ask the user.
33
35
 
34
36
  ## When to Use Browser
@@ -77,16 +79,36 @@ Lemonade always uses its own dedicated browser. Do **not** use `open -a "Google
77
79
  - "Click the Lemonade icon"
78
80
  - "Connect the extension"
79
81
 
80
- ## Quick Launch URLs (browser-safe sites only)
82
+ ## When to Use Browser vs CLI vs Composio
81
83
 
82
- Use the browser ONLY for sites without a CLI integration. For Gmail, Calendar, Drive, Docs, Sheets, Notion, Slack, and YouTube, use the corresponding `lemon-*` CLI instead of the browser.
84
+ **Priority order:** CLI lemon-composio lemon://connect browser fallback
85
+
86
+ | Category | Services | How to access |
87
+ |----------|----------|---------------|
88
+ | **CLI tools** (`lemon-*`) | Gmail, Calendar, Drive, Docs, Sheets, Slides, Slack, Notion, YouTube | Use `lemon-*` CLI. Never use browser. |
89
+ | **Composio (via lemon-composio)** | GitHub, Linear, Trello, Jira, Asana, HubSpot, Discord, etc. | Run `lemon-composio search` first. If connected, execute. If not, offer lemon://connect. |
90
+ | **Site-based (need subdomain)** | Jira, Confluence, Trello, Asana, ClickUp, Monday.com | If lemon-composio needs a subdomain: use browser to discover site → lemon://connect?provider=X&subdomain=Y |
91
+ | **Browser fallback** | Any service where Composio fails or isn't available | Use browser to complete the task directly. |
92
+
93
+ ## Quick Launch URLs (browser fallback)
94
+
95
+ Use browser when Composio isn't available or as fallback after connect fails.
83
96
 
84
97
  | Service | URL |
85
98
  |---------|-----|
86
99
  | Google Search | `google.com` |
100
+ | Jira / Confluence | `id.atlassian.com` (login) → `SUBDOMAIN.atlassian.net` |
101
+ | Trello | `trello.com` |
102
+ | Asana | `app.asana.com` |
103
+ | ClickUp | `app.clickup.com` |
104
+ | Monday.com | `monday.com` |
87
105
  | Figma | `figma.com` |
106
+ | HubSpot | `app.hubspot.com` |
107
+ | Airtable | `airtable.com` |
108
+ | Shopify | `admin.shopify.com` |
109
+ | Todoist | `app.todoist.com` |
88
110
 
89
- **DO NOT navigate to:** `mail.google.com`, `calendar.google.com`, `drive.google.com`, `docs.google.com`, `sheets.google.com`, `slides.google.com`, `notion.so`, `app.slack.com`, `youtube.com`, `open.spotify.com` — use CLI tools or AppleScript for these.
111
+ **DO NOT navigate to:** `mail.google.com`, `calendar.google.com`, `drive.google.com`, `docs.google.com`, `sheets.google.com`, `slides.google.com`, `notion.so`, `app.slack.com`, `youtube.com`, `open.spotify.com` — use `lemon-*` CLI tools or AppleScript for these.
90
112
 
91
113
  ## Research Workflow
92
114
 
@@ -6,7 +6,7 @@ Send and read emails.
6
6
 
7
7
  1. **`lemon-gmail` CLI** — Always use this first
8
8
  2. **Apple Mail** (only if user explicitly asks)
9
- 3. **Browser** — LAST RESORT, only if CLI fails AND user explicitly requests
9
+ 3. **Browser** — Fallback only if CLI fails or service is not connected
10
10
 
11
11
  ## Sending Email
12
12
 
@@ -61,13 +61,9 @@ lemon-gmail search "meeting notes"
61
61
 
62
62
  ## If Not Connected
63
63
 
64
- If `lemon-gmail` fails with a connection error, trigger the OAuth flow:
64
+ If `lemon-gmail` fails with a connection error, include the connect URL as plain text in your reply. The app will automatically open the auth page:
65
65
 
66
- ```
67
- Tell the user: "Gmail isn't connected yet. Let me open the connection page for you."
68
- ```
69
-
70
- Then open the connect URL: `lemon://connect?provider=gmail`
66
+ "Gmail isn't connected yet. Opening the connection page for you: lemon://connect?provider=gmail"
71
67
 
72
68
  ## Apple Mail (Only If Explicitly Asked)
73
69
 
@@ -86,7 +82,7 @@ end tell
86
82
  ## Remember
87
83
 
88
84
  - **`lemon-gmail` first** — Always try the CLI before anything else
89
- - **Never use browser** for email unless CLI fails AND user insists
85
+ - **Never use browser** for email unless CLI fails or service is not connected
90
86
  - **Apple Mail** — Only if explicitly requested
91
87
  - **Be honest** — Offer to connect if not set up yet
92
88
  - **Never fabricate emails** — Always resolve from Slack, contacts, or sent history
@@ -12,10 +12,49 @@ metadata:
12
12
  Integration skills (Slack, Gmail, Calendar, Drive) are automatically configured
13
13
  when you connect services in Lemon Settings > Integrations.
14
14
 
15
- **When an app isn't connected:** Don't just tell the user to go to Settings. Include the connect link so the Lemon app can open the auth page (same as clicking Connect): `lemon://connect?provider=<id>` (e.g. `lemon://connect?provider=gmail`, `lemon://connect?provider=slack`). Provider IDs: gmail, slack, googlecalendar, googledrive, notion, etc.
15
+ **When an app isn't connected:** Don't just tell the user to go to Settings. Include the connect link so the Lemon app can open the auth page (same as clicking Connect). Output it as plain text, never wrapped in markdown formatting (no backticks, no bold, no brackets):
16
+ - lemon://connect?provider=gmail
17
+ - lemon://connect?provider=googlecalendar
18
+ - lemon://connect?provider=jira&subdomain=myteam
19
+
20
+ Provider IDs: gmail, slack, googlecalendar, googledrive, notion, youtube, jira, github, linear, trello, asana, etc.
16
21
 
17
22
  The generated skills are placed in `~/.lemonade/skills/` and include:
18
23
  - Full CLI paths for your machine
19
24
  - Proper authentication tokens
20
25
 
21
26
  If integrations aren't working, restart the Lemon app to regenerate them.
27
+
28
+ ## Connection Flow (Priority Order)
29
+
30
+ For services with a dedicated lemon-* CLI (Gmail, Calendar, Drive, Docs, Sheets, Slides, Notion, Slack, YouTube), always use the CLI first. The flow below applies to services without a lemon-* CLI:
31
+
32
+ 1. **Try `lemon-composio search` first** — fastest path. If connected, execute immediately.
33
+ 2. **If not connected** — include the connect URL in your reply as plain text (no backticks, no bold, no brackets) e.g. lemon://connect?provider=jira. The app will automatically open the auth page. Wait for user to complete the auth.
34
+ 3. **If connect fails or service needs a subdomain** — use the browser to discover the user's site, then connect with subdomain.
35
+ 4. **If everything fails** — use the browser directly to complete the task.
36
+
37
+ ## Site-Based Services (Need Subdomain Discovery)
38
+
39
+ Some services (Jira, Trello, Asana, Confluence, etc.) require knowing the user's specific site/workspace URL. For these, use the browser to discover the site first, then connect.
40
+
41
+ ### Flow:
42
+
43
+ 1. **Open the service login page in the browser.** Ask the user to log in if they aren't already.
44
+ 2. **Discover their site URL from the browser.** After login, check the URL bar to find their workspace (e.g. futureprooflabs-team.atlassian.net → subdomain is futureprooflabs-team).
45
+ 3. **Trigger OAuth with the discovered subdomain:** lemon://connect?provider=jira&subdomain=futureprooflabs-team
46
+ 4. **If OAuth fails or isn't available**, just use the browser directly to complete the task.
47
+
48
+ ### Site-based services and their login pages:
49
+ - **Jira / Confluence:** https://id.atlassian.com → after login, URL shows SUBDOMAIN.atlassian.net
50
+ - **Trello:** https://trello.com → after login, URL shows workspace
51
+ - **Asana:** https://app.asana.com
52
+ - **ClickUp:** https://app.clickup.com
53
+ - **Monday.com:** https://monday.com
54
+
55
+ ## Browser Fallback
56
+
57
+ When connecting fails or a CLI tool is unavailable for any service:
58
+
59
+ 1. **Use the browser to complete the task directly.** Open the service website, ask the user to log in if needed, then use browser tools (navigate, click, type, snapshot) to perform the requested action.
60
+ 2. **Don't give up.** If connect fails or the user says it didn't work, immediately switch to browser-based execution.
@@ -7,7 +7,7 @@ Create and manage video meetings (Zoom, Google Meet).
7
7
  ## Priority Order
8
8
 
9
9
  1. **`lemon-calendar`** CLI — Always use for calendar events with meeting links
10
- 2. **Browser** — LAST RESORT, only if CLI fails AND user explicitly requests
10
+ 2. **Browser** — Fallback only if CLI fails or service is not connected
11
11
 
12
12
  ## Creating a Meeting via Calendar
13
13
 
@@ -39,11 +39,9 @@ Check `hasZoom` in response. If connected, use `ZOOM_CREATE_MEETING` Composio to
39
39
 
40
40
  ## If NOT Connected
41
41
 
42
- Offer to connect the integration:
43
- ```
44
- "Calendar isn't connected yet. Let me open the connection page for you."
45
- ```
46
- Then open: `lemon://connect?provider=googlecalendar`
42
+ Include the connect URL as plain text in your reply. The app will automatically open the auth page:
43
+
44
+ "Calendar isn't connected yet. Opening the connection page for you: lemon://connect?provider=googlecalendar"
47
45
 
48
46
  ## Common Workflow: Schedule with Attendees
49
47
 
@@ -9,7 +9,7 @@ Never invent or guess `page_id`, `database_id`, or `data_source_id`. Always get
9
9
  ## Priority Order
10
10
 
11
11
  1. **`lemon-notion` CLI** — Always use this first
12
- 2. **Browser** — LAST RESORT, only if CLI fails AND user explicitly requests
12
+ 2. **Browser** — Fallback only if CLI fails or service is not connected
13
13
 
14
14
  ## Quick Start - Create Page with Content
15
15
 
@@ -41,11 +41,9 @@ lemon-notion append "PAGE_ID" "## Overview\n\nHere is some content.\n\n- Point o
41
41
 
42
42
  ## If NOT Connected
43
43
 
44
- Offer to connect the integration:
45
- ```
46
- "Notion isn't connected yet. Let me open the connection page for you."
47
- ```
48
- Then open: `lemon://connect?provider=notion`
44
+ Offer to connect the integration. Include the connect URL as plain text in your reply. The app will automatically open the auth page:
45
+
46
+ "Notion isn't connected yet. Opening the connection page for you: lemon://connect?provider=notion"
49
47
 
50
48
  ## Example Workflow
51
49
 
@@ -5,7 +5,7 @@ Post to LinkedIn, Twitter/X, and other social platforms.
5
5
  ## Priority Order
6
6
 
7
7
  1. **`lemon-twitter`** CLI for Twitter/X — Always use this first
8
- 2. **Browser** — Only as fallback if CLI fails AND user explicitly requests
8
+ 2. **Browser** — Fallback only if CLI fails or service is not connected
9
9
 
10
10
  ## Twitter/X
11
11
 
@@ -58,9 +58,11 @@ curl -X POST \
58
58
 
59
59
  ### If NOT Connected
60
60
 
61
- Trigger OAuth: open `lemon://connect?provider=linkedin`
61
+ Include the connect URL as plain text in your reply. The app will automatically open the auth page:
62
62
 
63
- Or if user prefers browser: navigate to `linkedin.com/feed`, click "Start a post"
63
+ "LinkedIn isn't connected yet. Opening the connection page for you: lemon://connect?provider=linkedin"
64
+
65
+ If connect fails, use the browser as fallback: navigate to `linkedin.com/feed`, click "Start a post"
64
66
 
65
67
  ## Content Guidelines
66
68