mcpField
U
use-spark

use-spark

github.com/readdle生产力154515 次安装6 天前更新
代码仓库

关于 use-spark

use-spark 是指导通过 spark 命令行访问 Spark 邮件客户端数据的技能,适用于需要处理邮件、日历、联系人、会议和团队信息的场景。CLI 通过 IPC 连接用户正在运行的 Spark Desktop,并提供搜索、读取和操作等命令。

主要功能

  1. 01查询邮件、文件夹及会话
  2. 02关键词与语义混合搜索
  3. 03读取邮件附件和会议记录
  4. 04管理草稿、日历事件与联系人
  5. 05按账户访问级别限制操作

适用场景

  1. 01跨文件夹筛选或搜索邮件
  2. 02读取邮件会话及附件内容
  3. 03查看日历空闲时段并管理事件
  4. 04处理共享收件箱和团队邮件

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/readdle/spark-cli-skills --skill use-spark

安装后在 Claude Code 中输入/use-spark确认已加载。

详细介绍

使用 spark

spark 是 Spark 邮件客户端的 CLI。使用它查询用户的邮箱、日历、联系人、会议和团队数据。

运行 spark

spark <command> [options]

环境:spark 是一个轻量客户端,通过 IPC 与用户正在运行的 Spark Desktop 应用通信;它不自带邮箱、网络栈或凭据。请在用户的计算机上直接运行它,并连接到正在运行的 Spark Desktop 进程。不要尝试在沙盒、容器、CI 运行器或任何与用户桌面会话隔离的环境中执行它——那样会连接失败。如果 Spark Desktop 未运行,请让用户启动它,而不是重试。

**JSON 输出:**为任意命令添加 --json,即可将结果以 JSON 而非文本形式输出——数据相同,但值不会截断,键使用 snake_case,日期使用 ISO 8601 格式。命令失败时,会在 stdout 上输出 {"error": {"message": "…"}},并以非零状态退出。如果只需读取结果,请优先使用默认文本格式;需要处理结果时再使用 --json(例如:spark emails --json | jq '.emails[].id')。字段只会增加,不会重命名或移除。

命令

命令描述
accounts列出账户、日历、团队、共享收件箱和访问级别
folders列出文件夹/标签及邮件数量
emails根据筛选条件和分页列出邮件
search结合关键词与语义搜索,并返回完整正文
thread读取完整邮件会话,包括标头、正文和附件
attachment根据 ID 读取单个邮件附件(自动下载)
draft创建、编辑或删除邮件草稿(新建、回复、转发、使用模板),或列出账户签名
templates列出已保存的邮件模板(个人和团队)
template根据 ID 或名称显示单个模板及其占位符
comment在邮件会话中发布团队评论
events列出指定时间范围内的日历事件
event创建、更新、删除日历事件或回复邀请,包括管理参与者/邀请
availability查找空闲时段,可选择包含参与者
contacts按姓名或电子邮件搜索联系人,或列出最常用的联系人
contact显示单个联系人的详细信息和设置
team显示团队信息、成员、共享收件箱和分配情况
meetings列出会议文字记录
meeting读取单份会议文字记录
action对邮件执行操作(归档、置顶、稍后提醒、分配等)
contact-action对联系人执行操作(屏蔽、接受、分类等)
账户

列出所有已配置的账户及其别名、日历、团队和共享收件箱。每个账户和共享收件箱后面的括号中都会显示其访问级别,该级别决定 Spark 可以执行哪些操作。

spark accounts

请先运行此命令,以发现有哪些账户、日历和团队可用,并查看其访问级别。

访问级别:

级别允许的操作
read-only列出、搜索和读取邮件、邮件会话、文件夹、事件、联系人、会议、团队
triage包含 read-only 的所有操作,以及所有写入操作:草稿、团队评论、邮件操作(归档、移动、置顶、延后处理、分配等)、联系人操作(屏蔽、接受、分类等)
send包含 triage 的所有操作,以及会发送邮件的操作:发送草稿(action send,包括已安排的“稍后发送”),以及完整的 event 命令:event create / event update / event delete / event rsvp,包括通过 --add / --remove 添加或移除与会者,以及与之关联的 iTIP REQUEST / UPDATE / CANCEL / REPLY 邮件。

在 Spark Desktop 的 Settings -> AI Agents 中,可分别为每个账户和每个共享收件箱配置访问级别。共享收件箱的访问级别可以不同于所属账户——例如,个人账户可以拥有 triage 访问权限,而同一团队下的共享收件箱可以设为只读或禁用。

如果某条命令需要的访问级别高于账户或共享收件箱当前拥有的级别,系统会返回错误,并说明如何更改级别。

文件夹

列出文件夹及其邮件数量。输出会在括号中包含文件夹标识符——将其作为 emails 和 search 的参数使用。由 Google 账户提供支持的邮箱会在邮件账户或共享收件箱标题中显示 (Gmail labels)。对于团队,团队名称可用作 emails 的标识符。

spark folders                        # all accounts
spark folders [email protected]       # single account
邮件

列出邮件及其元数据(ID、发件人、日期、主题、标记)。支持分页和 Gmail 风格的筛选条件。

spark emails                                                   # Unified Inbox
spark emails [email protected]:Archive                          # specific folder
spark emails "My Team"                                         # all shared threads in a team
spark emails --filter "from:[email protected] 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 emails

GateKeeper 筛选: 在 GateKeeper 显式模式下查看收件箱时,来自新发件人的邮件会自动筛除,并在顶部显示“新发件人”计数。使用 --new-senders 查看这些邮件。使用 contact-action acceptContact <email> 或 contact-action blockContact <email> 接受或屏蔽发件人。

文件夹标识符格式(运行 folders 查看可用项):

格式示例含义
不带前缀的名称Inbox、Archive统一文件夹(跨账户)
email[email protected]账户收件箱简写
email:Folder[email protected]:Archive特定账户文件夹
"Team Name""My Team"团队中的所有共享会话(名称含空格时需加引号)
shared@email:Inbox[email protected]:Inbox共享收件箱中的未处理项目(会话视图,与桌面应用一致)
shared@email:Archive[email protected]:Archive共享收件箱中的已完成/已归档项目(会话视图)
shared@email:Folder[email protected]:Label其他共享收件箱文件夹/标签

筛选运算符(可组合使用,采用 Gmail 风格):

