- Skill ID
- readdle/spark-cli-skills/use-spark
- Publisher
- readdle
- Repository
- spark-cli-skills
- Installs
- 0
- Files
- 1
- Synced
- Sep 23, 2026
Open any RiverX project, open the Skills panel in the chat, and search for this identifier. The files are fetched from the source repository at install time.
readdle/spark-cli-skills/use-sparkInstalls these files- SKILL.md
What this skill tells the agent
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
spark <command> [options]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.
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 |
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.
spark accountsRun 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.
spark folders # all accounts
spark folders user@example.com # single accountemails
List emails with metadata (ID, From, Date, Subject, Flags). Supports pagination and Gmail-style filters.
spark emails # Unified Inbox
spark emails user@example.com:Archive # specific folder
spark emails "My Team" # all shared threads in a team
spark emails --filter "from:alice@co.com is:unread" # filtered
spark emails --filter "newer_than:7d has:attachment" # recent with attachments
spark emails --page 2 --page-size 20 # pagination
spark emails --order ascending # oldest first
spark emails --new-senders # show only new sender emailsGateKeeper 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.
spark search "quarterly report"
spark search "API integration" --filter "from:alice@co.com"
spark search "budget" --in user@example.com:Archive
spark search "vacation" --in user@example.com # all folders in account
Use this skill in a project
Open any RiverX project, search the Skills panel for readdle/spark-cli-skills/use-spark, and install it in one click.
