Aktar CLI

aktar CLI 文档

aktar 的所有命令、选项和输出,附带可直接粘贴的示例。第一次使用?先看 CLI 概览会更快。

概览

aktar 是同一台电脑上 Aktar 应用的遥控器。你把文件交给它,它通过 127.0.0.1 转交给 Aktar,再由 Aktar 按你已经设置好的上传目标、密钥、路径模板和链接设置完成上传。链接随后返回到你的终端。

它是什么

  • 一个小巧的 Node.js 命令,适用于脚本、在你自己的 Mac 或 Windows 机器上运行的 CI 任务,以及 Typora 这类编辑器
  • 可以上传文件和剪贴板内容、显示二维码,并查看你的上传目标和上传记录
  • 与应用一样免费且开源(MIT)

它不是什么

  • 不能独立使用:Aktar 没有运行时,它什么也上传不了。它从不保存你的存储密钥
  • 不适用于 Linux 服务器或远程机器:它只和同一台电脑上的 Aktar 通信。在那些环境中,请使用存储服务商自己的 CLI

系统要求

  • Aktar for Mac 0.18.0 或 Aktar for Windows 0.11.0 或更高版本,且至少设置了一个上传目标。aktar 0.5.0 及更早版本可配合 Aktar for Mac 0.4.0 或更高版本使用
  • Node.js 18 或更高版本(使用 Homebrew 安装时会自动安装)
  • --name、--qr 和 aktar qr 需要 aktar 0.2.0 或更高版本
  • 复用已上传文件的链接需要 aktar 0.2.0,以及 Aktar for Mac 0.10.0 或 Aktar for Windows 0.3.0
  • aktar replace 需要 aktar 0.3.0 以及 Aktar for Mac 0.14.0 或 Aktar for Windows 0.7.0 或更高版本
  • --short、--no-short 和 aktar short 需要 aktar 0.5.0,以及 Mac 版 Aktar 0.17.0 或 Windows 版 Aktar 0.10.0,并在上传目标上设置短链接服务

安装

用 npm 或 Homebrew 安装一次即可。两种方式都会把 aktar 命令加入你的 PATH。

使用 npm(macOS 和 Windows)

npm install -g @getaktar/cli

使用 Homebrew(macOS)

brew install getaktar/tap/aktar-cli

也可以不安装,直接运行一次:

npx @getaktar/cli upload file.png

查看当前版本:

aktar --version
0.6.0

连接 Aktar

  1. 在 Mac 或 Windows 版 Aktar 中打开设置 → 集成,开启允许本地连接。之后 Aktar 只在 127.0.0.1 上监听,默认端口为 47913,也可以在那里修改。
  2. 复制下方显示的令牌。
  3. 运行 aktar login,在 Token: 提示处粘贴令牌。输入内容不会显示,而且保存前会先向 Aktar 验证,输错的令牌不会被保存。
aktar login
Copy the token from Aktar: Settings > Integrations (turn on Allow local connections first).
Token:
Connected to Aktar 0.10.0. Saved to /Users/you/.config/aktar/cli.json

令牌保存在哪里

aktar login 会把令牌和端口保存在 Mac 上的 ~/.config/aktar/cli.json(如果设置了 $XDG_CONFIG_HOME,则为 $XDG_CONFIG_HOME/aktar/cli.json),或 Windows 上的 %APPDATA%\aktar\cli.json。只有你的用户可以读取。

发送令牌之前,aktar 会要求该端口上的应用证明它持有相同的令牌,而令牌本身不会被发送。因此,如果 Aktar 没有运行,而另一个程序正在监听它的端口,那个程序既拿不到令牌,也拿不到你的文件。这需要 Aktar for Mac 0.18.0 或 Aktar for Windows 0.11.0 或更高版本;如果 Aktar 版本较旧,aktar 会停止并提示你更新。

cli.json
{
  "token": "…",
  "port": 47913
}

aktar logout 会删除这个文件。如果想一次性断开所有客户端,在 Aktar 中点击令牌旁的重新生成,然后用新令牌重新运行 aktar login。

脚本和 CI

在构建机上可以跳过 aktar login,改为设置 AKTAR_TOKEN(如果改过端口,再设置 AKTAR_PORT)。它们优先于已保存的文件。Aktar 必须在那台机器上运行,并登录在同一个用户会话中。

AKTAR_TOKEN="$AKTAR_SECRET" aktar upload dist/app.zip -d Builds
变量作用
AKTAR_TOKENAktar 设置 → 集成中的令牌。会代替已保存的令牌使用。
AKTAR_PORTAktar 本地 API 的端口(如果你改过)。--port 优先于它。
NO_COLOR用普通字符而不是终端颜色绘制二维码。
XDG_CONFIG_HOMEmacOS 上配置文件夹的位置(默认为 ~/.config)。Windows 上使用 %APPDATA%。

命令

