readdle/spark-cli-skills/use-spark
Claude Code and agent skill by readdle/spark-cli-skills
- community
Checking that the SKILL.md file is still in the repository.
Use the spark CLI to access the user's Spark email data - list emails, search by topic, read threads, check calendar events, find availability, look up contacts, and view team info. Use when the user asks about their emails, calendar, contacts, meetings, or scheduling.
Install
npx vskill@latest install readdle/spark-cli-skills/use-sparkSKILL.md
Using spark
spark is a CLI for the Spark email client. Use it to query the user's mailbox, calendar, contacts, meetings, and team data.
Running spark
Environment: spark is a thin client that talks over IPC to the user's running Spark Desktop app - it does not ship its own mailbox, network stack, or credentials. Run it directly on the user's computer against the live Spark Desktop process. Do not try to execute it inside a sandbox, container, CI runner, or any environment isolated from the user's desktop session - it will fail to connect. If Spark Desktop is not running, ask the user to launch it instead of retrying.
JSON output: add --json to any command to get its result as JSON instead of text - the same data, with full (untruncated) values, snake_case keys, and ISO 8601 dates. A failure prints {"error": {"message": "…"}} on stdout and exits non-zero. Prefer the default text when you only need to read the result; use --json when you need to process it (e.g. spark emails --json | jq '.emails[].id'). Fields are only ever added, never renamed or removed.
Commands
| Command | Description | |
|---|---|---|
accounts | List accounts, calendars, teams, shared inboxes, and access levels | |
folders | List folders/labels with message counts | |
emails | List emails with filters and pagination | |
search | Hybrid keyword + semantic search with full bodies | |
thread | Read full thread - headers, bodies, attachments | |
attachment | Read a single email attachment by its ID (auto-downloads) | |
draft | Create, edit, or delete an email draft (new, reply, forward, from template), or list account signatures | |
templates | List saved message templates (personal and team) | |
template | Show a single template by ID or name with its placeholders | |
comment | Post a team comment on a thread | |
events | List calendar events for a time range | |
event | Create, update, delete, or RSVP to a calendar event, including managing attendees / invitations | |
availability | Find free time slots, optionally with attendees | |
contacts | Search contacts by name or email, or list the most-used ones | |
contact | Show one contact's details and settings | |
team | Show team info, members, shared inboxes, assignments | |
meetings | List meeting transcripts | |
meeting | Read a single meeting transcript | |
action | Perform actions on emails (archive, pin, snooze, assign, etc.) | |
contact-action | Perform actions on contacts (block, accept, categorize, etc.) |
accounts
List all configured accounts with their aliases, calendars, teams, and shared inboxes. Each account and shared inbox shows its access level in parentheses, which controls what operations Spark can perform.
Run this first to discover what accounts, calendars, and teams are available, and to check their access levels.
Access levels:
| Level | Allowed operations | |
|---|---|---|
| read-only | List, search, and read emails, threads, folders, events, contacts, meetings, teams | |
| triage | Everything in read-only plus all write operations: drafts, team comments, email actions (archive, move, pin, snooze, assign, etc.), contact actions (block, accept, categorize, etc.) | |
| send | Everything in triage plus mail-emitting operations: sending drafts (action send, including scheduled "Send Later"), and the entire event command: event create / event update / event delete / event rsvp, including attaching or detaching attendees via --add / --remove and the iTIP REQUEST / UPDATE / CANCEL / REPLY mail that goes with them. |
Access levels are configured separately for each account and each shared inbox in Spark Desktop under Settings -> AI Agents. Shared inboxes can have a different access level than the parent account - for example, a personal account may have triage access while a shared inbox under the same team is read-only or disabled.
If a command requires a higher access level than the account or shared inbox has, it returns an error with instructions on how to change the level.
folders
List folders with message counts. Output includes folder identifiers in parentheses - use these as arguments to emails and search. Mailboxes backed by a Google account show (Gmail labels) on the Email Account or Shared Inbox header. Teams show the team name as a usable identifier for emails.
emails
List emails with metadata (ID, From, Date, Subject, Flags). Supports pagination and Gmail-style filters.
GateKeeper filtering: When viewing the Inbox with GateKeeper in explicit mode, new sender emails are automatically filtered out and a "New Senders" count is shown at the top. Use --new-senders to view those emails. Use contact-action acceptContact <email> or contact-action blockContact <email> to accept or block a sender.
Folder identifier formats (run folders to see available ones):
| Format | Example | Meaning | |
|---|---|---|---|
| Bare name | Inbox, Archive | Unified folder (cross-account) | |
email | user@example.com | Account inbox shorthand | |
email:Folder | user@example.com:Archive | Specific account folder | |
"Team Name" | "My Team" | All shared threads in a team (quote if spaces) | |
shared@email:Inbox | shared@co.com:Inbox | Shared inbox open items (conversation view, matches Desktop) | |
shared@email:Archive | shared@co.com:Archive | Shared inbox done/archived items (conversation view) | |
shared@email:Folder | shared@co.com:Label | Other shared inbox folder / label |
Filter operators (combinable, Gmail-style):
| Operator | Example | |
|---|---|---|
from:<addr> | from:alice@co.com | |
to:<addr> | to:bob@co.com | |
cc:<addr> | cc:team@co.com | |
subject:<text> | subject:"quarterly report" | |
before:yyyy/MM/dd | before:2026/03/01 | |
after:yyyy/MM/dd | after:2026/01/01 | |
newer_than:Xd | newer_than:7d (also w, m, y) | |
older_than:Xd | older_than:30d | |
has:attachment | also document, spreadsheet, presentation, reminder | |
is:unread | also read, starred, pinned, unreplied | |
is:shared | emails shared to any team (alias for is:shared_email) | |
is:shared_inbox_open | open items in shared inbox | |
is:shared_inbox_done | completed/closed items in shared inbox | |
category:personal | also priority, notification, newsletter, invitation, invitation_response | |
assigned_to:me | emails assigned to current user | |
assigned_to:<email> | emails assigned to specific teammate | |
assigned_to:unassigned | shared inbox items with no assignee | |
assigned_to:other | emails assigned to someone else (not me) | |
assigned_by:me | emails delegated by current user | |
filename:<name> | filename:report.pdf |
search
Two modes:
- With a topic (keyword mode): Hybrid keyword + semantic search returning up to 20 emails with full bodies, sorted by relevance.
- Without a topic (list mode): Paged compact table of every email matching
--filter/--inacross all folders and all accounts, sorted newest first. Same output asemails, but the default scope is "all folders" instead of the Unified Inbox. Trash, Spam, and Blocked are excluded (matching Spark's search field) unless--inexplicitly targets one of those folders.
| Parameter | Required | Description | |
|---|---|---|---|
<about> | No | Search topic (positional). Omit to switch to list mode. | |
--filter | No | Gmail-style filter (same operators as emails) | |
--in | No | Scope: account, team, folder, or shared inbox. All folders if omitted. | |
--page | No | Page number, 1-based (default: 1). List mode only. | |
--page-size | No | Emails per page (default: 50). List mode only. | |
--order | No | Sort order: ascending or descending. List mode only. |
Use `search` with a topic when the user asks about content - it returns email bodies so you can answer questions. Use `search` without a topic when you need to filter emails (especially by `from:`) across every folder - emails only sees the Unified Inbox so it can't answer questions like "every email from alice@co.com, anywhere". Use emails for plain browsing of Inbox / one folder.
thread
Print every message in a thread - headers, full plain-text bodies, and attachment info. After the thread summary line, lists custom (non-system) folder labels once for the whole thread, using qualified names like account@domain.com:MyLabel (same style as folders).
The positional argument accepts either a numeric message ID (the ID: line) or a Spark deep link (the Link: line) printed by a previous run - https://sparkmailapp.com/dpl/bl?token=..., readdle-spark://bl=..., or readdlespark://bl=....
A Reply-To: line appears only when that header points somewhere other than From - mailing lists and website contact forms carry the real correspondent there. draft --reply-to already addresses the reply to it, so don't pass --to yourself.
Each message's Attachments: block is a table with columns ID, Name, Size, MIME Type, and Path. The ID column is the attachment's stable pk - feed it to attachment to read the file contents (auto-downloads if necessary). The Path column shows the local file or (not downloaded, ...) for attachments not yet fetched.
Use emails or search to find message IDs (the ID column), then thread to read the full conversation. Use folders to list valid label identifiers for action attachLabel / detachLabel.
attachment
Read a single email attachment by its ID (pk) from the thread Attachments table. The file is auto-downloaded if it isn't cached locally yet.
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewNot runA model review is scheduled for the next rescan.
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/use-spark/SKILL.md
Popularity
- Repository stars
- 125
- Repository forks
- 6
- 7-day trend score
- 24
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/readdle/spark-cli-skills/use-spark)