dbs-install-skill:多端 Skill 安装与同步 把任意包含 的 Skill 源目录,或包含多个 Skill 子目录的集合目录,安装到本机已经存在的 Agent。 用户始终使用同一条命令。脚本自动选择公共入口或专属入口,用户无需判断宿主类型,也无需添加模式参数。 --- 自动路由 公共入口 脚本始终把 Skill 链接写入: - 通用 Agents: 以下客户端可以读取该公共入口,因此不再写入各自的专属目录: - Codex; - GitHub Copilot; - Gemini CLI; - Cursor; - Augment; - Roo Code; - OpenCode; - OpenHands。 同一个 Skill 不会同时出现在 和上述客户端的专属目录中。这样可以避免 Codex 等客户端重复显示。 专属入口 以下客户端当前仍使用专属目录。只有对应主目录已经存在时,脚本才创建链接: - Claude Code: ; - WorkBuddy: ; - Hermes Agent: ; - Kiro: ; - Qwen Code: ; - Cline: 。 Unix-like 系统使用符号链接;Windows 的 Bash/MSYS 环境使用目录 Junction,避免 在部分配置下生成实体目录副本。 Grok 薄适配层 本机存在 时,脚本生成: - 该文件必…

\\r'/}\"\n normalized=\"$(printf '%s' \"$normalized\" | tr '\\\\\\\\' '/' | tr '[:upper:]' '[:lower:]')\"\n printf '%s\\n' \"${normalized%/}\"\n else\n printf '%s\\n' \"${path%/}\"\n fi\n}\n\npaths_are_same() {\n local left\n local right\n\n left=\"$(normalized_path_for_compare \"$1\")\"\n right=\"$(normalized_path_for_compare \"$2\")\"\n [[ \"$left\" == \"$right\" ]] && return 0\n is_windows_layer || return 1\n run_windows_junction same \"$1\" \"$2\" >/dev/null 2>&1\n}\n\npath_is_under() {\n local path\n local root\n\n path=\"$(normalized_path_for_compare \"$1\")\"\n root=\"$(normalized_path_for_compare \"$2\")\"\n case \"$path\" in\n \"$root\"|\"$root\"/*) return 0 ;;\n *) ;;\n esac\n\n is_windows_layer || return 1\n run_windows_junction under \"$1\" \"$2\" >/dev/null 2>&1\n}\n\nis_managed_link() {\n local link=\"$1\"\n\n [[ -L \"$link\" ]] && return 0\n is_windows_layer || return 1\n path_entry_exists \"$link\" || return 1\n run_windows_junction test \"$link\" >/dev/null 2>&1\n}\n\nraw_link_target() {\n local link=\"$1\"\n local windows_target\n\n if [[ -L \"$link\" ]]; then\n readlink \"$link\"\n return\n fi\n\n is_windows_layer || return 1\n path_entry_exists \"$link\" || return 1\n windows_target=\"$(run_windows_junction target \"$link\")\" || return 1\n windows_target=\"${windows_target//

dbs-install-skill:多端 Skill 安装与同步 把任意包含 的 Skill 源目录,或包含多个 Skill 子目录的集合目录,安装到本机已经存在的 Agent。 用户始终使用同一条命令。脚本自动选择公共入口或专属入口,用户无需判断宿主类型,也无需添加模式参数。 --- 自动路由 公共入口 脚本始终把 Skill 链接写入: - 通用 Agents: 以下客户端可以读取该公共入口,因此不再写入各自的专属目录: - Codex; - GitHub Copilot; - Gemini CLI; - Cursor; - Augment; - Roo Code; - OpenCode; - OpenHands。 同一个 Skill 不会同时出现在 和上述客户端的专属目录中。这样可以避免 Codex 等客户端重复显示。 专属入口 以下客户端当前仍使用专属目录。只有对应主目录已经存在时,脚本才创建链接: - Claude Code: ; - WorkBuddy: ; - Hermes Agent: ; - Kiro: ; - Qwen Code: ; - Cline: 。 Unix-like 系统使用符号链接;Windows 的 Bash/MSYS 环境使用目录 Junction,避免 在部分配置下生成实体目录副本。 Grok 薄适配层 本机存在 时,脚本生成: - 该文件必…

\\r'/}\"\n posix_path \"$windows_target\"\n}\n\nremove_managed_link() {\n local link=\"$1\"\n\n if [[ -L \"$link\" ]]; then\n rm \"$link\"\n return\n fi\n\n is_windows_layer || return 1\n run_windows_junction remove \"$link\" >/dev/null\n}\n\ncreate_managed_link() {\n local src=\"$1\"\n local link=\"$2\"\n\n if is_windows_layer; then\n run_windows_junction create \"$link\" \"$src\" >/dev/null\n else\n ln -s \"$src\" \"$link\"\n fi\n}\n\nmanaged_links_in_dir() {\n local dest_dir=\"$1\"\n local entry\n local windows_entry\n\n [[ -d \"$dest_dir\" ]] || return 0\n if is_windows_layer; then\n while IFS= read -r windows_entry; do\n windows_entry=\"${windows_entry//

dbs-install-skill:多端 Skill 安装与同步 把任意包含 的 Skill 源目录,或包含多个 Skill 子目录的集合目录,安装到本机已经存在的 Agent。 用户始终使用同一条命令。脚本自动选择公共入口或专属入口,用户无需判断宿主类型,也无需添加模式参数。 --- 自动路由 公共入口 脚本始终把 Skill 链接写入: - 通用 Agents: 以下客户端可以读取该公共入口,因此不再写入各自的专属目录: - Codex; - GitHub Copilot; - Gemini CLI; - Cursor; - Augment; - Roo Code; - OpenCode; - OpenHands。 同一个 Skill 不会同时出现在 和上述客户端的专属目录中。这样可以避免 Codex 等客户端重复显示。 专属入口 以下客户端当前仍使用专属目录。只有对应主目录已经存在时,脚本才创建链接: - Claude Code: ; - WorkBuddy: ; - Hermes Agent: ; - Kiro: ; - Qwen Code: ; - Cline: 。 Unix-like 系统使用符号链接;Windows 的 Bash/MSYS 环境使用目录 Junction,避免 在部分配置下生成实体目录副本。 Grok 薄适配层 本机存在 时,脚本生成: - 该文件必…

