Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
ecb0f44
fix: stop reporting finished npm commands as stalled
yujiezhang-ops Oct 9, 2026
5ecdbf9
feat: let users check a Profile's model on demand
yujiezhang-ops Oct 9, 2026
e743baf
fix: show only the editor while editing a Provider or Profile
yujiezhang-ops Oct 9, 2026
721072b
docs: design multimodal Skills and record their credential delivery
yujiezhang-ops Oct 9, 2026
e4f450a
feat: detect multimodal capabilities on keyed Providers
yujiezhang-ops Oct 9, 2026
a9b2e5f
feat: install multimodal Skills into Claude Code and Codex
yujiezhang-ops Oct 9, 2026
0c1d904
feat: add native speech and async video generation Skills
yujiezhang-ops Oct 9, 2026
80c16b0
feat: add video understanding and Skills for more Agents
yujiezhang-ops Oct 9, 2026
d5be1b5
docs: record the decision not to offer multimodal Skills to Hermes
yujiezhang-ops Oct 9, 2026
2a2d98d
fix: recover ChatGPT desktop version from the registered AppX package
yujiezhang-ops Oct 9, 2026
3a77c90
feat: point refused Codex Responses checks at the protocol adapter
yujiezhang-ops Oct 9, 2026
2602906
feat: move multimodal capabilities to their own page
yujiezhang-ops Oct 9, 2026
d8486e3
feat: add Kimi Code Desktop as an installable desktop Agent
yujiezhang-ops Oct 10, 2026
83e7a3a
fix: keep generated Skill output outside the Skill tree
yujiezhang-ops Oct 10, 2026
6eb905e
fix: treat malformed native speech responses as unverified
yujiezhang-ops Oct 10, 2026
9b463e4
fix: keep generated Skills consistent with Provider changes
yujiezhang-ops Oct 10, 2026
09dba0b
fix: discard stale Profile model checks after a save
yujiezhang-ops Oct 10, 2026
2b6db88
fix: keep multimodal install and probe results visible
yujiezhang-ops Oct 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,9 @@ Launch BootAgent
### Manage Skills and MCP servers

- Keep a local Skill library, scan Skills already present on supported Agents, and choose which Agents receive each Skill.
- See which models on your keyed Providers can understand images, video or audio, or generate images, and where each finding comes from (declared by the Provider, inferred from the model name, or probed). Listing models is free; a probe is a real request and is sent only when you click it, and an image-generation probe asks first.
- Generated images, audio and video default to `~/.bootagent/output/`, outside the installed Skill directory, and never overwrite existing files. Use `--out` to choose another destination.
- Install a multimodal Skill (image understanding, image generation, speech-to-text, text-to-speech, video generation, video understanding) into Claude Code, Codex or OpenCode, with example prompts to copy. Agents without a Skills directory get the same files under `~/.bootagent/multimodal/` and a prompt that points them there. Video understanding samples frames with ffmpeg, which must be on `PATH`. Built-in Providers add the models their docs name: MiniMax Speech on Novita, PPIO and JieKou.AI, GPT Image and async text-to-video on JieKou.AI. Video is never probed, because a probe would be a full billed generation. Its script needs Node.js 18 or later. BootAgent writes the Provider key into the Agent's own configuration as `BOOTAGENT_<PROVIDER>_API_KEY`, or into a private file under `~/.bootagent/skill-env/` for Agents with no configurable environment, so the Agent and its model can read it; the install confirmation says so. Uninstalling the last Skill that uses a Provider removes the variable.
- Discover MCP servers from initialized Claude Code, Codex, OpenCode, Kilo CLI, and Hermes installations.
- Store MCP servers in a local user-level Registry, select sync targets explicitly, and apply changes only when you are ready.

Expand Down Expand Up @@ -98,10 +101,12 @@ BootAgent supports detection, configuration, launch, or installation guidance ac
| Codex · Claude Code · OpenCode | DeepSeek Harness · Claude Desktop |
| Kilo CLI · Aider · OpenClaw | ChatGPT Desktop · WorkBuddy |
| Hermes Agent · Kimi Code · Pi | WorkBuddy AI · ZCode |
| DeepSeek Harness (local web app) | |
| DeepSeek Harness (local web app) | Kimi Code Desktop |

