kimi-eyes
v1.0.10
Published
Give non-multimodal models in Kimi Code the ability to analyze images and screenshots via a user-configured VLM (OpenAI-compatible or Anthropic protocol).
Maintainers
Readme
Kimi Eyes 👀
English | 中文
让 KimiCode 的非多模态模型也能分析图片与截图(借鉴 opencode-vision 的思路,但更薄:无 hook、无消息变换、无状态残留)。
核心机制:插件声明一个 MCP stdio 服务器,暴露两个工具——read_image(读本地图片)与 read_clipboard_image(读剪贴板截图),经 SYSTEM.md 引导模型调用;服务器按你配置的协议(OpenAI 兼容 / Anthropic)把图片发给你自己配置的多模态 API,返回文本描述。
多模态模型:Alt+V 粘贴即看,插件自动闲置
非多模态模型:@图片路径 / 截图后提问 → 模型调 mcp__kimi-eyes__read_image / read_clipboard_image → 你的 VLM 返回描述前置要求
- KimiCode CLI(本插件通过插件机制加载,需支持
/plugins与 MCP) - Node.js ≥ 18(
node --version检查;原生 fetch 需要 18+) - 一个支持视觉输入的多模态 API(OpenAI 兼容
chat/completions,或 Anthropicmessages),Key 由你自己提供
适用范围
本插件对主模型没有任何限制——无论你的 KimiCode 当前用哪个模型、来自哪家服务商,只要它不具备原生图片输入能力(image_in),本插件就能为它补上视觉:
- 常见非多模态模型:DeepSeek(deepseek-chat)、Qwen 纯文本版(qwen-plus / qwen-turbo)、Llama 文本系列、以及本地部署的文本模型(Ollama / vLLM 等)
- 任何第三方模型:通过 KimiCode 配置的任意 OpenAI 兼容或自定义模型,只要它原生不看图,插件就会在消息含图片时引导模型调用视觉工具
- 多模态模型:自动跳过(Alt+V 粘贴即看,插件闲置)
视觉能力由你自己配置的 VLM 提供,与主模型完全解耦:
| 协议 | 常见视觉模型示例 | | --- | --- | | OpenAI 兼容 | qwen-vl 系列、GLM-4V、GPT-4o / GPT-5 兼容端点、Gemini 兼容端点等 | | Anthropic | Claude 3.5 / 3.7 / 4 系列等 |
一句话:主模型只管理解文字,看图交给外部 VLM。配置时只需在 setup 向导第一步选择与你视觉 API 服务商匹配的协议,其余全部自动。
快速开始
1. 安装插件
在 KimiCode 会话里执行(任选一种):
# 方式一:从 GitHub 安装(推荐)
/plugins install https://github.com/billowliu2/kimi-eyes
# 方式二:从本地目录安装
/plugins install D:\AIGC\Plugin\kimi-eyes
# 方式三:从国内镜像安装(GitHub 访问慢时用)
/plugins install https://git.codingplan.site/admin/kimi-eyes/archive/main.zip2. 配置视觉 API(一次性)
运行配置向导(任选一种):
# npm 一键运行
npx kimi-eyes setup
# 本地插件目录运行
cd D:\AIGC\Plugin\kimi-eyes
node setup.mjs向导按顺序引导:选择目标工具(KimiCode / Claude Code / Codex)→ 选择视觉协议 → 填写 BaseUrl → 填写 API Key(掩码输入)→ 拉取模型列表选择多模态模型 → 1×1 图片视觉验证 → 可选填写当前主模型名(用于触发判断)→ 写入配置。选择 Claude Code 时协议固定为 Anthropic、Codex 固定为 OpenAI,仅 KimiCode 需手动选择协议(OpenAI 兼容 / Anthropic)。
- 模型列表自动从
GET {BaseUrl}/models拉取,用内置的 models.dev 数据库精确标注「✓视觉 / 文本」,未收录的按关键词标「★疑似」;拉取失败时回退为手动输入 - 视觉验证通过才落盘,防止配到一个不收图片的模型
- 最后一步可填写当前主模型名(可选):插件用 models.dev 判定后,若该模型支持原生识图,工具会直接提示无需调用——即「多模态不触发」的代码级判断(详见触发)
- 配置写入
~/kimi-eyes/config.json(独立于 kimi-code 目录,KimiCode / Claude Code / Codex 三工具共用;类 Unix 系统自动chmod 600;可用KIMI_EYES_HOME覆盖)
3. 启用
/reloadMCP 服务器会随会话自动启动。
4. 使用
| 场景 | 操作 |
| --- | --- |
| 多模态模型 | 直接 Alt+V 粘贴图片,原生看图,插件不参与 |
| 非多模态 + 有图片路径 | 输入 @截图.png 或直接给路径,模型自动调 read_image |
| 非多模态 + 刚截图/复制 | 直接提问「分析这张截图」,模型自动调 read_clipboard_image 读系统剪贴板 |
| 非多模态 + 想用 Alt+V 粘贴 | 纯文本模型需 /skill kimi-eyes 配合(见下),单纯粘贴会报错 |
| 粘贴被拦截 | 直接告诉模型「我粘贴图片被拦截了」,模型会自动改读剪贴板,无需你保存文件 |
看图方式 × image_in 速查
| 看图方式 | 需要 image_in? | 纯文本可用? | 顺滑度 |
| --- | --- | --- | --- |
| 截图后随口一问(自动读剪贴板) | 否 | ✅ | 最省事 |
| @路径 / 给路径 | 否 | ✅ | 省事 |
| /skill kimi-eyes + Alt-V | 是 | ✅ | 多步 |
| 单纯 Alt-V | 声明与否 | ❌ | 走不通 |
纯文本模型日常看图优先用前两种;只有「就想用粘贴这个动作」时才走
/skill kimi-eyes(见下)。
想用 Alt+V 粘贴?(给模型声明 image_in)
KimiCode 前端默认会拦截「不支持图片输入」模型的粘贴。在 ~/.kimi-code/config.toml 给对应模型加上 image_in 即可放行:
[models."opencode-go/deepseek-v4-flash"]
capabilities = [ "thinking", "tool_use", "image_in" ] # 追加 image_in⚠️ 重要警告:
image_in只是让前端放行,不代表 provider 真能收图。
- 仅当 provider 本身支持图片输入(如 MiniMax-M3、k3、gpt-5.6-luna、grok-4.5 等)时声明才有意义——这些模型粘贴后原生看图,插件闲置
- 纯文本 provider(如 deepseek-v4-flash、glm 文本版)不要声明——声明后粘贴会被放行,但请求发给 provider 时图片 part 会被拒(400
unknown variant image_url, expected text)。此时前端拦截反而是保护纯文本模型的正确用法:
@图片路径(read_image)或截图后直接提问(read_clipboard_image 读剪贴板);粘贴被拦截就直接告诉模型「粘贴被拦截了」,它会自动改读剪贴板。全程零命令。
纯文本模型也想「粘贴看图」?用 /skill(推荐)
上面警告过:纯文本 provider 声明 image_in 后走 Alt-V 粘贴,图片会作为 image_url part 发给 provider 触发 400。但同样声明 image_in,改走 /skill 命令就不会 400——/skill 通道把图片渲染成 Attached image file: <路径> 的纯文本路径,不产生 image part。本插件自带一个 skill 利用这条通道。
一次性配置:
给纯文本模型声明 image_in(仅为通过 /skill 的前端校验;/skill 下图片不走 part,不会触发 400):
[models."opencode-go/deepseek-v4-flash"]
capabilities = [ "thinking", "tool_use", "image_in" ] # 追加 image_inskill 由插件自带——
kimi.plugin.json已声明skills,/plugins install kimi-eyes后/skill kimi-eyes自动注册到/补全菜单,无需extra_skill_dirs。
用法:
/skill kimi-eyes 这张图表说明了什么? ← 然后 Alt-V 粘贴图片,回车模型会从消息里的 Attached image file: <路径> 提取路径,调用 kimi-eyes 的 read_image(外部 VLM 返回文字描述)再作答。全程不产生 image part,纯文本模型不会 400。
⚠️ 声明
image_in后的使用约束:看图一律走/skill kimi-eyes,不要再直接 Alt-V 粘贴(主 prompt 通道仍会把图片作 image part 发给纯文本 provider → 400)。@图片路径和「截图后提问」两种老用法不受影响。
激活与触发
激活(一次性)
/plugins install D:\AIGC\Plugin\kimi-eyes # 1. 安装
/reload # 2. 启用(或 /new 新开会话)启用后 MCP 服务器随每个会话自动启动,没有单独的「开启功能」步骤。验证方式:
/plugins list→ kimi-eyes 状态应为 enabled/mcp→ kimi-eyes 服务器应显示 connected/plugins info kimi-eyes→ 应无诊断错误
触发(日常,全自动)
插件是被动式的:SYSTEM.md 为模型植入规则,模型在合适时机自动调用工具,无需手动操作:
| 信号(消息里的任何一项) | 模型自动行为 |
| --- | --- |
| 图片格式路径或 @ 引用(.png/.jpg/.jpeg/.webp/.gif/.bmp) | 硬触发:无条件调 read_image(path),与提问语料无关 |
| 消息里有你无法解读的媒体内容(如粘贴的图片) | 忽略该媒体 part,自动调 read_clipboard_image() 读剪贴板(粘贴后剪贴板仍保留原图) |
| 提问语义涉及图像内容:图 / 截图 / 照片 / 界面 / 图表 / 验证码 / OCR 等,但无路径 | 自动调 read_clipboard_image(),不会要求你重发 |
| 粘贴被拦截(报 Current model does not support image input) | 直接告诉模型,它会改调 read_clipboard_image(剪贴板仍保留原图) |
| 模型真正能看懂图片内容(多模态) | 跳过全部规则,原生看图,不调工具 |
触发不依赖固定语料、不依赖任何命令前缀——用户不需要说「分析这个图片」,也不需要 /skill 之类的指令。图片格式路径是无条件硬触发;模型判断「自己看不见图片内容」或「用户想看图但消息里没有」时,会自动调工具而不是瞎猜或让你重发(SYSTEM.md 里的明确规则)。
关于模型能力判断:KimiCode 不向插件暴露「当前模型是否多模态」的信号,本插件提供两层判断:
- 代码级(推荐):在配置里声明
mainModel(setup 向导最后一步,或环境变量VISION_MAIN_MODEL),插件用内置的 models.dev 数据库判断——命中且支持识图 → 工具直接提示「你是多模态模型,直接粘贴看图」;命中且纯文本 → 正常走工具 - 引导级:未声明
mainModel时,靠 SYSTEM.md 的显式跳过规则(模型自我识别)
两层都是 fail-safe:判断错误最坏只是多一次外部调用(多模态误调)或漏调(文本模型漏调可用路径/语义信号补上)。若想硬性关闭,多模态场景可直接 /plugins disable kimi-eyes。
Claude Code 使用(可选)
kimi-eyes 的 MCP 服务器是标准 MCP,可直接挂载到 Claude Code。注意:以下命令请在系统终端(PowerShell / Git Bash)执行,不要在 Claude Code 内部的 Bash 工具里执行(内部环境解析 --scope 等参数有差异)。
1. 前置要求
- Node.js ≥ 18
- Claude Code CLI(
claude --version) - 一个支持视觉的多模态 API(Key 由你自己提供)
2. 挂载 MCP 服务器(任选其一)
# 方式一:全局注册(user scope,所有项目可用)
# 将 <插件目录> 替换为本机 kimi-eyes 的实际绝对路径(如 D:\code\kimi-eyes)
claude mcp add --scope user kimi-eyes -- node "<插件目录>/mcp/server.mjs"
# 方式二:仅当前项目
claude mcp add kimi-eyes -- node "<插件目录>/mcp/server.mjs"
# 方式三:npx 通用版(不依赖本地路径,任何机器可复制)
claude mcp add --scope user kimi-eyes -- npx --prefer-online -y -p kimi-eyes kimi-eyes-mcp3. 配置视觉 API(一次性)
npx kimi-eyes setup复用同一份配置:kimi-eyes 在 KimiCode / Claude Code / Codex 下共用
~/kimi-eyes/config.json(或环境变量VISION_*)。
4. 引导规则(CLAUDE.md)
在项目根目录创建 CLAUDE.md(或追加到已有的),内容可参考本仓库根目录的 CLAUDE.md。核心规则:
# Kimi Eyes — Vision Assist (Claude Code)
Whenever the user's request involves image content and you cannot see it directly:
1. Image path / @ reference → call `mcp__kimi-eyes__read_image` with that path.
2. Just screenshotted/copied, or media you cannot read → call
`mcp__kimi-eyes__read_clipboard_image` (image is almost always still in the clipboard).
3. Wording implies an image but no path → prefer `read_clipboard_image` over guessing.
If your model is multimodal (Claude 3+), you see images natively — ignore these rules.5. 验证
claude mcp list
# kimi-eyes 应显示 √ Connected6. 使用
有图片文件 → @C:\path\image.png 这个图里有什么?
刚截图 → 直接说「分析这张截图」(模型调 read_clipboard_image 读剪贴板)注意
- Claude 3+ 模型原生多模态,Claude Code 大多场景直接看图;插件主要用于文本模型或统一走某个外部 VLM 的场景
- 卸载(Claude Code 挂载):见 卸载
首次调用会弹一次审批(MCP 工具权限):选 Approve for this session 本会话免问;想永久免审批,在 ~/.kimi-code/config.toml 添加:
[[permission.rules]]
decision = "allow"
pattern = "mcp__kimi-eyes__*"触发成功的标志:回答前 TUI 出现工具调用记录,模型随后基于返回的描述作答。若模型未自动调用(例如只贴了路径未提问),可直接命令:「调用 read_image 工具分析 D:\xxx.png」。
卸载
kimi-code 插件方式
在插件目录运行卸载脚本(任选一种):
# 本地目录
node uninstall.mjs
# npm 一键运行
npx -p kimi-eyes kimi-eyes-uninstall脚本清理以下残留(位于 KIMI_CODE_HOME 或 ~/.kimi-code):
plugins/installed.json中的 kimi-eyes 条目(改前自动备份为installed.json.bak.uninstall-*)plugins/managed/kimi-eyes/安装副本kimi-eyes/config.json配置目录(含你的 VLM API Key,删除前会二次确认)
参数:--yes 跳过全部确认(适合脚本化);--dry-run 只预览不执行。重复运行是安全的(幂等)。
插件正被会话加载时,安装副本目录可能无法完全删除——内容会先被清空,只剩一个空目录壳。重启 kimi-code 会话后执行
rmdir清理:rmdir "C:\Users\<用户名>\.kimi-code\plugins\managed\kimi-eyes"
卸载完成后重启 kimi-code 会话(或 /reload)完全生效:mcp__kimi-eyes__* 工具消失、SYSTEM.md 引导指令不再注入、/skill kimi-eyes 命令也随之移除(skill 随插件副本删除)。
Claude Code 挂载方式
claude mcp remove kimi-eyes环境变量(可选,覆盖配置文件)
| 变量 | 说明 | 优先级 |
| --- | --- | --- |
| VISION_API_PROTOCOL | openai 或 anthropic,强制指定协议 | 高于配置文件 |
| VISION_API_KEY | API Key | 高于配置文件 |
| VISION_API_URL | BaseUrl | 高于配置文件 |
| VISION_MODEL | 模型名 | 高于配置文件 |
| VISION_MAIN_MODEL | 当前主模型名(可选),用于触发判断 | 高于配置文件 |
| VISION_MAX_TOKENS | 视觉 API 返回最大 token 数(默认 1024) | — |
| VISION_FETCH_TIMEOUT_MS | 请求超时毫秒(默认 60000) | — |
环境变量与
config.json同名配置冲突时,环境变量优先;两者都没配时工具会返回明确错误并提示先运行setup.mjs。 环境变量可沿用 opencode-vision 的迁移习惯——变量名完全兼容。
协议说明
| | OpenAI 兼容 | Anthropic |
| --- | --- | --- |
| 请求端点 | {BaseUrl}/chat/completions(自动补 /v1) | {BaseUrl}/v1/messages |
| 鉴权 | Authorization: Bearer <Key> | x-api-key: <Key> + anthropic-version: 2023-06-01 |
| 图片传法 | image_url + base64 data URL | source: {type:"base64"} |
| 模型列表 | GET {BaseUrl}/models | GET {BaseUrl}/v1/models(官方无此端点,失败回退手动输入) |
模型能力数据库(models.dev)
插件内置一份从 models.dev 同步的精简能力库 mcp/models-db.json(当前收录 279+ 模型,标注每个模型是否支持图片输入,约 19KB),用于两处:
- 向导选择视觉模型时的精确标注(✓视觉 / 文本),替代纯关键词猜测
- 声明
mainModel后判断当前主模型是否多模态,实现代码级触发开关
打包时同步(数据会更新,建议每次发布前运行):
node scripts/sync-models.mjs- 数据源:
https://models.dev/models.json - 走代理:设置
HTTPS_PROXY,例如HTTPS_PROXY=http://127.0.0.1:7897 node scripts/sync-models.mjs - 可选参数:
--timeout <秒>(默认 180)、--out <路径>(默认mcp/models-db.json)、--endpoint <URL> - 模型匹配策略:精确 id →
provider/模型名后缀 → 大小写不敏感的名称匹配 - 未收录的模型:查询返回未知——向导回退关键词猜测(★疑似),触发判断回退 SYSTEM.md 引导,不影响使用
- 手动特例:models.dev 未收录但确认支持识图的模型(如
k3-256k、kimi-for-coding),在scripts/sync-models.mjs的EXTRA_ENTRIES里维护,每次同步自动合入、不会被覆盖
版本管理:package.json 是唯一版本来源,发布前执行:
npm version patch --no-git-tag-version # 更新 package.json,version 钩子自动同步 kimi.plugin.json
npm publish # prepublishOnly 自动同步 models-dbnpm version 的 version 钩子运行 scripts/bump-version.mjs 同步 kimi.plugin.json;MCP 的 serverInfo.version(mcp/vision.mjs)运行时直接读取 package.json,无需手动维护。想手动改版本:node scripts/bump-version.mjs 1.0.6。
工具
| 工具 | 参数 | 说明 |
| --- | --- | --- |
| read_image | path(必填)、prompt(可选) | 校验文件为图片(扩展名 + 魔数)后调 VLM |
| read_clipboard_image | prompt(可选) | 从系统剪贴板取图存临时文件后调 VLM,用完即删 |
剪贴板取图依赖平台工具:Windows 用 PowerShell(内置)、macOS 需 pngpaste(brew install pngpaste)、Linux 需 wl-paste(Wayland)或 xclip(X11)。
故障排查
- Alt+V 粘贴报
Current model does not support image input→ KimiCode CLI 的拦截。两种解法:① 在config.toml给该模型追加image_in(见「想用 Alt+V 粘贴?」)放行粘贴,模型看不懂图片时会自动读剪贴板;② 直接告诉模型「粘贴被拦截」,它会改调read_clipboard_image从剪贴板取图 - 工具返回「Vision API is not configured」 → 运行
node setup.mjs,或设置VISION_API_KEY/VISION_API_URL/VISION_MODEL - 模型列表拉取失败(404/401)→ 向导自动回退手动输入;若服务端不支持
/models,直接输入模型名即可 - 视觉验证失败 → 换一个真正支持图片输入的模型(参考服务商文档,如
qwen-vl-max、glm-4v、gpt-4o、claude-3-5-sonnet等) read_clipboard_image报错 → 确认剪贴板里确实有图片(先 Ctrl+C 复制或 Win+Shift+S 截图);macOS/Linux 检查上述平台工具是否安装- 安装后工具不生效 → 确认插件已启用(
/plugins list),并运行过/reload或新开会话
安全说明
config.json以明文保存你的 API Key(类 Unix 已设600权限);请勿将该文件提交到版本库read_clipboard_image会读取系统剪贴板内容——剪贴板里可能刚复制过敏感信息。该工具调用会经过审批流,由你决定何时触发- 本项目不内置任何密钥,视觉请求只发往你配置的 BaseUrl
局限
- 不做子代理委托方案:KimiCode 子代理的
model_preference只能选择 primary/secondary,无法像 opencode 那样指定一个具体视觉模型,收益有限 - 不做
UserPromptSubmithook 兜底:当前SYSTEM.md引导已覆盖常规场景;若你的 TUI 环境下粘贴/引用行为异常,可再评估 hook
License
MIT