\\r'/}\"\n [[ -n \"$windows_entry\" ]] || continue\n posix_path \"$windows_entry\"\n done \u003c \u003c(run_windows_junction list \"$dest_dir\")\n return 0\n fi\n\n while IFS= read -r entry; do\n is_managed_link \"$entry\" && printf '%s\\n' \"$entry\"\n done \u003c \u003c(find \"$dest_dir\" -mindepth 1 -maxdepth 1 -print | sort)\n}\n\nresolved_link_target() {\n local link=\"$1\"\n local target\n\n target=\"$(raw_link_target \"$link\")\" || return 1\n resolved_target_from_raw \"$link\" \"$target\"\n}\n\nresolved_target_from_raw() {\n local link=\"$1\"\n local target=\"$2\"\n local parent\n\n if [[ \"$target\" = /* ]]; then\n [[ -d \"$target\" ]] || return 1\n (cd \"$target\" && pwd -P)\n return\n fi\n\n parent=\"$(dirname \"$link\")\"\n [[ -d \"$parent/$target\" ]] || return 1\n (cd \"$parent/$target\" && pwd -P)\n}\n\nlink_points_to() {\n local link=\"$1\"\n local src=\"$2\"\n local raw_target\n\n raw_target=\"$(raw_link_target \"$link\" 2>/dev/null)\" || return 1\n target_points_to \"$link\" \"$raw_target\" \"$src\"\n}\n\ntarget_points_to() {\n local link=\"$1\"\n local raw_target=\"$2\"\n local src=\"$3\"\n local resolved_target\n\n paths_are_same \"$raw_target\" \"$src\" && return 0\n\n resolved_target=\"$(resolved_target_from_raw \"$link\" \"$raw_target\" 2>/dev/null || true)\"\n [[ -n \"$resolved_target\" ]] && paths_are_same \"$resolved_target\" \"$src\"\n}\n\nlink_targets_under() {\n local link=\"$1\"\n local candidate=\"$2\"\n local raw_target\n local resolved_target\n\n raw_target=\"$(raw_link_target \"$link\" 2>/dev/null)\" || return 1\n path_is_under \"$raw_target\" \"$candidate\" && return 0\n\n resolved_target=\"$(resolved_target_from_raw \"$link\" \"$raw_target\" 2>/dev/null || true)\"\n [[ -n \"$resolved_target\" ]] && path_is_under \"$resolved_target\" \"$candidate\" && return 0\n return 1\n}\n\nlink_one() {\n local src=\"$1\"\n local dest_dir=\"$2\"\n local name=\"$3\"\n local create_parent=\"$4\"\n local link=\"$dest_dir/$name\"\n local host_root\n local raw_target\n\n host_root=\"$(host_root_for \"$dest_dir\")\"\n if [[ \"$create_parent\" -eq 0 && ! -d \"$host_root\" ]]; then\n echo \"· $host_root 不存在,跳过\"\n return 0\n fi\n\n mkdir -p \"$dest_dir\"\n\n raw_target=\"$(raw_link_target \"$link\" 2>/dev/null || true)\"\n if [[ -n \"$raw_target\" ]]; then\n if target_points_to \"$link\" \"$raw_target\" \"$src\"; then\n echo \"✓ $link -> $raw_target\"\n return 0\n fi\n echo \"✗ $link 指向其他源 $raw_target,已保留\"\n return 2\n fi\n\n if [[ -e \"$link\" ]]; then\n echo \"✗ $link 是真实目录或文件,已保留\"\n if is_windows_layer && [[ -d \"$link\" ]]; then\n echo \" 可能是旧版 MSYS 生成的实体副本;请核对并手动移走后重试\"\n fi\n return 2\n fi\n\n create_managed_link \"$src\" \"$link\"\n echo \"✓ $link -> $src\"\n}\n\nunlink_if_points_to() {\n local src=\"$1\"\n local dest_dir=\"$2\"\n local name=\"$3\"\n local link=\"$dest_dir/$name\"\n local raw_target\n\n raw_target=\"$(raw_link_target \"$link\" 2>/dev/null || true)\"\n if [[ -n \"$raw_target\" ]]; then\n if target_points_to \"$link\" \"$raw_target\" \"$src\"; then\n remove_managed_link \"$link\"\n echo \"✓ 已移除链接 $link\"\n else\n echo \"✗ $link 指向其他源,已保留\"\n return 2\n fi\n elif [[ -e \"$link\" ]]; then\n echo \"✗ $link 是真实目录或文件,已保留\"\n return 2\n else\n echo \"· $link 不存在,跳过\"\n fi\n}\n\nremove_redundant_one() {\n local src=\"$1\"\n local dest_dir=\"$2\"\n local name=\"$3\"\n local link=\"$dest_dir/$name\"\n local raw_target\n\n [[ -e \"$dest_dir\" || -L \"$dest_dir\" ]] || return 0\n\n raw_target=\"$(raw_link_target \"$link\" 2>/dev/null || true)\"\n if [[ -n \"$raw_target\" ]]; then\n if target_points_to \"$link\" \"$raw_target\" \"$src\"; then\n remove_managed_link \"$link\"\n echo \"✓ 已清理冗余链接 $link\"\n else\n echo \"✗ $link 指向其他源,已保留\"\n return 2\n fi\n elif [[ -e \"$link\" ]]; then\n echo \"✗ $link 是真实目录或文件,已保留\"\n return 2\n fi\n}\n\nremove_redundant_collection_links() {\n local candidate=\"$1\"\n local dest_dir\n local link\n\n for dest_dir in \"${REDUNDANT_TARGET_DIRS[@]}\"; do\n [[ -d \"$dest_dir\" ]] || continue\n while IFS= read -r link; do\n if link_targets_under \"$link\" \"$candidate\"; then\n remove_managed_link \"$link\"\n echo \"✓ 已清理冗余链接 $link\"\n fi\n done \u003c \u003c(managed_links_in_dir \"$dest_dir\")\n done\n}\n\nremove_duplicate_aliases() {\n local candidate=\"$1\"\n local dest_dir\n local link\n local target\n local canonical\n local canonical_name\n\n for dest_dir in \"$SHARED_TARGET_DIR\" \"${NATIVE_TARGET_DIRS[@]}\"; do\n [[ -d \"$dest_dir\" ]] || continue\n while IFS= read -r link; do\n link_targets_under \"$link\" \"$candidate\" || continue\n target=\"$(resolved_link_target \"$link\" 2>/dev/null || true)\"\n [[ -n \"$target\" ]] || continue\n [[ -f \"$target/SKILL.md\" ]] || continue\n canonical_name=\"$(skill_name \"$target\")\"\n canonical=\"$dest_dir/$canonical_name\"\n if ! paths_are_same \"$link\" \"$canonical\" && link_points_to \"$canonical\" \"$target\"; then\n remove_managed_link \"$link\"\n echo \"✓ 已清理重复别名 $link\"\n fi\n done \u003c \u003c(managed_links_in_dir \"$dest_dir\")\n done\n}\n\nremove_stale_collection_artifacts() {\n local candidate=\"$1\"\n local dest_dir\n local link\n local raw_target\n local grok_skill\n local source_file\n local grok_dir\n\n for dest_dir in \"$SHARED_TARGET_DIR\" \"${NATIVE_TARGET_DIRS[@]}\"; do\n [[ -d \"$dest_dir\" ]] || continue\n while IFS= read -r link; do\n raw_target=\"$(raw_link_target \"$link\")\"\n if path_is_under \"$raw_target\" \"$candidate\" && [[ ! -f \"$raw_target/SKILL.md\" ]]; then\n remove_managed_link \"$link\"\n echo \"✓ 已清理失效链接 $link\"\n fi\n done \u003c \u003c(managed_links_in_dir \"$dest_dir\")\n done\n\n [[ -d \"$INSTALL_HOME/.grok/skills\" ]] || return 0\n while IFS= read -r grok_skill; do\n grep -q '^## Grok Bridge

