随心写
anywrite
anywrite
概述
anywrite 是一个针对 Anytype 桌面端本地 HTTP API 编译的 Bun/TypeScript CLI。它将涵盖空间、对象、属性、标签、类型、模板、列表、聊天、文件、成员、搜索和认证的 全部 52 个端点 集成在一个无需运行时依赖的二进制文件中。它是 Anytype 官方 MCP 服务器的一种低上下文替代方案:anywrite 作为一个技能(skill)被调用,而不是在每个 Agent 会话中加载 52 个工具,因此在实际调用前不占用任何上下文,且同样适用于终端或任何脚本。
何时使用此技能
- 当用户提到 Anytype,或要求创建、更新、搜索、组织笔记、任务或 PKM 对象时。
- 当涉及 Anytype 空间、属性、标签、类型、模板或列表(集合和收藏)的操作时。
- 当用户要求向空间上传文件、在空间内聊天,或通过编程方式读写结构化对象时。
工作原理
第一步:确保 Anytype 桌面端已运行并完成认证
本仓库不提供 anywrite 可执行文件。用户必须在当前工作区之外安装或构建经过审核的上游版本,并提供其明确的绝对路径。在使用前,请验证该路径是一个可执行的常规文件,而非符号链接,且不是工作区相对路径下的 dist/ 产物。严禁自动发现或执行当前工作仓库中的 ./dist/anywrite。
Anytype 桌面应用必须在本地运行(默认 http://localhost:31009)。认证一次即可:
bash
"/absolute/path/to/anywrite" auth --status # 显示配置状态(yes/no)及密钥来源
"/absolute/path/to/anywrite" auth # 挑战流程 —— 应用中会出现一个 4 位验证码
"/absolute/path/to/anywrite" auth --code 1234 # 上述流程的非交互式形式密钥被写入 ~/.anywrite/config.json,且不会被任何命令打印出来。
第二步:调用 资源 + 动作
code
anywrite <resource> <action> [positionals] [--flag value]资源(Resources):spaces, objects, properties, tags, types, templates, lists, files, members, search, chat, auth。默认输出为 JSON;添加 --pretty 可进行人类可读视图,添加 --json 作为类型标志尚未覆盖时的兜底方案。space/type/property 的位置参数接受名称或 ID —— 名称会自动解析为 ID。
示例
示例 1:创建并更新对象
bash
"/absolute/path/to/anywrite" objects create <space> --type task --name "Buy milk"
"/absolute/path/to/anywrite" objects update <space> <object_id> --status "Done"示例 2:搜索并上传文件
bash
bash
"/absolute/path/to/anywrite" search global --query "task" --types task
"/absolute/path/to/anywrite" files upload <space> --file ./image.png示例 3:读取聊天消息
bash
"/absolute/path/to/anywrite" chat messages <space> <chat_id> --all最佳实践
- ✅ 为
space/type/property传递名称,由 CLI 自动解析为 ID。
- ✅ 脚本编写建议使用默认的 JSON 输出,人工查看建议使用
--pretty。
- ✅ 当新的 API 字段尚未由类型化标志(typed flag)覆盖时,请使用
--json。
- ❌ 不要将
--icon设置为空字符串;直接省略该标志即可。
- ❌ 不要期望
lists add/remove能在 Set(集合)上运行 —— 它们仅适用于 Collection(收藏集)。
局限性
- 本技能不能替代特定环境的验证、测试或专家评审。
- 如果缺少必要的输入、权限或安全边界,请停止操作并请求澄清。
- 受限于 Anytype 本地 API:不支持块级编辑(正文仅支持全量 Markdown 替换)、不支持成员邀请/角色管理、不支持模板的创建/更新/删除、不支持空间删除。
- 对象正文字段在创建时名为
--body,在更新时名为--markdown。
安全与防护注意事项
- API 密钥本地存储在
~/.anywrite/config.json中,任何命令(包括auth --status)都不会打印该密钥。
- 运行时配置优先级:
ANYTYPE_API_KEY环境变量 $\rightarrow$~/.anywrite/config.json$\rightarrow$ 只读回退至现有的~/.anytype-cli/config.yaml。
- 所有操作均针对本地运行的 Anytype 桌面实例;数据不会发送到第三方服务器。
- 删除操作在所有场景下均为软归档且具有幂等性 —— 重复删除仍返回
200,不会返回410。
常见陷阱
- 问题:
lists add/remove在 Set 上运行且没有任何提示,但没有效果。
- 问题: 重新上传相同文件时,返回的是现有对象 ID 而非新 ID。
- 问题: 聊天消息的分页方式与其他资源不同。
相关技能
@docx- 当交付物是 Word 文档而非 Anytype 对象时使用。