Skip to Content
知识库第 1 期:7x24 小助理交付指南(AI 执行)

本文档由 OpenWork 执行。执行原则:能自动完成就自动完成;只有遇到权限、网络、安装器 GUI、路径覆盖风险或用户明确要求自定义时,才向用户提问。


你需要完成的目标

在用户电脑上安装并配置好:

  • Obsidian — 笔记应用
  • OpenCode — 最终工作区使用的 AI Agent 后台;OpenWork 只负责执行本安装流程
  • Claudian 插件 — Obsidian 侧边栏 AI 对话面板(已预装在仓库包中)
  • 预配置仓库 — 含模板目录、Claudian 配置、OpenCode 配置
  • CRM 工作流 — 含 37_商业 核心商业状态和 38_客户关系 联系人、商机、报价、合同、行动、复盘、诊断与转介绍路由
  • sample workspace — 包内 sample-workspace/,可单独在 Obsidian 中打开的全虚构 onboarding few-shot 示例工作区
  • Skills — 预装工作区诊断、Agent 诊断、CRM 雷达、复盘和画像类 skills
  • 版本清单 — 用于后续检查更新

默认安装策略

不要先问用户操作系统。用命令自动判断:

  • macOS / Linux:执行 uname -s
  • Windows PowerShell:读取 $env:OS,或执行 [System.Runtime.InteropServices.RuntimeInformation]::OSDescription
  • Windows Git Bash / MSYS / MinGW:仍然按 Windows 处理,必须使用 PowerShell 命令,不要执行 macOS / Linux 的 bash 解压流程。

先从当前 delivery 页面 URL 推导站点根地址,记为 BASE_URL:

  • 如果当前页面是 https://club.0ma.ai/docs/obsidian-ai-workspace/delivery,则 BASE_URL=https://club.0ma.ai
  • 如果当前页面是 Cloudflare Pages 预览域名,则 BASE_URL 使用这个预览域名
  • 不要硬编码生产域名;测试预览分支时必须使用预览域名下载 manifest 和 zip

默认工作区路径:

  • macOS / Linux:~/Documents/0ma-obsidian-workspace
  • Windows:$env:USERPROFILE\Documents\0ma-obsidian-workspace

如果用户在发给你的消息里指定了安装路径,使用用户指定路径。

如果目标路径已存在:

  • 若存在 VERSION.json,进入“更新流程”
  • 若不存在 VERSION.json,AskUserQuestion: 「目标文件夹已存在但不像本教程创建的工作区。要继续覆盖/合并,还是换一个目录?」

第 1 步:读取最新部署包版本

下载清单:

macOS / Linux:

BASE_URL="${BASE_URL:-https://club.0ma.ai}" curl -fsSL "$BASE_URL/packages/obsidian-workspace/manifest.json"

Windows PowerShell:

$BaseUrl = if ($env:BASE_URL) { $env:BASE_URL } else { "https://club.0ma.ai" } Invoke-RestMethod "$BaseUrl/packages/obsidian-workspace/manifest.json"

记录:

  • version
  • downloadUrl
  • filename
  • sha256

如果清单下载失败,AskUserQuestion: 「我无法访问部署包版本清单。请检查网络或稍后重试。是否要我再试一次?」


第 2 步:确保 OpenCode 可用

先检查命令是否存在并记录版本。macOS / Linux 直接执行 opencode --version;Windows PowerShell 要优先调用 .exe、.cmd 或原生 application 命令,跳过可能被执行策略拦截的 .ps1 shim:

$OpenCode = @( Get-Command opencode.exe -CommandType Application -ErrorAction SilentlyContinue Get-Command opencode.cmd -CommandType Application -ErrorAction SilentlyContinue Get-Command opencode -CommandType Application -ErrorAction SilentlyContinue ) | Select-Object -First 1 if ($OpenCode) { if ($OpenCode.Source -match "\.cmd$") { & cmd.exe /d /c $OpenCode.Source --version } else { & $OpenCode.Source --version } }

如果命令存在,记录版本并继续;Windows 不要把只找到 opencode.ps1 当成可用。