dbs-install-skill:多端 Skill 安装与同步 把任意包含 的 Skill 源目录,或包含多个 Skill 子目录的集合目录,安装到本机已经存在的 Agent。 用户始终使用同一条命令。脚本自动选择公共入口或专属入口,用户无需判断宿主类型,也无需添加模式参数。 --- 自动路由 公共入口 脚本始终把 Skill 链接写入: - 通用 Agents: 以下客户端可以读取该公共入口,因此不再写入各自的专属目录: - Codex; - GitHub Copilot; - Gemini CLI; - Cursor; - Augment; - Roo Code; - OpenCode; - OpenHands。 同一个 Skill 不会同时出现在 和上述客户端的专属目录中。这样可以避免 Codex 等客户端重复显示。 专属入口 以下客户端当前仍使用专属目录。只有对应主目录已经存在时,脚本才创建链接: - Claude Code: ; - WorkBuddy: ; - Hermes Agent: ; - Kiro: ; - Qwen Code: ; - Cline: 。 Unix-like 系统使用符号链接;Windows 的 Bash/MSYS 环境使用目录 Junction,避免 在部分配置下生成实体目录副本。 Grok 薄适配层 本机存在 时,脚本生成: - 该文件必…

\"$grok_skill\" || continue\n source_file=\"$(grep -m 1 '^- Source of truth:' \"$grok_skill\" | sed 's/^- Source of truth: //')\"\n case \"$source_file\" in\n \"$candidate\"/SKILL.md|\"$candidate\"/*/SKILL.md)\n if [[ ! -f \"$source_file\" ]]; then\n grok_dir=\"$(dirname \"$grok_skill\")\"\n rm -rf \"$grok_dir\"\n echo \"✓ 已清理失效 Grok bridge $grok_dir\"\n fi\n ;;\n esac\n done \u003c \u003c(find \"$INSTALL_HOME/.grok/skills\" -mindepth 2 -maxdepth 2 -name SKILL.md -type f | sort)\n}\n\nstatus_one() {\n local src=\"$1\"\n local dest_dir=\"$2\"\n local name=\"$3\"\n local label=\"$4\"\n local link=\"$dest_dir/$name\"\n local raw_target\n\n raw_target=\"$(raw_link_target \"$link\" 2>/dev/null || true)\"\n if [[ -n \"$raw_target\" ]]; then\n if target_points_to \"$link\" \"$raw_target\" \"$src\"; then\n echo \"✓ ${label}:$link -> $raw_target\"\n else\n echo \"✗ ${label}:$link 指向其他源 $raw_target\"\n return 2\n fi\n elif [[ -e \"$link\" ]]; then\n echo \"✗ ${label}:$link 存在,但不是受管链接\"\n return 2\n else\n echo \"· ${label}:$link 未桥接\"\n fi\n}\n\nstatus_redundant_one() {\n local src=\"$1\"\n local dest_dir=\"$2\"\n local name=\"$3\"\n local link=\"$dest_dir/$name\"\n local raw_target\n\n raw_target=\"$(raw_link_target \"$link\" 2>/dev/null || true)\"\n if [[ -n \"$raw_target\" ]]; then\n if target_points_to \"$link\" \"$raw_target\" \"$src\"; then\n echo \"✗ 发现冗余入口:$link -> $raw_target\"\n else\n echo \"✗ 公共兼容客户端存在同名其他来源:$link -> $raw_target\"\n fi\n return 2\n fi\n\n if [[ -e \"$link\" ]]; then\n echo \"✗ 公共兼容客户端存在同名真实目录或文件:$link\"\n return 2\n fi\n return 0\n}\n\nlink_grok_one() {\n local src=\"$1\"\n local name=\"$2\"\n local grok_home=\"$INSTALL_HOME/.grok\"\n local dir=\"$grok_home/skills/$name\"\n local skill_file=\"$dir/SKILL.md\"\n local existing_source\n\n if [[ ! -d \"$grok_home\" ]]; then\n echo \"· $grok_home 不存在,跳过\"\n return 0\n fi\n\n if is_managed_link \"$dir\"; then\n remove_managed_link \"$dir\"\n elif [[ -e \"$dir\" && ! -d \"$dir\" ]]; then\n echo \"✗ $dir 是真实文件,已保留\"\n return 2\n elif [[ -d \"$dir\" && -f \"$skill_file\" ]] && ! grep -q '^## Grok Bridge

