往终端里敲了三行,等了 3 秒,这张图就落到我的硬盘上了。

我一次 GUI 也没打开。没去 Midjourney,没在 ComfyUI 里搭节点图,也没去 ChatGPT 浏览器找下载按钮。只是 export 了一个 KOTONIA_API_KEY,启动 kotonia-cli,然后用日文说了一句:「做个可爱的美少女图,存成 ./bishoujo.png」。
走到这一步花了一天。我用 Rust 从零写了一个 CLI agent,把它接进自己的 /api/v1 图像生成端点,让 agent 通过 bash 发 curl,把生成的 PNG 落到 ./bishoujo.png 里。8 个 commit,31 个单元测试,大约 2,000 行 Rust。
这套东西一跑通,我立刻有个强烈的直觉:这填上了一块没人去填的品类空白。这篇文章就是把那块空白拆开来看的过程。
1. 品类空白 — code agent 和 image gen 的交集是空的
2026 年 6 月这个时间点上,面向开发者的 agent 类产品大致分成三个聚类:
| 聚类 | 代表产品 | 能做的 | 做不到的 |
|---|---|---|---|
| Code agent (CLI / IDE) | Claude Code、OpenAI Codex CLI、Cursor、Aider | 读 / 写 / 跑代码、shell 工具、git 操作 | 生成图像 / 音频 / 视频。做缩略图。画分镜。 |
| Image / video gen (GUI) | Midjourney、Stable Diffusion WebUI、ComfyUI、Runway | 视觉成果物生成,控制力丰富,质量高 | 碰不到 shell,碰不到 git,碰不到代码。不是会话型 agent。 |
| Chat with image (App) | ChatGPT desktop、Claude desktop、Gemini app | 聊天 + 图像生成,GUI 为主 | 不是 CLI,伸不进本地 shell,没法直接操作文件 |
GPT 阵营里的 macOS Codex 有 GUI 图像生成可用,模型绝对品质(大概率)也比我这边强。但**「终端里完结一切 × 默认捆绑图像/音频/视频生成 × 对 shell 工具无限制访问」** 这套组合打包进一个二进制里的,我没听说过。
这就是品类空白。
2. 维恩图的正中间 — kotonia-cli 落在这里
随手列一下 kotonia-cli 提供的东西:
- 一个工具:bash。agent 可以发任意 shell 命令
- 三档审批模式 (
all/allowlist/auto),安全边界可变 - 默认 git worktree 沙盒,
--in-place切回直接编辑 - 双向 REPL,会话历史跨 turn 持久
- 会话 JSONL 写到
~/.kotonia/sessions/<id>.jsonl,--resume <id>完整恢复 - 多 provider (V4-Flash 本地 / Gemma 4 26B 本地 / DeepSeek API / 后续扩充)
- 一旦 export 了
KOTONIA_API_KEY,自家/api/v1的图像/音频/视频生成端点自动公布到 agent 的 system prompt 里
最后这条,是把 kotonia-cli 推到上面三个聚类之外的关键。
作为 code agent 它能完整碰到 bash、git、cargo、pytest、npm。但 code agent 通常不带的「图像 / 音频 / 视频生成」入口也默认打开。也没有 GUI image gen 那种「拼节点图」的成本,自然语言指令被 agent 翻译成 curl + JSON body。
附注:「Claude Code 为啥不做图像生成?」对 Anthropic 来说这是合理的取舍。他们的算力以 GPU 为中心,捆绑图像生成会让价格模型变形。他们不会进的领域,恰好是个人开发者能拿到防御性壁垒的地方。
3. 语言优先 vs 视觉优先 — 工具的认知税
现有的视频编辑工具、图像编辑工具、设计工具,理所当然地为视觉思维者优化。抓住时间轴,堆图层,画贝塞尔曲线,用鼠标推像素。对视觉思考的人来说,这是非常自然的交互模型。
但世上有一拨数量不小的语言优先玩家。他们写、解释、争论、设计、写代码。输入输出都是文本。工程师、作者、PM、研究者、编辑、创业者 — 大量知识工作者落在这边。
这些人时不时也要做视觉成果。写完文章要做缩略图。视频生成要先打分镜。PPT 要插图。产品要做 logo 原型。
这种时候,等着语言优先玩家的是什么?
是 Premiere 那种三层时间轴用眼睛追、加轨道数、为淡入打两个 keyframe 再调贝塞尔曲线的模式;是 Unreal Engine 的 Blueprint,是 Unity 的 Visual Scripting,那种把逻辑用线和节点拼起来的 UI。对视觉系来说自然,对语言型大脑来说就是「把自己的脑子交给敌对界面」的酷刑。
实质上发生的是 模式切换税。从写代码用的语言模式,被强行切到工具要求的视觉模式。一个任务里要切很多次。脑子的资源不是流到创造里,是流到「迎合工具」里。
我今天写出来的这个 kotonia-cli,把这种税降到接近零。
- 输入是自然语言:「不要猫,换成美少女,再来一遍。」「裁成 30 秒竖屏,加个淡入,把字幕『试过但失败了』烧成黄色。」
- 输出是 workspace 里的文件:
./bishoujo.png、./short.mp4、./narration.wav - 没有模式切换:不离开终端、不打开 GUI、不去浏览器
在本地 shell 里待着,用语言去构思、用语言去指示、唯一以视觉出现的是结果。这是从结构上降低创作者的认知负载。社会意义上我也认为很大:那些因为「切不过去视觉模式」而放弃了的人 — 想给规格说明配图的研究者、需要做缩略图的博主、想给邮件附音频的非工程师 — 现在能从纯文本生产出视觉成果。
4. ffmpeg 原生作为乘数
只是加了图像生成的话别家也能追。kotonia-cli 真正的差异化,是 agent 能像处理任何 shell 命令那样自然地在终端里驾驭 ffmpeg。
举个例子,「裁成 30 秒竖屏视频,开头加淡入,烧上黄色字幕『试过但失败了』」会被展开成这样的链路:
- POST
/api/v1/videos/generations通过 curl 调用 (LTX-2、768×512、异步 job) - 轮询等完成
- 下载
ffmpeg -i in.mp4 -vf "fade=in:0:30,drawtext=...:fontcolor=yellow" out.mp4- 把
./final.mp4落到 workspace
agent 一个 turn 内把整条链拼出来。用户那边的键盘成本:一行 prompt。中间的 curl 也好、ffmpeg 滤镜表达式也好,全是 agent 写的。不满意?下个 turn 说「淡入再快一点」,agent 替换掉只是 ffmpeg 那一步、复跑同一个文件。
这就把 「素材生成 + 编辑」变成连续体。通常素材生成 (DALL-E / Midjourney) 和编辑 (Premiere / DaVinci) 是分开的工具,中间夹着下载 → 上传 → 时间轴放置的迁移。kotonia-cli 把这一切压缩进 shell 里的一段对话。
ffmpeg 是全球视频/音频处理的瑞士军刀,命令体系 100% 是文本,跟 agent 的契合度极高。「agent 用自然语言驾驭 ffmpeg」这个体验,默认装进一个 CLI 里发布的,我(再次说一遍)在别处没见过。
5. 怎么做的
作为 Rust 写的 CLI agent,内部其实简洁。infrastructure/execution/host.rs 负责 bash 执行,application/kotonia_agent/ 目录下放 agent loop、审批、worktree、parser、history、provider。
- agent loop:基于分隔符。LLM 吐
<<<BASH>>>...<<<END_BASH>>>或<<<FINAL_ANSWER>>>...<<<END_FINAL_ANSWER>>>。原生 tool calling 是将来的事(在等 V4-Flash 的 chat_template 完善 — V4-Flash 在家本地跑的来龙去脉写在了 16 个核心久违地全力嘶吼的那天),但分隔符方案在任意 OpenAI 兼容 backend 上都能工作。 - 审批模型:三档可选。
auto是无人值守,allowlist是 read-only / build / test 系列自动放行,破坏性操作 (rm -rf / git push --force) 等审批,all是全部命令都要审批。新手用all,作者自己用auto,同一个 CLI 同时覆盖两边。 - 默认 worktree:
git worktree add /tmp/kotonia-agent-<uuid>隔离开。出事不会动到主 checkout。--in-place也支持直接编辑 cwd。 - 会话 JSONL:
~/.kotonia/sessions/<id>.jsonl写入元数据 + 全部消息 + bash 观测 + turn 标记。--resume <id>完整回放。长会话快撞 context 上限之前,可以分进程接着跑。
然后是这篇文章的主角,/api/v1 的 B1 集成:
# 只要 export 这个 key,agent 的 system prompt 自动多出这四个端点。
# 用户那边一行代码都不用改。
export KOTONIA_API_KEY=kotonia_xxxx
kotonia-cli "做个可爱的美少女图,存成 ./bishoujo.png"
实现 30 行。kotonia 那边 /api/v1/{images,audio,videos}/generations 的 curl 调用 shape,被作为「教学样例」追加到 system prompt 的末尾。把 tool calling 改成原生 (B2 方案) 要 200 行,但走 bash 通道 30 行就到同样的 capability density。agent 把 jq | base64 -d > ./out.png 拼出来是 LLM 的标配能力,相信这点,集成就能保持这么轻。
图像生成本身的底层 (HiDream-O1-Image 以 8bit fp 常驻、写实系 LoRA + 3-stage caption 把质量拉上去的过程) 写在了 用 3-stage caption 打破 under-fit 天花板。开头那张 bishoujo.png 的品质,是这层基础在撑。
(仓库现在是闭源的;CLI 部分会单独切出来做独立 OSS。准备好了另外宣告。)
6. 战略含义 — 个人开发者能侧翼 Anthropic / OpenAI 的唯一战场
像我开头说的,code agent 市场被 Claude Code / OpenAI Codex 压制着。比模型性能,个人开发者没希望。比基础设施规模的价格也不可能 (DeepSeek API ~$0.27/M tokens,本地 GPU 自托管同一个调用是 200 倍成本)。「我能在本地跑 V4-Flash 那就出自己的 API 卖」这条路是陷阱,我让 Fable 5 对这套战略做敌对评审,被指出了四个洞 — 写在了另一篇 (AI 让我「别再写技术文章了」的那件事)。
那剩下能拼的是什么?「给语言优先用户的无损 UX」 是前沿大厂从结构上不会优先做的领域。他们的主收入源 (B2B 开发者 API) 面向的是已经活在 code IDE 或 GUI 里的用户 — Claude 通过 Cursor、GPT 通过 VSCode 插件、图像生成通过 ChatGPT 浏览器。外面已经默认有 GUI 的前提下,磨「用自然语言在 CLI 里完结一切」的体验的动力就不强。
从个人开发者这边看,这块空缺正好能磨成 「在 CLI 里完结的 creative agent」。差异化轴:
- CLI completeness:一次 GUI 都不用开
- 生成工具捆绑:图像 / 音频 / 视频默认带,不用额外注册 (一把钥匙全覆盖)
- ffmpeg multiplier:素材生成 + 编辑在同一个 shell 内是连续体
- 语言优先用户契合:脑子不用交给视觉模式,纯文本完结
- 本地 shell 自由度:agent 能跑 cargo build / git fetch / curl / ffmpeg / 任何东西;没有 E2B 那种隔离沙盒的限制
把这一套作为一个 CLI 端出来,正在用 Claude Code 的语言优先用户 (= 选了「不离开终端」工作流的人 ≒ 用户群里相当大的一块) 不再需要为了缩略图或者分镜而单独打开别的工具。
顺便说一下,「个人开发者从 compound knowledge 起飞」这种感觉最近在另一个语境里也写成了文章 (个人开发者的累积资产第一次开始复利的那一天)。kotonia-cli 一天能完成,本质上是同样的结构续集 — 过去几个月的 memory / 设计决策 / 已有 /api/v1 通过 agent 第一次被全部 leverage 了。
社会影响层面我也认真觉得很大。那些因为「切不过去视觉模式」而搁置的创造力,现在能从纯文本翻译成视觉成果。
7. 接下来要做的
- 在 kotonia 这边加
/api/v1/chat/completions— 这样用户不需要单独的 DeepSeek API 鉴权。一把 kotonia key 把 agent loop 的 LLM 那一段也一起包了。打算把 Gemma 4 26B Uncensored (爆速 + 高并发;Agentic Index 11 中等,但通用效率任务完全在包络里) 做成 OpenAI 兼容的多路复用。 - system prompt 加 ffmpeg 例子 — agent 能用一行 prompt 处理「加淡入」「烧字幕」「混 BGM」之类的事。
- 分发形态 — 现在只能从仓库 build。
cargo install和 GitHub Releases 二进制分发是下一步,从 Linux x86_64 起,macOS / Windows 等 CI 完善后再开。 - 逆向反哺
/chat/studio— 把 CLI 这边磨好的 agent loop 反过来填到 Web 端。Web 那边同样做「无损 UX」的经验,跟之前把语音 LLM 延迟从 600ms 压到 22ms (voice-first-local-llm) 的延伸来想。「选了 X-first 就把其他所有屏幕/层都按这个砍掉」的设计原则,creative-cli 同样适用。
看上去这篇文章只是生成了一张 bishoujo.png。但我觉得未来半年里 「把『语言 ↔ 视觉』之间的转换成本压到多接近零」 会直接成为个人开发者的核心产品命题。这个确信今天一天里成型,所以想把它留下来。