除了用纯文本或链接运行的 aktar qr,所有命令都要与 Aktar 通信。不加 -d 时,文件会上传到 Aktar 菜单栏中选中的上传目标,并像其他上传一样出现在 Aktar 的上传记录中。aktar --help 会输出同样的列表。 在 Aktar for Mac 0.14.0 或 Aktar for Windows 0.7.0 及更高版本中,未带 -d 的上传会先遵循上传目标的 用于 规则,因此图片可以去截图目标,构建文件去另一个。

aktar upload

上传一个或多个文件,按顺序在每个文件完成时输出它的链接,每个文件一个。

用法

aktar upload <file>... [options]

选项

参数值说明
-d, --destination<name|id>要上传到的上传目标,按名称或 ID 指定。默认为 Aktar 中选中的那个。
-f, --format<format>输出内容:url(默认)、markdown、html 或 custom(你在 Aktar 中设置的模板)。
--name<name>以这个名称上传单个文件。名称没有扩展名时,保留原文件的扩展名。
--folder<path>保留文件名,上传到这个文件夹。
--expires<days>让存储桶在 1、7、14 或 30 天后删除文件。0 表示保留。
--short用上传目标的短链接服务创建短链接,即使其规则会跳过这次上传。
--no-short这次不创建短链接。
--qr同时为每个链接输出二维码。
--json输出包含每个上传完整信息的 JSON 数组,而不是链接。
--port<port>Aktar 本地 API 的端口,仅对本次命令生效。优先于 AKTAR_PORT 和已保存的端口。

注意事项

  • 上传前会先检查所有文件:只要有一个不存在,就不会上传任何文件,aktar 以退出码 2 退出。
  • 某个文件上传失败时,其他文件仍会继续上传。每个失败都会输出到 stderr,退出码为 1。
  • 不加 --folder 时,文件名由上传目标的路径模板决定,和拖到菜单栏上传完全一样。加上 --folder 时,文件会保留原名放进该文件夹。
  • --name 一次只能用于一个文件。名称中的斜杠会被移除;如果名称没有扩展名,会自动加上原文件的扩展名:--name cover 会把 IMG_4021.jpg 上传为 cover.jpg。与 --folder 一起使用时,它就是文件夹中的文件名。
  • --expires 接受 1、7、14 或 30(天),0 表示保留文件。不加时文件会保留,与 Aktar 中的删除时间设置无关。它需要该上传目标已设置 Aktar 的自动删除规则,且不能与 --folder 同时使用。
  • --qr 不能与 --json 同时使用,--png 只能用于 aktar qr。
  • 在终端中,上传进度会显示在 stderr 上。文件以流的方式传给 Aktar,所以文件大小不受影响,也没有时间限制。
  • 如果上传目标在 Aktar 中设置了短链接服务,打印的就是短链接,--format 和 --qr 也会使用它。即使上传目标的规则会跳过这次上传,--short 也会创建短链接;--no-short 则不创建。如果 Aktar 无法创建,会打印原始链接,并在 stderr 中说明原因。

示例

