@heylemon/lemonade 0.3.8 → 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.
- package/dist/agents/system-prompt.js +12 -11
- package/dist/build-info.json +3 -3
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/docs/MaxModeSystemPrompt.md +17 -13
- package/docs/reference/AGENTS.default.md +1 -1
- package/package.json +1 -1
- package/skills/browser/SKILL.md +24 -3
- package/skills/email/SKILL.md +4 -8
- package/skills/integrations/SKILL.md +39 -20
- package/skills/meetings/SKILL.md +4 -6
- package/skills/notion/SKILL.md +4 -6
- package/skills/social-media/SKILL.md +5 -3
|
@@ -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,
|
|
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
|
|
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` →
|
|
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
|
|
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.
|
|
372
|
-
"4. User wants
|
|
373
|
-
"5. User wants to *
|
|
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`)** →
|
|
402
|
-
"3. **
|
|
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)",
|
package/dist/build-info.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
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
|
-
-
|
|
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
|
|
232
|
+
## Browser profile
|
|
231
233
|
|
|
232
|
-
|
|
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
|
|
246
|
-
- Provider IDs: gmail,
|
|
247
|
-
- Use:
|
|
248
|
-
-
|
|
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.
|
|
252
|
-
- "I need access to your calendar first.
|
|
253
|
-
- "Notion isn't linked.
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
package/skills/browser/SKILL.md
CHANGED
|
@@ -30,6 +30,7 @@ Before using browser for any of these services, **use the `lemon-*` CLI tool ins
|
|
|
30
30
|
**When browser fallback is allowed:**
|
|
31
31
|
- If the CLI binary itself is missing ("command not found") or the service is genuinely not connected.
|
|
32
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.
|
|
33
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.
|
|
34
35
|
|
|
35
36
|
## When to Use Browser
|
|
@@ -78,16 +79,36 @@ Lemonade always uses its own dedicated browser. Do **not** use `open -a "Google
|
|
|
78
79
|
- "Click the Lemonade icon"
|
|
79
80
|
- "Connect the extension"
|
|
80
81
|
|
|
81
|
-
##
|
|
82
|
+
## When to Use Browser vs CLI vs Composio
|
|
82
83
|
|
|
83
|
-
|
|
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.
|
|
84
96
|
|
|
85
97
|
| Service | URL |
|
|
86
98
|
|---------|-----|
|
|
87
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` |
|
|
88
105
|
| Figma | `figma.com` |
|
|
106
|
+
| HubSpot | `app.hubspot.com` |
|
|
107
|
+
| Airtable | `airtable.com` |
|
|
108
|
+
| Shopify | `admin.shopify.com` |
|
|
109
|
+
| Todoist | `app.todoist.com` |
|
|
89
110
|
|
|
90
|
-
**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.
|
|
91
112
|
|
|
92
113
|
## Research Workflow
|
|
93
114
|
|
package/skills/email/SKILL.md
CHANGED
|
@@ -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** —
|
|
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,
|
|
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
|
|
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,7 +12,12 @@ 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)
|
|
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
|
|
@@ -20,22 +25,36 @@ The generated skills are placed in `~/.lemonade/skills/` and include:
|
|
|
20
25
|
|
|
21
26
|
If integrations aren't working, restart the Lemon app to regenerate them.
|
|
22
27
|
|
|
23
|
-
##
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
1. **
|
|
28
|
-
2. **
|
|
29
|
-
3. **
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
**
|
|
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.
|
package/skills/meetings/SKILL.md
CHANGED
|
@@ -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** —
|
|
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
|
-
|
|
43
|
-
|
|
44
|
-
"Calendar isn't connected yet.
|
|
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
|
|
package/skills/notion/SKILL.md
CHANGED
|
@@ -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** —
|
|
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.
|
|
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** —
|
|
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
|
-
|
|
61
|
+
Include the connect URL as plain text in your reply. The app will automatically open the auth page:
|
|
62
62
|
|
|
63
|
-
|
|
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
|
|