运算符示例
from:<addr>from:[email protected]
to:<addr>to:[email protected]
cc:<addr>cc:[email protected]
subject:<text>subject:"quarterly report"
before:yyyy/MM/ddbefore:2026/03/01
after:yyyy/MM/ddafter:2026/01/01
newer_than:Xdnewer_than:7d(也可用 w、m、y)
older_than:Xdolder_than:30d
has:attachment也可用 document、spreadsheet、presentation、reminder
is:unread也可用 read、starred、pinned、unreplied
is:shared共享给任意团队的邮件(is:shared_email 的别名)
is:shared_inbox_open共享收件箱中的未处理项目
is:shared_inbox_done共享收件箱中的已完成/已关闭项目
category:personal也可用 priority、notification、newsletter、invitation、invitation_response
assigned_to:me分配给当前用户的邮件
assigned_to:<email>分配给指定队友的邮件
assigned_to:unassigned未分配负责人的共享收件箱项目
assigned_to:other分配给其他人的邮件(非本人)
assigned_by:me当前用户委派的邮件
filename:<name>filename:report.pdf
搜索

两种模式:

  • 指定主题时(关键词模式): 混合关键词与语义搜索,最多返回 20 封邮件,包含完整正文,并按相关性排序。
  • 未指定主题时(列表模式): 对所有文件夹和账户中匹配 --filter/--in 的邮件,按日期从新到旧排序,分页显示紧凑表格。输出与 emails 相同,但默认范围为“所有文件夹”,而非“统一收件箱”。除非 --in 明确指定这些文件夹,否则会排除废纸篓、垃圾邮件和已屏蔽邮件(与 Spark 的搜索栏一致)。
spark search "quarterly report"
spark search "API integration" --filter "from:[email protected]"
spark search "budget" --in [email protected]:Archive
spark search "vacation" --in [email protected]              # all folders in account

# Keywordless list mode - filter across every folder
spark search --filter "from:[email protected]"                  # every email from alice, all folders
spark search --filter "from:[email protected]" --in [email protected]
spark search --filter "is:unread newer_than:7d" --page 2
参数必填说明
<about>否搜索主题(位置参数)。省略则切换到列表模式。
--filter否Gmail 风格筛选条件(与 emails 使用相同运算符)
--in否范围:账户、团队、文件夹或共享收件箱。省略时搜索所有文件夹。
--page否页码,从 1 开始(默认值:1)。仅适用于列表模式。
--page-size否每页邮件数(默认值:50)。仅适用于列表模式。
--order否排序顺序:ascending 或 descending。仅适用于列表模式。

用户询问邮件内容时,使用指定主题的 search——它会返回邮件正文,便于回答问题。需要跨所有文件夹筛选邮件(尤其是按 from: 筛选)时,使用不带主题的 search——emails 只会查看统一收件箱,因此无法回答“所有文件夹中来自 [email protected] 的每封邮件”这类问题。只需浏览收件箱/单个文件夹时,使用 emails。

thread

打印线程中的每条消息——包括标题、完整的纯文本正文和附件信息。在线程摘要行之后,列出整个线程的自定义(非系统)文件夹标签,每个标签仅列出一次,并使用限定名称,例如 [email protected]:MyLabel(与 folders 使用相同的格式)。

spark thread 1114                          # by message ID from emails/search output
spark thread --download-attachments 1114   # also fetch attachments via IMAP
spark thread "https://sparkmailapp.com/dpl/bl?token=ABC..."  # by Spark deep link

位置参数接受数字消息 ID(ID: 行),也接受之前运行时打印的 Spark 深层链接(Link: 行)——https://sparkmailapp.com/dpl/bl?token=...、readdle-spark://bl=... 或 readdlespark://bl=...。

仅当 Reply-To: 标题指向 From 以外的位置时,才会显示 Reply-To: 行——邮件列表和网站联系表单会在此处提供实际联系人。draft --reply-to 已将回复地址设为该地址,因此不要自行传入 --to。

每条消息的 Attachments: 区块都是一个表格,包含 ID、Name、Size、MIME Type 和 Path 列。ID 列是附件的稳定主键(pk)——将其传给 attachment 即可读取文件内容(如有需要会自动下载)。Path 列显示本地文件路径;对于尚未获取的附件,则显示 (not downloaded, ...)。

使用 emails 或 search 查找消息 ID(ID 列),然后使用 thread 阅读完整对话。使用 folders 列出 action attachLabel / detachLabel 的有效标签标识符。

attachment

根据 thread 的 Attachments 表中的 ID(pk)读取单个电子邮件附件。如果文件尚未缓存在本地,则会自动下载。

spark attachment 42                          # print metadata (ID, Name, Size, MIME Type, Path, Message ID)
spark attachment 42 --stream > report.pdf    # write raw file bytes to stdout
参数必填说明
<id>是thread 的 Attachments 表中的附件 ID(pk)。
--stream否将原始文件字节写入标准输出,而不是元数据文本。适用于能够读取 CLI 标准输出、但无法访问本地文件系统路径的沙盒 Agent。CLI 会以 64 KB 为单位传输文件,因此实际上没有大小限制。反向操作——附加应用无法读取的文件——可将文件通过管道传入 draft / comment,并使用 --attach-stream。

使用 thread 查找附件 ID(Attachments: 表中的 ID 列)。默认文本输出为每行一个 Key: value,便于通过脚本解析。

draft

需要:triage 访问级别。

创建新的电子邮件草稿或编辑现有草稿。正文使用 Markdown 编写,并会转换为 HTML。