Claude Desktop can be detected and launched on macOS and Windows, but it must be installed by the user from the [official download page](https://claude.com/download). BootAgent writes compatible configuration and does not download or proxy Claude Desktop.

Kimi Code Desktop is installed automatically on macOS and Windows. Before running the installer, BootAgent checks the download's digest and the app's signature: the Developer ID team on macOS, and the Authenticode publisher on Windows. It shares `~/.kimi-code/config.toml` with the Kimi Code CLI, so both Agents read the same configuration.

DeepSeek Harness can use its shipped DeepSeek route or a configured compatible Provider. It opens a local web app after installation; its own onboarding commands remain the source of truth.

JieKou.AI, PPIO, Novita, DeepSeek, and Moonshot are built-in Providers. Custom OpenAI-compatible and Anthropic-compatible Providers can be added from the Provider page.
Expand Down Expand Up @@ -133,7 +138,9 @@ BootAgent does not redistribute Agent packages and does not bundle Node.js, Git,
| Symptom | First check |
| --- | --- |
| Agent is not listed | Refresh Environment overview, check that the command is on `PATH`, or use the Agent's documented manual install path. |
| Provider connection check fails | Confirm the endpoint and model match the Agent's protocol; an endpoint that exposes only another API is rejected before writing configuration. |
| Provider connection check fails | Confirm the endpoint and model match the Agent's protocol. Use Check model for a saved Profile; saving or applying a Profile does not automatically send a model request. |
| Codex reports `does not support endpoint: responses` | Codex is configured to use Responses. Select a model that supports it, or use the API protocol adapter with a working Chat Completions Profile and apply its generated Codex Profile. A model appearing in `/models` does not prove Responses support. |
| Windows detects a desktop app but its version is unavailable | BootAgent retries the registered package's metadata through Windows PackageManager. If the metadata remains inaccessible, launch is still available; this warning is separate from model API compatibility. |
| Marketplace looks incomplete | Check the source status and refresh. A bundled snapshot remains available when an online source is unavailable. |
| Import reports a conflict | Review the preview, choose skip or overwrite, and apply only after checking the affected resource names. |
| BootAgent cannot check for an update | In Settings, switch between GitHub and the domestic Gitee mirror, then retry. Existing installation files are not replaced by a failed check. |
Expand Down
11 changes: 9 additions & 2 deletions README_ZH.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ BootAgent 是一个本地桌面工作台,用来统一管理 AI 编程 Agent。
### 管理 Skills 和 MCP 服务器

- 在本机维护 Skill 管理库,扫描支持的 Agent 已有的 Skill,并选择每个 Skill 要同步到哪些 Agent。
- 查看已保存 API Key 的 Provider 中哪些模型能理解图片、视频或音频,或能生成图片,以及每项结论的来源(Provider 声明、按模型名推断或实测)。列出模型不收费;实测是一次真实请求,只在你点击时发出,图片生成实测会先确认。
- 生成的图片、音频和视频默认保存到 `~/.bootagent/output/`,位于已安装的 Skill 目录之外,且不会覆盖已有文件。可用 `--out` 指定其他位置。
- 把多模态 Skill(图片理解、图片生成、语音识别、语音合成、视频生成、视频理解)安装到 Claude Code、Codex 或 OpenCode,并提供可复制的示例提示词。没有 Skills 目录的 Agent 会在 `~/.bootagent/multimodal/` 下得到同样的文件,并附一段指向它的提示词。视频理解用 ffmpeg 抽帧,需要 ffmpeg 在 `PATH` 上。内置 Provider 会补充其文档中列出的模型:Novita、PPIO 和 JieKou.AI 的 MiniMax Speech,JieKou.AI 的 GPT Image 与异步文生视频。视频生成从不实测,因为一次实测就是一次完整的计费生成。Skill 脚本需要 Node.js 18 或更高版本。BootAgent 会把 Provider 的 Key 以 `BOOTAGENT_<PROVIDER>_API_KEY` 写进 Agent 自己的配置;没有可配置环境变量的 Agent 则写进 `~/.bootagent/skill-env/` 下的私有文件。因此 Agent 及其模型能读到它,安装确认里会说明。卸载最后一个用到该 Provider 的 Skill 时,这个变量会被移除。
- 从已初始化的 Claude Code、Codex、OpenCode、Kilo CLI 和 Hermes 中发现 MCP 服务器。
- 使用本机用户级 Registry 保存 MCP 服务器,明确选择同步目标,并在确认后再应用改动。

Expand Down Expand Up @@ -96,10 +99,12 @@ BootAgent 会根据每个 Agent 的官方约定提供检测、配置、启动、
| Codex · Claude Code · OpenCode | DeepSeek Harness · Claude Desktop |
| Kilo CLI · Aider · OpenClaw | ChatGPT Desktop · WorkBuddy |
| Hermes Agent · Kimi Code · Pi | WorkBuddy AI · ZCode |
| DeepSeek Harness(本地 Web 应用) | |
| DeepSeek Harness(本地 Web 应用) | Kimi Code Desktop |

Claude Desktop 可以在 macOS 和 Windows 上被检测和启动,但需要用户从[官方下载页面](https://claude.com/download)自行安装。BootAgent 只写入兼容配置,不下载也不代理 Claude Desktop。

Kimi Code Desktop 在 macOS 和 Windows 上由 BootAgent 自动安装。运行安装程序前,BootAgent 会校验下载文件的摘要以及应用签名:macOS 校验 Developer ID 团队,Windows 校验 Authenticode 发布者。它与 Kimi Code CLI 共享 `~/.kimi-code/config.toml`,两个 Agent 读取的是同一份配置。

DeepSeek Harness 可以使用自带的 DeepSeek 官方线路,也可以使用已配置的兼容 Provider。安装后它会打开本地 Web 应用,具体引导命令以其官方文档为准。

内置 Provider 包括 JieKou.AI、PPIO、Novita、DeepSeek 和 Moonshot;也可以在 Provider 页面添加自定义的 OpenAI 兼容或 Anthropic 兼容服务。
Expand Down Expand Up @@ -131,7 +136,9 @@ BootAgent 不重新分发 Agent 包,也不捆绑 Node.js、Git、WebView 或 A
| 现象 | 先检查什么 |
| --- | --- |
| 找不到 Agent | 刷新“环境总览”,确认命令在 `PATH` 中,或按 Agent 官方指引手动安装后再次检测。 |
| Provider 连接检查失败 | 确认端点和模型与 Agent 使用的协议一致;只支持另一种 API 的端点会在写入前被拒绝。 |
| Provider 连接检查失败 | 确认端点和模型与 Agent 使用的协议一致。对已保存的 Profile 使用“检测模型”;保存或应用 Profile 不会自动发送模型请求。 |
| Codex 报错 `does not support endpoint: responses` | Codex 的配置使用 Responses。选择支持它的模型,或在 API 协议适配中选择可用的 Chat Completions Profile,再应用生成的 Codex Profile。模型出现在 `/models` 中并不证明它支持 Responses。 |
| Windows 检测到桌面应用但版本不可用 | BootAgent 会通过 Windows PackageManager 重试读取已注册应用包的元数据。如果仍无法读取,仍可尝试启动;这个提示与模型 API 兼容性无关。 |
| 工具市场内容不完整 | 查看来源状态并点击刷新;在线来源不可用时仍会显示内置目录。 |
| 导入提示冲突 | 查看导入预览,选择跳过或覆盖,并确认受影响的资源名称。 |
| BootAgent 检查更新失败 | 在“设置”中切换 GitHub 与国内 Gitee 镜像后重试;检查失败不会替换现有安装文件。 |
Expand Down
1 change: 1 addition & 0 deletions cmd/bootagent-desktop/main_wails.go
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,7 @@ func main() {
application.NewServiceWithOptions(services.Conversion, application.ServiceOptions{MarshalError: oneerrors.Marshal}),
application.NewServiceWithOptions(services.Marketplace, application.ServiceOptions{MarshalError: oneerrors.Marshal}),
application.NewServiceWithOptions(services.Task, application.ServiceOptions{MarshalError: oneerrors.Marshal}),
application.NewServiceWithOptions(services.Multimodal, application.ServiceOptions{MarshalError: oneerrors.Marshal}),
},
MarshalError: oneerrors.Marshal,
Assets: application.AssetOptions{
Expand Down
2 changes: 2 additions & 0 deletions docs/decisions/ADR-008-credentials-in-agent-config-files.md
Original file line number Diff line number Diff line change
Expand Up @@ -105,3 +105,5 @@ Accompanying changes:
- The status transport contract changes (`paths` has one key fewer, `backups` one key
fewer), and the consumers in `frontend/src/types/api.ts` and the frozen status
fixture have been updated to match.

Related: [ADR-011](ADR-011-provider-keys-for-multimodal-skills.md) extends this delivery to Skill environment variables.
92 changes: 92 additions & 0 deletions docs/decisions/ADR-011-provider-keys-for-multimodal-skills.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# ADR-011: Provider Keys for Multimodal Skills Delivered as Agent Environment Variables

## Status

Accepted

## Date

2026-10-09

- Related: [ADR-008](ADR-008-credentials-in-agent-config-files.md), which this
extends to Codex's `config.toml` and to Providers an Agent does not otherwise use
- Design: [Multimodal Skills](../multimodal-skills-design.md)

## Context

BootAgent is adding generated Skills that let an Agent reach image, audio and
video models on a Provider the user already has a key for. A Skill is a directory
of files that the Agent reads and whose script it runs through its own shell tool.
The script has to authenticate to the Provider, so the key has to reach that
process somehow.

The Skill tree itself cannot carry the key. Skills are distributed through the
existing hash, variant and backup machinery, the registry records them, and users
copy them between machines; a key inside the tree would leak through every one of
those paths.

ADR-008 already writes Provider keys into each Agent's own configuration so the
Agent works no matter how it is started. Claude Code's `env` block in
`~/.claude/settings.json` is passed to every command its Bash tool runs. Codex has
`[shell_environment_policy] set` in `~/.codex/config.toml`, which is applied after
Codex's default exclusion of variables whose names contain `KEY`, `SECRET` or
`TOKEN`, so a variable set there reaches the shell tool.

## Decision

The key reaches a Skill as an environment variable named
`BOOTAGENT_<PROVIDER>_API_KEY`: the Provider ID upper-cased, with every character
outside `[A-Z0-9]` replaced by `_`. BootAgent writes the variable into the target
Agent's own configuration.

| Agent | Where the variable is written |
| --- | --- |
| Claude Code | `env` in `~/.claude/settings.json`, which is already written as a secret |
| Codex | `[shell_environment_policy] set` in `~/.codex/config.toml`; `config.toml` is written as a secret from then on, backups included |
| Agents with no configurable environment | A private fallback file `~/.bootagent/skill-env/<provider>.env`, the pattern ADR-008 uses for Aider |

Accompanying rules:

- BootAgent manages only `BOOTAGENT_*` names. Every other variable in Claude's
`env` and every other key in Codex's `shell_environment_policy` table is the
user's and is preserved.
- The generated script reads the variable first and the fallback file only when the
variable is unset. Base URLs, model IDs and the variable name are not secret and
live in the Skill's `config.json`.
- Saving a Provider with a new key rewrites the variable on the reapply path that
already rewrites Agent configs. Uninstalling the last Skill that uses a Provider
removes it.
- Writes follow the existing order: private directory, backup, temp file in the same
directory, tighten permissions, atomic replace.

## Alternatives Considered

### A local loopback proxy that injects the key

- Upside: the key never enters any Agent's configuration or environment, so the
Agent's model cannot read it.
- Downside: Skills work only while BootAgent is running, which turns a configurator
into a resident service. It adds a network listener and a request path BootAgent
would have to keep correct for every Provider's native API.
- Conclusion: rejected.

### Generate documentation only and let the user wire up the key

- Upside: BootAgent writes no credential anywhere new.
- Downside: the user must export a variable in every shell, and an Agent started
from the Dock or a desktop shortcut sees nothing. That is the failure ADR-008
removed; it also defeats one-click install.
- Conclusion: rejected.

## Consequences

- Accepted risk: the key is visible to every command the Agent runs, so the Agent's
model can read it. Claude Code's own Provider token already has that exposure
under ADR-008. The install confirmation tells the user before anything is written.
- The exposure now also covers keys for Providers the Agent does not otherwise use,
and Codex's `config.toml`, which until now held no secret.
- `config.toml` goes from a plain file to a secret one: its writes and backups are
tightened the same way `auth.json` is, and no read projection may return its raw
contents once it carries a key.
- The variable name is stable and derived from the Provider ID, so a Skill generated
on one machine works on another once BootAgent has written the variable there.
Loading
Loading