dbs-install-skill:多端 Skill 安装与同步 把任意包含 的 Skill 源目录,或包含多个 Skill 子目录的集合目录,安装到本机已经存在的 Agent。 用户始终使用同一条命令。脚本自动选择公共入口或专属入口,用户无需判断宿主类型,也无需添加模式参数。 --- 自动路由 公共入口 脚本始终把 Skill 链接写入: - 通用 Agents: 以下客户端可以读取该公共入口,因此不再写入各自的专属目录: - Codex; - GitHub Copilot; - Gemini CLI; - Cursor; - Augment; - Roo Code; - OpenCode; - OpenHands。 同一个 Skill 不会同时出现在 和上述客户端的专属目录中。这样可以避免 Codex 等客户端重复显示。 专属入口 以下客户端当前仍使用专属目录。只有对应主目录已经存在时,脚本才创建链接: - Claude Code: ; - WorkBuddy: ; - Hermes Agent: ; - Kiro: ; - Qwen Code: ; - Cline: 。 Unix-like 系统使用符号链接;Windows 的 Bash/MSYS 环境使用目录 Junction,避免 在部分配置下生成实体目录副本。 Grok 薄适配层 本机存在 时,脚本生成: - 该文件必…

\"$skill_file\"; then\n echo \"✗ $dir 是真实 Grok Skill,已保留\"\n return 2\n elif [[ -d \"$dir\" && ! -f \"$skill_file\" ]]; then\n echo \"✗ $dir 是真实目录,已保留\"\n return 2\n elif [[ -f \"$skill_file\" ]]; then\n existing_source=\"$(grok_bridge_source \"$skill_file\")\"\n if [[ \"$existing_source\" != \"$src/SKILL.md\" && -f \"$existing_source\" ]]; then\n echo \"✗ $dir 是指向其他真源的 Grok 适配层($existing_source),已保留\"\n return 2\n fi\n fi\n\n mkdir -p \"$dir\"\n cat > \"$skill_file\" \u003c\u003cEOF\n---\nname: $name\nuser_invocable: true\ndescription: |\n $name bridge。在 Grok TUI 中可通过 /$name 触发;触发后必须先读取项目真源 SKILL.md。\n---\n# $name\n\n## Grok Bridge\n\n- Source of truth: $src/SKILL.md\n- Read the source-of-truth file before executing this skill.\n- Follow the source file's workflow, constraints, examples, and output format.\n- Treat this file as a thin Grok bridge only; do not maintain long-form logic here.\n\n## 使用说明\n\n1. 在 Grok TUI 中输入 \\`/$name\\` 即可触发。\n2. Grok 会优先使用本 bridge 指向的真源。\n3. 如需更新,直接修改真源。\nEOF\n echo \"✓ $dir -> $src\"\n}\n\ngrok_bridge_source() {\n grep -m 1 '^- Source of truth:' \"$1\" | sed 's/^- Source of truth: //'\n}\n\nunlink_grok_one() {\n local src=\"$1\"\n local name=\"$2\"\n local grok_home=\"$INSTALL_HOME/.grok\"\n local dir=\"$grok_home/skills/$name\"\n local skill_file=\"$dir/SKILL.md\"\n\n if [[ ! -d \"$grok_home\" ]]; then\n echo \"· $grok_home 不存在,跳过\"\n return 0\n fi\n\n if is_managed_link \"$dir\"; then\n remove_managed_link \"$dir\"\n echo \"✓ 已移除链接 $dir\"\n elif [[ -d \"$dir\" && -f \"$skill_file\" ]] && grep -q '^## Grok Bridge

dbs-install-skill:多端 Skill 安装与同步 把任意包含 的 Skill 源目录,或包含多个 Skill 子目录的集合目录,安装到本机已经存在的 Agent。 用户始终使用同一条命令。脚本自动选择公共入口或专属入口,用户无需判断宿主类型,也无需添加模式参数。 --- 自动路由 公共入口 脚本始终把 Skill 链接写入: - 通用 Agents: 以下客户端可以读取该公共入口,因此不再写入各自的专属目录: - Codex; - GitHub Copilot; - Gemini CLI; - Cursor; - Augment; - Roo Code; - OpenCode; - OpenHands。 同一个 Skill 不会同时出现在 和上述客户端的专属目录中。这样可以避免 Codex 等客户端重复显示。 专属入口 以下客户端当前仍使用专属目录。只有对应主目录已经存在时,脚本才创建链接: - Claude Code: ; - WorkBuddy: ; - Hermes Agent: ; - Kiro: ; - Qwen Code: ; - Cline: 。 Unix-like 系统使用符号链接;Windows 的 Bash/MSYS 环境使用目录 Junction,避免 在部分配置下生成实体目录副本。 Grok 薄适配层 本机存在 时,脚本生成: - 该文件必…

\"$skill_file\"; then\n if [[ \"$(grok_bridge_source \"$skill_file\")\" != \"$src/SKILL.md\" ]]; then\n echo \"✗ $dir 指向其他真源($(grok_bridge_source \"$skill_file\")),已保留\"\n return 2\n fi\n rm -rf \"$dir\"\n echo \"✓ 已移除 Grok bridge $dir\"\n elif [[ -e \"$dir\" ]]; then\n echo \"✗ $dir 是真实目录或文件,已保留\"\n return 2\n else\n echo \"· $dir 不存在,跳过\"\n fi\n}\n\nstatus_grok_one() {\n local name=\"$1\"\n local grok_home=\"$INSTALL_HOME/.grok\"\n local dir=\"$grok_home/skills/$name\"\n local skill_file=\"$dir/SKILL.md\"\n local source\n\n if [[ ! -d \"$grok_home\" ]]; then\n echo \"· Grok:$grok_home 不存在\"\n return 0\n fi\n\n if [[ -d \"$dir\" && -f \"$skill_file\" ]] && grep -q '^## Grok Bridge

