一键安装
两份脚本做同一件事:把套件写进你的 ~/.claude(所有项目共用)或当前项目的 .claude/。已存在的文件一律不覆盖,套件版本另存为 .kit-new,由你自己对比合并。
方式一:命令一行装(精简套件)
Mac / Linux
终端curl -fsSL https://workflow.maysuns.uk/zh/kit/install.sh -o install.sh && bash install.sh --dry-run
# 看清楚要做什么之后,去掉 --dry-run 再运行:
bash install.sh # 装到 ~/.claude
bash install.sh --project # 装到当前项目Windows PowerShell
PowerShellInvoke-WebRequest https://workflow.maysuns.uk/zh/kit/install.ps1 -OutFile install.ps1
.\install.ps1 -DryRun # 先预演
.\install.ps1 # 装到 $HOME\.claude
.\install.ps1 -Project # 装到当前项目如果提示"禁止运行脚本":
powershell -ExecutionPolicy Bypass -File .\install.ps1。强烈建议先用 --dry-run / -DryRun 看一遍。方式二:下载 zip 手动复制
下载精简套件 zip 解压后把 .claude 文件夹里的内容复制到你的 ~/.claude 或项目的 .claude 里即可。
脚本会做什么 / 不会做什么
| 会 | 不会 |
|---|---|
下载 zip(只访问本站这一个地址);在临时目录解压;复制不存在的文件;已存在的文件另存为 .kit-new;生成 settings.kit-example.json 供参考 | 覆盖任何已有文件;修改你的 settings.json;删除文件;上传任何数据;运行 zip 里的代码 |
完整脚本内容(运行前请自己读一遍)
install.sh
install.sh 下载#!/usr/bin/env bash
# 起步工作流套件 安装脚本(Mac / Linux / Windows Git Bash)
# 用法:
# bash install.sh # 装到用户级 ~/.claude(所有项目共用),下载精简套件
# bash install.sh --project # 装到当前目录(./CLAUDE.md 与 ./.claude/)
# bash install.sh --zip 套件.zip # 用本地 zip(完整套件请先在浏览器登录后下载 zip)
# bash install.sh --dry-run # 只显示将做什么,不写任何文件
# bash install.sh --target /tmp/x # 指定安装目录(想先在临时目录试装时用)
# 规则:已存在的文件一律不覆盖——套件版本另存为 <文件名>.kit-new,由你自己对比合并。
# settings.json 永远不写,只生成 settings.kit-example.json 供参考。
set -euo pipefail
URL="https://workflow.maysuns.uk/zh/kit/workflow-starter-lite.zip"
MODE="user"; ZIP=""; DRY=0; TARGET=""
while [ $# -gt 0 ]; do
case "$1" in
--project) MODE="project" ;;
--user) MODE="user" ;;
--zip) ZIP="${2:?--zip 需要路径}"; shift ;;
--dry-run) DRY=1 ;;
--target) TARGET="${2:?--target 需要路径}"; shift ;;
-h|--help) sed -n '2,10p' "$0"; exit 0 ;;
*) echo "未知参数:$1"; exit 1 ;;
esac
shift
done
TMP="$(mktemp -d)"; trap 'rm -rf "$TMP"' EXIT
if [ -z "$ZIP" ]; then
echo "下载套件:$URL"
curl -fsSL "$URL" -o "$TMP/kit.zip"
ZIP="$TMP/kit.zip"
fi
command -v unzip >/dev/null || { echo "需要 unzip 命令"; exit 1; }
unzip -q "$ZIP" -d "$TMP/x"
ROOT="$(find "$TMP/x" -mindepth 1 -maxdepth 1 -type d | head -n1)"
[ -n "$ROOT" ] || { echo "zip 里没有套件目录"; exit 1; }
if [ -n "$TARGET" ]; then MODE="target"; DEST="$TARGET"; CLAUDE_DIR="$TARGET"
elif [ "$MODE" = "project" ]; then DEST="$PWD"; CLAUDE_DIR="$DEST/.claude"; else DEST="$HOME/.claude"; CLAUDE_DIR="$DEST"; fi
DRYTXT=""; [ "$DRY" = 1 ] && DRYTXT="(预演)"
echo "模式:$MODE 目标:$DEST$DRYTXT"
new=0; skipped=0
put() { # put 源文件 目标文件
local src="$1" dst="$2"
if [ -e "$dst" ]; then
echo " 跳过(已存在)$dst → 套件版本另存为 $dst.kit-new$DRYTXT"
[ "$DRY" = 1 ] || cp "$src" "$dst.kit-new"
skipped=$((skipped+1))
else
echo " 新建 $dst$DRYTXT"
if [ "$DRY" != 1 ]; then mkdir -p "$(dirname "$dst")"; cp "$src" "$dst"; fi
new=$((new+1))
fi
}
# 1) .claude 下的 rules / commands / skills
while IFS= read -r f; do
rel="${f#"$ROOT/.claude/"}"
case "$rel" in
settings.example.json) put "$f" "$CLAUDE_DIR/settings.kit-example.json" ;; # 永远不碰 settings.json
*) put "$f" "$CLAUDE_DIR/$rel" ;;
esac
done < <(find "$ROOT/.claude" -type f | sort)
# 2) CLAUDE.md:项目模式放项目根目录;用户模式只放成模板,不占用你的全局 CLAUDE.md
if [ -f "$ROOT/CLAUDE.md" ]; then
if [ "$MODE" = "project" ]; then put "$ROOT/CLAUDE.md" "$DEST/CLAUDE.md"; else put "$ROOT/CLAUDE.md" "$DEST/CLAUDE.kit-template.md"; fi
fi
echo "完成:新建 $new 个,跳过 $skipped 个(已存在,套件版本另存为 .kit-new)。"
echo "下一步:打开 Claude Code,输入 /status 试试;再把 CLAUDE.md 模板里的【】部分改成你的内容。"
install.ps1
install.ps1 下载# 起步工作流套件 安装脚本(Windows PowerShell 5.1 / PowerShell 7)
# 用法:
# .\install.ps1 # 装到用户级 $HOME\.claude,下载精简套件
# .\install.ps1 -Project # 装到当前目录(.\CLAUDE.md 与 .\.claude\)
# .\install.ps1 -ZipPath 套件.zip # 用本地 zip(完整套件请先在浏览器登录后下载 zip)
# .\install.ps1 -DryRun # 只显示将做什么,不写任何文件
# 规则:已存在的文件一律不覆盖——套件版本另存为 <文件名>.kit-new,由你自己对比合并。
# settings.json 永远不写,只生成 settings.kit-example.json 供参考。
# .\install.ps1 -Target D:\x\.claude # 指定安装目录(想先在临时目录试装时用)
param([switch]$Project, [string]$ZipPath = "", [switch]$DryRun, [string]$Target = "")
$ErrorActionPreference = "Stop"
$Url = "https://workflow.maysuns.uk/zh/kit/workflow-starter-lite.zip"
$Tmp = Join-Path ([System.IO.Path]::GetTempPath()) ("kit_" + [guid]::NewGuid().ToString("N"))
New-Item -ItemType Directory -Path $Tmp | Out-Null
try {
if (-not $ZipPath) {
Write-Host "下载套件:$Url"
$ZipPath = Join-Path $Tmp "kit.zip"
Invoke-WebRequest -Uri $Url -OutFile $ZipPath -UseBasicParsing
}
Expand-Archive -Path $ZipPath -DestinationPath (Join-Path $Tmp "x") -Force
$Root = Get-ChildItem (Join-Path $Tmp "x") -Directory | Select-Object -First 1
if (-not $Root) { throw "zip 里没有套件目录" }
$RootPath = $Root.FullName
if ($Target) { $Dest = $Target; $ClaudeDir = $Target; $Mode = "target" }
elseif ($Project) { $Dest = (Get-Location).Path; $ClaudeDir = Join-Path $Dest ".claude"; $Mode = "project" }
else { $Dest = Join-Path $HOME ".claude"; $ClaudeDir = $Dest; $Mode = "user" }
$suffix = ""; if ($DryRun) { $suffix = "(预演,不写文件)" }
Write-Host "模式:$Mode 目标:$Dest $suffix"
$script:new = 0; $script:skipped = 0
function Put([string]$src, [string]$dst) {
if (Test-Path -LiteralPath $dst) {
Write-Host " 跳过(已存在)$dst → 套件版本另存为 $dst.kit-new"
if (-not $DryRun) { Copy-Item -LiteralPath $src -Destination "$dst.kit-new" -Force }
$script:skipped++
} else {
Write-Host " 新建 $dst"
if (-not $DryRun) {
New-Item -ItemType Directory -Path (Split-Path $dst) -Force | Out-Null
Copy-Item -LiteralPath $src -Destination $dst
}
$script:new++
}
}
$dotClaude = Join-Path $RootPath ".claude"
Get-ChildItem -LiteralPath $dotClaude -Recurse -File | Sort-Object FullName | ForEach-Object {
$rel = $_.FullName.Substring($dotClaude.Length).TrimStart('\','/')
if ($rel -eq "settings.example.json") { Put $_.FullName (Join-Path $ClaudeDir "settings.kit-example.json") } # 永远不碰 settings.json
else { Put $_.FullName (Join-Path $ClaudeDir $rel) }
}
$cm = Join-Path $RootPath "CLAUDE.md"
if (Test-Path -LiteralPath $cm) {
if ($Project -and -not $Target) { Put $cm (Join-Path $Dest "CLAUDE.md") } else { Put $cm (Join-Path $Dest "CLAUDE.kit-template.md") }
}
Write-Host "完成:新建 $($script:new) 个,跳过 $($script:skipped) 个(已存在,套件版本另存为 .kit-new)。"
Write-Host "下一步:打开 Claude Code,输入 /status 试试;再把 CLAUDE.md 模板里的【】部分改成你的内容。"
} finally {
Remove-Item -LiteralPath $Tmp -Recurse -Force -ErrorAction SilentlyContinue
}
装完后怎么确认
- 用户级:
ls ~/.claude/commands(Windows:dir $HOME\.claude\commands)应看到 status.md 等文件。 - 打开 Claude Code,输入
/,列表里应出现status、estimate、session-end。 - 输入
/status看能否正常输出。