Genii Connections
Use this skill to do normal work on the user's connected accounts through the
Genii Server integration backend. The backend owns OAuth, tool policy,
execution, and trigger creation; you only call the composio_* meta tools.
Covered providers (see references/<provider>.md for tool sheets and recipes):
gmail— read / search / draft / send email. Seereferences/gmail.md.googlecalendar— find events, free slots, create / update / delete. Seereferences/googlecalendar.md.
Cross-provider recipes for common requests live in references/use-cases.md.
How to use the reference sheets
Provider sheets are action guides, not implementation docs. Use them to choose:
- the provider slug for
composio_list_connections/composio_connect - the exact
tool_slugforcomposio_execute - the ids to resolve before writes
- the approval point in each recipe
When the sheet names a tool but not every argument key, call
composio_list_tools with the exact tool_slug or toolkit_slug to inspect
the backend schema, then execute only the supported arguments.
The six meta tools
| Tool | Use |
|---|---|
composio_list_connections |
Check which active accounts this bot can use. Optional toolkit_slug filter. |
composio_connect |
Start OAuth for a toolkit; returns a connect URL to give the user. Needs toolkit_slug. |
composio_list_tools |
Discover the exact allowed action slugs. Pass toolkit_slug for curated toolkits; add a short query for discovered ones. |
composio_execute |
Run one action by tool_slug with an arguments object. |
composio_list_triggers |
List available curated trigger specs or already-created trigger watches. Defaults to scope="available". |
composio_create_trigger |
Create or reuse one configured trigger watch for the current bot after resolving required params. |
Standard workflow
Follow this loop for any connection request. Details and failure handling are in
references/workflow.md.
Connection state is server-owned. Provider emails, browser pages, and
authorization notifications are not proof that a toolkit is usable by this
bot. Make a user-visible connection claim only after a fresh
composio_list_connections call returns that toolkit.
- Check connection. Call
composio_list_connections(filter bytoolkit_slug). This returns only active accounts usable by this bot. If the toolkit is not connected for this bot, callcomposio_connectand give the user the returned URL, then stop. When OAuth completion wakes this session or the user follows up, callcomposio_list_connectionsagain before continuing. Do not ask for a manual chat confirmation after OAuth. - Resolve the action. Use the provider's
references/<provider>.mdfor the righttool_slug. If unsure or the slug is not listed, callcomposio_list_toolsto confirm what the backend allows. - Gather arguments. Read first (search/list) to resolve message and event ids before any write.
- Execute. Call
composio_executewithtool_slugandarguments. - Report. Summarize the normalized result. For multi-step tasks, say a short progress sentence between steps.
On DISCONNECTED or clearly expired authorization, say the named connection
may have expired and ask to reconnect. Only after the user's clear yes, call
composio_connect and share its URL. Do not treat other failures as expiry.
For direct user requests, always end read/query work with a visible answer,
even when the result is empty. Say that nothing matched and offer the next
useful refinement. Do not use NO_REPLY for "no emails", "no events", "no
files", "no issues", or any other empty read result. Reserve silence for true
ambient/internal cases where no user-visible response is intended.
Engaged read responses
Infer the response shape from normal user language. Do not require the user to specify fallback behavior, option counts, or empty-source handling.
- Keep provider-specific requests provider-specific. For "check my plan today in Google Calendar", resolve today in the user's or provider's timezone and query the half-open interval from local midnight to the next local midnight. Do not inspect Gmail as part of that read.
- Treat "plan my day", "what should I focus on today", or a similar broad request as a personal-day brief. Start with Calendar and add bounded Gmail evidence when it is already connected. Skip unavailable sources without interrupting the brief with OAuth unless the user asked to connect them.
- Return at most three grounded priorities or options by default. Name the event, message, or current-thread commitment supporting each one. Do not invent urgency, start times, durations, or tasks.
- Treat an empty result as useful information. State it once in natural language, then offer one or two bounded next steps. An empty Calendar read can offer to check Gmail for pending replies; an empty Gmail read can offer today's or tomorrow's Calendar. If connection state is unknown, say "if connected" rather than starting OAuth.
- Suggestions are not permission to read the other provider. Wait for the user to choose. Do not search private memory unless the user explicitly asks to include remembered commitments, and do not end with a generic "anything else?"
All write suggestions still require the normal preview and approval flow.
Trigger watch workflow
Use this loop when the user asks the bot to watch for future provider events.
- Check connection. Call
composio_list_connectionsfor the toolkit. This returns only active accounts usable by this bot. If disconnected, callcomposio_connect, send the connect URL, and stop. When OAuth completion wakes this session or the user follows up, re-checkcomposio_list_connectionsbefore creating a watch. Do not ask for a manual chat confirmation after OAuth. - List specs. Call
composio_list_triggerswithscope="available"and the toolkit. Read the required params, descriptions, resolver hints, and resolver tools. - Pick the exact spec. Use only a trigger slug that matches the user's requested ongoing watch. Do not create broad or guessed watches.
- Resolve params. Use Gmail or Calendar read tools where possible. Ask the user for missing required params.
- Confirm target. Confirm the exact query, label, sender, calendar, or event target before creating the watch when the returned spec asks for one.
- Create. Call
composio_create_triggerwith canonicalparams. - Report. Confirm the exact future event that will wake the bot.
Write safety (required)
Read actions (search, list, fetch) run freely. Write actions — sending email and creating/updating/deleting calendar events — run only after the user has approved the specific content and target (recipient, attendees, calendar, and event). When unsure which account will act, read the profile/identity first. Never guess a recipient, attendee, calendar, or event.
Triggers and watches
Some connections auto-subscribe the bot to events (Gmail new message and
Calendar event-starting-soon). Those arrive as inbound events you respond to;
do not recreate them unless composio_list_triggers shows they are missing.
Configured watches are available only from curated trigger specs returned by
composio_list_triggers. Required params vary by trigger; follow the returned
spec exactly.