dbs-install-skill:多端 Skill 安装与同步 把任意包含 的 Skill 源目录,或包含多个 Skill 子目录的集合目录,安装到本机已经存在的 Agent。 用户始终使用同一条命令。脚本自动选择公共入口或专属入口,用户无需判断宿主类型,也无需添加模式参数。 --- 自动路由 公共入口 脚本始终把 Skill 链接写入: - 通用 Agents: 以下客户端可以读取该公共入口,因此不再写入各自的专属目录: - Codex; - GitHub Copilot; - Gemini CLI; - Cursor; - Augment; - Roo Code; - OpenCode; - OpenHands。 同一个 Skill 不会同时出现在 和上述客户端的专属目录中。这样可以避免 Codex 等客户端重复显示。 专属入口 以下客户端当前仍使用专属目录。只有对应主目录已经存在时,脚本才创建链接: - Claude Code: ; - WorkBuddy: ; - Hermes Agent: ; - Kiro: ; - Qwen Code: ; - Cline: 。 Unix-like 系统使用符号链接;Windows 的 Bash/MSYS 环境使用目录 Junction,避免 在部分配置下生成实体目录副本。 Grok 薄适配层 本机存在 时,脚本生成: - 该文件必…

\"$skill_file\"; then\n source=\"$(grep -m 1 '^- Source of truth:' \"$skill_file\" | sed 's/^- Source of truth: //')\"\n if grep -q '^user_invocable: true

dbs-install-skill:多端 Skill 安装与同步 把任意包含 的 Skill 源目录,或包含多个 Skill 子目录的集合目录,安装到本机已经存在的 Agent。 用户始终使用同一条命令。脚本自动选择公共入口或专属入口,用户无需判断宿主类型,也无需添加模式参数。 --- 自动路由 公共入口 脚本始终把 Skill 链接写入: - 通用 Agents: 以下客户端可以读取该公共入口,因此不再写入各自的专属目录: - Codex; - GitHub Copilot; - Gemini CLI; - Cursor; - Augment; - Roo Code; - OpenCode; - OpenHands。 同一个 Skill 不会同时出现在 和上述客户端的专属目录中。这样可以避免 Codex 等客户端重复显示。 专属入口 以下客户端当前仍使用专属目录。只有对应主目录已经存在时,脚本才创建链接: - Claude Code: ; - WorkBuddy: ; - Hermes Agent: ; - Kiro: ; - Qwen Code: ; - Cline: 。 Unix-like 系统使用符号链接;Windows 的 Bash/MSYS 环境使用目录 Junction,避免 在部分配置下生成实体目录副本。 Grok 薄适配层 本机存在 时,脚本生成: - 该文件必…

