🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

笔记智能体 lee259/oh-my-claudian

MCP
lee2590 天前有提交已提供中文文档扫描:高危兼容 / 相关生态

让 Agent 在 Obsidian 里整理笔记,把零散信息变成可以开始的下一步。

43.1/100
综合分
20
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/11/4 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/lee259/oh-my-claudian.git

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:仅索引
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
装得上吗
该类项目不使用 dsh plugin add 安装,静态安装检查不适用
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 0 天前
档位由哪些信号合成

本站实装验证(真实安装 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/31 16:32:58

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

安装时即执行脚本可执行外部命令读写/删除本地文件
查看扫描证据(共 93 处,展示前 88 条)
  • 读取本地文件
    scripts/postinstall.mjs:21
    if (existsSync(example) && !existsSync(target)) {
  • 写入本地文件
    scripts/postinstall.mjs:22
    copyFileSync(example, target);
  • 读取本地文件
    esbuild.config.mjs:28
    if (existsSync('.env.local')) {
  • 读取本地文件
    esbuild.config.mjs:29
    const envContent = readFileSync('.env.local', 'utf-8');
  • 读取本地文件
    esbuild.config.mjs:66
    if (!existsSync(outputPath)) continue;
  • 读取本地文件
    esbuild.config.mjs:94
    const PLUGIN_MANIFEST = JSON.parse(readFileSync('manifest.json', 'utf-8'));
  • 读取本地文件
    esbuild.config.mjs:95
    const OBSIDIAN_PLUGIN_PATH = OBSIDIAN_VAULT && existsSync(OBSIDIAN_VAULT)
  • 读取本地文件
    esbuild.config.mjs:99
    const DISTRIBUTED_LICENSE_BANNER = `/*!\n${readFileSync(new URL('./LICENSE', import.meta.url), 'utf-8').trim()}\n*/`;
  • 写入本地文件
    esbuild.config.mjs:102
    mkdirSync(path.join(process.cwd(), '.context'), { recursive: true });
  • 执行外部命令来自配置/变量
    esbuild.config.mjs:140
    execFileSync(process.execPath, ['scripts/build-css.mjs'], {
  • 删除本地文件递归
    esbuild.config.mjs:145
    rmSync(path.join(process.cwd(), '.codex-vendor'), { recursive: true, force: true });
  • 写入本地文件
    esbuild.config.mjs:150
    mkdirSync(OBSIDIAN_PLUGIN_PATH, { recursive: true });
  • 写入本地文件
    esbuild.config.mjs:156
    copyFileSync(file, path.join(OBSIDIAN_PLUGIN_PATH, file));
  • 删除本地文件递归
    esbuild.config.mjs:162
    rmSync(pluginVendorRoot, { recursive: true, force: true });
  • 读取本地文件
    scripts/build-css.mjs:213
    if (!existsSync(INDEX_FILE)) {
  • 读取本地文件
    scripts/build-css.mjs:218
    const content = readFileSync(INDEX_FILE, 'utf-8');
  • 读取本地文件
    scripts/build-css.mjs:230
    const entries = readdirSync(dir, { withFileTypes: true });
  • 读取本地文件
    scripts/build-css.mjs:269
    if (!existsSync(resolvedPath)) {
  • 读取本地文件
    scripts/build-css.mjs:274
    const sourceContent = readFileSync(resolvedPath, 'utf-8');
  • 写入本地文件
    scripts/build-css.mjs:311
    writeFileSync(OUTPUT, output);
  • 执行外部命令来自配置/变量
    scripts/build.mjs:15
    execFileSync(process.execPath, [join(ROOT, 'scripts/build-css.mjs')], {
  • 执行外部命令来自配置/变量
    scripts/build.mjs:21
    execFileSync(process.execPath, [join(ROOT, 'esbuild.config.mjs'), ...process.argv.slice(2)], {
  • 读取本地文件
    scripts/check-architecture-boundaries.test.mjs:9
    for (const entry of fs.readdirSync(root, { withFileTypes: true })) {
  • 读取本地文件
    scripts/check-architecture-boundaries.test.mjs:25
    if (pattern.test(fs.readFileSync(file, 'utf8'))) {
  • 读取本地文件
    scripts/check-architecture-boundaries.test.mjs:34
    const sourceText = fs.readFileSync(file, 'utf8');
  • 读取本地文件
    scripts/check-architecture-boundaries.test.mjs:126
    return fs.readdirSync(providersRoot, { withFileTypes: true })
  • 读取本地文件
    scripts/check-architecture-boundaries.test.mjs:129
    && fs.existsSync(path.join(providersRoot, entry.name, 'registration.ts'))
  • 执行外部命令来自配置/变量
    scripts/check-eslint-config.test.mjs:61
    const result = spawnSync(process.execPath, [
  • 写入本地文件
    scripts/check-release-version.test.mjs:41
    mkdirSync(path.join(root, 'scripts'));
  • 写入本地文件
    scripts/check-release-version.test.mjs:43
    copyFileSync(new URL('./check-release-version.mjs', import.meta.url), script);
  • 写入本地文件
    scripts/check-release-version.test.mjs:45
    writeFileSync(path.join(root, file), JSON.stringify({ version: tag }));
  • 执行外部命令来自配置/变量
    scripts/check-release-version.test.mjs:47
    const result = spawnSync(process.execPath, [script, tag], { cwd: root, encoding: 'utf8' });
  • 删除本地文件递归
    scripts/check-release-version.test.mjs:54
    rmSync(root, { recursive: true, force: true });
  • 读取本地文件
    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:88
    const result = spawnSync(process.execPath, ['-e', childScript, mainPath], {
  • 删除本地文件递归
    scripts/check-startup-performance.test.mjs:10
    t.after(() => rm(directory, { recursive: true, force: true }));
  • 写入本地文件
    scripts/check-startup-performance.test.mjs:12
    await mkdir(scriptDirectory);
  • 写入本地文件
    scripts/check-startup-performance.test.mjs:13
    await copyFile(new URL('./check-startup-performance.mjs', import.meta.url),
  • 写入本地文件
    scripts/check-startup-performance.test.mjs:15
    await writeFile(path.join(directory, 'main.js'), mainSource);
  • 写入本地文件
    scripts/check-startup-performance.test.mjs:16
    await writeFile(path.join(directory, 'manifest.json'), '{}');
  • 写入本地文件
    scripts/check-startup-performance.test.mjs:17
    await writeFile(path.join(directory, 'styles.css'), '');
  • 写入本地文件
    scripts/check-startup-performance.test.mjs:21
    await mkdir(markdown, { recursive: true });
  • 执行外部命令来自配置/变量
    scripts/check-startup-performance.test.mjs:32
    return spawnSync(process.execPath, [path.join(directory, 'scripts', 'check-startup-performance.mjs')], {
  • 读取本地文件
    scripts/compressedStaticAssets.js:54
    const english = JSON.parse(readFileSync(path.join(localeDirectory, 'en.json'), 'utf8'));
  • 读取本地文件
    scripts/compressedStaticAssets.js:58
    readdirSync(localeDirectory)
  • 读取本地文件
    scripts/compressedStaticAssets.js:64
    Buffer.from(JSON.stringify(packValues(shape, JSON.parse(readFileSync(path.join(localeDirectory, fileName), 'utf8')), fileName))),
  • 读取本地文件
    scripts/compressedStaticAssets.js:92
    const dictionary = JSON.parse(readFileSync(args.path, 'utf8'));
  • 读取本地文件
    scripts/compressedStaticAssets.test.mjs:15
    const files = readdirSync(localeDirectory).filter(name => name.endsWith('.json')).sort();
  • 读取本地文件
    scripts/compressedStaticAssets.test.mjs:32
    assert.deepEqual(compiled.exports, files.map(name => JSON.parse(readFileSync(path.join(localeDirectory, name), 'utf8'))));
  • 读取本地文件
    scripts/compressedStaticAssets.test.mjs:65
    assert.deepEqual(compiled.exports.loadChinese(), JSON.parse(readFileSync(path.join(localeDirectory, 'zh-CN.json'), 'utf8')));
  • 读取本地文件
    scripts/devWatchFiles.mjs:6
    for (const entry of readdirSync(dir, { withFileTypes: true })) {
  • 读取本地文件
    scripts/devWatchFiles.mjs:19
    const cssFiles = existsSync(styleRoot) ? listCssFiles(styleRoot) : [];
  • 写入本地文件
    scripts/devWatchFiles.test.mjs:12
    mkdirSync(join(styleRoot, 'nested'), { recursive: true });
  • 写入本地文件
    scripts/devWatchFiles.test.mjs:13
    writeFileSync(join(root, 'manifest.json'), '{}');
  • 写入本地文件
    scripts/devWatchFiles.test.mjs:14
    writeFileSync(join(styleRoot, 'index.css'), '@import "base.css";');
  • 写入本地文件
    scripts/devWatchFiles.test.mjs:15
    writeFileSync(join(styleRoot, 'base.css'), '.base {}');
  • 写入本地文件
    scripts/devWatchFiles.test.mjs:16
    writeFileSync(join(styleRoot, 'nested', 'feature.css'), '.feature {}');
  • 执行外部命令来自配置/变量
    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');
  • 读取本地文件
    scripts/workspaceToolBundle.test.mjs:50
    contents: sdkImportMeta.patchSdkImportMetaUrl(readFileSync(args.path, 'utf8')),
  • 读取本地文件
    src/utils/cliBinaryLocator.ts:14
    return fs.statSync(filePath).isFile();
  • 读取本地文件
    src/utils/cliBinaryLocator.ts:24
    fs.accessSync(filePath, fs.constants.X_OK);
  • 读取本地文件
    src/utils/env.ts:207
    if (!fs.existsSync(nodePath) || !fs.statSync(nodePath).isFile()) return false;
  • 读取本地文件
    src/utils/env.ts:208
    if (!isWindows) fs.accessSync(nodePath, fs.constants.X_OK);
  • 读取本地文件
    src/utils/externalContext.ts:115
    const stats = fs.statSync(p);
  • 读取本地文件
    src/utils/externalContext.ts:134
    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/fileReplace.ts:11
    await rename(temporary, target);
  • 读取本地文件
    src/utils/jsonlFile.ts:45
    const raw = createReadStream(filePath, { highWaterMark: options.chunkBytes ?? JSONL_READ_CHUNK_BYTES, signal: options.signal });
  • 读取本地文件
    src/utils/obsidianCompat.ts:137
    const realPath = await fs.realpath(candidatePath);
  • 读取本地文件
    src/utils/obsidianCompat.ts:138
    if ((await fs.stat(realPath)).isFile()) return await openVaultFile(app, realPath);
  • 读取本地文件
    src/utils/obsidianCompat.ts:154
    const realVaultPath = await fs.realpath(vaultPath);
  • 读取本地文件
    src/utils/obsidianCompat.ts:156
    const realFilePath = await fs.realpath(candidatePath);
  • 读取本地文件
    src/utils/obsidianCompat.ts:162
    || !(await fs.stat(realFilePath)).isFile()
  • 读取本地文件
    src/utils/path.ts:157
    const target = fs.readFileSync(aliasFile, 'utf8').trim();
  • 读取本地文件
    src/utils/path.ts:171
    const alias = fs.readFileSync(path.join(nvmDir, 'alias', 'default'), 'utf8').trim();
  • 读取本地文件
    src/utils/path.ts:178
    const entries = fs.readdirSync(versionsDir)
  • 读取本地文件
    src/utils/path.ts:186
    if (fs.existsSync(binDir)) return binDir;
  • 读取本地文件
    src/utils/path.ts:209
    if (fs.existsSync(current)) {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
展开完整介绍(106 字)↓

Obsidian 里的智能体:Claude Code、Codex、Cursor、Grok、OpenCode、Oh My Pi、Pi 和 DeepSeek Harness,用来在笔记里对话、行内编辑和审查文件差异。

README

由 DeepSeek 最新模型翻译生成
Oh My Claudian 让 Agent 在 Obsidian 里整理笔记,把零散信息变成可以开始的下一步。 接入你已有的 Claude Code、Codex 或其他受支持的 Agent:对照来源笔记、起草带链接的总结、查看文件修改差异,并把结果保留为 Markdown。 安装插件 · 快速开始 · 试一个完整工作流 · English · 版本更新 · 反馈问题 Obsidian 中的 Oh My Claudian:来源笔记、聊天和展开的文件修改差异 真实 Obsidian 界面,使用示例对话内容;外观随主题和提供商变化。 从一个结果开始 - 整理零散笔记。 附上项目简介和研究笔记,让 Agent 比较来源,生成带笔记链接的总结。 - 直接改进草稿。 选中文本,提出修改要求,查看逐词差异后应用内联编辑结果。 - 阅读长任务。 完成的工具过程折叠成可展开摘要,方便看最新回答,也方便回看过程。 - 沿用已有 Agent。 在侧栏中使用提供商自己的认证、模型、权限,以及它支持的命令和技能。 快速开始 需要 Obsidian 桌面版 1.7.2 或更高版本,以及至少一个受支持的 Agent。插件采用 MIT 协议,免费使用;模型服务的订阅、API 费用和使用额度由所选提供商决定。安装插件不包含模型订阅。
展开完整文档(README 剩余 1 节)
Oh My Claudian

让 Agent 在 Obsidian 里整理笔记,把零散信息变成可以开始的下一步。

接入你已有的 Claude Code、Codex 或其他受支持的 Agent:对照来源笔记、起草带链接的总结、查看文件修改差异,并把结果保留为 Markdown。

安装插件 · 快速开始 · 试一个完整工作流 · English · 版本更新 · 反馈问题

Obsidian 中的 Oh My Claudian:来源笔记、聊天和展开的文件修改差异

真实 Obsidian 界面,使用示例对话内容;外观随主题和提供商变化。

从一个结果开始

- 整理零散笔记。 附上项目简介和研究笔记,让 Agent 比较来源,生成带笔记链接的总结。
- 直接改进草稿。 选中文本,提出修改要求,查看逐词差异后应用内联编辑结果。
- 阅读长任务。 完成的工具过程折叠成可展开摘要,方便看最新回答,也方便回看过程。
- 沿用已有 Agent。 在侧栏中使用提供商自己的认证、模型、权限,以及它支持的命令和技能。

快速开始

需要 Obsidian 桌面版 1.7.2 或更高版本,以及至少一个受支持的 Agent。插件采用 MIT 协议,免费使用;模型服务的订阅、API 费用和使用额度由所选提供商决定。安装插件不包含模型订阅。

1. 安装插件

在 Obsidian 打开 设置 → 第三方插件 → 浏览,搜索 Oh My Claudian,安装并启用。也可以打开插件目录页。

2. 先接好一个 Agent

选你已经在用的 CLI,在终端确认它能启动和完成认证,再配置插件中的同一提供商。

| | Claude Code | Codex |
| 安装与认证 | 按 Claude Code 官方快速开始安装;在终端运行 claude,按提示登录。 | 按 Codex 官方指南安装;在终端运行 codex,按提示登录。 |
| 已有账号 | 沿用 Claude Code 支持的账号或 API 配置。 | 沿用 Codex 支持的账号或 API 配置。 |
| 插件设置 | 打开 设置 → Oh My Claudian → 提供商 → Claude Code,启用提供商。 | 打开 设置 → Oh My Claudian → 提供商 → Codex,启用提供商。 |
| 就绪检查 | 检查 就绪状态,必要时设置 CLI 路径,并启用一个聊天模型。 | 检查 就绪状态,加载模型目录,并启用一个聊天模型。 |

就绪状态会检查提供商是否启用、CLI 是否可用、模型目录是否可用,以及是否选择了聊天模型。受支持的 CLI 可以提供安装或更新操作,执行前展示命令供确认,执行后检查结果。认证由提供商自己的 CLI 完成。

CLI 在终端可用、插件却找不到时,在对应提供商设置中填写 CLI 可执行文件的绝对路径。从桌面启动的 Obsidian 与终端的 PATH 可能不同。

3. 得到第一条回答

从命令面板打开 Oh My Claudian: Open chat view,或点击功能区图标。选择已启用的模型,输入 @ 选择一篇笔记,发送:

请用三个要点概括这篇笔记,附上来源笔记链接,并建议一个下一步。先不要修改任何文件。

发送前,确认输入框中已出现笔记附件标签;发送后,检查聊天中的回答。先确认这一步能完成,再尝试下面的写入工作流。没有可选模型或收不到回答时,先看常见问题。

试一个完整工作流

将 docs/demo-vault 中三篇示例笔记复制到 测试仓库,在该仓库安装并配置插件,使用 @ 附上三篇笔记。

1. 让 Agent 比较来源,提出三个可执行的下一步,暂不改文件。
2. 看过计划后,请它向 Project Brief.md 添加 Next steps 小节,每条行动链接到来源笔记。
3. 提供商返回受支持的编辑数据时,展开文件编辑卡片查看 diff,再打开笔记确认结果。聊天工具的写入可能已按提供商权限执行;内联编辑另有预览后应用的流程。

示例操作指南 提供可复制的提示词、检查结果的方法和演示录制方案。不同模型的输出和速度会有差异。

如果它帮助你处理了笔记,欢迎给仓库点一个 Star,帮助其他人发现项目。具体的使用反馈和问题报告也很有价值。

与 Claudian 的关系

Oh My Claudian 基于 Yishen Tu 的 Claudian 分叉而来,保留原项目的 MIT 协议和基础工作流,包括聊天、@ 引用、slash commands 和内联编辑。目前独立维护,并非 Claudian 官方版本。

| 你的需要 | 可以在这个版本中尝试 |
| 在仓库中使用 Cursor Agent 或 Oh My Pi | 与 Claude Code、Codex、Grok Build、OpenCode 和 Pi 一起提供内置集成。 |
| 配置本地 Agent 时需要指引 | 提供商专属的就绪状态,以及受支持的 CLI 安装/更新入口。 |
| 长对话中方便查看过程和修改 | 展开已完成工作摘要、文件 diff,并保留阅读位置。 |
| 操作 Obsidian 的笔记结构 | Claude、Codex、DeepSeek Harness、OpenCode 和 Pi 可以检查反向链接、管理属性,以及通过 Obsidian 移动文件并更新链接。 |

这些是本项目的维护重点。上游独立演进,对比时请查看 Claudian 当前 README。已有配置满足需要时,可以继续使用原来的版本。

把回答保存为笔记

在聊天消息中选中内容,点击浮层里与「引用」并列的「保存到笔记」,可编辑、预览选中内容,再新建笔记或追加到已有笔记。选区中的标题、强调、链接、列表、表格和代码块会从渲染内容还原为 Markdown;路径中的文件夹须已存在。保存成功后可打开笔记,或在弹窗内撤销本次正文。撤销会保留后来追加的内容,遇到冲突则停止;新建的笔记文件会保留。

支持的提供商

内置 Claude Code、Codex、Cursor Agent、Grok Build、Oh My Pi(OMP)、OpenCode、Pi 和 DeepSeek Harness。具体认证、权限、规划、历史、模型目录、命令、技能及 MCP 能力由各提供商决定;界面仅展示所选提供商支持的功能。官方文档入口

DeepSeek Harness 需先配置好 dsh web,或打开一次 DeepSeek Harness Desktop 完成设置,再在 提供商 → DeepSeek Harness 中启用、发现模型并手动选择聊天模型。自动发现优先使用 dsh;要使用 Desktop,请填写 .app 路径或 Windows 安装目录。集成复用原生配置、凭证和 MCP,支持历史恢复、图片、权限、停止、可选代码模式及附加预设插件;聊天预设通过会话隔离的本地桥接提供 Obsidian 原生笔记工具,辅助预设保持原有策略;目前不提供规划模式。

常见问题

| 问题 | 先检查什么 |
| 找不到 CLI | 对应提供商的就绪状态、可执行文件绝对路径,以及 Obsidian 的 PATH。 |
| 没有可选模型 | 先确认 CLI 登录成功,重新检查/加载模型目录,再启用聊天模型。 |
| Claude 订阅能用,插件却认证失败 | 检查是否继承了冲突的 ANTHROPIC_API_KEY 或 ANTHROPIC_AUTH_TOKEN。见凭证冲突指引。 |
| 某个按钮或命令没有出现 | 核对所选提供商是否支持该能力。 |
| 工具成功,但文件卡片没有 diff | 提供商需要返回受支持的编辑数据;成功状态本身不包含修改行。 |

报告问题时,请提供插件版本、Obsidian 版本、系统、提供商、CLI 版本和复现步骤。日志和截图中请移除密钥和私人笔记内容。

数据与权限

插件采用本地优先设计,不发送插件遥测。提示词、附件和工具结果会发送到你所选的提供商及其配置的模型服务;CLI 版本检查和配置的 MCP 服务也可能访问网络。

仓库是 Agent 的工作目录,不是操作系统级隔离环境。CLI、shell、MCP 或子进程可能访问当前系统账号允许访问的文件和服务。使用前检查提供商权限,尤其是自动批准、浏览器、MCP 和外部路径相关设置。

显式附上外部文件并不意味着授予写入权限;受支持的提供商会对仓库外直接编辑采用审批流程。完整说明

开发与协议

开发及构建 · 贡献指南 · MIT 协议

收起侧栏后继续聊天

桌面端收起 Oh My Claudian 所在侧栏后,原聊天视图会移动到笔记上方的悬浮面板。点击活动预览可展开或收起对话;重新展开侧栏即可恢复。草稿、运行中的回答和待审批请求仍由同一个会话管理。

拖动面板底部的手柄可调整位置;聚焦手柄后也可用方向键移动,按住 Shift 加大步长。Home 键或双击手柄会归位到底部中央,位置会保存。可在插件通用设置中关闭「启用禅模式」。主区域标签页和弹出窗口不进入悬浮模式。

空对话仅显示输入框。可在快捷键设置中为「显示或隐藏禅模式面板」和「展开或收起禅模式对话」绑定按键。临时隐藏后恢复会聚焦原输入框;重新打开所属侧栏会重置临时隐藏状态。模型和权限菜单会朝工作区空间更充足的方向展开。
预览分享卡片长什么样 ↓lee259/oh-my-claudian
分享 · DeepSeek Harness Hub
lee259/oh-my-claudian

让 Agent 在 Obsidian 里整理笔记,把零散信息变成可以开始的下一步。

这是你的仓库?认领条目

回到顶部