在终端里跑可续跑的编程会话,随时切模型并分叉
30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/22 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add CodePrometheus/chopin-ai该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 48 处,展示前 45 条)
- 读取密钥环境变量apps/tui/src/acp.ts:25
? connect(remote ?? "", process.env.CHOPIN_TOKEN === undefined ? {} : { token: process.env.CHOPIN_TOKEN }) - 读取本地文件apps/tui/src/agent.ts:18
const layer = await stat(directory).then(() => loadLayer(directory), () => undefined); - 写入本地文件apps/tui/src/chat.ts:521
await writeFile(file, lines.map((line) => `${JSON.stringify(line)}\n`).join(""), { mode: 0o600 }); - 读取本地文件apps/tui/src/chat.ts:687
return (JSON.parse(await readFile(new URL("../package.json", import.meta.url), "utf8")) as { version: string }).version; - 读取本地文件apps/tui/src/chat.ts:700
const head = await readFile(join(directory, ".git", "HEAD"), "utf8").catch(() => undefined); - 写入本地文件apps/tui/src/credentials.ts:45
await mkdir(dirname(this.#file), { recursive: true }); - 读取本地文件apps/tui/src/credentials.ts:50
const text = await readFile(this.#file, "utf8").catch((error: NodeJS.ErrnoException) => { - 写入本地文件apps/tui/src/external-editor.ts:16
await writeFile(file, text); - 执行外部命令来自配置/变量apps/tui/src/external-editor.ts:19
const child = spawn(program, [...args, file], { stdio: "inherit", shell: process.platform === "win32" }); - 读取本地文件apps/tui/src/external-editor.ts:23
return code === 0 ? (await readFile(file, "utf8")).replace(/^/, "").replace(/ $/, "") : undefined; - 删除本地文件递归apps/tui/src/external-editor.ts:25
await rm(directory, { recursive: true, force: true }).catch(() => {}); - 读取本地文件apps/tui/src/home.ts:58
return JSON.parse(await readFile(settingsFile(), "utf8")) as Settings; - 写入本地文件apps/tui/src/home.ts:66
await mkdir(chopinHome(), { recursive: true }); - 写入本地文件apps/tui/src/home.ts:78
await mkdir(chopinHome(), { recursive: true }); - 写入本地文件apps/tui/src/home.ts:92
await writeFile(draft, text, mode === undefined ? {} : { mode }); - 写入本地文件apps/tui/src/home.ts:93
await rename(draft, file); - 删除本地文件apps/tui/src/home.ts:95
await rm(draft, { force: true }); - 发起网络请求apps/tui/src/network.ts:19
setGlobalDispatcher(new EnvHttpProxyAgent({ noProxy: [...(spared === undefined || spared === "" ? [] : [spared]), ...LOOPBACK].join(",") })); - 发起网络请求apps/tui/src/network.ts:19
setGlobalDispatcher(new EnvHttpProxyAgent({ noProxy: [...(spared === undefined || spared === "" ? [] : [spared]), ...LOOPBACK].join(",") })); - 发起网络请求apps/tui/src/network.ts:20
install(); - 写入本地文件apps/tui/src/paste.ts:25
await writeFile(file, image, { mode: 0o600 }); - 读取本地文件apps/tui/src/project.ts:86
const logged = (await stat(paths.log).catch(() => undefined))?.size ?? 0; - 读取本地文件apps/tui/src/project.ts:93
const log = (await readFile(paths.log)).subarray(logged).toString("utf8").trim(); - 删除本地文件apps/tui/src/project.ts:132
await rm(paths.record, { force: true }); - 读取本地文件apps/tui/src/project.ts:134
for (const name of await readdir(home)) if (name.startsWith(`${basename(paths.record)}.`)) await rm(join(home, name), { force: true }); - 删除本地文件apps/tui/src/project.ts:134
for (const name of await readdir(home)) if (name.startsWith(`${basename(paths.record)}.`)) await rm(join(home, name), { force: true }); - 删除本地文件apps/tui/src/project.ts:162
await rm(paths.record, { force: true }); - 读取本地文件apps/tui/src/project.ts:183
workspaces: new DirectoryWorkspaceProvider(paths.root, { hidden: [await realpath(chopinHome())] }), - 读取本地文件apps/tui/src/project.ts:235
versions.push((JSON.parse(await readFile(join(root, "..", "package.json"), "utf8")) as { version: string }).version); - 读取本地文件apps/tui/src/project.ts:236
for (const entry of await readdir(root, { recursive: true, withFileTypes: true })) { - 执行外部命令来自配置/变量apps/tui/src/project.ts:266
const child = spawn(process.execPath, [BIN, "daemon", paths.root], { - 写入本地文件apps/tui/src/project.ts:287
await mkdir(home, { recursive: true }); - 写入本地文件apps/tui/src/project.ts:288
await chmod(home, 0o700); - 写入本地文件packages/core/src/transcript.ts:11
await appendFile(path, `${JSON.stringify(entry)}\n`); - 读取本地文件packages/core/src/transcript.ts:15
return parseTranscript(await readFile(path, "utf8")); - 读取本地文件packages/harness-dsh/src/plugin.ts:65
const text = await readFile(join(candidate.locator as string, "SKILL.md"), "utf8"); - 写入本地文件packages/harness-dsh/src/plugin.ts:110
const folder = () => (made ??= mkdir(directory, { recursive: true }).then(() => {}, (error: unknown) => { - 写入本地文件packages/harness-dsh/src/plugin.ts:117
await appendFile(file, text); - 写入本地文件packages/harness-dsh/src/plugin.ts:122
await appendFile(file, text); - 读取本地文件packages/harness-pi/src/http.ts:58
return (await stat(path).catch(() => undefined))?.isFile() === true ? path : undefined; - 读取本地文件packages/harness-pi/src/layer.ts:145
const text = await readFile(path, "utf8"); - 读取本地文件packages/harness-pi/src/mcp.ts:14
version ??= readFile(new URL("../package.json", import.meta.url), "utf8") - 写入本地文件packages/harness-pi/src/service.ts:480
await mkdir(this.#options.dataDir, { recursive: true }); - 写入本地文件packages/harness-pi/src/service.ts:481
await chmod(this.#options.dataDir, 0o700); - 执行外部命令来自配置/变量packages/workspace/src/run.ts:33
const child = execFile(binary as string, args, { env: { ...process.env, ...env }, maxBuffer: Infinity, encoding: "buffer" }, (error, stdout, stderr) =
扫描于 2026/10/31(1 天前) · 范围 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
一个会自我改进的编程智能体,靠一层可变层实现,只有密封评估器能改动它。
README
由 DeepSeek 最新模型翻译生成chopin-ai
一个为自我改进而生的编程智能体。
状态: v0.2.0 是智能体本体。让它自我改进的循环留到下个版本;见它如何自我改进。
安装
npm install -g chopin-ai
需要 Node.js 24.8 或更高版本。
快速开始
cd my-project
chopin
首次运行会连接服务商,用登录方式或 API key 都行,然后选一个模型。/hotkeys 列出所有快捷键。
功能
- 会话不丢。 每一步都先保存再显示,所以重启打断的运行能从停下的地方接着跑。
- 一个智能体,处处可用。 每个项目有一个后台服务;终端、浏览器(chopin web)和编辑器(chopin acp)接入同一段会话,关掉终端智能体照样干活。
- 服务商随意。 /login 用登录方式或 API key 连接;/model 和 ctrl+p 在会话中途切换模型。
- shell 就在会话里。 !command 执行命令,智能体随后能看到结果;!!command 只给你自己看。
- 边跑边指挥。 enter 给正在跑的回合下指令,alt+enter 把后续消息排队,alt+up 把排队的消息取回来。
- 会话可以分叉。 /resume、/fork、/compact 和 /export。
- 项目自己的指令。
展开完整文档(README 剩余 1 节)
chopin-ai 一个为自我改进而生的编程智能体。 状态: v0.2.0 是智能体本体。让它自我改进的循环留到下个版本;见它如何自我改进。 安装 npm install -g chopin-ai 需要 Node.js 24.8 或更高版本。 快速开始 cd my-project chopin 首次运行会连接服务商,用登录方式或 API key 都行,然后选一个模型。/hotkeys 列出所有快捷键。 功能 - 会话不丢。 每一步都先保存再显示,所以重启打断的运行能从停下的地方接着跑。 - 一个智能体,处处可用。 每个项目有一个后台服务;终端、浏览器(chopin web)和编辑器(chopin acp)接入同一段会话,关掉终端智能体照样干活。 - 服务商随意。 /login 用登录方式或 API key 连接;/model 和 ctrl+p 在会话中途切换模型。 - shell 就在会话里。 !command 执行命令,智能体随后能看到结果;!!command 只给你自己看。 - 边跑边指挥。 enter 给正在跑的回合下指令,alt+enter 把后续消息排队,alt+up 把排队的消息取回来。 - 会话可以分叉。 /resume、/fork、/compact 和 /export。 - 项目自己的指令。 每次请求前都会读取 AGENTS.md,从仓库根目录一路读到工作目录。 - 按用户隔离工作区。 chopin serve 为每个用户跑一个容器工作区,用户身份由集成方的签名 token 指定。 它如何自我改进 智能体的行为放在一个可变的层里:AGENTS.md 指令、Agent Skills、MCP 服务器和 gate 规则,两套 harness 共用,再加上每套 harness 自己的代码。即将到来的 RSI(递归自我改进)循环会改动这一层,并且只在一种情况下接受改动:由智能体够不着的封闭评测器证明,改动至少帮到一套 harness,且没有让任何一套退步。这一层用开放格式,所以它学到的东西能带到其他智能体上。 这一层今天就已经能加载:放进 ~/.chopin/layer,再用 chopin layer check <dir> 检查。 配置 | 位置 | 内容 | | ~/.chopin/auth.json | /login 保存的凭据;服务商惯用的环境变量同样有效 | | ~/.chopin/config.json | 默认模型、供 ctrl+p 使用的 enabledModels、主题、httpProxy | | ~/.chopin/models.json | 额外的服务商和模型 | | ~/.chopin/layer/ | AGENTS.md、skills/<name>/SKILL.md、mcp.json、gates.yaml | | CHOPIN_MODEL | 覆盖默认模型 | | CHOPIN_HOME | 把 ~/.chopin 挪到别处 | | HTTP_PROXY、HTTPS_PROXY | 让请求走代理 | 面向集成方 chopin serve --jwks <url> 为多个用户运行智能体,每个用户各有一个容器工作区;先从代码检出目录构建镜像,命令是 pnpm --filter @chopin-ai/harness-pi image。客户端通过客户端协议或 ACP 接入。 | 包 | 用途 | | chopin-ai | chopin 命令:终端客户端、Web 应用、ACP 和项目服务 | | @chopin-ai/core | 可变层格式、ACP 记录和 chopin layer check | | @chopin-ai/workspace | 工作区生命周期接口,提供目录和容器两种实现 | | @chopin-ai/harness-pi | 持久化 harness 适配器:智能体服务、客户端协议、ACP 桥接 | | @chopin-ai/harness-dsh | 插件 harness 适配器:加载可变层、无头运行 | 开发 需要 pnpm 12。 pnpm install pnpm typecheck # packages and tests pnpm test v0.1.0 归档了旧版设计。 CHANGELOG 列出每次发布。 许可证 Apache-2.0
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
CodePrometheus/chopin-ai
在终端里跑可续跑的编程会话,随时切模型并分叉
相关插件 · 开发 / 工程
隐私简历生成器reactive-resume/reactive-resume
Reactive Resume 已迁至 GitHub 上的…
★ 45,125已汉化MCP
71.7
AI 架构文档生成器sopaco/deepwiki-rs
🚀 Litho 已进化为 Terrain —— 给你的 AI 智能体一张会呼吸的代码库地图。
★ 3,157已汉化DSH
70.8
长时任务执行闭环AMAP-ML/LongHorizon-Harness
面向 Computer-Use Agent 的 Loop Engineering
★ 1,764已汉化DSH
70.5
AI 编程纪律方法包GanyuanRan/Aegis
让 AI 编程 agent 变得可信:少返工、更安全、说“完成”前先给证据。
★ 1,384已汉化DSH
69.6
多代理编排运行时Enderfga/claw-orchestrator
面向编程智能体的运行时。把 Claude Code、Codex、Antigravity、Grok…
★ 586已汉化MCP
69.4
记忆进化插件csyangwen/dsh-memory-evolve
dsh-memory-evolve 使用场景指南
★ 461已汉化DSH
67.9