如果命令不存在,不要把 OpenWork 的内置执行能力当成 Claudian 的最终后台;先安装 OpenCode CLI,再继续安装工作区。优先使用 OpenCode 官方独立安装方式:

macOS / Linux:

curl -fsSL https://opencode.ai/install | bash

安装后重新检查 opencode --version;如果当前 OpenWork 进程还没有刷新 PATH,也检查 $HOME/.opencode/bin/opencode --version。OpenCode 官方安装脚本默认可能把 CLI 放在 $HOME/.opencode/bin,Claudian 会自动搜索该目录。

Windows:如果已有 Scoop,执行 scoop install opencode;如果已有 Chocolatey,执行 choco install opencode。如果都没有但已有 Node.js/npm,执行 npm.cmd install --global opencode-ai@latest。不要把 npm 安装成功当作 OpenCode 已可用,必须继续执行下面的 Windows 可执行文件检查。

Windows npm 安装后的强制检查与修复:

$ErrorActionPreference = "Stop" function Find-OpenCode { @( Get-Command opencode.exe -CommandType Application -ErrorAction SilentlyContinue Get-Command opencode.cmd -CommandType Application -ErrorAction SilentlyContinue Get-Command opencode -CommandType Application -ErrorAction SilentlyContinue ) | Select-Object -First 1 } function Invoke-OpenCodeVersion($Command) { if ($Command.Source -match "\.cmd$") { & cmd.exe /d /c $Command.Source --version } else { & $Command.Source --version } } $OpenCode = Find-OpenCode if (-not $OpenCode) { $NpmRoot = (npm.cmd root --global).Trim() $OpenCodePackage = Join-Path $NpmRoot "opencode-ai" $OpenCodeBin = Join-Path $OpenCodePackage "bin" $OpenCodeExe = Join-Path $OpenCodeBin "opencode.exe" if (Test-Path -LiteralPath $OpenCodeExe) { $Probe = (& $OpenCodeExe --version 2>&1 | Out-String).Trim() if ($Probe -match "postinstall script was not run") { Push-Location $OpenCodePackage try { node.exe postinstall.mjs } finally { Pop-Location } } if (-not (Test-Path -LiteralPath $OpenCodeExe)) { throw "OpenCode npm package is present but its Windows executable was not installed." } $env:Path = "$OpenCodeBin;$env:Path" $UserPath = [Environment]::GetEnvironmentVariable("Path", "User") if (-not $UserPath) { $UserPath = "" } $UserParts = $UserPath -split ";" | Where-Object { $_ -and $_.Trim() } if ($UserParts -notcontains $OpenCodeBin) { [Environment]::SetEnvironmentVariable("Path", (($OpenCodeBin + $UserParts) -join ";"), "User") } } } $OpenCode = Find-OpenCode if (-not $OpenCode) { throw "OpenCode was installed but is not available on PATH. Reopen OpenWork once and run opencode --version again." } Invoke-OpenCodeVersion $OpenCode

只有 OpenCode 的 .exe、.cmd 或原生 application 命令成功输出版本后才继续。Windows PowerShell 可能优先找到被执行策略拦截的 opencode.ps1,所以这里明确跳过 .ps1 shim。若仍失败,优先让用户重新打开 OpenWork 刷新 PATH;再失败才 AskUserQuestion。OpenCode 官方在 Windows 上推荐 WSL 以获得更完整兼容性,但原生 Windows 安装也必须通过上述可执行文件检查。

不要使用已经废弃的 @opencode/opencode 包名。只有安装器需要管理员权限、需要用户安装 Node.js/WSL,或安装后仍找不到 CLI 时才 AskUserQuestion;不要因为 OpenWork 已经能运行就跳过 OpenCode 检查。

模型选择原则

这里不要写死模型 ID,也不要把某个模型名称写入工作区配置。OpenCode 自己维护当前版本的模型目录和默认选择;本包只负责把 Claudian 连接到 OpenCode。

  • 不要向 opencode.jsonc 写入 model 或 small_model
  • 不要向 .claudian/claudian-settings.json 写入具体模型 ID
  • 保持 Claudian 只启用 OpenCode;其他 provider 作为未启用的兼容配置保留,不参与基础安装
  • 不要因为旧教程里出现过某个免费模型名称,就继续使用它
  • 首次启动时让 OpenCode 使用它当前的默认模型;如果 OpenCode 提示需要登录或连接供应商,再进入“可选:配置外部模型”