spark draft --to "[email protected]" --subject "Hello" --body "Hi Alice, ..."
spark draft --to "[email protected]" --to "[email protected]" --cc "[email protected]" --subject "Meeting" --body "..."
spark draft --edit 1234 --subject "Updated subject" --body "Updated body"
spark draft --reply-to 5678 --body "Thanks for the update!"
spark draft --reply-all 5678 --body "Thanks everyone!"   # keeps the other recipients and the CCs
spark draft --forward 5678 --to "[email protected]" --body "FYI"
spark draft --account "[email protected]" --to "[email protected]" --subject "Hi" --body "..."
spark draft signatures                                                                # the signature each account appends
spark draft --to "[email protected]" --subject "Quick note" --body "..." --no-signature   # send without a signature
spark draft --edit 1234 --no-signature                                                # strip the signature from an existing draft
spark draft --to "[email protected]" --subject "Report" --body "See attached" --attach /path/to/report.pdf
spark draft --to "[email protected]" --subject "Files" --body "Two files" --attach /path/to/a.pdf --attach /path/to/b.xlsx
spark draft --to "[email protected]" --subject "Q3" --body $'Revenue is up:\n\n![Q3 revenue](chart.png)' --attach /path/to/chart.png   # show an attached image in the text
spark draft --reply-to 5678 --body "Resending the file" --attach-id 42   # attach a file from the original email
cat report.pdf | spark draft --to "[email protected]" --subject "Report" --body "See attached" --attach-stream report.pdf   # pipe a file the app can't read directly
spark draft --to "[email protected]" --subject "Proposal" --body "..." --team "Engineering" --user [email protected] --user [email protected]
spark draft --edit 1234 --team "Engineering" --user [email protected] --allow-send
spark draft --edit 1234 --user [email protected]           # invite carol on an already-shared draft
spark draft --edit 1234 --allow-send                  # grant send-on-behalf permission on an already-shared draft
spark draft --edit 1234 --no-allow-send               # revoke previously-granted send-on-behalf permission
spark draft --edit 1234 --remove-user [email protected]    # kick alice from a shared draft (keeps share, comments, other collaborators)
spark draft --edit 1234 --remove-user [email protected] --user [email protected]  # swap collaborators: remove alice, invite dave
spark draft --edit 1234 --unshare
spark draft --delete 1234                             # remove the draft for good (no Trash, no undo)
spark draft --template "Cold outbound v3" --to "[email protected]" --placeholder "Project name=Acme Q3" --placeholder "Deadline=Friday EOD"
spark draft --template 124 --edit 9821 --placeholder "Project name=Acme Q3" --placeholder "Deadline=Friday EOD"
参数必需描述
--to否收件人地址(RFC822)。可重复指定多个。
--cc否抄送地址。可重复指定多个。
--bcc否密送地址。可重复指定多个。
--subject否主题行。
--body是(新建且未使用 --template 时)Markdown 格式的正文内容。新建草稿时必需,除非模板已提供正文。在文本中使用 ![alt](file name) 显示附加图片——请参阅下文的正文中的图片。
--edit否要更新的现有草稿的消息 ID。
--reply-to否要回复的消息 ID。仅回复发件人(如果邮件包含 Reply-To: 地址,则回复该地址)。
--reply-all否要回复的消息 ID,并保留线程中的其他所有人:其他 To: 收件人放入 To,原始 Cc: 收件人放入 CC,但排除你自己的地址。不能与 --reply-to 同时使用;--to / --cc 会覆盖自动生成的收件人列表。
--forward否要转发的消息 ID。
--delete否要永久删除的草稿消息 ID。此选项必须是命令中的唯一选项。草稿没有废纸篓,因此删除后无法撤销。已安排发送的草稿和与队友共享的草稿都无法删除——请先执行 action unschedule 或 draft --edit <pk> --unshare。
--account否用于发件的账户邮箱。接受普通邮件账户、别名或共享收件箱邮箱。
--attach否要附加文件的绝对路径。可重复指定多个。Spark 应用必须能够读取该路径;在 App Store 沙盒版中,应用容器外的路径无法读取,并会返回明确的错误——请改用 --attach-stream 传入文件。每个文件最大 25 MB。
--attach-id否要从现有邮件复制到此草稿的附件 ID,位于 thread <message-id> 的附件表中。可重复指定多个。用于重新发送用户收到的文件——回复不会继承附件(只有 --forward 会继承)。
--attach-stream否附加一个从 stdin 读取字节的文件,并以 <name> 显示给收件人。当文件位于应用沙盒之外时使用此选项(App Store 版无法读取任意路径)——这是 attachment --stream 的输入端对应选项。每条命令只能传入一个流式文件;可与 --attach 搭配使用,以附加应用可读取路径中的文件。最大 25 MB。示例:cat report.pdf | spark draft --edit 123 --attach-stream report.pdf。需要真实的 stdin,因此只有在自行运行 spark 二进制文件时才有效——否则请使用 --attach-id / --attach。
--team否团队名称。属于多个团队时必需。编辑已共享的草稿时,必须与拥有该共享内容的团队一致。
--user否要共享草稿的队友邮箱。可重复指定多个。对于已共享的草稿,此选项会添加协作者,不会移除现有协作者——请使用 --remove-user 移除协作者。
--remove-user否要从已共享草稿中移除的队友邮箱。可重复指定多个。共享草稿、其评论以及剩余协作者都会保留(不同于会撤销整个共享的 --unshare)。需要使用 --edit <shared-pk>。无法移除你自己——请使用 --unshare。可在一条命令中与 --user 搭配使用,以更换协作者;移除操作会先于邀请执行。
--allow-send否授予队友代表你发送共享草稿的权限。新建共享时,如果省略此选项,默认关闭。编辑已共享草稿时,如果省略此选项,则保留当前设置。不能与 --no-allow-send 同时使用。
--no-allow-send否撤销队友代表你发送共享草稿的权限。编辑当前已启用发送权限的共享草稿时,此选项很有用。不能与 --allow-send 同时使用。
--unshare否将已共享的草稿恢复为个人草稿。需要使用 --edit,且不能与 --team / --user / --remove-user / --allow-send / --no-allow-send 以及内容编辑选项(--to / --cc / --bcc / --subject / --body / --attach / --attach-id / --attach-stream)同时使用——请分别执行编辑(或按用户移除)和取消共享命令。
--template否按 ID 或名称应用已保存的模板。可与 --edit 搭配使用,以覆盖现有草稿内容。
--placeholder模板包含手动占位符时必需填写手动模板占位符,格式为 "<name>=<value>"。每个占位符重复指定一次。此处无法指定可自动填充的占位符(收件人/本人姓名)——请通过 --to 和 --account 控制。
--no-signature否发送时不附加签名。对这份草稿禁用账户针对每个邮箱的默认签名。使用 --edit 时,会移除草稿中已有的签名(正文和引用的线程内容会保留)。省略此选项则继续使用账户默认签名。
signatures否位置参数,不是标志:打印所有可用于撰写邮件的邮箱及其附加的签名。必须是唯一参数。
显式标志始终优先于模板字段。调用 draft --template 前,先使用 `template <idname>查找模板中的手动占位符;缺少手动占位符会导致操作直接报错,且不会创建草稿。无法解析的可自动填充占位符(例如,使用多个--to` 时无法确定收件人姓名)会在正文中保留本地化标签,并在响应中显示为警告。

正文中的图片。 若要将图片放入文本中而不是附件列表中,请附加图片,并使用 Markdown 图片语法通过文件名显示图片:--attach /path/to/chart.png --body "![Q3 revenue](chart.png)"。文件可以来自 --attach、--attach-stream 或 --attach-id,也可以已存在于草稿中。https:// 图片地址会保持原样。与任何已附加文件都不匹配的本地图片,或非图片文件,都会导致错误,因此草稿不会带着损坏的图片发出。使用 --edit 和 --body 编辑时,由新正文决定保留哪些图片:要保留草稿中已有的图片,请按其名称显示(名称可通过 thread <draft-id> 查看);若不写入正文,则会将其移除。