\"$skill_file\"; then\n echo \"✓ Grok:$dir -> $source\"\n else\n echo \"✗ Grok:$dir 缺少 user_invocable: true\"\n return 2\n fi\n elif [[ -e \"$dir\" ]]; then\n echo \"✗ Grok:$dir 存在,但并非 dbs-install-skill 生成的适配层\"\n return 2\n else\n echo \"· Grok:$dir 未桥接\"\n fi\n}\n\nmain() {\n if [[ $# -ne 2 ]]; then\n usage\n exit 1\n fi\n\n local action=\"$1\"\n local input=\"$2\"\n local root\n local candidate\n local src\n local name\n local target_dir\n local failed=0\n\n case \"$action\" in\n link|unlink|status) ;;\n *) usage; exit 1 ;;\n esac\n\n root=\"$(repo_root)\"\n candidate=\"$(resolve_candidate \"$input\" \"$root\")\"\n\n if [[ \"$action\" == \"link\" || \"$action\" == \"status\" ]]; then\n validate_interface_gate \"$candidate\"\n fi\n\n while IFS= read -r src; do\n name=\"$(skill_name \"$src\")\"\n echo \"== $name ==\"\n\n case \"$action\" in\n link)\n link_one \"$src\" \"$SHARED_TARGET_DIR\" \"$name\" 1 || failed=1\n for target_dir in \"${NATIVE_TARGET_DIRS[@]}\"; do\n link_one \"$src\" \"$target_dir\" \"$name\" 0 || failed=1\n done\n for target_dir in \"${REDUNDANT_TARGET_DIRS[@]}\"; do\n remove_redundant_one \"$src\" \"$target_dir\" \"$name\" || failed=1\n done\n link_grok_one \"$src\" \"$name\" || failed=1\n ;;\n unlink)\n unlink_if_points_to \"$src\" \"$SHARED_TARGET_DIR\" \"$name\" || failed=1\n for target_dir in \"${NATIVE_TARGET_DIRS[@]}\" \"${REDUNDANT_TARGET_DIRS[@]}\"; do\n unlink_if_points_to \"$src\" \"$target_dir\" \"$name\" || failed=1\n done\n unlink_grok_one \"$src\" \"$name\" || failed=1\n ;;\n status)\n status_one \"$src\" \"$SHARED_TARGET_DIR\" \"$name\" \"公共入口\" || failed=1\n for target_dir in \"${NATIVE_TARGET_DIRS[@]}\"; do\n if [[ -d \"$(host_root_for \"$target_dir\")\" ]]; then\n status_one \"$src\" \"$target_dir\" \"$name\" \"专属入口\" || failed=1\n fi\n done\n for target_dir in \"${REDUNDANT_TARGET_DIRS[@]}\"; do\n status_redundant_one \"$src\" \"$target_dir\" \"$name\" || failed=1\n done\n status_grok_one \"$name\" || failed=1\n ;;\n esac\n done \u003c \u003c(list_skill_sources \"$candidate\")\n\n if [[ \"$action\" == \"link\" ]]; then\n remove_redundant_collection_links \"$candidate\"\n remove_duplicate_aliases \"$candidate\"\n remove_stale_collection_artifacts \"$candidate\"\n fi\n\n if [[ \"$action\" == \"status\" && \"$failed\" -eq 0 ]]; then\n echo \"✓ 未发现冗余入口\"\n fi\n\n exit \"$failed\"\n}\n\nmain \"$@\"\n","content_type":"application/x-sh; charset=utf-8","language":"bash","size":22791,"content_sha256":"90dd80b7cb4edbb17ce8988cf365423665a7be35472321a571087860238e3d9a"}],"content_json":{"type":"doc","content":[{"type":"heading","attrs":{"level":1},"content":[{"text":"dbs-install-skill:多端 Skill 安装与同步","type":"text"}]},{"type":"paragraph","content":[{"text":"把任意包含 ","type":"text"},{"text":"SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 的 Skill 源目录,或包含多个 Skill 子目录的集合目录,安装到本机已经存在的 Agent。","type":"text"}]},{"type":"paragraph","content":[{"text":"用户始终使用同一条命令。脚本自动选择公共入口或专属入口,用户无需判断宿主类型,也无需添加模式参数。","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"自动路由","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"公共入口","type":"text"}]},{"type":"paragraph","content":[{"text":"脚本始终把 Skill 链接写入:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"通用 Agents:","type":"text"},{"text":"~/.agents/skills/\u003cskill-name>","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"paragraph","content":[{"text":"以下客户端可以读取该公共入口,因此不再写入各自的专属目录:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Codex;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"GitHub Copilot;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Gemini CLI;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Cursor;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Augment;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Roo Code;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"OpenCode;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"OpenHands。","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"同一个 Skill 不会同时出现在 ","type":"text"},{"text":"~/.agents/skills","type":"text","marks":[{"type":"code_inline"}]},{"text":" 和上述客户端的专属目录中。这样可以避免 Codex 等客户端重复显示。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"专属入口","type":"text"}]},{"type":"paragraph","content":[{"text":"以下客户端当前仍使用专属目录。只有对应主目录已经存在时,脚本才创建链接:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Claude Code:","type":"text"},{"text":"~/.claude/skills/\u003cskill-name>","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"WorkBuddy:","type":"text"},{"text":"~/.workbuddy/skills/\u003cskill-name>","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Hermes Agent:","type":"text"},{"text":"~/.hermes/skills/\u003cskill-name>","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Kiro:","type":"text"},{"text":"~/.kiro/skills/\u003cskill-name>","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Qwen Code:","type":"text"},{"text":"~/.qwen/skills/\u003cskill-name>","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Cline:","type":"text"},{"text":"~/.cline/skills/\u003cskill-name>","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"Unix-like 系统使用符号链接;Windows 的 Bash/MSYS 环境使用目录 Junction,避免 ","type":"text"},{"text":"ln -s","type":"text","marks":[{"type":"code_inline"}]},{"text":" 在部分配置下生成实体目录副本。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"Grok 薄适配层","type":"text"}]},{"type":"paragraph","content":[{"text":"本机存在 ","type":"text"},{"text":"~/.grok","type":"text","marks":[{"type":"code_inline"}]},{"text":" 时,脚本生成:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"~/.grok/skills/\u003cskill-name>/SKILL.md","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"paragraph","content":[{"text":"该文件必须包含 ","type":"text"},{"text":"user_invocable: true","type":"text","marks":[{"type":"code_inline"}]},{"text":",并指向真源 ","type":"text"},{"text":"SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]},{"type":"heading","attrs":{"level":3},"content":[{"text":"自动清理","type":"text"}]},{"type":"paragraph","content":[{"text":"每次执行 ","type":"text"},{"text":"link","type":"text","marks":[{"type":"code_inline"}]},{"text":" 时,脚本同时处理历史遗留项:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"删除公共入口兼容客户端专属目录中指向同一真源的冗余链接;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"删除旧版脚本曾写入、当前已停止维护的宿主链接;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"删除同一宿主中指向同一真源、且规范名称已经存在的旧别名;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"集合安装时删除指向集合内已失效源目录的断裂链接和 Grok 适配层;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"保留真实目录、真实文件以及指向其他来源的链接,并报告冲突;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"不删除源 Skill。","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"核心原则","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"一个公共入口。","type":"text","marks":[{"type":"strong"}]},{"text":" 支持通用 Agents 目录的客户端统一读取 ","type":"text"},{"text":"~/.agents/skills","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"必要时补专属入口。","type":"text","marks":[{"type":"strong"}]},{"text":" 仅给当前仍依赖原生目录的客户端创建链接。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户无需选择模式。","type":"text","marks":[{"type":"strong"}]},{"text":" 脚本不要求用户提供路由参数。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"公共兼容客户端只保留一份。","type":"text","marks":[{"type":"strong"}]},{"text":" Codex 等客户端不能同时存在公共入口和专属入口。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"各宿主只使用链接。","type":"text","marks":[{"type":"strong"}]},{"text":" Windows 使用目录 Junction,Unix-like 系统使用符号链接;Grok 是唯一使用薄适配层的宿主。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"不创建不存在的 Agent 主目录。","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"~/.agents","type":"text","marks":[{"type":"code_inline"}]},{"text":" 是公共安装入口,可以由脚本创建;其他 Agent 主目录不存在时直接跳过。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"不覆盖真实目录。","type":"text","marks":[{"type":"strong"}]},{"text":" 目标位置已有真实目录或文件时,保留并报告;Windows 上提示它可能是旧版 MSYS 生成的实体副本。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"卸载只删派生产物。","type":"text","marks":[{"type":"strong"}]},{"text":" ","type":"text"},{"text":"unlink","type":"text","marks":[{"type":"code_inline"}]},{"text":" 只删除指向指定真源的符号链接或 Junction,以及本工具生成的 Grok 适配层。","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"优先使用脚本。","type":"text","marks":[{"type":"strong"}]},{"text":" 使用本 Skill 自带的 ","type":"text"},{"text":"scripts/install-skill.sh","type":"text","marks":[{"type":"code_inline"}]},{"text":",不要临场重写安装命令。","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"确定源 Skill","type":"text"}]},{"type":"paragraph","content":[{"text":"用户可能提供:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Skill 名称:","type":"text"},{"text":"dbs-diagnosis","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"相对路径:","type":"text"},{"text":"skills/dbs-diagnosis","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"绝对路径:","type":"text"},{"text":"/Users/.../dbskill/skills/dbs-diagnosis","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"外部 Skill:","type":"text"},{"text":"/Users/.../external-skills/lark-doc","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Skill 集合目录:","type":"text"},{"text":"/Users/.../dbskill/skills","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"当前上下文刚创建或刚修改的 Skill。","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"按以下优先级判断:","type":"text"}]},{"type":"ordered_list","attrs":{"order":1,"listStyle":"number"},"content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户给了绝对路径,直接使用;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户给了相对路径,先按当前工作目录解析,再按 dbskill 仓库根目录解析;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户只给 Skill 名称,先查当前工作目录,再查 dbskill 仓库 ","type":"text"},{"text":"skills/\u003cname>","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"用户只说“这个 Skill”,使用当前对话刚创建、改名或讨论的 Skill;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"仍不确定时,查看当前工作目录和仓库 ","type":"text"},{"text":"skills/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 下最近修改的 Skill;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"仍无法确定时,只问一句:","type":"text"},{"text":"安装哪个 Skill?给我 Skill 名称或路径。","type":"text","marks":[{"type":"code_inline"}]}]}]}]},{"type":"paragraph","content":[{"text":"源目录必须满足以下任一条件:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"目录本身包含 ","type":"text"},{"text":"SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"目录的一级子目录中包含一个或多个 ","type":"text"},{"text":"SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"。","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"入口名优先读取真源 ","type":"text"},{"text":"SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" frontmatter 中的 ","type":"text"},{"text":"name","type":"text","marks":[{"type":"code_inline"}]},{"text":";只有 ","type":"text"},{"text":"name","type":"text","marks":[{"type":"code_inline"}]},{"text":" 缺失时才退回源目录名。这样源目录可以使用分类前缀,各 Agent 仍保持稳定的历史触发名。","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"界面元数据闸门","type":"text"}]},{"type":"paragraph","content":[{"text":"link","type":"text","marks":[{"type":"code_inline"}]},{"text":" 和 ","type":"text"},{"text":"status","type":"text","marks":[{"type":"code_inline"}]},{"text":" 执行前,脚本从源目录开始逐级向上查找 ","type":"text"},{"text":"AGENTS.md","type":"text","marks":[{"type":"code_inline"}]},{"text":"。找到的 ","type":"text"},{"text":"AGENTS.md","type":"text","marks":[{"type":"code_inline"}]},{"text":" 含有 ","type":"text"},{"text":"\u003c!-- skill-interface-gate: required -->","type":"text","marks":[{"type":"code_inline"}]},{"text":" 标记时,脚本用本 Skill 所在仓库的 ","type":"text"},{"text":"tools/check-skill-interface-metadata.py","type":"text","marks":[{"type":"code_inline"}]},{"text":" 校验源目录:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"校验失败时,脚本停止,不建立链接,也不查看状态;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"校验器不存在时,脚本同样停止;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"没有找到该标记时,脚本跳过这一步;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"unlink","type":"text","marks":[{"type":"code_inline"}]},{"text":" 不做这项校验。","type":"text"}]}]}]},{"type":"paragraph","content":[{"text":"校验失败时,把校验器的报错回报给用户,不绕过脚本手动建立链接。","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"执行安装","type":"text"}]},{"type":"paragraph","content":[{"text":"在 dbskill 仓库根目录运行:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"skills/dbs-install-skill/scripts/install-skill.sh link \u003cskill-name-or-path>","type":"text"}]},{"type":"paragraph","content":[{"text":"示例:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"skills/dbs-install-skill/scripts/install-skill.sh link dbs-diagnosis\nskills/dbs-install-skill/scripts/install-skill.sh link skills/my-custom-skill\nskills/dbs-install-skill/scripts/install-skill.sh link skills\nskills/dbs-install-skill/scripts/install-skill.sh link \"/absolute/path/to/skill\"\nskills/dbs-install-skill/scripts/install-skill.sh link \"/Users/me/external-skills\"","type":"text"}]},{"type":"paragraph","content":[{"text":"执行完成后,根据脚本输出回报公共入口、专属入口、Grok 适配层和冗余清理结果。","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"查看状态","type":"text"}]},{"type":"paragraph","content":[{"text":"用户问“装好了吗”“有没有重复”“查看安装状态”时运行:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"skills/dbs-install-skill/scripts/install-skill.sh status \u003cskill-name-or-path>","type":"text"}]},{"type":"paragraph","content":[{"text":"状态正常时,脚本必须输出:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"text"},"content":[{"text":"✓ 未发现冗余入口","type":"text"}]},{"type":"paragraph","content":[{"text":"公共兼容客户端的专属目录中仍有同源链接时,状态返回失败并报告:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"text"},"content":[{"text":"✗ 发现冗余入口:\u003ctarget> -> \u003csource>","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"卸载 Skill","type":"text"}]},{"type":"paragraph","content":[{"text":"用户说“卸载 Skill”“取消安装”“unlink”时运行:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"bash"},"content":[{"text":"skills/dbs-install-skill/scripts/install-skill.sh unlink \u003cskill-name-or-path>","type":"text"}]},{"type":"paragraph","content":[{"text":"完成后告诉用户:源 Skill 没有被删除,只移除了公共入口、专属入口和 Grok 适配层等派生产物。","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"输出规范","type":"text"}]},{"type":"paragraph","content":[{"text":"安装完成后简短回报:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"已安装 `\u003cskill-name>`:\n\n- 公共入口:`~/.agents/skills/\u003cskill-name>`;\n- 专属入口:仅写入本机已安装且仍需要专属目录的 Agent;\n- Grok:`~/.grok/skills/\u003cskill-name>/SKILL.md`(本机存在时);\n- 去重:已清理指向同一真源的历史冗余链接。","type":"text"}]},{"type":"paragraph","content":[{"text":"遇到真实目录或其他来源时:","type":"text"}]},{"type":"code_block","attrs":{"wrap":false,"language":"markdown"},"content":[{"text":"已保留 `\u003ctarget-path>`,因为它是一个真实目录、真实文件或指向其他来源。需要你手动确认后再处理。","type":"text"}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"heading","attrs":{"level":2},"content":[{"text":"自检","type":"text"}]},{"type":"paragraph","content":[{"text":"每次执行前后确认:","type":"text"}]},{"type":"bullet_list","content":[{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"源目录存在;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"源目录包含 ","type":"text"},{"text":"SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":",或其一级子目录包含 ","type":"text"},{"text":"SKILL.md","type":"text","marks":[{"type":"code_inline"}]},{"text":";","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"入口名与真源 frontmatter ","type":"text"},{"text":"name","type":"text","marks":[{"type":"code_inline"}]},{"text":" 一致;缺失 ","type":"text"},{"text":"name","type":"text","marks":[{"type":"code_inline"}]},{"text":" 时才使用源目录名;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"外部路径使用绝对路径,或能从当前工作目录解析;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"~/.agents/skills/\u003cname>","type":"text","marks":[{"type":"code_inline"}]},{"text":" 是公共规范入口;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Codex 等公共兼容客户端的专属目录中没有同源链接;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"专属宿主目标位置若存在,必须是指向当前真源的符号链接或 Junction;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"Grok 目标位置若存在,必须是本工具生成的 Grok 适配层,且指向当前真源或原真源已不存在,才允许更新或移除;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"真实目录、真实文件和其他来源链接没有被删除;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"源目录没有被删除;","type":"text"}]}]},{"type":"list_item","content":[{"type":"paragraph","content":[{"text":"private/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 与 ","type":"text"},{"text":".private/","type":"text","marks":[{"type":"code_inline"}]},{"text":" 没有被读取、复制、暂存或安装。","type":"text"}]}]}]},{"type":"hr","attrs":{"markup":"---"}},{"type":"paragraph","content":[{"text":"完成当前任务后直接结束。用户的请求超出本 Skill 的范围、任务完成后用户的材料里出现明确的后续需求,或用户询问下一步时,用一句话说明还需要哪种能力,不点名其他 Skill;当前环境已经安装 ","type":"text"},{"text":"/dbs","type":"text","marks":[{"type":"code_inline"}]},{"text":" 时,补一句「可以输入 ","type":"text"},{"text":"/dbs","type":"text","marks":[{"type":"code_inline"}]},{"text":",由它匹配对应的 Skill」。","type":"text"}]}]},"metadata":{"date":"2026-11-02","name":"dbs-install-skill","author":"@skillopedia","source":{"stars":11084,"repo_name":"dbskill","origin_url":"https://github.com/dontbesilent2025/dbskill/blob/HEAD/skills/dbs-install-skill/SKILL.md","repo_owner":"dontbesilent2025","body_sha256":"9f7a67caff26e6ee3d112ee734ad14e6d6130b6f4e10622e16e97a5e15f58570","cluster_key":"c79fb4ad4c81ecd42cfee1bc119cb4b17c57a312ffd8c7913457b584b6324208","clean_bundle":{"format":"clean-skill-bundle-v1","source":"dontbesilent2025/dbskill/skills/dbs-install-skill/SKILL.md","text_bytes":23039,"source_commit":"0033b362fc0f8d00d69e10fd9e79270b3a53352e","skills_sh_rank":2714,"attachment_count":2,"text_attachments":2,"attachment_storage":"skill_attachments","binary_attachments":0},"cluster_size":1,"skill_md_path":"skills/dbs-install-skill/SKILL.md","import_metadata":{"date":"2026-11-02","author":"@skillopedia","version":"v1","category":"general","category_label":"General"},"exact_dupes_collapsed_into_this":0},"version":"v1","category":"general","metadata":{"dbs-handoff":"- 一个 Skill 名称、路径或 Skill 集合目录,要安装或同步 → 在本机已有的各 Agent 里建立入口链接,本机有 Grok 时另建适配层,清理指向同一来源的重复链接,交出各入口和清理结果;目标位置已有真实目录或其他来源时停下等用户确认\n- 已安装的 Skill,要查看状态 → 安装状态和发现的重复入口\n- 已安装的 Skill,要卸载 → 移除各入口链接和 Grok 适配层,保留 Skill 源文件\n- 不交出:Skill 内容修改、项目规则文件迁移、为未安装的 Agent 新建目录、覆盖或删除真实目录\n"},"import_tag":"skills-sh-top20k-2026-11","description":"将单个 Skill 或 Skill 集合安装到通用 Agents、Claude Code、Codex、WorkBuddy、Grok、Hermes Agent、Kiro、Qwen Code、Cline 等 Agent。用户要求跨 Agent 安装、同步、查看、去重或卸载 Skill 时使用。"}},"renderedAt":1793676424100}

dbs-install-skill:多端 Skill 安装与同步 把任意包含 的 Skill 源目录,或包含多个 Skill 子目录的集合目录,安装到本机已经存在的 Agent。 用户始终使用同一条命令。脚本自动选择公共入口或专属入口,用户无需判断宿主类型,也无需添加模式参数。 --- 自动路由 公共入口 脚本始终把 Skill 链接写入: - 通用 Agents: 以下客户端可以读取该公共入口,因此不再写入各自的专属目录: - Codex; - GitHub Copilot; - Gemini CLI; - Cursor; - Augment; - Roo Code; - OpenCode; - OpenHands。 同一个 Skill 不会同时出现在 和上述客户端的专属目录中。这样可以避免 Codex 等客户端重复显示。 专属入口 以下客户端当前仍使用专属目录。只有对应主目录已经存在时,脚本才创建链接: - Claude Code: ; - WorkBuddy: ; - Hermes Agent: ; - Kiro: ; - Qwen Code: ; - Cline: 。 Unix-like 系统使用符号链接;Windows 的 Bash/MSYS 环境使用目录 Junction,避免 在部分配置下生成实体目录副本。 Grok 薄适配层 本机存在 时,脚本生成: - 该文件必…