OpenCode 官方文档说明,未指定模型时会按当前版本的内部优先级选择可用模型;模型目录变化时,不能用旧模型 ID 猜测。Claudian 的 Provider 仍必须是 OpenCode,但不应替 OpenCode 接管模型选择。

参考:OpenCode 模型选择与默认优先级 。


第 3 步:安装或确认 Obsidian

先检查 Obsidian 是否已安装:

macOS:

test -d "/Applications/Obsidian.app" && echo "Obsidian installed"

Windows PowerShell:

$paths = @( "$env:LOCALAPPDATA\Obsidian\Obsidian.exe", "$env:ProgramFiles\Obsidian\Obsidian.exe", "${env:ProgramFiles(x86)}\Obsidian\Obsidian.exe", "$env:APPDATA\Microsoft\Windows\Start Menu\Programs\Obsidian.lnk", "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\Obsidian.lnk" ) $foundPaths = $paths | Where-Object { $_ -and (Test-Path $_) } $pathCommand = Get-Command obsidian -ErrorAction SilentlyContinue $wingetMatch = $null if (Get-Command winget -ErrorAction SilentlyContinue) { $wingetMatch = winget list --name Obsidian 2>$null | Select-String -Pattern "Obsidian" } if ($foundPaths -or $pathCommand -or $wingetMatch) { "Obsidian installed" $foundPaths if ($pathCommand) { $pathCommand.Source } } else { "Obsidian not detected" }

Linux:

command -v obsidian || flatpak list | grep -i obsidian || true

如果已安装,继续。

如果检测不到,但用户表示已经安装,不要纠缠检测结果。请让用户从开始菜单或桌面手动打开 Obsidian;只要能打开,就继续下一步。

如果确认未安装,不要让用户选择太多渠道。按系统给出一个最短动作:

  • macOS:打开 https://obsidian.md/download,请用户下载安装 .dmg 并拖入 Applications。
  • Windows:打开 https://obsidian.md/download,请用户下载安装 .exe,保持默认选项。
  • Linux:打开 https://obsidian.md/download,请用户选择 AppImage 或 Flatpak。

AskUserQuestion: 「请完成 Obsidian 安装后回复『已安装』。如果已经装好,直接回复『已安装』即可。」


第 4 步:下载并解压工作区

重要安全规则:

  • Windows 上必须使用 PowerShell 代码块,不要使用 Git Bash / MSYS / MinGW 跑 macOS / Linux 代码块。
  • 任何复制前都必须确认包根目录存在且不是空字符串。
  • 如果目标目录已被错误复制污染,不要继续覆盖;先请用户确认后删除或改用新目录。
  • 不要执行形如 cp -r "$PACKAGE_ROOT/"* "$VAULT_PATH/" 的命令,除非已经确认 $PACKAGE_ROOT 非空且确实位于临时解压目录下。

macOS / Linux:

set -euo pipefail VAULT_PATH="${VAULT_PATH:-$HOME/Documents/0ma-obsidian-workspace}" BASE_URL="${BASE_URL:-https://club.0ma.ai}" MANIFEST_URL="$BASE_URL/packages/obsidian-workspace/manifest.json" MANIFEST_FILE="$(mktemp)" ZIP_FILE="$(mktemp -t 0ma-obsidian-workspace.XXXXXX.zip)" TMP_DIR="$(mktemp -d)" cleanup() { rm -rf "$TMP_DIR" "$ZIP_FILE" "$MANIFEST_FILE" } trap cleanup EXIT curl -fsSL "$MANIFEST_URL" -o "$MANIFEST_FILE" DOWNLOAD_URL="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["downloadUrl"])' "$MANIFEST_FILE")" SHA256="$(python3 -c 'import json,sys; print(json.load(open(sys.argv[1]))["sha256"])' "$MANIFEST_FILE")" case "$DOWNLOAD_URL" in http*) FULL_URL="$DOWNLOAD_URL" ;; *) FULL_URL="$BASE_URL$DOWNLOAD_URL" ;; esac curl -fL "$FULL_URL" -o "$ZIP_FILE" echo "$SHA256 $ZIP_FILE" | shasum -a 256 -c - mkdir -p "$(dirname "$VAULT_PATH")" unzip -q "$ZIP_FILE" -d "$TMP_DIR" PACKAGE_ROOT="$(find "$TMP_DIR" -mindepth 1 -maxdepth 1 -type d | head -n 1)" if [ -z "$PACKAGE_ROOT" ] || [ ! -d "$PACKAGE_ROOT" ]; then echo "部署包解压失败:找不到包根目录" exit 21 fi case "$PACKAGE_ROOT" in "$TMP_DIR"/*) ;; *) echo "安全检查失败:包根目录不在临时目录内:$PACKAGE_ROOT" exit 22 ;; esac if [ -e "$VAULT_PATH" ] && [ ! -f "$VAULT_PATH/VERSION.json" ]; then echo "目标路径已存在且缺少 VERSION.json:$VAULT_PATH" exit 20 fi mkdir -p "$VAULT_PATH" if command -v rsync >/dev/null 2>&1; then rsync -a "$PACKAGE_ROOT/" "$VAULT_PATH/" else (cd "$PACKAGE_ROOT" && tar cf - .) | (cd "$VAULT_PATH" && tar xpf -) fi

Windows PowerShell:

$ErrorActionPreference = "Stop" $VaultPath = if ($env:VAULT_PATH) { $env:VAULT_PATH } else { Join-Path $env:USERPROFILE "Documents\0ma-obsidian-workspace" } $BaseUrl = if ($env:BASE_URL) { $env:BASE_URL.TrimEnd("/") } else { "https://club.0ma.ai" } $ManifestUrl = "$BaseUrl/packages/obsidian-workspace/manifest.json" $Manifest = Invoke-RestMethod $ManifestUrl $DownloadUrl = if ($Manifest.downloadUrl.StartsWith("http")) { $Manifest.downloadUrl } else { "$BaseUrl$($Manifest.downloadUrl)" } $ZipFile = Join-Path $env:TEMP $Manifest.filename $TmpDir = Join-Path $env:TEMP ("0ma-obsidian-workspace-" + [guid]::NewGuid().ToString()) try { Invoke-WebRequest $DownloadUrl -OutFile $ZipFile $ActualHash = (Get-FileHash $ZipFile -Algorithm SHA256).Hash.ToLower() if ($ActualHash -ne $Manifest.sha256.ToLower()) { throw "SHA-256 校验失败。下载文件可能不完整。" } New-Item -ItemType Directory -Force -Path $TmpDir | Out-Null Expand-Archive -Path $ZipFile -DestinationPath $TmpDir -Force $PackageRoot = Get-ChildItem $TmpDir | Where-Object { $_.PSIsContainer } | Select-Object -First 1 if (-not $PackageRoot -or -not (Test-Path $PackageRoot.FullName)) { throw "部署包解压失败:找不到包根目录。" } $TmpFull = (Resolve-Path $TmpDir).Path $RootFull = (Resolve-Path $PackageRoot.FullName).Path if (-not $RootFull.StartsWith($TmpFull)) { throw "安全检查失败:包根目录不在临时目录内:$RootFull" } if ((Test-Path $VaultPath) -and -not (Test-Path (Join-Path $VaultPath "VERSION.json"))) { throw "目标路径已存在且缺少 VERSION.json:$VaultPath" } New-Item -ItemType Directory -Force -Path $VaultPath | Out-Null Get-ChildItem -LiteralPath $PackageRoot.FullName -Force | ForEach-Object { Copy-Item -LiteralPath $_.FullName -Destination $VaultPath -Recurse -Force } } finally { if (Test-Path $TmpDir) { Remove-Item $TmpDir -Recurse -Force -ErrorAction SilentlyContinue } if (Test-Path $ZipFile) { Remove-Item $ZipFile -Force -ErrorAction SilentlyContinue } }

如果命令以“目标路径已存在且缺少 VERSION.json”失败,AskUserQuestion: 「目标目录已有内容,继续可能覆盖文件。要换到默认目录旁边的新目录,还是由你指定目录?」

如果目标目录已经被错误复制污染,例如出现 bin、dev、etc、proc、usr、var 等系统根目录内容,立即停止。AskUserQuestion: 「检测到目标工作区疑似被错误复制污染。是否允许我删除 $VAULT_PATH 后重新下载?如果里面有你的个人笔记,请选择换一个新目录。」获得用户明确同意前不要删除。

下载完成后自动检查:

  • VERSION.json
  • .obsidian/
  • .obsidian/plugins/realclaudian/manifest.json
  • .claudian/claudian-settings.json
  • .claudian/opencode/config.json
  • opencode.jsonc
  • CLAUDE.md
  • sample-workspace/VERSION.json
  • sample-workspace/AGENTS.md

另外确认:.claudian/claudian-settings.json 的模型选择为空,opencode.jsonc 没有固定 model 或 small_model;否则停止并报告包版本问题,不要自行猜一个模型名。

如果缺少任何文件,重新下载一次;仍失败则告诉用户具体缺少哪一项。确认 sample-workspace/ 只作为示例目录保留,不要把它的 .obsidian/ 配置覆盖根工作区。


第 5 步:在 Obsidian 中打开工作区

告知用户:

  1. 打开 Obsidian
  2. 点击左下角 打开文件夹为库
  3. 选择工作区目录
  4. 弹窗「是否信任此库的作者?」 → 点击 信任(否则插件无法运行)
  5. 等待 Obsidian 加载完成

加载后确认:

  • 左侧文件列表显示 00_收件箱、31_目标、32_项目、37_商业、38_客户关系、45_产出、60_Base、62_ObjTpl、系统 和 sample-workspace
  • 设置 → 社区插件 → Claudian 已启用
    • sample-workspace/ 目录存在,里面只有全虚构 onboarding few-shot 示例;它不需要合并进根目录

AskUserQuestion: 「请在 Obsidian 中打开这个目录并点击信任。完成后回复『已打开』。」


第 6 步:验证 Claudian 可用

  1. 点击 Obsidian 左侧 Ribbon 栏的 Claudian 图标(AI 图标),右侧侧边栏应出现 Claudian 面板。
  2. 面板底部有对话输入框。
  3. 确认 Claudian 的 Provider 为 OpenCode。不要要求某个固定模型名称;模型由当前 OpenCode 版本的模型目录和默认选择决定。
  4. 输入测试问题:「你好,请介绍一下这个仓库的结构」

如果看到回复,说明配置成功。

可选再做一条轻量验证,确认诊断能力也已随包安装:

  1. 输入:「请介绍这个工作区里可用的诊断类 skill。」

  2. 期望回复里至少能识别到 workspace-diagnose-and-bootstrap,并在需要时提到 agent-doctor。

  3. 输入:「请介绍 CRM 工作区的入口、客户和商机分别放在哪里。」

  4. 期望回复能识别 38_客户关系/,并知道客户和成交仍分别位于 37_商业/客户/、37_商业/成交/。

AskUserQuestion: 「Claudian 面板已出现并能正常回复。你的 Obsidian + AI 工作区已配置完成!请在 Claudian 中试试提问吧。」


可选:手机端同步配置

这是可选步骤。不要在主安装流程开始前询问同步问题;只有在 Obsidian + Claudian 已经验证可用后再询问。

AskUserQuestion: 「是否现在配置手机端同步?如果你暂时只在电脑上用,可以回复『跳过』;如果要配置,请告诉我你的手机是 iPhone 还是 Android。」

根据用户回答分流:

  • 用户回复跳过:结束同步配置,不再追问。
  • 用户使用 iPhone / iPad:采用 iCloud 方案。
  • 用户使用 Android:采用 Syncthing 方案。
  • 用户不确定:优先推荐跳过,告诉用户以后可以随时回到教程继续配置。

iPhone / iPad:iCloud 方案

适用场景:

  • 用户有 iPhone / iPad
  • 用户愿意使用 iCloud Drive
  • 电脑是 Windows 或 macOS 都可以,但现有详细教程主要覆盖 Windows + iPhone

执行方式:

  1. 告诉用户这是手机同步的可选增强,不影响当前电脑端工作区使用。
  2. 引导用户确认三件事:
    • iPhone 已安装 Obsidian
    • iCloud Drive 已开启
    • Obsidian 的 iCloud 权限已开启
  3. 如果用户是 Windows,继续引导安装 iCloud for Windows,并把工作区放入 iCloud Drive 中的 Obsidian 目录。
  4. 如果用户是 macOS,提醒 macOS 自带 iCloud Drive,只需确认 iCloud Drive 与 Obsidian 权限。

不要自动移动用户已配置好的工作区,除非用户明确同意。移动前必须先备份当前工作区。

AskUserQuestion: 「iCloud 同步需要把工作区放到 iCloud Drive 下。是否现在继续?继续前我会先备份当前工作区;如果不想折腾,可以先跳过。」

Android:Syncthing 方案

适用场景:

  • 用户使用 Android 手机
  • 用户能接受电脑和手机都安装 Syncthing
  • 用户愿意做一次设备配对

执行方式:

  1. 告诉用户这是进阶配置,需要手机端参与,不能完全由电脑 Agent 自动完成。
  2. 引导用户在电脑端安装并启动 Syncthing。
  3. 引导用户在 Android 安装 Syncthing-Fork 和 Obsidian。
  4. 帮用户确认电脑端同步文件夹路径就是当前 $VAULT_PATH。
  5. 引导用户扫码或复制设备 ID 完成配对。
  6. 最后做双向测试:电脑新建一篇测试笔记,手机能看到;手机再新建一篇测试笔记,电脑能看到。

不要把 Syncthing 设置成系统服务作为默认动作。只有用户明确需要“开机自动同步”时,再指导后续设置。

AskUserQuestion: 「Syncthing 需要手机和电脑都参与配置。是否现在继续?如果你希望先使用电脑端工作区,可以回复『跳过』。」


更新流程

如果目标路径已存在且包含 VERSION.json:

  1. 读取本地 VERSION.json 的 version
  2. 读取远程 manifest.json 的 version
  3. 如果版本相同,告诉用户“已是最新版”,然后只执行 Obsidian / Claudian 验证
  4. 如果远程版本更新:
    • 先备份本地目录到同级目录:0ma-obsidian-workspace-backup-YYYYMMDD-HHMMSS
    • 再下载新版包并覆盖模板、配置和插件文件
    • 不删除用户新增的笔记

AskUserQuestion: 「检测到新版部署包。是否允许我先备份当前工作区,然后升级到最新版?」


可选:配置外部模型

只有用户主动提出要接入某个供应商时才执行本节。不要在基础安装时要求用户注册、充值或选择模型。

配置规则:

  1. 先在 OpenCode 中执行 /connect,选择目标供应商并在 OpenCode 的输入框中完成认证。
  2. 再执行 /models,只从当前目录中选择模型,不猜测或复用旧模型 ID。
  3. 让 Claudian 保持 Provider 为 OpenCode;不要把供应商 API Key 写入工作区、opencode.jsonc、.claudian/claudian-settings.json、安装包或聊天记录。
  4. 用一条最小问题验证回复;如果供应商没有可用模型,明确报告“认证/额度/模型目录”中的具体失败项。

OpenCode 的认证信息由 OpenCode 自己保存,工作区包只保存非敏感的连接结构。

DeepSeek 配置步骤

当用户明确说“配置 DeepSeek”时,按下面的顺序执行:

  1. 打开 DeepSeek 控制台 ,注册或登录。
  2. 如果当前页面要求实名认证或身份验证,请由用户在 DeepSeek 页面完成。不要让用户把身份证号、证件照片、密码或支付信息发给 OpenWork。
  3. 打开控制台的充值页面。金额和支付方式以页面当前显示为准;如果页面当前把 10 元显示为最低充值额,可以充值 10 元,但不要在指南中承诺固定的最低金额。DeepSeek 官方 FAQ 当前列出的线上方式包括 PayPal、银行卡、支付宝和微信支付,结果可在 Billing 页面查看:DeepSeek 计费 FAQ 。
  4. 在控制台创建新的 API Key。创建后只复制一次到本地安全位置,随后回到 OpenCode。
  5. 让 OpenWork 打开工作区中的 OpenCode 交互终端,执行 /connect,搜索并选择 DeepSeek,停在 API Key 输入框后请用户直接粘贴。API Key 必须粘贴到 OpenCode 的密钥输入框,不要粘贴到 OpenWork 普通聊天消息;OpenWork 不得回显、记录或写入任何工作区文件。
  6. 认证完成后在 OpenCode 中执行 /models,从当前目录选择 DeepSeek 模型。不要写死旧模型名;DeepSeek 当前模型与价格以官方页面为准:DeepSeek Models & Pricing 。
  7. 保持 Claudian 的 Provider 为 OpenCode,不要修改 .claudian/claudian-settings.json 来保存 Key 或强制模型。Claudian 下次启动时直接使用 OpenCode 当前的供应商和模型选择。
  8. 用 Claudian 发送一条最小测试问题,确认认证、模型目录和回复链路均正常。

OpenCode 官方的供应商流程也是 /connect 添加凭据、再用 /models 选择模型;凭据由 OpenCode 自己保存。OpenCode Providers 


完成

所有步骤已完成时,用户得到的是下面这一套交付物:

Obsidian 工作区

  • 一个可直接用 Obsidian 打开的 Johnny.Decimal 工作区,包含已经融合的 CRM 信息架构
  • 根目录的目录体系、模板、系统说明、AGENTS.md、CLAUDE.md 和 opencode.jsonc
  • 38_客户关系/ CRM 一级目录,以及 37_商业/、36_产品/、31_目标/ 之间的关联路由
  • 60_Base/ 中的 CRM 今日机会、商机管线、客户总库、成交目标、跟进、转介绍、增购和复盘视图
  • 独立的 sample-workspace/ 全虚构 onboarding few-shot 示例;不覆盖根工作区配置,也不需要合并
  • VERSION.json,用于后续升级检查

插件

  • Claudian 2.2.4:已放入 .obsidian/plugins/realclaudian/,并列入 community-plugins.json,打开并信任工作区后即可启用
  • BRAT 2.2.0:包内保留插件文件,但没有启用,不参与基础安装;它不是 Claudian 的依赖

Skills

主目录是 .agents/skills/,共 19 个:

  • workspace-diagnose-and-bootstrap
  • agent-doctor
  • llm-gtd-compiler
  • llm-wiki-renderer
  • llm-content-drafter
  • obsidian-cli
  • obsidian-markdown
  • obsidian-yaml-frontmatter
  • obsidian-bases
  • obsidian-thought-tidy
  • schema-helper
  • specification-asker
  • vault-lint
  • client-diagnosis
  • opportunity-radar
  • profile-enrich
  • referral-radar
  • revenue-review
  • upsell-radar

.claude/skills/ 是兼容副本,.agents/skills/ 才是主目录。

能否直接和 AI 对话

  • Claudian 已安装:是;用户打开 Obsidian、选择工作区并点击「信任」后,右侧会出现 Claudian 面板。
  • 基础配置使用 OpenCode:是;Claudian 的 active provider 是 OpenCode,其他 provider 默认关闭。
  • 能否立刻收到回复:取决于 OpenCode 当前默认模型是否可用。如果当前版本有可用的默认/免费模型,用户无需填写模型 ID 或 API Key 即可直接对话;如果它要求认证或当前免费额度不可用,用户需要在 OpenCode 中执行 /connect,再按当前目录用 /models 选择模型。
  • 免费模型是否永久保证:否。模型目录、免费额度和认证规则属于 OpenCode/供应商运行时状态,安装包不固定也不承诺某个免费模型。

完成后让用户在 Claudian 中发送一句「请介绍这个工作区的目录结构」;能收到回复才算 AI 链路验收完成。

告知用户如需帮助可随时回到俱乐部知识库:https://club.0ma.ai/docs 

Last updated on