本文档由 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"记录:
versiondownloadUrlfilenamesha256
如果清单下载失败,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 -)
fiWindows 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.jsonopencode.jsoncCLAUDE.mdsample-workspace/VERSION.jsonsample-workspace/AGENTS.md
另外确认:.claudian/claudian-settings.json 的模型选择为空,opencode.jsonc 没有固定 model 或 small_model;否则停止并报告包版本问题,不要自行猜一个模型名。
如果缺少任何文件,重新下载一次;仍失败则告诉用户具体缺少哪一项。确认 sample-workspace/ 只作为示例目录保留,不要把它的 .obsidian/ 配置覆盖根工作区。
第 5 步:在 Obsidian 中打开工作区
告知用户:
- 打开 Obsidian
- 点击左下角 打开文件夹为库
- 选择工作区目录
- 弹窗「是否信任此库的作者?」 → 点击 信任(否则插件无法运行)
- 等待 Obsidian 加载完成
加载后确认:
- 左侧文件列表显示
00_收件箱、31_目标、32_项目、37_商业、38_客户关系、45_产出、60_Base、62_ObjTpl、系统和sample-workspace - 设置 → 社区插件 → Claudian 已启用
sample-workspace/目录存在,里面只有全虚构 onboarding few-shot 示例;它不需要合并进根目录
AskUserQuestion: 「请在 Obsidian 中打开这个目录并点击信任。完成后回复『已打开』。」
第 6 步:验证 Claudian 可用
- 点击 Obsidian 左侧 Ribbon 栏的 Claudian 图标(AI 图标),右侧侧边栏应出现 Claudian 面板。
- 面板底部有对话输入框。
- 确认 Claudian 的 Provider 为 OpenCode。不要要求某个固定模型名称;模型由当前 OpenCode 版本的模型目录和默认选择决定。
- 输入测试问题:「你好,请介绍一下这个仓库的结构」
如果看到回复,说明配置成功。
可选再做一条轻量验证,确认诊断能力也已随包安装:
-
输入:「请介绍这个工作区里可用的诊断类 skill。」
-
期望回复里至少能识别到
workspace-diagnose-and-bootstrap,并在需要时提到agent-doctor。 -
输入:「请介绍 CRM 工作区的入口、客户和商机分别放在哪里。」
-
期望回复能识别
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
执行方式:
- 告诉用户这是手机同步的可选增强,不影响当前电脑端工作区使用。
- 引导用户确认三件事:
- iPhone 已安装 Obsidian
- iCloud Drive 已开启
- Obsidian 的 iCloud 权限已开启
- 如果用户是 Windows,继续引导安装 iCloud for Windows,并把工作区放入 iCloud Drive 中的 Obsidian 目录。
- 如果用户是 macOS,提醒 macOS 自带 iCloud Drive,只需确认 iCloud Drive 与 Obsidian 权限。
不要自动移动用户已配置好的工作区,除非用户明确同意。移动前必须先备份当前工作区。
AskUserQuestion: 「iCloud 同步需要把工作区放到 iCloud Drive 下。是否现在继续?继续前我会先备份当前工作区;如果不想折腾,可以先跳过。」
Android:Syncthing 方案
适用场景:
- 用户使用 Android 手机
- 用户能接受电脑和手机都安装 Syncthing
- 用户愿意做一次设备配对
执行方式:
- 告诉用户这是进阶配置,需要手机端参与,不能完全由电脑 Agent 自动完成。
- 引导用户在电脑端安装并启动 Syncthing。
- 引导用户在 Android 安装 Syncthing-Fork 和 Obsidian。
- 帮用户确认电脑端同步文件夹路径就是当前
$VAULT_PATH。 - 引导用户扫码或复制设备 ID 完成配对。
- 最后做双向测试:电脑新建一篇测试笔记,手机能看到;手机再新建一篇测试笔记,电脑能看到。
不要把 Syncthing 设置成系统服务作为默认动作。只有用户明确需要“开机自动同步”时,再指导后续设置。
AskUserQuestion: 「Syncthing 需要手机和电脑都参与配置。是否现在继续?如果你希望先使用电脑端工作区,可以回复『跳过』。」
更新流程
如果目标路径已存在且包含 VERSION.json:
- 读取本地
VERSION.json的version - 读取远程
manifest.json的version - 如果版本相同,告诉用户“已是最新版”,然后只执行 Obsidian / Claudian 验证
- 如果远程版本更新:
- 先备份本地目录到同级目录:
0ma-obsidian-workspace-backup-YYYYMMDD-HHMMSS - 再下载新版包并覆盖模板、配置和插件文件
- 不删除用户新增的笔记
- 先备份本地目录到同级目录:
AskUserQuestion: 「检测到新版部署包。是否允许我先备份当前工作区,然后升级到最新版?」
可选:配置外部模型
只有用户主动提出要接入某个供应商时才执行本节。不要在基础安装时要求用户注册、充值或选择模型。
配置规则:
- 先在 OpenCode 中执行
/connect,选择目标供应商并在 OpenCode 的输入框中完成认证。 - 再执行
/models,只从当前目录中选择模型,不猜测或复用旧模型 ID。 - 让 Claudian 保持 Provider 为 OpenCode;不要把供应商 API Key 写入工作区、
opencode.jsonc、.claudian/claudian-settings.json、安装包或聊天记录。 - 用一条最小问题验证回复;如果供应商没有可用模型,明确报告“认证/额度/模型目录”中的具体失败项。
OpenCode 的认证信息由 OpenCode 自己保存,工作区包只保存非敏感的连接结构。
DeepSeek 配置步骤
当用户明确说“配置 DeepSeek”时,按下面的顺序执行:
- 打开 DeepSeek 控制台 ,注册或登录。
- 如果当前页面要求实名认证或身份验证,请由用户在 DeepSeek 页面完成。不要让用户把身份证号、证件照片、密码或支付信息发给 OpenWork。
- 打开控制台的充值页面。金额和支付方式以页面当前显示为准;如果页面当前把 10 元显示为最低充值额,可以充值 10 元,但不要在指南中承诺固定的最低金额。DeepSeek 官方 FAQ 当前列出的线上方式包括 PayPal、银行卡、支付宝和微信支付,结果可在 Billing 页面查看:DeepSeek 计费 FAQ 。
- 在控制台创建新的 API Key。创建后只复制一次到本地安全位置,随后回到 OpenCode。
- 让 OpenWork 打开工作区中的 OpenCode 交互终端,执行
/connect,搜索并选择DeepSeek,停在 API Key 输入框后请用户直接粘贴。API Key 必须粘贴到 OpenCode 的密钥输入框,不要粘贴到 OpenWork 普通聊天消息;OpenWork 不得回显、记录或写入任何工作区文件。 - 认证完成后在 OpenCode 中执行
/models,从当前目录选择 DeepSeek 模型。不要写死旧模型名;DeepSeek 当前模型与价格以官方页面为准:DeepSeek Models & Pricing 。 - 保持 Claudian 的 Provider 为 OpenCode,不要修改
.claudian/claudian-settings.json来保存 Key 或强制模型。Claudian 下次启动时直接使用 OpenCode 当前的供应商和模型选择。 - 用 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-bootstrapagent-doctorllm-gtd-compilerllm-wiki-rendererllm-content-drafterobsidian-cliobsidian-markdownobsidian-yaml-frontmatterobsidian-basesobsidian-thought-tidyschema-helperspecification-askervault-lintclient-diagnosisopportunity-radarprofile-enrichreferral-radarrevenue-reviewupsell-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