系统会自动添加签名——切勿自行撰写落款。 Spark 会将邮箱的默认签名附加到每份草稿的正文中。spark draft signatures 会显示你可用于撰写草稿的各个邮箱会附加的签名。

当用户要求使用与其签名不同的结尾时,请传入 --no-signature,并自行撰写完整的结尾。

成功后,输出会包含草稿的 ID:(将其用于 --edit 和 action send),以及包含 Spark 深层链接(https://sparkmailapp.com/dpl/bl?token=...)的 Link: 行,点击该链接即可在 Spark 中直接打开草稿。输出还会在 Body: 下回显撰写好的正文——即收件人将看到的完整邮件,包含签名,但不包含引用的邮件往来内容。请通读正文,确认草稿表达了你的本意,并检查是否在账户签名旁边多写了自己的落款。

务必向用户提供深层链接。 创建或更新草稿后,请在回复中将 Link: URL 作为可点击的 Markdown 链接提供(例如 [在 Spark 中打开草稿](https://sparkmailapp.com/dpl/bl?token=...)),方便用户直接查看或发送草稿。不要让用户打开 Spark 后自行寻找草稿。

使用 emails 查找 --edit、--reply-to、--reply-all 和 --forward 所需的邮件 ID。 使用 accounts 查找 --account 所需的账户邮箱——个人账户、其 Alias: 条目和共享收件箱都会列出;只要账户具有草稿和评论权限,均可用作发件人地址。 使用 teams 查找 --team 所需的团队名称,以及 --user 所需的团队成员邮箱。

线程关联至关重要。 如果新邮件属于现有对话,必须传入 --reply-to,并指定该线程中的最后一封邮件。这样才能将草稿关联到该对话(设置正确的 In-Reply-To / References 标头,并确保收件人的邮箱中显示在同一线程内)。若不传入 --reply-to,草稿会开启一个全新线程;当用户在现有对话的上下文中要求你“回复”“回应”“跟进”“答复”或“提醒”某人时,这几乎总是错误的做法。使用 thread <id> 查看对话,并选择最新邮件的 ID 作为 --reply-to。在线程包含多位参与者时,除非用户希望私下回复发件人,否则请使用 --reply-all。

跟进(尚未收到回复)。 当用户要求跟进一位你已发送过邮件、但尚未回复的联系人时(例如,“给 Alice 发个提醒——她一直没回复我上一封邮件”“跟进一下提案线程”),该线程中最新的邮件是你发出的邮件。请使用该邮件的 ID 作为 --reply-to,这样跟进邮件会关联到原先发出的邮件,让收件人看到它是现有对话中的提醒,而不是一封陌生的新邮件。 分享由 --team 或 --user 的存在触发;如果团队中恰好有一位其他活跃成员,则会自动与所有人分享,否则必须使用 --user。 若要添加协作者或更改现有共享草稿的允许发送设置,请将 --edit <pk> 与分享标志一起使用——更改会应用于现有分享,而不会新建分享。 若要关闭允许发送,请传入 --no-allow-send。 若要移除特定协作者而不取消整个分享,请传入 --remove-user <email>;共享草稿、其评论和其余协作者都会保留。可在一条命令中同时组合 --user 和 --remove-user,一次性替换协作者——先移除,再发送邀请。 内容编辑(--to、--cc、--bcc、--subject、--body、--attach)和分享更新(--team、--user、--remove-user、--allow-send、--no-allow-send)必须通过不同的 draft 命令执行。

删除草稿不可撤销。 --delete <pk> 会直接移除草稿——与收到的电子邮件不同,草稿没有可供恢复的废纸篓,history --undo 和 Spark 自带的撤销功能都无法恢复草稿。只有在用户要求丢弃草稿时才删除,并在回复中明确说明,而不要暗示草稿可以恢复。若只想丢弃草稿的文本而保留草稿本身,请编辑草稿(draft --edit <pk> --body "...")。

模板

列出 Spark 消息模板——用户可通过 draft --template 应用的已保存草稿。模板会与桌面端双向同步,因此用户电脑上保存的内容都会显示在这里。

spark templates                          # all personal + team templates
spark templates --personal               # only personal templates
spark templates --team "Marketing"       # only that team's templates
spark templates --page 2 --page-size 20  # pagination

输出列:ID、Scope(Personal / <team name>)、Name、Subject(截断至 40 个字符)、Modified。使用 ID 或 Name 值搭配 template <id|name> 和 draft --template。

模板

只读。 显示单个模板的完整内容及其占位符要求。运行此命令后再执行 draft --template,以了解模板需要哪些 --placeholder "<name>=<value>" 参数。

spark template 123                       # by ID
spark template "Welcome reply"           # by name (case-insensitive)

输出包含范围、收件人、主题、正文(将 HTML 去除并转换为文本)、附件,以及列出模板中所有占位符的 Placeholders: 部分:

  • [auto] - 可自动填充(收件人/本人姓名)。应用模板时,根据 --to 和 --account 解析。不能通过 --placeholder 覆盖。
  • [manual] - 自由填写的占位符。必填:必须通过 --placeholder "<name>=<value>" 传递给 draft --template。

如果多个模板的名称相同,系统会报错并列出匹配的 ID——请使用 ID 消除歧义。

comment

需要:triage 访问级别。

在线程中发布团队评论(聊天消息)。如果线程尚未共享,系统会自动共享。支持文本评论、文件附件,或两者兼有。使用 --edit 更新现有评论。

spark comment 1234 --body "Looks good, let's proceed."
spark comment 1234 --body "Please review this" --team "Engineering"
spark comment 1234 --body "FYI" --team "Engineering" --user [email protected] --user [email protected]
spark comment 1234 --attach /path/to/screenshot.png
spark comment 1234 --body "See attached" --attach /path/to/report.pdf --attach /path/to/data.csv
cat screenshot.png | spark comment 1234 --attach-stream screenshot.png   # pipe a file the app can't read directly
spark comment --edit 5678 --body "Updated comment text"
参数必填描述
<message-id>是(发布时)要评论的线程中某条消息的 ID。
--body未使用 --attach 时要发布的评论文本。使用 --edit 时必填。
--attach未使用 --body 时要附加文件的绝对路径。可重复指定多个文件。每个文件会作为单独的消息发送。不能与 --edit 一起使用。Spark 应用必须能够读取该路径;在沙盒化的 App Store 版本中,无法读取应用容器外的路径,并会显示明确错误——请改用 --attach-stream 通过管道传入文件。每个文件最大 25 MB。
--attach-stream未使用 --body 时附加一个文件,其字节内容从标准输入读取,显示为 <name>,并作为单独的评论消息发送。文件位于应用沙盒之外时使用此选项(App Store 版本无法读取任意路径)——这是 attachment --stream 的反向对应项。每条命令只能传入一个流式文件;不能与 --edit 一起使用。最大 25 MB。示例:cat shot.png | spark comment 456 --attach-stream shot.png --team "Engineering"。需要真实的标准输入,因此只有自行运行 spark 二进制文件时才有效——否则请使用 --attach。
--edit否要编辑的现有评论的消息 ID。需要 --body。
--team团队数大于 1 时团队名称。属于多个团队时必填。
--user团队成员数大于 2 时要共享给的队友邮箱。可重复指定多个。仅用于自动共享尚未共享的线程。团队成员不超过 2 人时,系统会自动与整个团队共享。

使用 emails 查找消息 ID。使用 thread 查看对话中的评论 ID。使用 team 列出团队及其成员。

events

列出指定时间范围内的日历事件。

spark events                                          # today's remaining events
spark events --tomorrow
spark events --week
spark events --week --in [email protected]             # specific account
spark events --week --in [email protected]:Work        # specific calendar
spark events --start 2026-03-16 --end 2026-03-20      # custom range
spark events --week --include-hidden                  # hidden calendars too

日期格式:yyyy-MM-dd、dd/MM/yyyy 或 yyyy-MM-ddTHH:mm。

运行 accounts 查看可用的日历账户和日历名称。

隐藏的日历: 用户在 Spark 日历视图中关闭某个日历后,accounts 会将其标记为 (hidden)。与 Spark 日历视图的行为相同,events 不会列出隐藏的日历。传入 --include-hidden 可将它们包含在内;也可以使用 --in [email protected]:Name 指定一个日历,只列出该日历。如果用户预期的事件未显示,请先检查 accounts 中是否有隐藏的日历,再判断日历为空或不受支持。

event

**需要:**目标日历所属账户具有 send 访问级别。所有模式都可能通过日历服务发送邮件(创建/更新时发送邀请,更新/删除含参与者的事件时发送 iTIP UPDATE/CANCEL,回复 RSVP 时发送 iTIP REPLY);添加参与者还会使事件通过提供商的邀请渠道被发现,而不依赖电子邮件,因此整个命令都需要 send 权限。

创建、更新、删除日历事件或回复 RSVP,包括管理参与者。对 create 或 update 使用 --add/--remove 可添加或移除参与者,并通过日历提供商(CalDAV/Google/Exchange)发送邀请/取消通知。

spark event create --title "Sync" --start 2026-07-01T12:00 --end 2026-07-01T13:00
spark event create --title "OOO" --start 2026-07-01 --all-day
spark event create --title "Standup" --start 2026-07-01T09:00 --end 2026-07-01T09:15 --video-conference auto
spark event create --title "Sync" --start 2026-07-01T10:00 --end 2026-07-01T10:30 --video-conference zoom
spark event create --title "1:1" --start 2026-07-01T14:00 --end 2026-07-01T14:30 --calendar "[email protected]:Work"
spark event create --title "Sync" --start 2026-07-01T12:00 --add "[email protected],[email protected]"   # create + invite
spark event update ABC-123 --title "New title"
spark event update ABC-123 --location "Room 7"
spark event update ABC-123 --video-conference meet   # add a meeting link
spark event update ABC-123 --add [email protected] --remove [email protected]   # swap attendees
spark event delete ABC-123
spark event rsvp ABC-123 accept     # calendar event ID
spark event rsvp ABC-123 decline
spark event rsvp 44268 maybe        # invitation email message ID
参数必填说明
mode是create、update、delete 或 rsvp(位置参数)。
event_idupdate/delete/rsvp 时必填位置参数,第二个参数。对于 update/delete:日历事件 ID(使用 events)。对于 rsvp:日历事件 ID 或邀请邮件的消息 ID(使用 emails / thread)。
statusrsvp 时必填RSVP 状态(位置参数,第三个参数):accept、decline 或 maybe。
--title否事件标题/摘要。
--start是(用于 create)开始日期/时间(yyyy-MM-dd、dd/MM/yyyy、yyyy-MM-ddTHH:mm 或 yyyy-MM-ddTHH:mm:ssXXX)。
--end否结束日期/时间。
--all-day否将事件设为全天事件。
--description否事件描述/备注。
--alerts否逗号分隔的提醒提前量(Ns 表示提前 N 秒,例如 300s,600s)或绝对日期。
--location否事件地点文本。
--video-conference否添加视频会议(必须提供值)。auto 会自动选择账户使用的类型(最近使用的类型,否则使用默认类型);meet、zoom 或 teams 会选择指定类型,如果账户不支持则报错。
--calendar否create 的目标日历。格式:[email protected](账户的默认日历)或 [email protected]:Name(指定名称的日历)。隐藏的日历也可使用;在其中保存事件会在 Spark 的日历视图中重新启用该日历。
--add否要邀请的参会者邮箱地址(仅用于 create / update)。可重复指定此标志,或传入逗号分隔的列表。新参会者会收到 iTIP REQUEST(邀请)。
--remove否要移除的参会者邮箱地址(仅用于 update)。可重复指定此标志,或传入逗号分隔的列表。被移除的参会者会收到 iTIP CANCEL。不能移除组织者。

参会者(--add / --remove):

  • 仅适用于 create 和 update;向 delete 或 rsvp 传入这些参数会被拒绝。在一次 update 中同时使用两者即可替换参会者——先移除,再添加。
  • 添加或移除参会者时总会发送 iTIP 邮件(REQUEST / CANCEL)。没有参会者的事件不会出现在日历服务的邀请渠道中。
  • 添加参会者后,日历提供商的邀请渠道(包括 Google Calendar 同一提供商的自动添加行为)即可发现该事件,这与邮件是否送达无关——因此整个命令都需要 send。

event update 语义:

  • --video-conference 会为现有事件添加会议链接(meet / zoom / teams 或 auto),生成方式与 create 相同。对于有参会者的事件,这是共享变更,因此会发送 iTIP UPDATE。
  • 事件没有参会者 → 本地更新,不会发送邮件。
  • 事件有参会者 → 更新并向所有参会者发送 iTIP UPDATE,使其日历反映最新状态。输出会报告参会者人数。
  • 仅修改提醒属于个人提醒,即使事件有参会者,也不会通知任何人。

event delete 语义:

  • 事件没有参会者 → 本地删除,不会发送邮件。
  • 事件有参会者 → 删除并向所有参会者发送 iTIP CANCEL,以便同时清理他们的日历。输出会报告参会者人数。如果删除时不发送取消通知,邀请就会遗留在参会者的日历中(在 Google 同一提供商的自动添加渠道中尤为明显)。 event rsvp 语义:
  • 设置邀请中你自己的出席状态:accept、decline 或 maybe(tentative 的别名)。回复会向组织者发送 iTIP REPLY。
  • ID 可以是日历事件 ID,也可以是邀请邮件的邮件 ID。许多服务提供商(包括 Google)会将尚未回复的邀请留在收件箱中,而不会将其添加到日历。因此,当用户要求你回复邀请时,请使用 emails / thread 查找该邀请,并传入邮件 ID——无需日历事件。如果邀请已自动添加到日历,也可以使用日历事件 ID。
  • 对于邮件 ID,回复行为与 Spark Desktop 一致:如果存在已同步的对应日历事件,就更新该事件;否则直接向组织者发送 iTIP REPLY(如果选择 accept,还会将事件添加到你的日历)。
  • 如果目标不是你可以回复的邀请(普通邮件、没有 RSVP 选项的自建事件,或不允许回复的服务提供商),则会报错。
  • 对于日历事件,如果重新 RSVP 的状态与当前状态相同,则不会执行操作,并会报告这一点。

安排新会议的典型流程:先调用 event create ... 创建事件,与用户确认时间和详情后,再调用 event update <event-id> --add ... 发送邀请——这样用户可以先查看(或由你修改)事件,然后才会向外部发送邮件。如果已经有参会者,可以调用 event create ... --add ... 一步完成。

运行 accounts 查看可写入的日历以及各账户的访问权限级别。

availability

查找空闲时段。不带 --attendees 时,显示用户自己的空闲时间;带 --attendees 时,计算共同空闲时段。

spark availability                                                        # today
spark availability --tomorrow
spark availability --week --attendees [email protected]
spark availability --start 2026-03-16 --end 2026-03-20 --attendees [email protected],[email protected]

空闲时段仅限工作时间(08:00-20:00),跳过周末,并忽略标记为“free”的事件。

contacts

按姓名或电子邮件搜索联系人。先进行严格匹配,再进行模糊匹配。如果不提供查询,则按用户写信频率从高到低列出联系人。--limit 限制列表数量(1-1000,默认值为 25)。

spark contacts "john"
spark contacts "example.com"
spark contacts --limit 500 --json   # most-used contacts; "query" is null, "match" is "top"
contact

显示单个联系人的详情:姓名、其他地址,以及 contact-action 会更改的各项设置。更改发件人状态前,请先检查其当前状态——例如,确认对方是否已设为 Priority 或已被屏蔽。未知地址会报错。

spark contact [email protected]
spark contact [email protected] --json
字段更改方式
category(personal / notification / newsletter)changeCategory*
is_prioritymarkContactAsPrimary / unmarkContactAsPrimary
notificationsmarkContactAsImportant / unmarkContactAsImportant
blocked / accepted(GateKeeper;新发件人两者均不设置)blockContact / acceptContact
grouped、grouped_in_inboxgroupEmailsFromContact[AndShowInInbox] / ungroupEmailsFromContact
auto_summaryenableAutosummaryForContact / disableAutosummaryForContact
team

显示团队信息——元数据、包含成员的共享收件箱、完整成员列表、已分配的邮件以及分配摘要。

spark team                     # list available teams
spark team "Readdle"           # specific team
meetings

列出会议记录,支持可选筛选条件和分页。

spark meetings
spark meetings --filter "newer_than:30d"
spark meetings --filter "subject:standup" --page-size 10

筛选运算符:subject:<text>、before:yyyy/MM/dd、after:yyyy/MM/dd、newer_than:Xd、older_than:Xd。

meeting

读取单场会议记录的摘要。可选择包含完整记录和/或笔记。

spark meeting 42                            # summary only
spark meeting --transcript 42               # include transcript
spark meeting --notes 42                    # include notes
spark meeting --transcript --notes 42       # everything
spark meeting "https://sparkmailapp.com/dpl/bl?token=ABC..."  # by Spark deep link

位置参数可以是数字会议邮件 ID,也可以是 Spark 深层链接。

使用 meetings 查找会议 ID。

action

**需要:**triage 访问权限级别。

对一封或多封邮件执行操作。支持标准邮件操作和团队操作。

spark action <action-name> <message-id...> [options]

支持的操作:

  • pin - 将邮件置顶,使其显示在列表顶部
  • unpin - 取消邮件置顶
  • mute - 将会话静音,不再接收通知
  • unmute - 取消先前已静音会话的静音
  • snooze - 将邮件延后至指定日期(需要 --date)
  • unsnooze - 取消延后,并将邮件移回收件箱
  • changeReminder - 设置后续提醒:如果到指定日期仍未收到回复,则提醒(需要 --date)
  • clearReminder - 移除邮件的后续提醒
  • setAside - 将邮件暂存,以便稍后查看
  • archive - 归档邮件,并将其从收件箱中移除
  • moveToInbox - 将邮件移回收件箱
  • moveToTrash - 将邮件移至垃圾箱
  • moveToFolder - 将邮件移至指定文件夹(需要 --folder)
  • attachLabel - 添加 Gmail 或 Spark Team 标签,且不移除其他标签(需要 --folder)
  • detachLabel - 从邮件中移除 Gmail 或 Spark Team 标签(需要 --folder)
  • markAsDone - 将邮件标记为已完成
  • markAsUndone - 将邮件标记为未完成
  • markAsSeen - 将邮件标记为已读
  • markAsUnseen - 将邮件标记为未读
  • markAsSpam - 将邮件标记为垃圾邮件
  • markThreadAsPriority - 将会话标记为优先
  • unmarkThreadAsPriority - 取消会话的优先标记
  • unsubscribe - 取消订阅发件人或邮件列表
  • changeCategoryPersonal - 将邮件类别更改为“个人”
  • changeCategoryNotification - 将邮件类别更改为“通知”
  • changeCategoryNewsletters - 将邮件类别更改为“新闻简报”
  • shareInTeam - 与团队成员共享会话(有多个团队时需要 --team)
  • assign - 将邮件分配给团队成员(需要 --assignee)
  • delegationComplete - 将委派标记为已完成
  • delegationReopen - 重新打开已完成的委派

send 动词(需要发送权限):

通过所属账户的发件邮件流程发送现有草稿(使用 spark draft 或在 Spark Desktop 中创建)。验证规则与桌面撰写器相同:草稿必须位于访问级别为 send 的账户上(Settings -> AI Agents),至少有一位收件人、非空主题、所有附件均已上传,且没有尚未处理的手动模板占位符。

spark action send 1234

输出会报告原始草稿 ID 和已发送邮件的 PK:

Draft 1234 sent. Sent message ID: 5678.

典型流程:使用 spark draft ... 撰写,检查草稿,然后使用 spark action send <pk> 发送。将这两个操作分开,意味着你(或用户)可以在发送任何外部邮件之前编辑草稿;单独使用 spark draft 不会发送邮件。

send 一次可接受多个草稿 ID(每个草稿都会单独进行验证,响应会报告每个草稿的成功或失败情况),但通常只处理一个 ID。

**定时发送(“稍后发送”):**可传入可选的 --date,将草稿安排在指定时间发送,而不是立即发送。日期必须是未来时间(格式:yyyy-MM-dd、dd/MM/yyyy、yyyy-MM-ddTHH:mm);如果日期已过去或格式错误,系统会在发送前拒绝请求。

spark action send 1234 --date 2026-04-10T09:00

输出会确认定时安排:Draft 1234 scheduled to send on 2026-04-10 09:00. Message ID: 5678. 邮件会留在发件箱中,并在指定时间发送。

管理已定时安排(“稍后发送”)的邮件:使用 send 并指定邮件 ID:

  • **重新安排:**使用新的 --date 调用 send,即可更新现有安排(该邮件已不再是普通草稿,因此不会创建新邮件):
spark action send 5678 --date 2026-04-12T15:00

输出:Message 5678 rescheduled to send on 2026-04-12 15:00. Message ID: 5678.

  • **立即发送:**不带 --date 调用 send,即可取消定时安排并立即发送:
spark action send 5678

输出:Scheduled message 5678 sent now. Message ID: 5678.

  • 取消定时发送:unschedule 会取消定时安排,并将邮件移回草稿箱(以便你编辑或稍后发送):
spark action unschedule 5678

输出:Message 5678 unscheduled - returned to drafts. Find it in the Drafts folder. 清除排程会创建一封新的草稿,因此原始 ID(5678)将无法再解析——请重新列出 Drafts 文件夹,以获取新的草稿 ID,然后再编辑或发送。

对已排程邮件执行 send(带或不带 --date)以及执行 unschedule,都需要拥有该邮件的账号具有发送权限。

选项:

  • --date - snooze 和 changeReminder 必填,assign 可选(用作截止日期;格式:yyyy-MM-dd、dd/MM/yyyy、yyyy-MM-ddTHH:mm)
  • --folder - moveToFolder、attachLabel 和 detachLabel 必填(限定名称:[email protected]:FolderName;使用 folders 列出标签,包括共享收件箱中的标签)
  • --team - 团队操作的团队名称;当你属于多个团队时必填
  • --user - 要共享给的队友邮箱,用于 shareInTeam;可重复指定多个用户;当团队成员超过 2 人时必填
  • --assignee - 要将邮件分配给的队友邮箱,用于 assign
  • --comment - assign 操作的评论文本
spark action pin 12345                                          # pin a message
spark action archive 100 200 300                                # archive multiple messages
spark action markAsSeen 100 200                                 # mark as read
spark action snooze 12345 --date 2026-04-10T09:00               # snooze until date/time
spark action snooze 12345 --date 2026-04-10                     # snooze until date
spark action moveToFolder 12345 --folder "[email protected]:Archive"  # move to folder
spark action attachLabel 12345 --folder "[email protected]:MyLabel"       # add Gmail/Team label
spark action detachLabel 12345 --folder "[email protected]:SomeLabel"  # remove label
spark action changeReminder 12345 --date 2026-04-15             # set reminder
spark action shareInTeam 1234 --team "Engineering" --user [email protected]  # share with teammate
spark action shareInTeam 1234 --user [email protected] --user [email protected]    # share with multiple
spark action assign 1234 --assignee [email protected]                  # assign to teammate
spark action assign 1234 --assignee [email protected] --date 2026-04-15 --comment "Please review"
spark action delegationComplete 1234                            # mark delegation done
spark action delegationComplete 100 200 300                     # complete multiple delegations
spark action delegationReopen 1234                              # reopen delegation

使用 emails 命令查找邮件 ID。使用 folders 查找 moveToFolder、attachLabel 和 detachLabel 所需的限定名称。使用 team 列出团队及其成员,以执行团队操作。

联系人操作

需要:triage 访问级别。

通过邮箱地址对一个或多个联系人执行操作。

spark contact-action <action-name> <email...>

支持的操作:

操作说明
changeCategoryPersonal将联系人的邮件类别更改为 Personal
changeCategoryNotification将联系人的邮件类别更改为 Notification
changeCategoryNewsletters将联系人的邮件类别更改为 Newsletter
groupEmailsFromContact按类别对来自该联系人的邮件进行分组
groupEmailsFromContactAndShowInInbox对来自该联系人的邮件进行分组并在收件箱中显示
ungroupEmailsFromContact取消对来自该联系人的邮件进行分组
markContactAsImportant为该联系人启用通知
unmarkContactAsImportant为该联系人停用通知
markContactAsPrimary将该联系人标记为优先联系人(自动提升其邮件的优先级)
unmarkContactAsPrimary移除该联系人的优先标记
acceptContact接受或取消屏蔽该联系人(绕过 Gatekeeper)
blockContact屏蔽该联系人
acceptDomain接受或取消屏蔽该联系人的整个域名
blockDomain屏蔽该联系人的整个域名
enableAutosummaryForContact为来自该联系人的邮件启用自动摘要
disableAutosummaryForContact为来自该联系人的邮件停用自动摘要

示例:

spark contact-action blockContact [email protected]
spark contact-action acceptContact [email protected] [email protected]
spark contact-action changeCategoryPersonal [email protected]
spark contact-action markContactAsPrimary [email protected]
spark contact-action enableAutosummaryForContact [email protected]

使用 contacts 命令查找邮箱地址。

智能类别

Spark 会自动将收到的邮件分类为六种类别。使用 emails 和 search 的 category: 筛选运算符按类别查看邮件,并使用 action / contact-action 重新分类和调整设置。

类别筛选条件典型内容
优先category:priority自动提升优先级或手动标记为优先的邮件
个人category:personal个人之间的直接邮件
通知category:notification服务通知、提醒、收据
新闻简报category:newsletter订阅内容、摘要、营销邮件
邀请category:invitation日历邀请
邀请回复category:invitation_responseRSVP、接受、拒绝

按类别浏览(只读):

spark emails Inbox --filter "category:priority is:unread"       # unread priority mail
spark emails Inbox --filter "category:personal is:unread"       # unread people mail
spark emails Inbox --filter "category:invitation"               # pending invites
spark emails Inbox --filter "category:notification is:unread"   # unread notifications
spark emails Inbox --filter "category:newsletter newer_than:7d" # recent newsletters

重新分类邮件(triage):

spark action changeCategoryPersonal <id>       # move to People
spark action changeCategoryNotification <id>   # move to Notifications
spark action changeCategoryNewsletters <id>    # move to Newsletters

调整每位联系人的类别规则(triage)——更改将应用于该发件人今后发送的所有邮件:

spark contact-action changeCategoryPersonal [email protected]         # reclassify as People
spark contact-action changeCategoryNewsletters [email protected]      # reclassify as Newsletters
spark contact-action groupEmailsFromContact [email protected]         # group by category
spark contact-action markContactAsImportant [email protected]            # enable notifications
spark contact-action markContactAsPrimary [email protected]              # auto-prioritize
spark contact-action enableAutosummaryForContact [email protected] # AI summaries

优先按类别处理邮件的模式: 按优先级顺序处理收件箱——先处理优先邮件,然后是个人邮件、邀请、通知,最后是新闻简报。这样可以确保最重要的邮件优先得到处理。

典型工作流

回答有关邮件的问题:

  1. spark search "topic" - 查找包含正文的相关邮件
  2. 阅读输出并回答用户的问题

查找并阅读特定邮件:

  1. spark emails --filter "from:sender subject:keyword" - 定位邮件
  2. spark thread <ID> - 阅读完整对话

起草回复:

  1. spark emails --filter "from:sender" - 查找邮件
  2. spark draft --reply-to <ID> --body "Thanks for the update!"
  3. 将输出中的 Link: 作为可点击的 Markdown 链接提供给用户,让他们在 Spark 中查看草稿

使用已保存的模板发送邮件:

  1. spark templates - 列出模板(或使用 spark templates --personal / spark templates --team "<name>")
  2. spark template "<name>" - 在应用模板前检查占位符
  3. spark draft --template "<name>" --to <recipient> --placeholder "<manual>=<value>" - 创建草稿(每个手动占位符都重复使用 --placeholder)

查看某人的会议日程:

  1. spark availability --tomorrow --attendees [email protected],[email protected]
  2. 从空闲时段中建议一个时间

在共享对话中发表评论:

  1. spark emails --filter "from:sender" - 查找邮件
  2. spark comment <ID> --body "Looks good, approved!"

查看团队工作量概况:

  1. spark team "Team Name" - 查看成员和分配给他们的邮件

查找联系人:

  1. spark contacts "name or domain" - 查找其电子邮件地址

对邮件执行操作:

  1. spark emails --filter "from:sender" - 查找邮件
  2. spark action archive <ID> - 将其归档(或置顶、延后等)

与团队共享邮件:

  1. spark emails --filter "subject:keyword" - 查找邮件
  2. spark action shareInTeam <ID> --user [email protected] - 与团队成员共享

将邮件委派给团队成员:

  1. spark emails --filter "subject:keyword" - 查找邮件
  2. spark action assign <ID> --assignee [email protected] --date 2026-04-15 --comment "Please handle this"

将已委派的邮件标记为完成:

  1. spark emails --filter "subject:keyword" - 查找邮件
  2. spark action delegationComplete <ID1> <ID2> - 将多封邮件标记为完成

查找未分配的共享收件箱邮件:

  1. spark emails [email protected]:Inbox --filter "assigned_to:unassigned" - 列出未分配的邮件
  2. spark action assign <ID> --assignee [email protected] - 分配给团队成员

查看分配给团队成员的事项:

  1. spark emails --filter "assigned_to:[email protected]" - 查看分配给他们的事项
  2. spark emails --filter "is:shared_inbox_open" - 查看所有未完成的共享收件箱事项
  3. spark emails --filter "is:shared_inbox_done" - 查看已完成的事项

管理联系人:

  1. spark contacts "name or domain" - 查找联系人的电子邮件地址
  2. spark contact-action blockContact [email protected] - 屏蔽该联系人(或接受、修改类别等)

保持此技能为最新版本

CLI 和此技能共用一个版本号(上方 front-matter 中的 metadata.version)。新版 Spark Desktop 中的新功能会随更新后的内置技能一同发布。在同一主版本内保证向后兼容,因此此处记录的命令和标志仍可正常使用,但在重新安装之前,新添加的功能不会出现在此文件中。

仅当出现以下情况时,才检查更新:

  • 用户询问此处未记录的 Spark 功能、命令或标志。
  • spark 命令意外失败,并提示“unknown command”或“unknown option”错误。
  • 用户明确表示已升级 Spark,或此技能已过时。

在这些情况下:

spark --version

如果打印的版本高于上方的 metadata.version,请先刷新此文件,再作答。spark skill 会将 SKILL.md 输出到 stdout;请捕获该输出,并覆盖当前正在读取的文件(路径位于你的上下文中)。例如:

mkdir -p <parent-of-use-spark>/use-spark
spark skill > <parent-of-use-spark>/use-spark/SKILL.md

<parent-of-use-spark> 是包含此 SKILL.md 所在 use-spark/ 文件夹的目录。如果你有文件写入工具,也可以直接将 spark skill 的输出通过管道传给它——CLI 本身不会写入任何文件。

不要在每次会话开始时或每条命令执行前检查——除非出现上述提示,否则此技能就是准确信息来源。

提示

  • 多词参数始终加引号:spark search "project update"
  • 在同一个 --filter 字符串中组合筛选运算符:--filter "from:[email protected] is:unread newer_than:7d"
  • 使用 folders 查找准确的文件夹标识符,再将其传给 emails 或 search --in
  • 使用 accounts 查找日历名称,再将其传给 events --in
  • search 命令最适合基于主题查询;emails 最适合按元数据浏览和筛选
  • thread 会返回完整对话;需要完整邮件内容而非仅查看元数据时,请使用它
  • 使用 draft 撰写邮件——它支持新建草稿、回复、转发和编辑现有草稿
  • 创建草稿后,始终将其 Link: 深层链接作为可点击的 Markdown 链接分享给用户,而不是让他们打开 Spark
  • draft --delete <pk> 会永久丢弃草稿——没有废纸篓,也无法撤销,因此仅在用户提出要求时使用
  • 草稿正文末尾不要添加落款:Spark 会自动附加账户签名(draft signatures 可查看签名)
  • 使用 comment 在邮件线程中发布团队聊天消息——如有需要,它会自动分享该线程
  • 使用 action 执行邮件操作,例如置顶、归档、稍后提醒、移至文件夹等
  • 使用 contact-action 管理联系人——包括屏蔽、接受、更改类别、切换自动摘要等

评论

支持 Markdown