在 Obsidian 笔记库里接入多种 AI 编程智能体
34.1/100
综合分
2
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/7 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add hanhtang711-netizen/claudian-dsh该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · model
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 49 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装engines.node 要求 >=24 <25,不满足 Node 22.19.0
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包claudian(未发布到 npm,仅可源码安装)
✗Node 引擎要求 >=24 <25 · 基线 Node 22.19 不满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/28 08:37:56
🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0🔴 扫描:高危尚无人工评估
静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。
安装时即执行脚本命令参数由运行时变量拼接读写/删除本地文件发起外部网络请求
查看扫描证据(共 57 处,展示前 56 条)
- 读取本地文件scripts/postinstall.mjs:21
if (existsSync(example) && !existsSync(target)) { - 写入本地文件scripts/postinstall.mjs:22
copyFileSync(example, target); - 发起网络请求dsh-bridge/lib/acp.js:246
.request("session/request_permission", { - 读取本地文件dsh-bridge/lib/index.js:32
config = JSON.parse(readFileSync(configPath, "utf8")); - 读取本地文件dsh-bridge/lib/index.js:40
systemText = readFileSync(config.systemPromptPath, "utf8"); - 读取本地文件esbuild.config.mjs:21
if (existsSync('.env.local')) { - 读取本地文件esbuild.config.mjs:22
const envContent = readFileSync('.env.local', 'utf-8'); - 读取本地文件esbuild.config.mjs:106
if (!existsSync(outputPath)) continue; - 读取本地文件esbuild.config.mjs:134
const OBSIDIAN_PLUGIN_PATH = OBSIDIAN_VAULT && existsSync(OBSIDIAN_VAULT) - 删除本地文件递归esbuild.config.mjs:144
rmSync(path.join(process.cwd(), '.codex-vendor'), { recursive: true, force: true }); - 读取本地文件esbuild.config.mjs:148
if (!existsSync(OBSIDIAN_PLUGIN_PATH)) { - 写入本地文件esbuild.config.mjs:149
mkdirSync(OBSIDIAN_PLUGIN_PATH, { recursive: true }); - 读取本地文件esbuild.config.mjs:154
if (existsSync(file)) { - 写入本地文件esbuild.config.mjs:155
copyFileSync(file, path.join(OBSIDIAN_PLUGIN_PATH, file)); - 删除本地文件递归esbuild.config.mjs:161
rmSync(pluginVendorRoot, { recursive: true, force: true }); - 读取本地文件scripts/build-css.mjs:20
if (!existsSync(INDEX_FILE)) { - 读取本地文件scripts/build-css.mjs:25
const content = readFileSync(INDEX_FILE, 'utf-8'); - 读取本地文件scripts/build-css.mjs:37
const entries = readdirSync(dir, { withFileTypes: true }); - 读取本地文件scripts/build-css.mjs:76
if (!existsSync(resolvedPath)) { - 读取本地文件scripts/build-css.mjs:81
const content = readFileSync(resolvedPath, 'utf-8'); - 写入本地文件scripts/build-css.mjs:115
writeFileSync(OUTPUT, output); - 执行外部命令固定命令scripts/build.mjs:15
execSync('node scripts/build-css.mjs', { cwd: ROOT, stdio: 'inherit' }); - 执行外部命令运行时拼接scripts/build.mjs:19
execSync(`node esbuild.config.mjs ${args}`, { cwd: ROOT, stdio: 'inherit' }); - 读取本地文件scripts/check-architecture-boundaries.test.mjs:9
for (const entry of fs.readdirSync(root, { withFileTypes: true })) { - 读取本地文件scripts/check-architecture-boundaries.test.mjs:21
if (pattern.test(fs.readFileSync(file, 'utf8'))) { - 读取本地文件scripts/check-architecture-boundaries.test.mjs:30
const sourceText = fs.readFileSync(file, 'utf8'); - 读取本地文件scripts/check-architecture-boundaries.test.mjs:122
return fs.readdirSync(providersRoot, { withFileTypes: true }) - 读取本地文件scripts/check-architecture-boundaries.test.mjs:125
&& fs.existsSync(path.join(providersRoot, entry.name, 'registration.ts')) - 读取本地文件scripts/check-architecture-boundaries.test.mjs:268
assert.equal(fs.existsSync(tabSource), false); - 读取本地文件scripts/check-startup-performance.mjs:17
if (!existsSync(artifactPath)) { - 执行外部命令来自配置/变量scripts/check-startup-performance.mjs:21
const syntaxCheck = spawnSync(process.execPath, ['--check', artifactPath], { - 读取本地文件scripts/check-startup-performance.mjs:31
const mainContents = readFileSync(mainPath, 'utf8'); - 读取本地文件scripts/check-startup-performance.mjs:43
const mainBytes = statSync(mainPath).size; - 执行外部命令来自配置/变量scripts/check-startup-performance.mjs:82
const result = spawnSync(process.execPath, ['-e', childScript, mainPath], { - 执行外部命令来自配置/变量scripts/run-jest.js:8
const result = spawnSync( - 执行外部命令来自配置/变量scripts/run-tests.js:7
const result = spawnSync(process.execPath, args, { - 读取本地文件scripts/sync-version.js:9
const packageJson = JSON.parse(fs.readFileSync(packagePath, 'utf8')); - 读取本地文件scripts/sync-version.js:10
const manifestJson = JSON.parse(fs.readFileSync(manifestPath, 'utf8')); - 写入本地文件scripts/sync-version.js:14
fs.writeFileSync(manifestPath, JSON.stringify(manifestJson, null, 2) + '\n'); - 读取本地文件src/utils/cliBinaryLocator.ts:9
return fs.statSync(filePath).isFile(); - 读取本地文件src/utils/env.ts:198
if (fs.existsSync(nodePath)) { - 读取本地文件src/utils/env.ts:199
const stat = fs.statSync(nodePath); - 读取本地文件src/utils/env.ts:228
if (!fs.existsSync(cliPath)) { - 读取本地文件src/utils/env.ts:232
const stat = fs.statSync(cliPath); - 读取本地文件src/utils/env.ts:288
if (fs.existsSync(nodeInCliDir)) { - 读取本地文件src/utils/env.ts:289
const stat = fs.statSync(nodeInCliDir); - 读取本地文件src/utils/externalContext.ts:115
const stats = fs.statSync(p); - 读取本地文件src/utils/externalContextScanner.ts:83
if (!fs.existsSync(dir)) return []; - 读取本地文件src/utils/externalContextScanner.ts:85
const stat = fs.statSync(dir); - 读取本地文件src/utils/externalContextScanner.ts:88
const entries = fs.readdirSync(dir, { withFileTypes: true }); - 读取本地文件src/utils/externalContextScanner.ts:103
const fileStat = fs.statSync(fullPath); - 读取本地文件src/utils/path.ts:141
const target = fs.readFileSync(aliasFile, 'utf8').trim(); - 读取本地文件src/utils/path.ts:155
const alias = fs.readFileSync(path.join(nvmDir, 'alias', 'default'), 'utf8').trim(); - 读取本地文件src/utils/path.ts:162
const entries = fs.readdirSync(versionsDir) - 读取本地文件src/utils/path.ts:170
if (fs.existsSync(binDir)) return binDir; - 读取本地文件src/utils/path.ts:193
if (fs.existsSync(current)) {
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
1 张 · 点击查看大图功能亮点
- 接入多种AI编程智能体
- 新增DSH聊天服务商
- DSH桥接与ACP修复
Claudian 分支,把 DeepSeek Harness(DSH)加为 ACP 聊天服务商,附带 DSH 桥接和通用 ACP 修复
README
由 DeepSeek 最新模型翻译生成Claudian
本仓库是 YishenTu/claudian 的 fork(base: v2.1.3 e707f1c),新增 DeepSeek Harness(DSH) 作为第五个聊天引擎(claude/codex/grok/opencode/pi → +dsh),并修复了两个通用的 ACP 集成缺口。全部改动说明与安装步骤见 docs/DSH_INTEGRATION.md。
This fork adds DeepSeek Harness as a new ACP chat provider, plus two generic ACP integration fixes. See docs/DSH_INTEGRATION.md. Everything below is the upstream README.
Preview
Obsidian 插件,把 AI 编程智能体(Claude Code、Codex、Grok、Opencode、Pi,后续还会支持更多)嵌进你的 vault。vault 就是智能体的工作目录——读写文件、搜索、bash、多步工作流,开箱即用。
功能与用法
从侧边栏图标或命令面板打开聊天侧栏。选中文本,按快捷键即可行内编辑。
展开完整文档(README 剩余 1 节)
Claudian
本仓库是 YishenTu/claudian 的 fork(base: v2.1.3 e707f1c),新增 DeepSeek Harness(DSH) 作为第五个聊天引擎(claude/codex/grok/opencode/pi → +dsh),并修复了两个通用的 ACP 集成缺口。全部改动说明与安装步骤见 docs/DSH_INTEGRATION.md。
This fork adds DeepSeek Harness as a new ACP chat provider, plus two generic ACP integration fixes. See docs/DSH_INTEGRATION.md. Everything below is the upstream README.
Preview
Obsidian 插件,把 AI 编程智能体(Claude Code、Codex、Grok、Opencode、Pi,后续还会支持更多)嵌进你的 vault。vault 就是智能体的工作目录——读写文件、搜索、bash、多步工作流,开箱即用。
功能与用法
从侧边栏图标或命令面板打开聊天侧栏。选中文本,按快捷键即可行内编辑。用法和你熟悉的编程智能体一样,Claude Code、Codex、Grok、Opencode、Pi——跟智能体说话,它就会在你的 vault 里读、写、改、搜文件。
行内编辑 — 选中文本,或把光标停在目标位置 + 快捷键,直接在笔记里编辑,带词级 diff 预览。
斜杠命令与技能 — 输入 / 或 $,调用可复用的提示词模板或技能,来源可以是用户级,也可以是 vault 级。
@mention — 输入 @ 提及任何你想让智能体处理的东西,包括 vault 文件、子代理、外部目录里的文件。
计划模式 — 用 Shift+Tab 切换。智能体先探索、先设计,再动手实现,然后给出计划等你批准。
指令模式(#) — 从聊天输入框添加润色过的自定义指令。
MCP 服务器 — 通过各编程智能体原生的 CLI 托管 MCP 配置,接入外部工具。
标签页与会话管理 — 单面板模式下可用多个标签页;双面板模式下,聊天旁边有常驻的会话管理器。
环境要求
- 至少装一个下面这些 harness:
- Claude Code CLI
- Codex CLI
- Grok Build
- OpenCode
- Pi
- 兼容的订阅或 API 服务商,例如 OpenRouter、Kimi、GLM 或 DeepSeek。
- Obsidian v1.7.2+
- 仅支持桌面端(macOS、Linux、Windows)
安装
从 Obsidian 社区插件安装(推荐)
1. 打开 Obsidian → Settings → Community plugins → Browse
2. 搜索 "Claudian",点击 Install
3. 启用插件
也可以直接从社区插件页面安装。
从源码安装(开发)
1. 把仓库克隆到 vault 的 plugins 目录:
cd /path/to/vault/.obsidian/plugins
git clone https://github.com/YishenTu/claudian.git
cd claudian
2. 安装依赖并构建:
npm install
npm run build
3. 在 Obsidian 中启用插件:
- Settings → Community plugins → Enable "Claudian"
开发
Watch mode
npm run dev
Production build
npm run build
隐私与数据使用
- 发送到 API 的内容:你的输入、附件、图片,以及工具调用输出。具体发往哪里取决于你选的服务商:Anthropic(Claude)、OpenAI(Codex)、xAI(Grok),或者你在 OpenCode、Pi 里配置的服务商。目标地址可以在服务商设置和环境变量里配置。
- 没有遥测,也不会偷偷跑后台任务:Claudian 不会发送遥测信标。UI 里的轮询定时器只读取本地 Obsidian/编辑器的选区状态。网络活动仅限于服务商运行时的必要工作、你配置的 MCP 端点,以及为回答你的请求而调用的服务商 SDK/CLI。
故障排查
下面几节以 Claude Code 为例。
找不到服务商 CLI
如果 Claudian 无法自动检测到服务商 CLI,先确认 CLI 已安装,并且 GUI 应用能通过 PATH 找到它。常见报错有 spawn claude ENOENT 和 Claude CLI not found。用 Node 版本管理器(nvm、fnm、volta)时经常遇到这个问题。
先把 CLI 路径设置留空,让 Claudian 自动检测。如果自动检测失败,找到可执行文件路径,填到 Settings → Advanced → Claude CLI path。
| 平台 | 命令 | 路径示例 |
| macOS/Linux | which claude | /Users/you/.volta/bin/claude |
| Windows(原生) | where.exe claude | C:\Users\you\AppData\Local\Claude\claude.exe |
| Windows(npm) | npm root -g | {root}\@anthropic-ai\claude-code\cli-wrapper.cjs |
注意:在 Windows 上,别用 .cmd 和 .ps1 包装脚本。原生安装用 claude.exe,包管理器安装用 cli-wrapper.cjs。cli.js 只是旧版 Claude Code npm 包的兼容回退。
备选方案:在 Settings → Environment → Custom variables 里,把 Node.js 的 bin 目录加进 PATH。
npm 命令行与 Node.js 不在同一目录
用 npm 安装的服务商命令行时,要确保它的可执行文件和 Node.js 在同一个环境里都能找到。检查它们的路径:
dirname $(which claude)
dirname $(which node)
如果路径不一样,Obsidian 这类 GUI 应用可能找不到 Node.js。
两种做法:
1. 安装原生二进制文件(推荐)。
2. 在 Settings → Environment 里加上 Node.js 路径:PATH=/path/to/node/bin。
更多帮助
服务商各自的安装与配置指引,请看 Requirements 一节里链接的服务商文档。想提功能需求,或者遇到了 bug,请提交 GitHub issue。
架构
src/
├── main.ts # Plugin entry point
├── app/ # Shared defaults and plugin-level storage
├── core/ # Provider-neutral runtime, registry, and type contracts
│ ├── runtime/ # ChatRuntime interface and approval types
│ ├── providers/ # Provider registry and workspace services
│ ├── auxiliary/ # Shared provider auxiliary services
│ ├── bootstrap/ # Plugin bootstrap wiring
│ ├── security/ # Approval utilities
│ └── ... # commands, mcp, prompt, storage, tools, types
├── providers/
│ ├── claude/ # Claude SDK adaptor, prompt encoding, storage, MCP, plugins
│ ├── codex/ # Codex app-server adaptor, JSON-RPC transport, JSONL history
│ ├── grok/ # Grok Build ACP adaptor, native history, models, and tools
│ ├── opencode/ # Opencode adaptor
│ ├── pi/ # Pi RPC adaptor, model discovery, JSONL history
│ └── acp/ # Agent Client Protocol shared transport
├── features/
│ ├── chat/ # Sidebar chat: tabs, controllers, renderers
│ ├── inline-edit/ # Inline edit modal and provider-backed edit services
│ └── settings/ # Settings shell with provider tabs
├── shared/ # Reusable UI components and modals
├── i18n/ # Internationalization (10 locales)
├── types/ # Shared ambient types
├── utils/ # Cross-cutting utilities
└── style/ # Modular CSS
Star 历史
赞助
贝壳控股有限公司(BEIKE)
Claudian 由贝壳控股有限公司(BEIKE)与 MOMA 团队赞助。他们的支持让 Claudian 得以持续开发与维护,不断改进。
想赞助 Claudian,或想出现在这里?联系我:tysk01213@gmail.com。
贡献
欢迎提交 issue 和聚焦的 pull request。建议先从 issue 开始:把问题、复现步骤和环境描述清楚,方便排查。
提交 pull request 之前,请先阅读贡献指南。pull request 必须说明问题是什么、方案是什么、为什么这个方案合适,以及改动如何验证。不接受新增服务商的 pull request;指南里详细解释了这条维护与产品质量的边界。
许可证
基于 MIT License 授权。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
hanhtang711-netizen/claudian-dsh
在 Obsidian 笔记库里接入多种 AI 编程智能体
相关插件 · 模型接入
API 中继安全审计toby-bridges/api-relay-audit
面向 AI API 中转与 LLM 代理的本地安全审计。
★ 897已汉化DSH
69.4
免费搜索插件DDDMUC/dsh-free-search
DeepSeek Harness 免费搜索插件 —— 无需 API key,零成本,多引擎可切换。 一个给…
★ 761已汉化DSH
68.7
免费联网搜索liustack/modsearch
在官方 App 里模型能联网,切到 API 就不能了。ModSearch 把联网补回来:网页搜索、X…
★ 863已汉化DSH
68.5
OpenCode 免费模型FishBottle7/opencode2dsh
在 DSHDeepSeek Harness里原生使用 OpenCode Zen 的免费匿名模型。
★ 379已汉化DSH
67.8
AI 模型网关tingly-dev/tingly-box
Tingly Box Web UI 演示
★ 373已汉化DSH
67.4
WorkBuddy 账号池XDTrees/dsh-xdpool
把你能白嫖的模型额度接进 DSH 同一个池:WorkBuddy 多账号自动容错、十三家扫码登录、76…
★ 359已汉化DSH
67.1