# dotfiles **Repository Path**: zhanglang86/dotfiles ## Basic Information - **Project Name**: dotfiles - **Description**: files files - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-17 - **Last Updated**: 2026-03-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # dotfiles 同步指南 ## 仓库地址 https://gitee.com/zhanglang86/dotfiles ## 当前纳管范围 | 文件 | 路径 | |------|------| | OpenCode 核心配置(push 必需 / pull 严格收敛) | `~/.config/opencode/oh-my-opencode.json` | | OpenCode 主配置(push 必需 / pull 严格收敛) | `~/.config/opencode/opencode.json` | | OpenCode 通用配置(push 必需 / pull 严格收敛) | `~/.config/opencode/config.json` | | Claude Skills(全量) | `~/.claude/skills/` | | OpenCode 命令 | `~/.claude/commands/` | | 会话摘要 | `~/.claude/sessions/*.tmp`(仅 `/save-session` 产物) | | Windows Desktop 兼容副本 | `%APPDATA%/opencode/oh-my-opencode.json`(拉取时自动镜像,若存在) | > 当前仓库同步 OpenCode / Claude 的**受管配置**,以及 `/save-session` 生成的 `sessions/*.tmp` 会话摘要。其中前 3 项是 `/dotfiles-push` / `/dotfiles` 的 push 必需文件,同时也是 `/dotfiles-pull` / `/dotfiles-pull-strict` 的严格收敛文件。除它们之外,`history`、`session-env`、数据库、auth、cache 等机器本地状态仍不纳管,避免跨机器绝对路径和私有状态污染。 > `/dotfiles-push` / `/dotfiles` 在 push 前,会先把本机 `~/.config/opencode/oh-my-opencode.json`、`~/.config/opencode/opencode.json`、`~/.config/opencode/config.json` 覆盖到 `dotfiles_repo/.config/opencode/`,再根据 `git diff` 结果决定是否提交并推送。 > 另外,仓库内已经提供 `/gpr` 命令入口,可先查重、没有重复时再创建 Gitee Pull Request。 > 同一分支再次执行 `/gpr` 时,会先检查是否已经存在同源 open PR,避免重复创建。 --- ## 根仓库 / 子仓库 使用说明 `dotfiles_repo` 是**唯一真源**。今后只保留一个 `standard_model/output/dotfiles_repo` 独立仓库,不再在 `project` 各层级保留 `dotfiles_wt` 一类副本。 ### 1) 路径约定 - 根仓库:`standard_model` - 子仓库:`<根仓库>/output/dotfiles_repo` - Windows 常见示例:`D:/CODE_GIT/standard_model/output/dotfiles_repo` - Linux 常见示例:`/home/lighthouse/project/standard_model/output/dotfiles_repo` ### 2) 路径解析优先级 命令会按以下优先级解析 `dotfiles_repo`: 1. `DOTFILES_REPO_DIR` 2. `DOTFILES_OUTPUT_DIR`(自动拼成 `/dotfiles_repo`) 3. `DOTFILES_ROOT_REPO`(自动拼成 `/output/dotfiles_repo`) 4. 当前 shell 若位于 `standard_model` 或 `dotfiles_repo` 对应 git 仓库内,则自动推导 > 建议两台机器都固定到同一套目录模型:`standard_model/output/dotfiles_repo`。这样 Windows 与 Linux 只有基路径不同,仓库结构一致。 ### Linux 机器:环境变量一键配置 如果你的 Linux 路径是 `/home/lighthouse/project/standard_model/output`,可以直接执行下面这段: ```bash cat <<'EOF' >> ~/.bashrc export DOTFILES_ROOT_REPO=/home/lighthouse/project/standard_model export DOTFILES_OUTPUT_DIR=/home/lighthouse/project/standard_model/output export DOTFILES_REPO_DIR=/home/lighthouse/project/standard_model/output/dotfiles_repo EOF source ~/.bashrc printf 'DOTFILES_ROOT_REPO=%s\nDOTFILES_OUTPUT_DIR=%s\nDOTFILES_REPO_DIR=%s\n' \ "$DOTFILES_ROOT_REPO" "$DOTFILES_OUTPUT_DIR" "$DOTFILES_REPO_DIR" ``` 如果你后面把 `standard_model` 挪到别的位置,只需要改这 3 个环境变量,不需要再改命令文件。 ### 3) 你应该在哪个仓库做什么 #### 在根仓库工作 适用场景: - 改项目代码 - 跑测试 - 提交模型、算法、脚本、文档 #### 在子仓库工作 适用场景: - 改 `oh-my-opencode.json` - 改 `.claude/commands/*` - 改 `.claude/skills/*` - 改本 README - push 到 Gitee 让公司 / 家里同步 ### 4) 最重要的使用原则 - 不要把 `output/dotfiles_repo/` 当成根仓库里的普通目录去提交 - 需要同步家里 / 公司配置时,在**子仓库**里 `commit + push` - 需要提交项目开发内容时,在**根仓库**里提交 - 不再维护任何 `dotfiles_wt` 层级副本;`dotfiles_repo` 是唯一事实源 --- ## 家里电脑:重新克隆新版并替代老版配置 适用场景:家里机器配置已经老了,想用 **Gitee 上最新 dotfiles** 直接替换旧版,并与公司机器保持一致。 ### 最短执行命令清单 如果你只想要一套**最短、可直接复制执行**的命令,用下面这一段即可: ```bash set -euo pipefail ROOT_REPO="${DOTFILES_ROOT_REPO:-/home/lighthouse/project/standard_model}" OUTPUT_DIR="${DOTFILES_OUTPUT_DIR:-$ROOT_REPO/output}" DOTFILES_REPO_DIR="${DOTFILES_REPO_DIR:-$OUTPUT_DIR/dotfiles_repo}" HOME_DIR="${HOME:-${USERPROFILE:-}}" HOME_CONFIG_DIR="$HOME_DIR/.config/opencode" OH_MY_HOME_FILE="$HOME_CONFIG_DIR/oh-my-opencode.json" OH_MY_APPDATA_FILE="${APPDATA:-}/opencode/oh-my-opencode.json" rm -rf "$DOTFILES_REPO_DIR" mkdir -p "$OUTPUT_DIR" git clone https://gitee.com/zhanglang86/dotfiles.git "$DOTFILES_REPO_DIR" rm -rf "$HOME_DIR/.claude/skills" "$HOME_DIR/.claude/commands" mkdir -p "$HOME_DIR/.claude/skills" "$HOME_DIR/.claude/commands" "$HOME_CONFIG_DIR" "$CODEX_DIR" cp -a "$DOTFILES_REPO_DIR/.claude/skills/." "$HOME_DIR/.claude/skills/" cp -a "$DOTFILES_REPO_DIR/.claude/commands/." "$HOME_DIR/.claude/commands/" cp -a "$DOTFILES_REPO_DIR/.config/opencode/oh-my-opencode.json" "$OH_MY_HOME_FILE" if [ -f "$DOTFILES_REPO_DIR/.config/opencode/opencode.json" ]; then cp -a "$DOTFILES_REPO_DIR/.config/opencode/opencode.json" "$HOME_CONFIG_DIR/opencode.json" fi if [ -f "$DOTFILES_REPO_DIR/.codex/auth.json.original" ]; then cp -a "$DOTFILES_REPO_DIR/.codex/auth.json.original" "$CODEX_AUTH_FILE" else rm -f "$CODEX_AUTH_FILE" fi if [ -f "$DOTFILES_REPO_DIR/.codex/config.toml" ]; then cp -a "$DOTFILES_REPO_DIR/.codex/config.toml" "$CODEX_CONFIG_FILE" else rm -f "$CODEX_CONFIG_FILE" fi mkdir -p "$HOME_DIR/.claude/sessions" find "$HOME_DIR/.claude/sessions" -maxdepth 1 -name '*.tmp' -type f -delete 2>/dev/null || true if [ -d "$DOTFILES_REPO_DIR/.claude/sessions" ]; then cp -a "$DOTFILES_REPO_DIR/.claude/sessions/." "$HOME_DIR/.claude/sessions/" fi if [ -n "${APPDATA:-}" ] && [ "$OH_MY_APPDATA_FILE" != "$OH_MY_HOME_FILE" ]; then mkdir -p "$(dirname "$OH_MY_APPDATA_FILE")" cp -a "$DOTFILES_REPO_DIR/.config/opencode/oh-my-opencode.json" "$OH_MY_APPDATA_FILE" fi echo "✅ 家里机器已切到新版配置;后续直接用 /dotfiles-pull" ``` > 说明:上面这段是“最短路径”;如果你想看每一步在做什么、要怎么排错,再看下面的详细步骤版。 ### 家里重装清单 - [ ] 关闭家里机器上正在运行的 Terminal / Desktop 会话 - [ ] 删除旧的 `dotfiles_repo` 克隆(推荐) - [ ] 从 Gitee 重新克隆最新版到 `standard_model/output/dotfiles_repo` - [ ] 执行下面的一次性 bootstrap,直接覆盖家里的旧版受管配置 - [ ] 确认 `~/.claude/skills/`、`~/.claude/commands/`、`~/.config/opencode/`、`~/.codex/` 已更新 - [ ] 如果 Windows Desktop 在使用,确认 `%APPDATA%/opencode/oh-my-opencode.json` 也已刷新 - [ ] 后续更新统一使用 `/dotfiles-pull` ### 家里重装清单(补充修订版,推荐执行) > 结论:仅执行“最短执行命令清单”通常不够。为了确保可回滚、可验收、可持续,建议改为以下补充修订版。 - [ ] 执行前,关闭家里机器所有正在运行的 OpenCode / Terminal / Desktop 会话 - [ ] 先做本机受管配置备份(`~/.config/opencode`、`~/.codex`、`~/.claude/commands`、`~/.claude/skills`) - [ ] 强制重建 `dotfiles_repo`:删除旧目录后重新克隆 - [ ] 在覆盖前校验仓库源文件是否齐全(至少包含 `oh-my-opencode.json`、`.codex/auth.json.original`、`.codex/config.toml`、`skills`、`commands`) - [ ] 执行严格同步(含删除)并刷新 `%APPDATA%/opencode/oh-my-opencode.json`(若存在) - [ ] 执行硬性验收:关键目录/文件存在且 `/dotfiles-pull` 命令文件已就位 #### 一键执行(补充修订版) ```bash set -euo pipefail resolve_home_dir() { if [ -n "${HOME:-}" ] && [ -d "$HOME" ]; then printf '%s\n' "$HOME" return 0 fi if [ -n "${USERPROFILE:-}" ] && [ -d "$USERPROFILE" ]; then printf '%s\n' "$USERPROFILE" return 0 fi echo "❌ 无法解析 HOME/USERPROFILE" >&2 exit 1 } sync_dir_strict() { local source_dir="$1" local target_dir="$2" rm -rf "$target_dir" mkdir -p "$target_dir" if [ -d "$source_dir" ]; then cp -a "$source_dir/." "$target_dir/" fi } sync_file_or_remove() { local source_file="$1" local target_file="$2" mkdir -p "$(dirname "$target_file")" if [ -f "$source_file" ]; then cp -a "$source_file" "$target_file" else rm -f "$target_file" fi } sync_tmp_sessions_from_repo() { local source_dir="$1" local target_dir="$2" local source_file local target_file mkdir -p "$target_dir" shopt -s nullglob for target_file in "$target_dir"/*.tmp; do source_file="$source_dir/$(basename "$target_file")" if [ ! -f "$source_file" ]; then rm -f "$target_file" fi done if [ -d "$source_dir" ]; then for source_file in "$source_dir"/*.tmp; do cp -a "$source_file" "$target_dir/" done fi shopt -u nullglob } ROOT_REPO="${DOTFILES_ROOT_REPO:-/home/lighthouse/project/standard_model}" OUTPUT_DIR="${DOTFILES_OUTPUT_DIR:-$ROOT_REPO/output}" DOTFILES_REPO_DIR="${DOTFILES_REPO_DIR:-$OUTPUT_DIR/dotfiles_repo}" HOME_DIR="$(resolve_home_dir)" CODEX_DIR="$HOME_DIR/.codex" CODEX_AUTH_FILE="$CODEX_DIR/auth.json.original" CODEX_CONFIG_FILE="$CODEX_DIR/config.toml" HOME_CONFIG_DIR="$HOME_DIR/.config/opencode" OH_MY_HOME_FILE="$HOME_CONFIG_DIR/oh-my-opencode.json" OH_MY_APPDATA_FILE="${APPDATA:-}/opencode/oh-my-opencode.json" BACKUP_ROOT="$HOME_DIR/.dotfiles-manual-backup/$(date +%Y%m%d-%H%M%S)" echo "HOME_DIR=$HOME_DIR" echo "DOTFILES_REPO_DIR=$DOTFILES_REPO_DIR" # 1) 备份 mkdir -p "$BACKUP_ROOT" [ -d "$HOME_DIR/.config/opencode" ] && cp -a "$HOME_DIR/.config/opencode" "$BACKUP_ROOT/" || true [ -d "$HOME_DIR/.codex" ] && cp -a "$HOME_DIR/.codex" "$BACKUP_ROOT/" || true [ -d "$HOME_DIR/.claude/commands" ] && cp -a "$HOME_DIR/.claude/commands" "$BACKUP_ROOT/" || true [ -d "$HOME_DIR/.claude/skills" ] && cp -a "$HOME_DIR/.claude/skills" "$BACKUP_ROOT/" || true # 2) 重建唯一源 rm -rf "$DOTFILES_REPO_DIR" mkdir -p "$OUTPUT_DIR" git clone https://gitee.com/zhanglang86/dotfiles.git "$DOTFILES_REPO_DIR" # 3) 覆盖前源文件校验 [ -f "$DOTFILES_REPO_DIR/.config/opencode/oh-my-opencode.json" ] || { echo "❌ 缺少 oh-my-opencode.json"; exit 1; } [ -f "$DOTFILES_REPO_DIR/.codex/auth.json.original" ] || { echo "❌ 缺少 .codex/auth.json.original"; exit 1; } [ -f "$DOTFILES_REPO_DIR/.codex/config.toml" ] || { echo "❌ 缺少 .codex/config.toml"; exit 1; } [ -d "$DOTFILES_REPO_DIR/.claude/commands" ] || { echo "❌ 缺少 .claude/commands"; exit 1; } [ -d "$DOTFILES_REPO_DIR/.claude/skills" ] || { echo "❌ 缺少 .claude/skills"; exit 1; } # 4) 严格应用 sync_file_or_remove "$DOTFILES_REPO_DIR/.config/opencode/oh-my-opencode.json" "$OH_MY_HOME_FILE" sync_file_or_remove "$DOTFILES_REPO_DIR/.config/opencode/opencode.json" "$HOME_CONFIG_DIR/opencode.json" sync_file_or_remove "$DOTFILES_REPO_DIR/.config/opencode/config.json" "$HOME_CONFIG_DIR/config.json" sync_file_or_remove "$DOTFILES_REPO_DIR/.codex/auth.json.original" "$CODEX_AUTH_FILE" sync_file_or_remove "$DOTFILES_REPO_DIR/.codex/config.toml" "$CODEX_CONFIG_FILE" sync_dir_strict "$DOTFILES_REPO_DIR/.claude/skills" "$HOME_DIR/.claude/skills" sync_dir_strict "$DOTFILES_REPO_DIR/.claude/commands" "$HOME_DIR/.claude/commands" sync_tmp_sessions_from_repo "$DOTFILES_REPO_DIR/.claude/sessions" "$HOME_DIR/.claude/sessions" # 5) Windows Desktop 镜像 if [ -n "${APPDATA:-}" ] && [ "$OH_MY_APPDATA_FILE" != "$OH_MY_HOME_FILE" ]; then mkdir -p "$(dirname "$OH_MY_APPDATA_FILE")" cp -a "$DOTFILES_REPO_DIR/.config/opencode/oh-my-opencode.json" "$OH_MY_APPDATA_FILE" fi # 6) 硬性验收 [ -f "$OH_MY_HOME_FILE" ] || { echo "❌ 验收失败:$OH_MY_HOME_FILE"; exit 1; } [ -f "$CODEX_AUTH_FILE" ] || { echo "❌ 验收失败:$CODEX_AUTH_FILE"; exit 1; } [ -f "$CODEX_CONFIG_FILE" ] || { echo "❌ 验收失败:$CODEX_CONFIG_FILE"; exit 1; } [ -d "$HOME_DIR/.claude/commands" ] || { echo "❌ 验收失败:~/.claude/commands"; exit 1; } [ -d "$HOME_DIR/.claude/skills" ] || { echo "❌ 验收失败:~/.claude/skills"; exit 1; } [ -f "$HOME_DIR/.claude/commands/dotfiles-pull.md" ] || { echo "❌ 验收失败:dotfiles-pull.md 未同步"; exit 1; } echo "✅ 重装完成(补充修订版)" echo "🗂 备份目录:$BACKUP_ROOT" echo "➡️ 后续统一使用 /dotfiles-pull" ``` ### 步骤 1: 删除旧的 dotfiles_repo 克隆(可选但推荐) ```bash rm -rf /home/lighthouse/project/standard_model/output/dotfiles_repo ``` ### 步骤 2: 重新克隆最新版仓库到 `standard_model/output` ```bash mkdir -p /home/lighthouse/project/standard_model/output git clone https://gitee.com/zhanglang86/dotfiles.git /home/lighthouse/project/standard_model/output/dotfiles_repo ``` ### 步骤 3: 一次性 bootstrap,直接替代家里的旧版受管配置 > 这一步**不依赖**本地已经安装 `/dotfiles-pull`。它会直接用新版仓库内容覆盖家里机器的受管配置,使其与公司配置收敛一致。 ```bash set -euo pipefail resolve_home_dir() { if [ -n "${HOME:-}" ] && [ -d "$HOME" ]; then printf '%s\n' "$HOME" return 0 fi if [ -n "${USERPROFILE:-}" ] && [ -d "$USERPROFILE" ]; then printf '%s\n' "$USERPROFILE" return 0 fi echo "❌ 无法解析 home 目录,请先设置 HOME 或 USERPROFILE" >&2 exit 1 } sync_dir_strict() { local source_dir="$1" local target_dir="$2" rm -rf "$target_dir" mkdir -p "$target_dir" if [ -d "$source_dir" ]; then cp -a "$source_dir/." "$target_dir/" fi } sync_file_or_remove() { local source_file="$1" local target_file="$2" mkdir -p "$(dirname "$target_file")" if [ -f "$source_file" ]; then cp -a "$source_file" "$target_file" else rm -f "$target_file" fi } sync_tmp_sessions_from_repo() { local source_dir="$1" local target_dir="$2" local source_file local target_file mkdir -p "$target_dir" shopt -s nullglob for target_file in "$target_dir"/*.tmp; do source_file="$source_dir/$(basename "$target_file")" if [ ! -f "$source_file" ]; then rm -f "$target_file" fi done if [ -d "$source_dir" ]; then for source_file in "$source_dir"/*.tmp; do cp -a "$source_file" "$target_dir/" done fi shopt -u nullglob } ROOT_REPO="${DOTFILES_ROOT_REPO:-/home/lighthouse/project/standard_model}" OUTPUT_DIR="${DOTFILES_OUTPUT_DIR:-$ROOT_REPO/output}" DOTFILES_REPO_DIR="${DOTFILES_REPO_DIR:-$OUTPUT_DIR/dotfiles_repo}" HOME_DIR="$(resolve_home_dir)" CODEX_DIR="$HOME_DIR/.codex" CODEX_AUTH_FILE="$CODEX_DIR/auth.json.original" CODEX_CONFIG_FILE="$CODEX_DIR/config.toml" HOME_CONFIG_DIR="$HOME_DIR/.config/opencode" OH_MY_HOME_FILE="$HOME_CONFIG_DIR/oh-my-opencode.json" OH_MY_APPDATA_FILE="${APPDATA:-}/opencode/oh-my-opencode.json" sync_file_or_remove "$DOTFILES_REPO_DIR/.config/opencode/oh-my-opencode.json" "$OH_MY_HOME_FILE" sync_file_or_remove "$DOTFILES_REPO_DIR/.config/opencode/opencode.json" "$HOME_CONFIG_DIR/opencode.json" sync_file_or_remove "$DOTFILES_REPO_DIR/.codex/auth.json.original" "$CODEX_AUTH_FILE" sync_file_or_remove "$DOTFILES_REPO_DIR/.codex/config.toml" "$CODEX_CONFIG_FILE" if [ -n "${APPDATA:-}" ] && [ "$OH_MY_APPDATA_FILE" != "$OH_MY_HOME_FILE" ]; then sync_file_or_remove "$DOTFILES_REPO_DIR/.config/opencode/oh-my-opencode.json" "$OH_MY_APPDATA_FILE" fi sync_dir_strict "$DOTFILES_REPO_DIR/.claude/skills" "$HOME_DIR/.claude/skills" sync_dir_strict "$DOTFILES_REPO_DIR/.claude/commands" "$HOME_DIR/.claude/commands" sync_tmp_sessions_from_repo "$DOTFILES_REPO_DIR/.claude/sessions" "$HOME_DIR/.claude/sessions" echo "✅ 家里机器已切换到新版 dotfiles 受管配置" ``` ### 步骤 4: 后续更新改用 `/dotfiles-pull` 完成上面的 bootstrap 后,`~/.claude/commands/` 已经同步到本机,后续更新就直接使用: ```bash /dotfiles-pull ``` ### 步骤 5: 设置 alias(可选) ```bash echo "alias dotfiles='git --git-dir=/home/lighthouse/project/standard_model/output/dotfiles_repo/.git --work-tree=/home/lighthouse/project/standard_model/output/dotfiles_repo'" >> ~/.bashrc source ~/.bashrc ``` --- ## 未来更新同步 ### /dotfiles-push、/dotfiles 与 /dotfiles-pull 的前后逻辑(务必区分) #### 1) `/dotfiles-push` / `/dotfiles`(本机 -> Gitee,上传) 用途:把**本机当前配置**同步到 `dotfiles_repo` 独立仓库并 `git push` 到 Gitee。 说明:推荐日常优先使用 `/dotfiles-push`;`/dotfiles` 保留为兼容别名。 文件规则:`oh-my-opencode.json`、`opencode.json`、`~/.codex/auth.json.original`、`~/.codex/config.toml` 这 4 个必需文件会在 push 前先整体校验;任一缺失时命令会在复制前直接终止,避免把本地 `dotfiles_repo` 留在半同步状态。其余受管内容按原有规则同步。 执行顺序: 1. 先把 `dotfiles_repo` 收敛到远端默认分支(`fetch + checkout + pull --ff-only`) 2. 从本机复制配置到 `dotfiles_repo`(必需文件:oh-my-opencode、opencode、`.codex/auth.json.original`、`.codex/config.toml`;以及全量 skills、全量 commands、sessions/*.tmp) 3. 镜像同步受管目录到远端唯一事实源 4. `git add . && git commit && git push` 影响: - 会把本机最新内容上传到远端。 - `oh-my-opencode.json` / `opencode.json` / `.codex/auth.json.original` / `.codex/config.toml` 现在都是 push 必需文件;任一缺失都会直接失败,不再跳过。 - 这 4 个必需文件会先整体校验,再开始复制;因此缺失失败不会把 `dotfiles_repo` 留成半更新状态。 - skills / commands 镜像同步都是“包含删除”的:本机没有的内容会从仓库中删除。 - sessions 只同步 `*.tmp` 摘要文件,适合跨机器继续工作;不会同步 `session-env`、数据库和其他运行时状态。 - 如果 `dotfiles_repo` 本地仓库本身有未提交改动,`/dotfiles-push` / `/dotfiles` 会拒绝执行,防止把脏状态推到远端。 - 如果 `~/.config/opencode/oh-my-opencode.json` 与 `%APPDATA%/opencode/oh-my-opencode.json` 同时存在但内容不同,上传会被拒绝,避免把冲突状态写进远端。 #### 2) `/dotfiles-pull`(Gitee -> 本机,下载) 用途:把**远端 dotfiles** 拉到本机并应用。 执行顺序: 1. `git fetch --prune + reset --hard + clean -fd` 收敛本地 `dotfiles_repo` 仓库到远端默认分支 2. 先备份本机到 `~/.dotfiles-backup//` 3. 将远端配置严格应用到本机受管目录 影响: - 不会执行 `git add/commit/push`,因此**不会把本机内容上传到 Gitee**。 - 会严格同步 `~/.config/opencode/oh-my-opencode.json`、`~/.config/opencode/opencode.json`、`~/.config/opencode/config.json`、`~/.codex/auth.json.original`、`~/.codex/config.toml`;远端不存在时会删除本机对应文件。 - 会删除本机受管目录中的多余 skills / commands,确保公司与家里一致。 - 会镜像同步 `~/.claude/sessions/*.tmp`,删除远端已删掉的本机旧摘要,但不会碰 `session-env/` 等非受管状态。 - 若存在 `%APPDATA%/opencode/oh-my-opencode.json`,会同时刷新该副本,兼容 Windows Desktop。 #### 3) `/dotfiles-pull-strict`(Gitee -> 本机,严格覆盖) 用途:兼容旧习惯。现在 `/dotfiles-pull` 默认就是强一致;本命令与其等价。 影响: - `.codex/auth.json.original` 与 `.codex/config.toml` 也会按远端严格覆盖或删除。 - 会删除受管目录中的本机多余文件。 - 适合旧入口兼容;推荐日常直接使用 `/dotfiles-pull`。 #### 4) 常见正确流程 - **想把本机改动上传到 Gitee**:执行 `/dotfiles-push`(推荐)或 `/dotfiles` - **想把远端改动拉到本机**:执行 `/dotfiles-pull` - **想用旧入口进行强一致覆盖**:执行 `/dotfiles-pull-strict` - **双机同步建议顺序**:A 机先 `/dotfiles` 上传,再在 B 机 `/dotfiles-pull` 拉取 ### 推荐:使用命令自动同步 ```bash /dotfiles-pull ``` 说明:`/dotfiles-pull` 当前为**强一致模式**,会严格收敛受管目录,并删除远端不存在的本机残留 skills / commands / sessions/*.tmp。 补充:`/dotfiles-pull` 会从远端应用 `~/.config/opencode/oh-my-opencode.json`、`~/.config/opencode/opencode.json`、`~/.config/opencode/config.json`、`~/.codex/auth.json.original`、`~/.codex/config.toml`,并同步 `~/.claude/skills/`、`~/.claude/commands/`、`~/.claude/sessions/*.tmp`。若 `%APPDATA%/opencode/oh-my-opencode.json` 存在,也会一并刷新。 --- ## oh-my-opencode 模型配置(当前最优) ### Agent 配置 | Agent | 模型 | 提供商 | |-------|------|--------| | Sisyphus | codex/gpt-5.4 | OpenAI | | Prometheus | codex/gpt-5.4 | OpenAI | | Metis/Momus/Atlas | codex/gpt-5.4 | OpenAI | | Multimodal-looker | codex/gpt-5.4 | OpenAI | | Hephaestus | codex/gpt-5.3-codex | OpenAI | | Oracle | codex/gpt-5.4 | OpenAI | | Librarian/Explore | minimax/MiniMax-M2.7 | MiniMax | ### Category 配置 | Category | 模型 | 提供商 | |----------|------|--------| | deep | codex/gpt-5.3-codex | OpenAI | | artistry | codex/gpt-5.3-codex | OpenAI | | visual-engineering | codex/gpt-5.3-codex | OpenAI | | ultrabrain | codex/gpt-5.4 | OpenAI | | writing | codex/gpt-5.4 | OpenAI | | unspecified-high | codex/gpt-5.4 | OpenAI | | ultradeep | codex/gpt-5.4 | OpenAI | | quick | minimax/MiniMax-M2.7 | MiniMax | | unspecified-low | minimax/MiniMax-M2.7 | MiniMax | ### 最小验收清单 - [ ] `deep/artistry/visual-engineering` = `codex/gpt-5.3-codex` - [ ] `ultrabrain/writing/unspecified-high` = `codex/gpt-5.4` - [ ] `ultradeep` = `codex/gpt-5.4` - [ ] `oracle` = `codex/gpt-5.4`(或你选择的替代) - [ ] `librarian/explore` 仍为 `minimax/MiniMax-M2.7` - [ ] `quick/unspecified-low` 仍为 `minimax/MiniMax-M2.7` - [ ] Kimi provider 仍保留(fallback/并行执行) --- ## 更新日期 2026-03-20 --- ## OpenCode 对话存储位置(仅参考) | 内容 | 路径 | |------|------| | 对话历史 | `~/.claude/history.jsonl` | | Session 数据 | `~/.claude/session-env/[UUID]/` | | 数据库 (Windows) | `%USERPROFILE%\.local\share\opencode\opencode.db` | | 数据库 (macOS/Linux) | `~/.local/share/opencode/opencode.db` | **注意**:仅 `/save-session` 生成的 `.tmp` 摘要会进入同步。`history`、`session-env`、数据库等完整运行时状态仍不建议跨机器同步。 --- ## Superpowers 命令跨机安装(详细操作) 目标:把 `/brainstorming` 等 superpowers 命令通过 dotfiles 固化,并在其他机器 `pull` 后直接可用,不需要再次手工注册。 ### 一次性发布(在维护 dotfiles 的机器执行) 1. 进入仓库: `cd /home/lighthouse/project/standard_model/output/dotfiles_repo` 2. 从本机 superpowers 目录导入 skills + commands: `./bin/dotfiles push --repo-root . --source-skills /home/lighthouse/.cache/opencode/node_modules/superpowers/skills --source-commands /home/lighthouse/.cache/opencode/node_modules/superpowers/commands` 3. 校验 manifest: `./bin/dotfiles doctor --repo-root .` 4. 提交并推送: `git add . && git commit -m "feat: update superpowers distribution" && git push` ### 新机器安装(拉取后立即可用) 1. 拉取仓库: `git pull` 2. 从 manifest 安装到本机: `./bin/dotfiles pull --repo-root .` 3. 验证: `./bin/dotfiles doctor --repo-root .` 4. 检查命令索引(示例检查 `/brainstorming`): `grep -n "brainstorming" ~/.config/opencode/commands.index.json` ### 自动化:每次 git pull 后自动执行安装 1. 安装 hook(只需一次): `./bin/dotfiles install-hook --repo-root .` 2. 作用: 会写入 `.git/hooks/post-merge`,后续每次 `git pull` / `git merge` 后自动执行: `scripts/post-pull/install-superpowers.sh` 3. 这个安装是幂等的,可重复执行。 ### 行为说明(避免误解) - `pull` 默认非破坏:本机同名文件若与远端不同,会跳过覆盖(避免误删本地定制)。 - 远端删除不会自动删除本机文件;需要显式执行: `./bin/dotfiles prune-skills --repo-root . --apply`