TINKER:工具箱能被 AI 操作的那一刻,我知道它成型了
前言
TINKER 从一开始,目标就很简单:尽量做高质量、自己用得顺手的工具。不强迫登录,不堆账号体系,打开就能用,用完即走。数据也留在本地,支持导入导出,换机器或备份都不麻烦。
这些都重要,但最重要的一点是开放。

插件体系
开放的第一步,是插件体系本身。
TINKER 用 npm 包作为插件的发布载体:任何人都可以把自己的工具做成以 tinker- 开头的包(也支持 @xxx/tinker- 这样的 scoped 包),发布到 npm 后即可被加载。应用会扫描全局安装的这类包并尝试引入,不设审核、不做推荐,也不强行内置到发行版里。
门槛尽量低:写插件的体验跟写普通 Web 页面差不多,本地开发完成后发布到 npm 即可,升级也和普通 npm 包一样。开放生态不靠审核把关,而靠「谁都能发、谁都能装」。
创建快捷方式
插件装进来之后,下一步是怎么更快地打开它们。
TINKER 支持为具体插件创建快捷方式。创建之后,它会像一个普通应用一样出现在系统里:双击就能直接打开对应插件,不必先进入工具箱再搜索。也正因为如此,Raycast 这类第三方启动器同样可以索引到这些快捷方式,用自己习惯的方式唤起插件。

命令行控制
快捷方式解决的是「像普通应用一样打开」,命令行则把控制权交给终端。
安装命令行工具后,可以用 tinker 直接操作正在运行的应用:列出已安装插件、打开某个插件、查看当前有哪些插件在跑,也可以关闭它们。比如:
tinker list
tinker open json-editor
tinker ps不必再回到窗口里点来点去,脚本和日常终端工作流都能接上工具箱。
命令行是自动化的基础。有了它,就有可能用脚本把多个插件串起来,编排自己的工作流:打开、处理、关闭,不必再依赖手动点击。
HTTP 远程访问
除了用终端控制,也可以从浏览器进来。启动 HTTP 远程服务后,就能直接访问并操作工具插件;再配上内网穿透,还能临时在其它设备——比如手机——上打开使用,不必守在电脑桌前。

AI 助手与 MCP
TINKER 很早之前就接入了 AI 配置。想法很直接:所有工具共用一套配置,不用每个插件单独配一遍模型、密钥。
最近又给一部分插件加了类似聊天的助手。比如图表插件,可以直接打开助手,用文本告诉 AI 帮我画什么图,不必自己去记那些语法;正则插件则可以让它帮忙写表达式、对着测试文本调试。助手真正能「动手」,靠的是插件自己提供一套操作接口——读写内容、改参数、跑结果——AI 通过这些接口驱动插件,而不是只会空聊。

这些接口既然已经存在,就没有理由只给内置助手用。于是我设计了一套统一的 MCP 接口,每个插件都可以按同一套约定实现;再用 tinker mcp <插件名> 启动对应的 MCP 服务,外部 Agent 就能直接调用。
同一套接口也不必非得走 MCP:命令行可以直接调用,比如列出工具、执行某个操作:
tinker open image-compressor
tinker call image-compressor --tool compress --args '{
"paths": ["/path/to/photo.jpg"],
"quality": 80,
"outputDirectory": "/path/to/output"
}'即便插件自己没有实现 MCP 接口,也还有一条通用通路:用 tinker open <插件名> --inspect 打开调试端口。agent-browser 这类工具可以连上去自行调试插件界面;换个角度看,这也等于给任意插件提供了通用控制能力——不依赖每个插件额外实现接口,照样能被外部驱动。
Skill
最后,是把这些能力封装成 Skill。Agent 装上之后就知道该怎么调用 TINKER,不必再在对话里反复解释命令格式、参数约定。
有了 Skill,AI 可以直接操作工具箱:从待办里查看今天要办的事,从股票插件里获取收藏股票的今日情况,从热榜插件里读今天的热门消息,从邮箱插件里查看邮件、发送邮件。更进一步,还可以让 AI 基于这些基础工具把某次工作流跑通,再沉淀成新的 Skill 或脚本,之后重复运行。

Skill 也支持创建插件:一句话生成工具。说出想要什么,它就能自动帮你写出插件,并以桌面应用的方式跑起来。更关键的是,生成出来的工具天然接上前面说的那套能力——快捷方式、命令行、MCP、调试端口——不用再单独补一遍开放接口。
结语
到这一步,工具箱不再只是「自己点开用」的一堆窗口,而是能被 AI 真正调用的能力集合。看着 AI 自动打开插件、读写数据、把事情做完——那一刻,我知道它成型了。
后面还会继续加插件,已有的插件也会不断改进。