一个文件,一个链接。
aktar upload screenshot.png
https://files.example.com/2026/10/7f3c2a91.png
多个文件,输出 Markdown:按顺序每个文件一行。
aktar upload *.png -f markdown
![](https://files.example.com/2026/10/1b9e44d0.png)
![](https://files.example.com/2026/10/c2f71a5e.png)
换个名称,上传到一个文件夹中。
aktar upload IMG_4021.jpg --name cover --folder blog/2026
https://files.example.com/blog/2026/cover.jpg
同一文件已经在存储桶中:链接照常输出,提示信息输出到 stderr。
aktar upload photo.jpg
aktar: photo.jpg: already uploaded, reused the existing link
https://files.example.com/2026/09/4d2a8c61.jpg
上传目标设置了短链接服务时,打印的是短链接。
aktar upload talk.pdf --short
https://s.example.com/k3Tq9

aktar upload --clipboard

上传剪贴板中的文件或图片,效果与 Aktar 自带的剪贴板快捷键相同。

用法

aktar upload --clipboard [options]

选项

参数值说明
--clipboard上传剪贴板中的内容,而不是文件。
-d, --destination<name|id>要上传到的上传目标,按名称或 ID 指定。默认为 Aktar 中选中的那个。
-f, --format<format>输出内容:url(默认)、markdown、html 或 custom(你在 Aktar 中设置的模板)。
--expires<days>让存储桶在 1、7、14 或 30 天后删除文件。0 表示保留。
--short用上传目标的短链接服务创建短链接,即使其规则会跳过这次上传。
--no-short这次不创建短链接。
--qr同时为每个链接输出二维码。
--json输出包含每个上传完整信息的 JSON 数组,而不是链接。
--port<port>Aktar 本地 API 的端口,仅对本次命令生效。优先于 AKTAR_PORT 和已保存的端口。

注意事项

  • 传入文件或 --clipboard,二者只能选一。
  • --name 和 --folder 只能用于文件。-d、-f、--expires、--qr 和 --json 的用法与上传文件时相同。
  • 使用 --json 时仍然输出数组,其中只有一项。

示例

刚刚拷贝的截图。
aktar upload --clipboard
https://files.example.com/2026/10/9a4c03be.png
以 Markdown 格式上传到名为 Blog 的上传目标。
aktar upload --clipboard -f markdown -d Blog
![](https://blog-assets.example.com/2026/10/e5b2c8a4.png)
一天后由存储桶删除。
aktar upload --clipboard --expires 1
https://files.example.com/tmp/1d/2026/10/38f0d7c2.png

aktar replace

用新文件覆盖一个已上传的文件,键和链接保持不变。拥有链接的人都会看到新文件。

用法

aktar replace <upload-id|link|key> <file> [options]

选项

参数值说明
-d, --destination<name|id>对于键:它所在存储桶的上传目标,按名称或 ID 指定。默认:Aktar 中选中的目标。
-f, --format<format>输出内容:url(默认)、markdown、html 或 custom(你在 Aktar 中设置的模板)。
--qr同时为每个链接输出二维码。
--json输出包含每个上传完整信息的 JSON 数组,而不是链接。
--port<port>Aktar 本地 API 的端口,仅对本次命令生效。优先于 AKTAR_PORT 和已保存的端口。

注意事项

  • 第一个参数是 aktar history 中的上传 ID 或链接(Aktar 的历史记录会随之更新),否则是 -d 所指目标存储桶中的键(省略 -d 时为 Aktar 中选中的目标)。不在 Aktar 历史记录中的链接会被拒绝,请改用 -d 并指定它的键。
  • Aktar 会按目标设置移除文件的元数据并调整尺寸,但绝不会转换为其他格式,因此键的扩展名保持不变。位于 tmp/{N}d/ 下的文件会重新开始计算 N 天。
  • 键不会被编号,也不会上传其他任何内容。--folder、--expires、--name 和 --clipboard 不适用,会被拒绝。
  • 旧副本可能会在 CDN 缓存中保留一段时间。在 Aktar 中为目标开启 短缓存时间 或 Cloudflare 缓存清除即可解决。
  • 需要 Aktar for Mac 0.14.0 或 Aktar for Windows 0.7.0 或更高版本。

示例

按 ID 替换历史记录中的上传,链接保持不变。
aktar replace 0B6C2F8E-3D1A-4C55-9E2B-7A41D0C3E9F1 report-v2.pdf
https://files.example.com/2026/09/0e7d51b3.pdf
替换另一个目标存储桶中的键,并以 Markdown 输出。
aktar replace docs/guide.pdf guide.pdf -d Blog -f markdown
[guide.pdf](https://blog-assets.example.com/docs/guide.pdf)

aktar short

用上传目标的短链接服务为上传记录中的某个上传创建短链接并打印出来。如果该上传已有短链接,就打印那一个。

用法

aktar short <upload-id|link> [--json | --qr]

选项

参数值说明
--json以 JSON 打印短链接的详细信息:服务商、状态和点击次数。
--qr同时打印短链接的二维码。
--port<port>Aktar 本地 API 的端口,仅对本次命令生效。优先于 AKTAR_PORT 和已保存的端口。

注意事项

  • 传入上传 ID 或 aktar history 中的链接,短链接也可以。aktar 会在最近 1,000 个上传中查找。
  • 上传目标需要在 Aktar 的短链接部分设置短链接服务:Shlink、YOURLS、Kutt、Dub、Short.io 或自定义请求。短链接由该服务创建,因此你的链接和点击数据都留在你自己的基础设施中。
  • --json 会打印短链接的详细信息:服务商、状态,以及服务统计时的点击次数和最后点击时间。--qr 会附上它的二维码。两者不能同时使用。
  • 需要 Mac 版 Aktar 0.17.0 或 Windows 版 Aktar 0.10.0。旧版本会回复尚不支持创建短链接。

示例

为上传记录中的某个上传创建短链接。
aktar short 0B6C2F8E-3D1A-4C55-9E2B-7A41D0C3E9F1
https://s.example.com/Qm3xZ

aktar qr

在终端中显示链接或任意文本的二维码,方便在手机上打开。传入上传 ID 时,会显示该上传的链接及其二维码。

用法

aktar qr <link|text|upload-id> [--png <file>]

选项

参数值说明
--png<file>把二维码保存为 PNG 文件,而不是直接输出。
--port<port>Aktar 本地 API 的端口,仅对本次命令生效。优先于 AKTAR_PORT 和已保存的端口。

注意事项

  • 只能传入一个参数,含空格的文本请加引号。
  • 上传 ID 就是 aktar history --json 或 aktar upload --json 输出中的 id。aktar 会在 Aktar 上传记录的最近 1,000 条中查找它;如果是纯文本或链接,则完全不需要 Aktar。
  • 无论终端使用什么主题,二维码都以白底黑色绘制。输出不是终端或设置了 NO_COLOR 时,则不使用颜色绘制。
  • --png 会把二维码保存为 PNG,而不是直接输出。
  • 对于有短链接的上传,显示的是短链接。

示例

任意链接的二维码,用手机相机扫描即可打开。
aktar qr https://files.example.com/2026/10/demo.mp4
上传记录中的某个上传,保存为 PNG。
aktar qr 0B6C2F8E-3D1A-4C55-9E2B-7A41D0C3E9F1 --png cover-qr.png
Saved to cover-qr.png

aktar login

向 Aktar 验证令牌并保存,供其他命令连接时使用。

用法

aktar login [--token <token>] [--port <port>]

选项

参数值说明
--token<token>直接提供令牌,不再提示输入。
--port<port>Aktar 的端口,会与令牌一起保存。默认为 47913。

注意事项

  • 在终端中,它会提示输入令牌,并隐藏你输入的内容。通过管道输入时,会从管道读取令牌。
  • --token 可以跳过提示,但命令运行期间其他程序能看到令牌,而且令牌会留在 shell 历史记录中,所以 aktar 会对此发出警告。通过管道传入或使用 AKTAR_TOKEN 可以避免这一点。
  • 被 Aktar 拒绝的令牌不会保存,退出码为 3。

示例

输入时令牌不会显示。
aktar login
Copy the token from Aktar: Settings > Integrations (turn on Allow local connections first).
Token:
Connected to Aktar 0.10.0. Saved to /Users/you/.config/aktar/cli.json
在 Mac 上使用从 Aktar 拷贝的令牌。
pbpaste | aktar login
Connected to Aktar 0.10.0. Saved to /Users/you/.config/aktar/cli.json
不使用提示,并指定修改过的端口。aktar 会警告令牌可能已被看到。
aktar login --token "$AKTAR_SECRET" --port 47920
aktar: warning: a token on the command line can be seen by other programs (ps) and stays in your shell history. Next time, run aktar login without --token and paste it, or pipe it in.
Connected to Aktar 0.10.0. Saved to /Users/you/.config/aktar/cli.json

aktar logout

删除已保存的令牌和端口。

用法

aktar logout

选项

没有选项。

注意事项

  • 如果设置了 AKTAR_TOKEN,aktar logout 之后它仍然有效。
  • 它不会断开其他客户端。要断开它们,请在 Aktar 中重新生成令牌。

示例

删除令牌。
aktar logout
Logged out.
之后,命令会提示你重新登录(退出码 3)。
aktar status
aktar: Not connected to Aktar yet. Run aktar login with the token from Aktar's Settings > Integrations.

aktar status

显示你连接的是哪个 Aktar、使用的端口、Aktar 中选中的上传目标,以及配置文件的位置。

用法

aktar status [--json]

选项

参数值说明
--json输出 JSON 而不是文本。
--port<port>Aktar 本地 API 的端口,仅对本次命令生效。优先于 AKTAR_PORT 和已保存的端口。

注意事项

  • 在脚本中快速检查连接的好办法:无法连接 Aktar 或令牌不正确时,退出码为 3。

示例

已连接,并显示选中的上传目标。
aktar status
Aktar 0.10.0 (build 28) on port 47913
Destination: Screenshots (Cloudflare R2, screenshots)
Config: /Users/you/.config/aktar/cli.json
同样的信息以 JSON 输出,方便脚本使用。
aktar status --json
{
  "app": "Aktar",
  "version": "0.10.0",
  "build": "28",
  "apiVersion": 1,
  "defaultDestinationId": "5D1A9C3E-7B2F-4E61-8A0D-3C9B6F2E1A47",
  "outputFormat": "url",
  "port": 47913
}

aktar destinations

列出你的上传目标及其服务商、存储桶和 ID。* 标出 Aktar 中当前选中的那个。

用法

aktar destinations [--json]

选项

参数值说明
--json输出 JSON 而不是文本。
--port<port>Aktar 本地 API 的端口,仅对本次命令生效。优先于 AKTAR_PORT 和已保存的端口。

注意事项

  • -d 可以使用名称或 ID。名称匹配不区分大小写;ID 始终有效,即使改了名也一样。
  • --json 会为每个上传目标给出 id、name、provider、providerName、bucket、publicBaseURL 和 isDefault。

示例

选中的上传目标用 * 标出。
aktar destinations
* Screenshots  Cloudflare R2  screenshots  5D1A9C3E-7B2F-4E61-8A0D-3C9B6F2E1A47
  Builds  Amazon S3  acme-builds  A83F2C10-6D4B-4F7E-9C1A-2B5E8D0F3C66
  Blog  Backblaze B2  blog-assets  E2C7B9A4-1F3D-4A8E-B6C0-9D5F2A7E4B13
用 jq 取出选中的上传目标的名称。
aktar destinations --json | jq -r '.[] | select(.isDefault) | .name'
Screenshots

aktar history

按从新到旧列出最近的上传:日期、文件名和链接。history 后面的词会用来搜索上传记录。

用法

aktar history [search] [options]

选项

参数值说明
-n, --limit<n>要列出的上传条数。默认为 20。
-d, --destination<name|id>只显示上传到这个上传目标的记录,按名称或 ID 指定。
--json输出 JSON 而不是文本。
--port<port>Aktar 本地 API 的端口,仅对本次命令生效。优先于 AKTAR_PORT 和已保存的端口。

注意事项

  • 默认列出 20 条,可用 -n 修改。
  • --json 给出的字段与 aktar upload --json 相同,包括每个上传的 id,可用于 aktar qr。

示例

最近三次上传。
aktar history -n 3
2026-10-01  screenshot.png  https://files.example.com/2026/10/7f3c2a91.png
2026-10-01  cover.jpg  https://files.example.com/blog/2026/cover.jpg
2026-09-30  invoice-september.pdf  https://files.example.com/2026/09/0e7d51b3.pdf
在一个上传目标中搜索发票。
aktar history invoice -d Screenshots
2026-09-30  invoice-september.pdf  https://files.example.com/2026/09/0e7d51b3.pdf
2026-08-29  invoice-august.pdf  https://files.example.com/2026/08/a6c94f20.pdf
用 jq 取出最新构建的链接。
aktar history -d Builds -n 1 --json | jq -r '.[0].url'
https://acme-builds.s3.amazonaws.com/2026/10/app-3f9c2e1.zip

aktar mcp

运行 Model Context Protocol (MCP) 服务器,让 Claude、Cursor、VS Code、Codex 等 AI 智能体可以通过 Aktar 上传文件、查找过往上传并生成链接。只需在智能体中添加一次,需要时由智能体自动启动。

用法

aktar mcp [--root <folder>]... [--read-only | --allow-replace | --allow-delete] [--max-link-minutes <n>] [--log <file>]

选项

参数值说明
--root<folder>只上传此文件夹中的文件。可重复使用以添加更多文件夹。默认:服务器运行所在的文件夹;如果那是你的主文件夹或磁盘根目录,则不允许任何文件夹。
--read-only只提供不会改动存储桶内容的工具:搜索、列表、临时链接和缩略图。
--allow-replace同时提供 replace_file,用于覆盖存储桶中的文件。
--allow-delete同时提供 delete_upload(用于从存储桶中删除文件)和 replace_file。
--max-link-minutes<n>临时链接的最长有效时间,以分钟为单位。默认为 60,最多 10080(7 天)。
--log<file>把每次工具调用(时间、工具、参数、结果)追加到这个文件中,只有你可以读取。
--port<port>Aktar 本地 API 的端口,仅对本次命令生效。优先于 AKTAR_PORT 和已保存的端口。

注意事项

  • 请先运行 aktar login。服务器每次调用都会读取已保存的令牌,所以重新登录后无需重启智能体。
  • 上传会公开文件:任何拿到链接的人都能打开。除非你允许,否则智能体在调用工具前会先询问。
  • 只会从你用 --root 指定的文件夹上传文件,未指定时只从服务器运行所在的文件夹上传。如果那是你的主文件夹或磁盘根目录(有些应用就是这样),在你添加 --root 之前不会上传任何本地文件。如果你确实需要,--root ~ 会允许整个主文件夹。路径会先解析(包括符号链接)再检查。
  • 无论放在哪里,机密文件都不会被上传:SSH 密钥和私钥、.env 文件、云服务和包管理器的凭据(~/.aws、~/.kube、~/.npmrc 等)、Aktar 自己的配置、钥匙串、浏览器配置文件和密码数据库。有多个硬链接的文件也会被拒绝。要分享这类文件,请自己用 aktar upload 上传。
  • --read-only 只提供不会改动存储桶内容的工具。replace_file 会像删除一样覆盖文件,所以只有使用 --allow-replace 时才提供;delete_upload 只有使用 --allow-delete 时才提供(它同时也会提供 replace_file)。
  • create_temporary_link 生成的链接最长有效 60 分钟,除非 --max-link-minutes 允许更长。指定 --root 时不提供 upload_clipboard,因为剪贴板里可能是任何内容。
  • 工具结果开头会注明:其中的文件名、键和消息都是数据,而不是指令。--log 会记录每一次调用。它最多同时运行 4 个工具调用。
  • 如果没有全局安装,请使用 npx -y @getaktar/cli mcp --root ~/Projects 作为命令。
  • 通过 stdio 支持当前的 MCP 版本(2026-07-28),以及以 initialize 开头的早期版本(2024-11-05 至 2025-11-25)。需要 aktar 0.4.0;上述限制自 aktar 0.6.0 起提供。

工具

工具作用
upload_file上传文件并返回其链接、Markdown 和 HTML。上传目标、名称、文件夹和过期时间均为可选。short 可要求创建短链接,或不创建。
upload_clipboard上传剪贴板中的文件或图片。short 可要求创建短链接,或不创建。指定 --root 时不提供。
replace_file用新文件覆盖已上传的文件或存储桶中的任意文件,并保留链接。仅在使用 --allow-replace 或 --allow-delete 时提供。需要 Aktar for Mac 0.14.0 或 Windows 0.7.0。
create_short_link用上传目标的短链接服务为某个上传创建短链接,或返回已有的短链接。使用 --read-only 时不提供。需要 Mac 版 Aktar 0.17.0 或 Windows 版 0.10.0。
search_uploads搜索上传记录。
list_destinations列出上传目标,以及每个目标用于哪些文件类型。
list_bucket列出存储桶中的文件夹和文件,包括不是通过 Aktar 上传的文件。
create_temporary_link生成一个一段时间后失效的链接(预签名 URL)。在失效之前,任何拿到链接的人都能下载该文件,即使它在私有存储桶中。最长 60 分钟,除非 --max-link-minutes 允许更长。
get_thumbnail向智能体展示某个上传的预览。需要 Aktar for Mac 0.13.0 或 Windows 0.6.0。
list_watched_folders列出监视的文件夹及其状态。
get_status检查与 Aktar 的连接。
delete_upload从存储桶中删除一个上传。仅在使用 --allow-delete 时可用。

示例

把 Aktar 添加到 Claude Code 或 Codex。
claude mcp add aktar -- aktar mcp --root ~/Projects
codex mcp add aktar -- aktar mcp --root ~/Projects
让智能体从两个文件夹上传,并允许替换文件。
claude mcp add aktar -- aktar mcp --root ~/Projects --root ~/Desktop --allow-replace
记录智能体做过的操作。
claude mcp add aktar -- aktar mcp --root ~/Projects --log ~/aktar-mcp.log

aktar skill

输出一份智能体技能(SKILL.md),教智能体使用带 --json 的 aktar 命令:该运行什么、如何读取结果,以及只上传你要求分享的内容。适用于支持技能但不支持 MCP 的智能体。

用法

aktar skill

选项

没有选项。

注意事项

  • 把它保存到智能体查找技能的位置,例如 Claude Code 的 ~/.claude/skills/aktar/。

示例

为 Claude Code 安装技能。
mkdir -p ~/.claude/skills/aktar
aktar skill > ~/.claude/skills/aktar/SKILL.md

所有命令通用的选项

参数值说明
-h, --help显示命令和选项列表。
-v, --version显示 aktar 的版本。
--port<port>Aktar 本地 API 的端口,仅对本次命令生效。优先于 AKTAR_PORT 和已保存的端口。

输出

格式

-f 决定每个上传输出什么内容。不加时,无论 Aktar 菜单栏拷贝的是哪种格式,aktar 都输出纯 URL。Markdown 和 HTML 会把图片嵌入,其他文件则输出链接,与 Aktar 的做法一致。

格式photo.jpg 的输出
-f urlhttps://files.example.com/2026/10/7f3c2a91.jpg链接(默认)。
-f markdown![](https://files.example.com/2026/10/7f3c2a91.jpg)Markdown 图片;其他文件为 Markdown 链接。
-f html<img src="https://files.example.com/2026/10/7f3c2a91.jpg" alt=""><img> 标签;其他文件为 <a> 链接。
-f custom![photo.jpg](https://files.example.com/2026/10/7f3c2a91.jpg)你在 Aktar 设置中的模板,{url}、{filename} 等变量会被替换。

stdout 和 stderr

标准输出只有链接,每行一个,顺序与文件一致(使用 --qr 时还有二维码)。其他内容都输出到标准错误:进度、错误,以及 aktar: photo.jpg: already uploaded, reused the existing link 这样的提示。所以 url=$(aktar upload file) 和 aktar upload *.png > links.txt 得到的始终是干净的链接。

aktar upload photo.jpg
aktar: photo.jpg: already uploaded, reused the existing link
https://files.example.com/2026/09/4d2a8c61.jpg

JSON

--json 会在所有文件完成后输出一个数组,每个上传的文件一项。上传失败的文件不在其中(它们会输出到 stderr),所以也要检查退出码。

aktar upload photo.jpg --json
[
  {
    "id": "0B6C2F8E-3D1A-4C55-9E2B-7A41D0C3E9F1",
    "filename": "photo.jpg",
    "objectKey": "2026/10/7f3c2a91.jpg",
    "url": "https://files.example.com/2026/10/7f3c2a91.jpg",
    "shortUrl": null,
    "destinationId": "5D1A9C3E-7B2F-4E61-8A0D-3C9B6F2E1A47",
    "destinationName": "Screenshots",
    "mimeType": "image/jpeg",
    "size": 482113,
    "createdAt": "2026-10-01T12:00:00Z",
    "expiresAt": null,
    "formats": {
      "url": "https://files.example.com/2026/10/7f3c2a91.jpg",
      "markdown": "![](https://files.example.com/2026/10/7f3c2a91.jpg)",
      "html": "<img src=\"https://files.example.com/2026/10/7f3c2a91.jpg\" alt=\"\">",
      "custom": "![photo.jpg](https://files.example.com/2026/10/7f3c2a91.jpg)"
    },
    "reused": false
  }
]
字段含义
id该上传在 Aktar 上传记录中的 ID,可用于 aktar qr。
filenameAktar 记录的文件名:文件本身的名称,或 --name 指定的名称。
objectKey文件在存储桶中的位置。
url链接。
shortUrl短链接,没有时为 null。formats 已经使用它。
destinationId上传目标的 ID。
destinationName上传目标的名称。
mimeType文件类型,以 Aktar 转换后的为准。
size存储后的大小,单位为字节。
createdAt上传时间(ISO 8601,UTC)。
expiresAt存储桶删除它的时间;如果会保留,则为 null。
replacedAt文件最后一次被替换的时间(ISO 8601,UTC)。在被替换之前以及 Mac 0.14.0 和 Windows 0.7.0 之前的 Aktar 版本中不会出现。
formats全部四种格式的链接:url、markdown、html 和 custom。
reused因为同一文件已经存在而没有上传时为 true。Mac 0.10.0 和 Windows 0.3.0 之前的 Aktar 不会返回此字段。
shortLinkErrorAktar 无法创建短链接的原因,此时 url 是原始链接。没有问题时省略。

退出码

代码含义
0一切正常。
1至少有一个上传或请求失败,其余仍已完成。Aktar 自身的错误(例如未设置自动删除)也属于这一类。
2参数有误、文件不存在,或 Aktar 中没有这个名称的上传目标。没有上传任何文件。
3尚未登录、Aktar 没有运行、本地 API 已关闭、令牌不正确,或者该端口上的应用无法证明自己是 Aktar(或版本太旧,无法证明)。

实用示例

拷贝、改一下文件名,就能用。每个示例都只用到上面介绍过的内容。

把链接存入变量

只有链接会进入标准输出,所以命令替换得到的正好是 URL。上传失败时,|| exit 1 会终止脚本。

url=$(aktar upload build/report.pdf) || exit 1
echo "Report: $url"
Report: https://files.example.com/2026/10/0e7d51b3.pdf

上传构建并发布链接

把构建打包成 zip,以提交的短哈希为名上传到名为 Builds 的上传目标,再把链接发到任何接受 JSON 的 webhook(聊天频道、问题追踪系统或你自己的接口)。上传失败时,set -e 会在发布前终止。

#!/bin/sh
set -e
zip -qr app.zip dist
url=$(aktar upload app.zip -d Builds --name "app-$(git rev-parse --short HEAD)")
curl -fsS -X POST "$WEBHOOK_URL" \
  -H 'Content-Type: application/json' \
  -d "{\"text\": \"New build: $url\"}"

Makefile 目标

make share 以当天日期为名上传报告,并把链接保存在 .last-link 中。在 Makefile 中,$$ 会把 $ 传给 shell,命令行必须以制表符开头。

Makefile
share: dist/report.pdf
	aktar upload dist/report.pdf --name "report-$$(date +%F)" | tee .last-link

Typora 图片上传

在 Typora 中打开偏好设置 > 图像,把图片上传服务设为自定义命令,填入 aktar 的完整路径(即 which aktar 输出的路径),后面加上 upload。Typora 会传入图片路径,并逐行读取链接。

/opt/homebrew/bin/aktar upload

包含插入图片时…设置的详细步骤:Typora 图床:图片自动上传到 S3。

从访达或快捷指令上传

在 Mac 上,向快捷指令或在访达中接收文件的 Automator 快速操作添加 Run Shell Script 操作,并把输入设为 as arguments。快捷指令和 Automator 不会加载 shell 的 PATH,所以需要第一行。选中文件并运行,链接就会出现在剪贴板上。

export PATH="/opt/homebrew/bin:/usr/local/bin:$PATH"
aktar upload "$@" | pbcopy
osascript -e 'display notification "Link copied" with title "aktar"'

它上传的是文件,不是文件夹。选中多个文件会得到多个链接,每行一个。

临时文件

日志、录屏或任何不该长期保留的文件,都可以交给存储桶删除。上传目标需要先设置 Aktar 的自动删除规则:在 Aktar 菜单栏的删除时间或上传目标的设置中设置一次即可。

aktar upload crash.log --expires 1
aktar upload screen-recording.mov --expires 7 --qr

限期文件存放在存储桶中的 tmp/1d/、tmp/7d/ 等文件夹下,即使 Aktar 没有运行,存储桶也会删除它们。

在手机上打开链接

--qr 会在链接下方输出二维码,用手机相机对准终端即可。之后想再次显示,把上传的 ID 传给 aktar qr,这里用的是匹配 "demo" 的最新上传。

aktar upload demo.mp4 --qr
aktar qr "$(aktar history demo -n 1 --json | jq -r '.[0].id')"

Windows PowerShell

同样的用法也适用于 PowerShell。$LASTEXITCODE 保存退出码,ConvertFrom-Json 可以读取 --json 的输出。

PowerShell
$url = aktar upload .\dist\app.zip -d Builds
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
Set-Clipboard $url

$upload = aktar upload .\report.pdf --json | Out-String | ConvertFrom-Json
$upload.formats.markdown

在 Claude Desktop、Cursor 或 VS Code 中使用 Aktar

使用 JSON 配置 MCP 服务器的应用(Claude Desktop、Cursor、Windsurf 等)需要添加这一项。VS Code 在 .vscode/mcp.json 的 servers 下使用同样的条目。然后让你的智能体上传文件、查找上周的截图,或生成临时链接。

JSON
{
  "mcpServers": {
    "aktar": { "command": "aktar", "args": ["mcp", "--root", "/Users/you/Projects"] }
  }
}

如果应用找不到 aktar,请使用它的完整路径(which aktar),或使用 npx,并把 ["-y", "@getaktar/cli", "mcp", "--root", "/Users/you/Projects"] 作为参数。把允许智能体上传的文件夹写在 --root 后面(在 Windows 上,例如 C:\\Users\\you\\Projects)。

Aktar 替你做的事

CLI 只负责转交文件,其余都由 Aktar 按每个上传目标的设置完成。所以你在应用中设置的一切同样适用于 aktar upload,无需额外选项,得到的链接也对应最终存储的文件。

  • 路径模板

    文件名由上传目标的对象路径决定,可以使用 {year}、{uuid}、{filename} 等变量。{md5} 和 {sha256} 按文件内容命名。

  • 图像处理

    如果上传目标会把图像转换为 WebP 或 AVIF、压缩或调整大小,CLI 上传的图像也会同样处理,链接指向转换后的文件。

  • 照片元数据

    上传目标的上传默认设置中的图片元数据会在照片离开你的电脑前移除位置信息,或移除全部元数据。

  • 同一文件,同一链接

    开启重复文件复用链接后,同一上传目标中内容相同的文件会直接得到现有链接,不会再上传一次。aktar 会在 stderr 上提示。

  • 大文件

    大文件会分段上传,没有 5 GB 上限,连接中断后会重试,并从中断处继续。aktar 以流的方式把文件传给 Aktar,从不把整个文件读入内存。

  • 公开链接或临时链接

    链接是公开链接,还是同样适用于私有存储桶的临时(预签名)链接,与在应用中一样由上传目标决定。

重复文件复用链接、图像处理、{md5} 和 {sha256} 以及分段上传随 Aktar for Mac 0.10.0 和 Windows 0.3.0 推出:0.10.0 新功能。

问题排查

aktar 的错误信息以 aktar: 开头,并输出到 stderr。退出码可以告诉你是哪一类问题。

Aktar isn't running, or its local API is turned off

打开 Aktar,确认设置 → 集成中的允许本地连接已开启。如果你在那里改过端口,请用 --port 或 AKTAR_PORT 传入,或重新运行 aktar login --port。退出码 3。

Not connected to Aktar yet

没有已保存的令牌,也没有设置 AKTAR_TOKEN。用 Aktar 设置 → 集成中的令牌运行 aktar login。退出码 3。

The token doesn't match Aktar's anymore

令牌已在 Aktar 中重新生成,或输入有误。用当前的令牌重新运行 aktar login。如果设置了 AKTAR_TOKEN,它会优先于已保存的令牌,所以也要更新或取消设置它。退出码 3。

The app on port … couldn't prove it's Aktar

有程序在 Aktar 的端口上响应了,但无法证明它持有你的令牌,所以令牌没有被发送。如果 Aktar 正在运行,它的令牌很可能已经更改:请重新运行 aktar login。如果 Aktar 没有运行,请打开它。退出码 3。

This version of Aktar can't prove it's Aktar

aktar 0.6.0 及更高版本会在发送令牌前检查应用,这需要 Aktar for Mac 0.18.0 或 Aktar for Windows 0.11.0 或更高版本。更新 Aktar(它会自己提供更新)后,命令即可恢复正常。退出码 3。

MCP: This server doesn't upload local files

智能体在你的主文件夹或磁盘根目录中启动了 aktar mcp,而且没有 --root。在服务器的命令或配置中加上 --root 和允许上传的文件夹,例如 aktar mcp --root ~/Projects,然后重启智能体。

Auto-delete isn't set up for this destination

--expires 需要存储桶的自动删除规则。在 Aktar 菜单栏的删除时间或上传目标的设置中设置一次,或者不加 --expires 上传。退出码 1。

No destination named "…"

错误信息会列出 Aktar 中已有的名称。检查拼写,含空格的名称请加引号(-d "Client work"),或使用 aktar destinations 显示的 ID。退出码 2。

大文件上传很慢

这取决于存储服务商的速度:aktar 对上传没有时间限制,并会在终端的 stderr 上显示进度。在完成之前请保持 Aktar 运行。如果连接中断或 Aktar 退出(Aktar closed the connection before the request finished),再次上传同一文件即可:Aktar for Mac 0.10.0 和 Windows 0.3.0 会从最后一个分段继续。

aktar 无法启动:SyntaxError 或 parseArgs

你的 Node.js 版本低于 18。用 node --version 检查并更新,或者用 Homebrew 安装 aktar,它会自带 Node.js。

PowerShell 提示禁止运行脚本

PowerShell 的执行策略阻止了 npm 为 aktar 安装的脚本。改为运行 aktar.cmd,或用 Set-ExecutionPolicy -Scope CurrentUser RemoteSigned 一次性允许本地脚本。