# Composio Apps

> Connected app tool recipes for Composio integrations (Gmail, Slack, GitHub, Notion, Google Calendar, Linear)

- Skill: `aspectrr/composio-apps` (Agent Skill)
- Install (CLI): `npx skillmds@latest add aspectrr/composio-apps`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aspectrr/composio-apps/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- Author: aspectrr (https://skillmd.com/u/aspectrr)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/aspectrr/composio-apps

---


# Composio connected apps

Use **Composio tools** only. In DenchClaw these may already appear directly as tool names like `GMAIL_FETCH_EMAILS`; call those directly when present.

Do **not** use:
- `gog`
- shell CLIs for Gmail / Calendar / Drive / Slack / GitHub / Notion / Linear
- `curl`
- raw `/v1/composio/*` gateway calls
- direct Composio REST calls

If the user mentions Composio, rube, map, MCP, or says an app is already connected, Composio is the only allowed integration path. If the Composio tools are unavailable in the current session, stop and report repair guidance instead of bypassing them.

The workspace may contain `composio-tool-index.json` with the exact tool names and hints for **your** connected apps — prefer that file when present. If the exact tool is not obvious, call `composio_resolve_tool` first to get the correct tool name, argument shape, and default args.

## General rules

- Tool names are **uppercase** with underscores (e.g. `GMAIL_FETCH_EMAILS`).
- Pass **JSON-shaped** arguments as the tool schema requires: arrays are arrays, not comma-separated strings.
- If a call fails on argument shape, fix the types and retry once before escalating.
- Never fall back to `gog`, curl, or raw gateway HTTP for a connected app task unless the user explicitly asks for that non-Composio path.

## Gmail

| Intent | Tool | Defaults / notes |
|--------|------|------------------|
| List / read recent mail | `GMAIL_FETCH_EMAILS` | `label_ids`: `["INBOX"]`, `max_results`: `10` |
| Read one message | `GMAIL_FETCH_MESSAGE_BY_MESSAGE_ID` | `message_id` from list results |
| Send mail | `GMAIL_SEND_EMAIL` | `to`, `subject`, `body` (use schema field names) |

**Gotcha:** `label_ids` must be an array like `["INBOX"]`, never a single string.

## Slack

| Intent | Tool | Defaults / notes |
|--------|------|------------------|
| Send a message | `SLACK_SEND_MESSAGE` | `channel`, `text` |
| List channels / DMs | `SLACK_LIST_CONVERSATIONS` | Use schema filters if needed |

**Gotcha:** `channel` is usually a channel ID (often starts with `C`), not the display name.

## GitHub

| Intent | Tool | Defaults / notes |
|--------|------|------------------|
| List repos for user | `GITHUB_LIST_REPOSITORIES_FOR_THE_AUTHENTICATED_USER` | Pagination per schema |
| Find / search pull requests | `GITHUB_FIND_PULL_REQUESTS` | Best first path for "recent PRs" or broad PR search |
| List pull requests in a repo | `GITHUB_LIST_PULL_REQUESTS` | Requires `owner` and `repo` |
| Get one pull request | `GITHUB_GET_A_PULL_REQUEST` | `owner`, `repo`, `pull_number` |
| Repo metadata | `GITHUB_GET_A_REPOSITORY` | `owner`, `repo` |
| Create issue | `GITHUB_CREATE_AN_ISSUE` | `owner`, `repo`, `title`, `body` |

## Notion

| Intent | Tool | Defaults / notes |
|--------|------|------------------|
| Search | `NOTION_SEARCH` | Query string per schema |
| Read page | `NOTION_GET_PAGE` | Page ID |
| Create page | `NOTION_CREATE_PAGE` | Parent object per schema |

## Google Calendar

| Intent | Tool | Defaults / notes |
|--------|------|------------------|
| List calendars | `GOOGLE_CALENDAR_CALENDAR_LIST` | Optional params per schema |
| Upcoming events | `GOOGLE_CALENDAR_EVENTS_LIST` | Prefer a clear time window when possible |
| List events | `GOOGLE_CALENDAR_EVENTS_LIST` | `calendar_id`, time range (`time_min` / `time_max` as RFC3339) |
| Find event | `GOOGLE_CALENDAR_EVENTS_LIST` | Use search text / date window fields supported by the schema |
| Create event | `GOOGLE_CALENDAR_CREATE_EVENT` | Calendar id + event payload per schema |

**Gotcha:** Datetimes should be RFC3339 strings.

## Linear

| Intent | Tool | Defaults / notes |
|--------|------|------------------|
| List issues | `LINEAR_LIST_ISSUES` | Filters per schema |
| Get issue | `LINEAR_GET_ISSUE` | Issue id |
| Create issue | `LINEAR_CREATE_ISSUE` | Team id, title, description per schema |

## Subagent handoff

When delegating, include: which app, the exact tool name, and the argument object you intend (copy shapes from the tool schema, `composio_resolve_tool`, or `composio-tool-index.json`).

