update: guide.html -> full beginner-friendly manual

This commit is contained in:
leesu 2026-04-01 15:29:06 +08:00
parent fcd3d87f21
commit 666f42a0a4

View File

@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Bookworm Portable - 使用教程</title>
<title>Bookworm Portable - 保姆式安装手册</title>
<style>
:root {
--bg: #0d1117;
@ -26,8 +26,9 @@
line-height: 1.7;
padding: 0;
}
a { color: var(--accent); text-decoration: none; }
a:hover { text-decoration: underline; }
/* Header */
.header {
background: linear-gradient(135deg, #1a1f35 0%, #0d1117 100%);
border-bottom: 1px solid var(--border);
@ -42,232 +43,138 @@
display: inline-block;
text-align: left;
}
.header h1 {
font-size: 2rem;
font-weight: 700;
margin-bottom: 0.5rem;
}
.header h1 { font-size: 2rem; font-weight: 700; margin-bottom: 0.5rem; }
.header h1 span { color: var(--accent); }
.header p { color: var(--text-dim); font-size: 1.05rem; }
.badge-row {
display: flex;
gap: 0.8rem;
justify-content: center;
margin-top: 1rem;
flex-wrap: wrap;
}
.badge-row { display: flex; gap: 0.8rem; justify-content: center; margin-top: 1rem; flex-wrap: wrap; }
.badge {
display: inline-flex;
align-items: center;
gap: 0.4rem;
background: var(--card);
border: 1px solid var(--border);
border-radius: 20px;
padding: 0.3rem 0.9rem;
font-size: 0.85rem;
color: var(--text-dim);
display: inline-flex; align-items: center; gap: 0.4rem;
background: var(--card); border: 1px solid var(--border);
border-radius: 20px; padding: 0.3rem 0.9rem; font-size: 0.85rem; color: var(--text-dim);
}
.badge strong { color: var(--text); }
/* Container */
.container {
max-width: 860px;
margin: 0 auto;
padding: 2rem 1.5rem 4rem;
}
.container { max-width: 900px; margin: 0 auto; padding: 2rem 1.5rem 4rem; }
/* Section */
.section {
margin-bottom: 2.5rem;
}
.section { margin-bottom: 2.5rem; }
.section h2 {
font-size: 1.4rem;
margin-bottom: 1rem;
padding-bottom: 0.5rem;
border-bottom: 1px solid var(--border);
display: flex;
align-items: center;
gap: 0.6rem;
font-size: 1.4rem; margin-bottom: 1rem; padding-bottom: 0.5rem;
border-bottom: 1px solid var(--border); display: flex; align-items: center; gap: 0.6rem;
}
.section h2 .num {
background: var(--accent);
color: #000;
width: 28px;
height: 28px;
border-radius: 50%;
display: inline-flex;
align-items: center;
justify-content: center;
font-size: 0.85rem;
font-weight: 700;
flex-shrink: 0;
background: var(--accent); color: #000; width: 28px; height: 28px;
border-radius: 50%; display: inline-flex; align-items: center; justify-content: center;
font-size: 0.85rem; font-weight: 700; flex-shrink: 0;
}
/* Code blocks */
.code-block {
background: #0d1117;
border: 1px solid var(--border);
border-radius: 8px;
padding: 1rem 1.2rem;
margin: 0.8rem 0;
overflow-x: auto;
position: relative;
background: #0d1117; border: 1px solid var(--border); border-radius: 8px;
padding: 1rem 1.2rem; margin: 0.8rem 0; overflow-x: auto; position: relative;
cursor: pointer; transition: border-color 0.2s;
}
.code-block:hover { border-color: var(--accent); }
.code-block::after {
content: "点击复制"; position: absolute; top: 0.4rem; right: 0.6rem;
font-size: 0.7rem; color: var(--text-dim); background: var(--card);
padding: 0.15rem 0.5rem; border-radius: 4px; border: 1px solid var(--border);
opacity: 0; transition: opacity 0.2s;
}
.code-block:hover::after { opacity: 1; }
.code-block.copied::after { content: "已复制!"; color: var(--green); opacity: 1; }
.code-block code {
font-family: 'Cascadia Code', 'Fira Code', 'Consolas', monospace;
font-size: 0.9rem;
line-height: 1.6;
color: var(--text);
font-size: 0.9rem; line-height: 1.6; color: var(--text);
white-space: pre-wrap; word-break: break-all;
}
.code-block .comment { color: var(--text-dim); }
.code-block .cmd { color: var(--green); }
.code-block .flag { color: var(--yellow); }
.code-block .url { color: var(--accent); }
.code-block .label {
position: absolute;
top: 0.4rem;
right: 0.6rem;
font-size: 0.7rem;
color: var(--text-dim);
background: var(--card);
padding: 0.1rem 0.5rem;
border-radius: 4px;
border: 1px solid var(--border);
position: absolute; top: 0.4rem; left: 0.6rem;
font-size: 0.65rem; color: var(--text-dim); background: var(--card);
padding: 0.1rem 0.5rem; border-radius: 4px; border: 1px solid var(--border);
text-transform: uppercase; letter-spacing: 0.5px;
}
.code-block.has-label { padding-top: 2rem; }
.cmd { color: var(--green); }
.flag { color: var(--yellow); }
.url { color: var(--accent); }
.comment { color: var(--text-dim); }
/* Cards */
.card {
background: var(--card);
border: 1px solid var(--border);
border-radius: 10px;
padding: 1.2rem 1.5rem;
margin: 0.8rem 0;
}
.card h3 {
font-size: 1rem;
margin-bottom: 0.5rem;
color: var(--accent);
background: var(--card); border: 1px solid var(--border);
border-radius: 10px; padding: 1.2rem 1.5rem; margin: 0.8rem 0;
}
.card h3 { font-size: 1rem; margin-bottom: 0.5rem; color: var(--accent); }
.card p { color: var(--text-dim); font-size: 0.95rem; }
/* Steps */
.step {
display: flex;
gap: 1rem;
margin: 1rem 0;
align-items: flex-start;
}
.step { display: flex; gap: 1rem; margin: 1.2rem 0; align-items: flex-start; }
.step-icon {
width: 36px;
height: 36px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.1rem;
flex-shrink: 0;
margin-top: 0.2rem;
width: 40px; height: 40px; border-radius: 10px;
display: flex; align-items: center; justify-content: center;
font-size: 1.2rem; font-weight: 700; flex-shrink: 0; margin-top: 0.1rem;
}
.step-icon.green { background: rgba(63,185,80,0.15); border: 1px solid rgba(63,185,80,0.3); }
.step-icon.blue { background: rgba(88,166,255,0.15); border: 1px solid rgba(88,166,255,0.3); }
.step-icon.yellow { background: rgba(210,153,34,0.15); border: 1px solid rgba(210,153,34,0.3); }
.step-icon.red { background: rgba(248,81,73,0.15); border: 1px solid rgba(248,81,73,0.3); }
.step-content h4 { font-size: 1rem; margin-bottom: 0.3rem; }
.step-icon.green { background: rgba(63,185,80,0.15); border: 1px solid rgba(63,185,80,0.3); color: var(--green); }
.step-icon.blue { background: rgba(88,166,255,0.15); border: 1px solid rgba(88,166,255,0.3); color: var(--accent); }
.step-icon.yellow { background: rgba(210,153,34,0.15); border: 1px solid rgba(210,153,34,0.3); color: var(--yellow); }
.step-icon.red { background: rgba(248,81,73,0.15); border: 1px solid rgba(248,81,73,0.3); color: var(--red); }
.step-icon.purple { background: rgba(188,140,255,0.15); border: 1px solid rgba(188,140,255,0.3); color: var(--purple); }
.step-content { flex: 1; }
.step-content h4 { font-size: 1.05rem; margin-bottom: 0.3rem; }
.step-content p { color: var(--text-dim); font-size: 0.9rem; }
/* Table */
table {
width: 100%;
border-collapse: collapse;
margin: 0.8rem 0;
font-size: 0.9rem;
}
th, td {
padding: 0.6rem 1rem;
text-align: left;
border-bottom: 1px solid var(--border);
}
th {
color: var(--text-dim);
font-weight: 600;
font-size: 0.8rem;
text-transform: uppercase;
letter-spacing: 0.5px;
}
td code {
background: var(--bg);
padding: 0.15rem 0.4rem;
border-radius: 4px;
font-size: 0.85rem;
border: 1px solid var(--border);
}
table { width: 100%; border-collapse: collapse; margin: 0.8rem 0; font-size: 0.9rem; }
th, td { padding: 0.6rem 1rem; text-align: left; border-bottom: 1px solid var(--border); }
th { color: var(--text-dim); font-weight: 600; font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.5px; }
td code { background: var(--bg); padding: 0.15rem 0.4rem; border-radius: 4px; font-size: 0.85rem; border: 1px solid var(--border); }
/* Alert boxes */
.alert {
border-radius: 8px;
padding: 1rem 1.2rem;
margin: 1rem 0;
font-size: 0.9rem;
display: flex;
gap: 0.8rem;
align-items: flex-start;
}
.alert-icon { font-size: 1.2rem; flex-shrink: 0; }
.alert.warning {
background: rgba(210,153,34,0.08);
border: 1px solid rgba(210,153,34,0.3);
}
.alert.danger {
background: rgba(248,81,73,0.08);
border: 1px solid rgba(248,81,73,0.3);
}
.alert.info {
background: rgba(88,166,255,0.08);
border: 1px solid rgba(88,166,255,0.3);
}
.alert.success {
background: rgba(63,185,80,0.08);
border: 1px solid rgba(63,185,80,0.3);
border-radius: 8px; padding: 1rem 1.2rem; margin: 1rem 0;
font-size: 0.9rem; display: flex; gap: 0.8rem; align-items: flex-start;
}
.alert-icon { font-size: 1.2rem; flex-shrink: 0; line-height: 1.5; }
.alert.warning { background: rgba(210,153,34,0.08); border: 1px solid rgba(210,153,34,0.3); }
.alert.danger { background: rgba(248,81,73,0.08); border: 1px solid rgba(248,81,73,0.3); }
.alert.info { background: rgba(88,166,255,0.08); border: 1px solid rgba(88,166,255,0.3); }
.alert.success { background: rgba(63,185,80,0.08); border: 1px solid rgba(63,185,80,0.3); }
.checklist { list-style: none; padding: 0; }
.checklist li {
padding: 0.5rem 0; padding-left: 2rem; position: relative;
border-bottom: 1px solid rgba(48,54,61,0.5); color: var(--text-dim);
}
.checklist li::before {
content: ""; position: absolute; left: 0; top: 0.65rem;
width: 18px; height: 18px; border: 2px solid var(--border); border-radius: 4px;
}
.checklist li.done::before {
background: var(--green); border-color: var(--green);
content: ""; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cpath d='M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z'/%3E%3C/svg%3E");
background-size: 14px; background-position: center; background-repeat: no-repeat;
}
.checklist li.done { color: var(--text); }
.checklist li strong { color: var(--text); }
/* Flow diagram */
.flow {
display: flex;
align-items: center;
justify-content: center;
gap: 0;
margin: 1.5rem 0;
flex-wrap: wrap;
display: flex; align-items: center; justify-content: center;
gap: 0; margin: 1.5rem 0; flex-wrap: wrap;
}
.flow-node {
background: var(--card);
border: 1px solid var(--border);
border-radius: 8px;
padding: 0.6rem 1rem;
font-size: 0.85rem;
text-align: center;
min-width: 100px;
}
.flow-node.active {
border-color: var(--green);
box-shadow: 0 0 8px rgba(63,185,80,0.2);
}
.flow-arrow {
color: var(--text-dim);
font-size: 1.2rem;
padding: 0 0.3rem;
background: var(--card); border: 1px solid var(--border); border-radius: 8px;
padding: 0.6rem 1rem; font-size: 0.85rem; text-align: center; min-width: 100px;
}
.flow-node.active { border-color: var(--green); box-shadow: 0 0 8px rgba(63,185,80,0.2); }
.flow-arrow { color: var(--text-dim); font-size: 1.2rem; padding: 0 0.3rem; }
.screenshot-note {
background: var(--card); border: 1px solid var(--border); border-radius: 8px;
padding: 0.8rem 1rem; margin: 0.5rem 0; font-size: 0.85rem; color: var(--text-dim);
border-left: 3px solid var(--yellow);
}
.screenshot-note strong { color: var(--yellow); }
/* Footer */
.footer {
text-align: center;
padding: 2rem;
color: var(--text-dim);
font-size: 0.8rem;
border-top: 1px solid var(--border);
text-align: center; padding: 2rem; color: var(--text-dim);
font-size: 0.8rem; border-top: 1px solid var(--border);
}
/* Responsive */
@media (max-width: 600px) {
.header { padding: 2rem 1rem; }
.header pre { font-size: 0.5rem; }
@ -275,12 +182,12 @@
.container { padding: 1.5rem 1rem; }
.flow { flex-direction: column; }
.flow-arrow { transform: rotate(90deg); }
.step { flex-direction: column; gap: 0.5rem; }
}
</style>
</head>
<body>
<!-- Header -->
<div class="header">
<pre>
____ _
@ -289,8 +196,8 @@
| |_) | (_) | (_) | < \ V V / (_) | | | | | | | |
|____/ \___/ \___/|_|\_\ \_/\_/ \___/|_| |_| |_| |_|
</pre>
<h1>Bookworm <span>Portable</span> 使用教程</h1>
<p>纯云端便携部署 — 任意电脑一行命令激活 Bookworm 全套能力</p>
<h1>Bookworm <span>Portable</span> 保姆式安装手册</h1>
<p>从零开始,一步步教你在任意 Windows 电脑上激活 Bookworm</p>
<div class="badge-row">
<span class="badge"><strong>97</strong> Skills</span>
<span class="badge"><strong>18</strong> Agents</span>
@ -302,230 +209,412 @@
<div class="container">
<!-- 工作原理 -->
<!-- 整体流程 -->
<div class="section">
<h2>工作原理</h2>
<p>Bookworm 配置存储在私有 Gitea 服务器上,目标机通过 HTTPS 克隆并自动渲染为本地配置,凭证全程加密,不落盘。</p>
<h2>整体流程概览</h2>
<div class="flow">
<div class="flow-node">Gitea 私有仓<br><small style="color:var(--text-dim)">code.letcareme.com</small></div>
<span class="flow-arrow"></span>
<div class="flow-node">git clone<br><small style="color:var(--text-dim)">HTTPS 加密</small></div>
<span class="flow-arrow"></span>
<div class="flow-node">渲染模板<br><small style="color:var(--text-dim)">settings.json</small></div>
<span class="flow-arrow"></span>
<div class="flow-node">解密凭证<br><small style="color:var(--text-dim)">AES-256</small></div>
<span class="flow-arrow"></span>
<div class="flow-node active">Claude Code<br><small style="color:var(--green)">Bookworm 激活</small></div>
<div class="flow-node">安装依赖<br><small style="color:var(--text-dim)">Node.js + Git</small></div>
<span class="flow-arrow">&#10132;</span>
<div class="flow-node">安装 Claude Code<br><small style="color:var(--text-dim)">npm 全局安装</small></div>
<span class="flow-arrow">&#10132;</span>
<div class="flow-node">克隆引导仓库<br><small style="color:var(--text-dim)">3 个文件</small></div>
<span class="flow-arrow">&#10132;</span>
<div class="flow-node">运行安装脚本<br><small style="color:var(--text-dim)">输入密码</small></div>
<span class="flow-arrow">&#10132;</span>
<div class="flow-node active">开始使用<br><small style="color:var(--green)">Bookworm 激活</small></div>
</div>
<p style="text-align:center;color:var(--text-dim);font-size:0.9rem">全程约 10-15 分钟(含下载时间),之后每次启动只需 30 秒</p>
</div>
<!-- ============================================================ -->
<!-- 第一步:安装依赖 -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num">1</span>安装依赖软件</h2>
<p>需要安装 3 个软件。如果已装过可跳到下一步。</p>
<!-- Node.js -->
<div class="step">
<div class="step-icon blue">A</div>
<div class="step-content">
<h4>安装 Node.js必须</h4>
<p>去官网下载 LTS 版本安装包,双击安装,一路 Next 即可。</p>
</div>
</div>
<!-- 前置要求 -->
<div class="section">
<h2><span class="num">0</span>前置要求</h2>
<p>目标电脑需要预先安装以下软件:</p>
<table>
<tr><th>软件</th><th>必须</th><th>安装方式</th></tr>
<tr><td><strong>Claude Code</strong></td><td></td><td><code>npm i -g @anthropic-ai/claude-code</code></td></tr>
<tr><td><strong>Node.js</strong> ≥ 18</td><td></td><td><a href="https://nodejs.org" style="color:var(--accent)">nodejs.org</a></td></tr>
<tr><td><strong>Git</strong></td><td></td><td><a href="https://git-scm.com" style="color:var(--accent)">git-scm.com</a></td></tr>
<tr><td><strong>PowerShell 7</strong></td><td>推荐</td><td><code>winget install Microsoft.PowerShell</code></td></tr>
<tr><td>Python 3.x</td><td>可选</td><td>缺失则 3 个 MCP 服务降级</td></tr>
</table>
<div class="card">
<h3>方式一:官网下载(推荐)</h3>
<p>打开浏览器访问 <a href="https://nodejs.org/zh-cn" target="_blank">https://nodejs.org</a>,点击绿色的 <strong>"LTS 推荐"</strong> 按钮下载,双击 .msi 文件安装,全部默认 Next。</p>
</div>
<!-- 安装步骤 -->
<div class="card">
<h3>方式二PowerShell 命令安装</h3>
<p>右键开始菜单 → 选择 <strong>"PowerShell (管理员)"</strong><strong>"终端 (管理员)"</strong>,然后执行:</p>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">PowerShell (管理员)</span>
<code><span class="comment"># 下载 Node.js 安装包</span>
Invoke-WebRequest -Uri "https://nodejs.org/dist/v22.15.0/node-v22.15.0-x64.msi" -OutFile "$env:TEMP\node-install.msi"
<span class="comment"># 运行安装(会弹出安装向导,一路 Next</span>
Start-Process msiexec.exe -ArgumentList "/i $env:TEMP\node-install.msi" -Wait</code>
</div>
<div class="alert warning">
<span class="alert-icon">&#9888;</span>
<div>
<strong>安装完成后必须重开 PowerShell</strong><br>
关闭当前 PowerShell 窗口,重新打开一个新的,否则 <code>node</code><code>npm</code> 命令找不到。
</div>
</div>
<p style="margin-top:0.8rem">验证安装成功:</p>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">node</span> -v <span class="comment"># 应显示 v22.x.x</span>
<span class="cmd">npm</span> -v <span class="comment"># 应显示 10.x.x</span></code>
</div>
<div class="screenshot-note">
<strong>如果 npm 报 "执行策略" 错误?</strong> 执行以下命令后重试:<br>
<code>Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned</code><br>
提示确认时输入 <strong>Y</strong> 回车。
</div>
<!-- Git -->
<div class="step" style="margin-top:1.5rem">
<div class="step-icon blue">B</div>
<div class="step-content">
<h4>安装 Git必须</h4>
<p>去官网下载安装,全部默认设置即可。</p>
</div>
</div>
<div class="card">
<p>打开 <a href="https://git-scm.com/download/win" target="_blank">https://git-scm.com/download/win</a>,下载 <strong>"64-bit Git for Windows Setup"</strong>,双击安装,全部 Next。</p>
</div>
<p>验证:</p>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">git</span> --version <span class="comment"># 应显示 git version 2.x.x</span></code>
</div>
<!-- PowerShell 7 -->
<div class="step" style="margin-top:1.5rem">
<div class="step-icon yellow">C</div>
<div class="step-content">
<h4>安装 PowerShell 7推荐</h4>
<p>Windows 自带的 PowerShell 5.1 有中文兼容问题,建议升级到 7。</p>
</div>
</div>
<div class="code-block has-label" onclick="copyCode(this)">
<span class="label">PowerShell (管理员)</span>
<code><span class="cmd">winget</span> install Microsoft.PowerShell</code>
</div>
<p style="color:var(--text-dim);font-size:0.85rem">如果没有 winget<a href="https://github.com/PowerShell/PowerShell/releases" target="_blank">GitHub Releases</a> 下载 .msi 安装包。安装后用 <code>pwsh</code> 命令启动新版 PowerShell。</p>
</div>
<!-- ============================================================ -->
<!-- 第二步:安装 Claude Code -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num">1</span>安装 Bookworm首次</h2>
<h2><span class="num">2</span>安装 Claude Code</h2>
<div class="step">
<div class="step-icon blue">1</div>
<div class="step-icon green">1</div>
<div class="step-content">
<h4>全局安装</h4>
<p>在 PowerShell 中执行(不需要管理员权限):</p>
</div>
</div>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">npm</span> i -g @anthropic-ai/claude-code</code>
</div>
<p style="color:var(--text-dim);font-size:0.85rem">安装过程需要几分钟,等待完成即可。</p>
<div class="step">
<div class="step-icon green">2</div>
<div class="step-content">
<h4>验证安装</h4>
</div>
</div>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">claude</span> --version <span class="comment"># 应显示版本号</span></code>
</div>
<div class="alert info">
<span class="alert-icon">&#128161;</span>
<div>
<strong>不需要登录 Claude 账号!</strong><br>
Bookworm 使用中转站 API安装 Claude Code 后直接进入下一步,不用执行 <code>claude login</code>
</div>
</div>
</div>
<!-- ============================================================ -->
<!-- 第三步:安装 Bookworm -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num">3</span>安装 Bookworm核心步骤</h2>
<div class="step">
<div class="step-icon purple">1</div>
<div class="step-content">
<h4>克隆引导仓库</h4>
<p>打开 PowerShell运行</p>
<p>在 PowerShell 中执行以下命令。系统会提示输入用户名和密码。</p>
</div>
</div>
<div class="code-block">
<span class="label">PowerShell</span>
<code>
<span class="cmd">git clone</span> <span class="url">https://code.letcareme.com/bookworm/bookworm-boot.git</span><br>
<span class="cmd">cd</span> bookworm-boot
</code>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">git clone</span> <span class="url">https://code.letcareme.com/bookworm/bookworm-boot.git</span>
<span class="cmd">cd</span> bookworm-boot</code>
</div>
<div class="screenshot-note">
<strong>弹出用户名密码?</strong> 输入管理员提供给你的 Gitea 账号密码。
</div>
<p style="color:var(--text-dim);font-size:0.9rem;margin:0.5rem 0">系统会提示输入 Gitea 用户名和密码。</p>
<div class="step">
<div class="step-icon blue">2</div>
<div class="step-icon purple">2</div>
<div class="step-content">
<h4>运行安装脚本</h4>
<p>执行安装,自动克隆配置 + 解密凭证 + 渲染模板 + 启动 Claude Code</p>
<p>这条命令会自动完成所有配置:克隆 97 个 Skills、渲染配置文件、解密 API 凭证、启动 Claude Code。</p>
</div>
</div>
<div class="code-block">
<span class="label">PowerShell</span>
<code>
<span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File install.ps1
</code>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File install.ps1</code>
</div>
<div class="step">
<div class="step-icon green">3</div>
<div class="step-icon purple">3</div>
<div class="step-content">
<h4>输入主密码</h4>
<p>脚本会提示输入主密码来解密 API 凭证。输入后自动完成配置并启动 Claude Code。</p>
<p>脚本会提示 <strong>"输入主密码解密凭证"</strong>,输入管理员提供的主密码,按回车。密码输入时不显示字符,这是正常的。</p>
</div>
</div>
<div class="step">
<div class="step-icon green">4</div>
<div class="step-content">
<h4>等待完成</h4>
<p>脚本会显示步骤进度 [1/6] 到 [6/6],全部显示 [OK] 后自动启动 Claude Code。</p>
</div>
</div>
<div class="alert success">
<span class="alert-icon">&#10003;</span>
<div>完成Claude Code 启动后即进入 Bookworm 模式97 个 Skills、18 个 Agents、28 个 Hooks 全部激活。所有 API 请求通过中转站转发。</div>
<div>
<strong>看到 Bookworm 横幅就说明成功了!</strong><br>
Claude Code 启动后会显示 ASCII 艺术字 "Bookworm" 横幅,表示 97 个 Skills 全部激活。<br>
现在可以直接开始使用,所有 API 请求通过中转站转发,不需要自己的 Claude 账号。
</div>
</div>
</div>
<!-- 后续使用 -->
<!-- ============================================================ -->
<!-- 日常使用 -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num">2</span>后续使用(已安装过)</h2>
<p>已安装过的电脑,再次使用时只需:</p>
<div class="code-block">
<span class="label">PowerShell</span>
<code>
<span class="cmd">cd</span> bookworm-boot<br>
<span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File install.ps1 <span class="flag">-StartOnly</span>
</code>
</div>
<p style="color:var(--text-dim);font-size:0.9rem;margin-top:0.5rem"><code>-StartOnly</code> 跳过 git clone直接解密凭证并启动。</p>
<h2><span class="num">4</span>日常使用</h2>
<p style="margin-top:1rem">如需同步最新配置更新:</p>
<div class="code-block">
<span class="label">PowerShell</span>
<code>
<span class="cmd">cd</span> bookworm-boot<br>
<span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File install.ps1
</code>
<div class="card">
<h3>场景一:快速启动(已安装过,不更新配置)</h3>
<p>适合每天打开电脑后快速进入工作状态。</p>
</div>
<p style="color:var(--text-dim);font-size:0.9rem;margin-top:0.5rem">不加 <code>-StartOnly</code> 会自动 <code>git pull</code> 拉取最新 Skills/Hooks 更新。</p>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">cd</span> bookworm-boot
<span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File install.ps1 <span class="flag">-StartOnly</span></code>
</div>
<p style="color:var(--text-dim);font-size:0.85rem"><code>-StartOnly</code> 跳过 git 同步,直接解密凭证并启动,约 10 秒完成。</p>
<div class="card" style="margin-top:1rem">
<h3>场景二:同步最新配置后启动</h3>
<p>管理员更新了 Skills 或 Hooks 后,用这个命令拉取最新版本。</p>
</div>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">cd</span> bookworm-boot
<span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File install.ps1</code>
</div>
<p style="color:var(--text-dim);font-size:0.85rem">不加 <code>-StartOnly</code> 会自动 <code>git pull</code> 拉取更新。</p>
</div>
<!-- ============================================================ -->
<!-- 使用完毕 -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num">3</span>使用完毕 — 清理</h2>
<p>离开电脑前,清理环境变量和凭证痕迹:</p>
<h2><span class="num">5</span>使用完毕 &mdash; 清理</h2>
<div class="card">
<h3>基础清理(保留配置,下次可快速启动)</h3>
<div class="code-block" style="border:none;padding:0.5rem 0">
<code><span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File stop.ps1</code>
</div>
</div>
<div class="card">
<h3>完整恢复(删除 Bookworm恢复电脑原始状态</h3>
<div class="code-block" style="border:none;padding:0.5rem 0">
<code><span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File stop.ps1 <span class="flag">-Restore</span></code>
</div>
</div>
<div class="card">
<h3>深度清理(含 PowerShell 历史 + Git 凭证缓存)</h3>
<div class="code-block" style="border:none;padding:0.5rem 0">
<code><span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File stop.ps1 <span class="flag">-Restore -Deep</span></code>
</div>
</div>
</div>
<!-- 安全须知 -->
<div class="section">
<h2><span class="num">!</span>安全须知</h2>
<div class="alert warning">
<span class="alert-icon">&#9888;</span>
<div>
<strong>主密码无法找回</strong><br>
主密码用于解密 API 凭证,没有重置机制。请牢记或存入密码管理器。
</div>
</div>
<div class="alert info">
<span class="alert-icon">&#128274;</span>
<div>
<strong>凭证不落盘</strong><br>
API Key 仅存在于当前进程的环境变量中。关闭终端或运行 stop.ps1 后自动消失,不会写入磁盘或注册表。
</div>
</div>
<table>
<tr><th>场景</th><th>命令</th><th>说明</th></tr>
<tr>
<td><strong>基础清理</strong></td>
<td><code>pwsh -File stop.ps1</code></td>
<td>清除环境变量,保留配置下次快速启动</td>
</tr>
<tr>
<td><strong>完整恢复</strong></td>
<td><code>pwsh -File stop.ps1 -Restore</code></td>
<td>删除 Bookworm恢复电脑原始状态</td>
</tr>
<tr>
<td><strong>深度清理</strong></td>
<td><code>pwsh -File stop.ps1 -Restore -Deep</code></td>
<td>完整恢复 + 清除历史记录 + 清除 Git 缓存</td>
</tr>
</table>
<div class="alert danger">
<span class="alert-icon">&#9888;</span>
<div>
<strong>在他人电脑上使用后务必清理</strong><br>
运行 <code>stop.ps1 -Restore -Deep</code> 确保不留痕迹。尤其注意公用电脑。
<strong>在他人电脑/公用电脑上务必执行深度清理:</strong><br>
<code>pwsh -ExecutionPolicy Bypass -File stop.ps1 -Restore -Deep</code>
</div>
</div>
</div>
<!-- ============================================================ -->
<!-- 故障排查 -->
<!-- ============================================================ -->
<div class="section">
<h2><span class="num">!</span>常见问题排查</h2>
<div class="card">
<h3>&#10060; 输入 node -v 或 npm -v 提示 "无法识别"</h3>
<p><strong>原因:</strong>安装 Node.js 后没有重开 PowerShell 窗口PATH 没刷新。</p>
<p><strong>解决:</strong>关闭当前 PowerShell重新打开一个新的窗口再试。</p>
<p>如果还不行,手动刷新 PATH</p>
</div>
<div class="code-block" onclick="copyCode(this)">
<code>$env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User")
<span class="cmd">node</span> -v</code>
</div>
<div class="card">
<h3>&#10060; npm 报 "执行策略" / "Execution Policy" 错误</h3>
<p><strong>原因:</strong>Windows 默认禁止运行脚本。</p>
<p><strong>解决:</strong></p>
</div>
<div class="code-block" onclick="copyCode(this)">
<code>Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy RemoteSigned</code>
</div>
<p style="color:var(--text-dim);font-size:0.85rem">提示确认时输入 <strong>Y</strong> 回车。之后 npm 和 pwsh 脚本都能正常运行。</p>
<div class="card">
<h3>&#10060; 提示 "openssl 未找到"</h3>
<p><strong>原因:</strong>解密凭证需要 openssl它随 Git for Windows 一起安装。</p>
<p><strong>解决:</strong>确认 Git 已安装。脚本会自动搜索 <code>C:\Program Files\Git</code><code>D:\Git</code> 下的 openssl。</p>
</div>
<div class="card">
<h3>&#10060; git clone 失败 / 认证失败</h3>
<p><strong>解决步骤:</strong></p>
<ol style="color:var(--text-dim);padding-left:1.5rem;margin-top:0.3rem">
<li>浏览器打开 <code>https://code.letcareme.com</code> 确认网站可访问</li>
<li>确认用户名密码正确(区分大小写)</li>
<li>如果开了 2FA需要用 Access Token 替代密码</li>
<li>检查网络是否需要代理</li>
</ol>
</div>
<div class="card">
<h3>&#10060; 解密凭证失败 / 主密码错误</h3>
<p><strong>原因:</strong>主密码区分大小写,且无法找回。</p>
<p><strong>解决:</strong>仔细检查密码是否正确。如确认忘记,联系管理员重新生成 <code>secrets.enc</code></p>
</div>
<div class="card">
<h3>&#10060; Claude Code 启动后没有 Bookworm 横幅</h3>
<p><strong>原因:</strong>配置文件未正确同步。</p>
<p><strong>解决:</strong>不加 <code>-StartOnly</code> 重新运行安装脚本,让它重新 clone</p>
</div>
<div class="code-block" onclick="copyCode(this)">
<code><span class="cmd">pwsh</span> <span class="flag">-ExecutionPolicy Bypass</span> -File install.ps1</code>
</div>
<div class="card">
<h3>&#10060; 安装包下载太慢</h3>
<p><strong>解决:</strong>Node.js 官网在国内可能较慢,可以用淘宝镜像:</p>
</div>
<div class="code-block" onclick="copyCode(this)">
<code><span class="comment"># 设置 npm 淘宝镜像(加速下载)</span>
<span class="cmd">npm</span> config set registry https://registry.npmmirror.com
<span class="comment"># 然后重新安装 Claude Code</span>
<span class="cmd">npm</span> i -g @anthropic-ai/claude-code</code>
</div>
<div class="card">
<h3>&#10060; 需要自己的 Claude 账号吗?</h3>
<p><strong>不需要。</strong>所有 API 请求通过中转站转发,消耗中转站额度。目标机不需要任何 Anthropic 账号或订阅。</p>
</div>
</div>
<!-- ============================================================ -->
<!-- 安装检查清单 -->
<!-- ============================================================ -->
<div class="section">
<h2>安装检查清单</h2>
<p style="color:var(--text-dim);margin-bottom:0.5rem">逐项确认,全部打勾即可开始使用:</p>
<ul class="checklist">
<li><strong>Node.js 已安装</strong> &mdash; <code>node -v</code> 显示版本号</li>
<li><strong>Git 已安装</strong> &mdash; <code>git --version</code> 显示版本号</li>
<li><strong>npm 可用</strong> &mdash; <code>npm -v</code> 显示版本号(如报错先设 ExecutionPolicy</li>
<li><strong>Claude Code 已安装</strong> &mdash; <code>claude --version</code> 显示版本号</li>
<li><strong>PowerShell 7 已安装</strong> &mdash; <code>pwsh --version</code> 显示 7.x推荐但非必须</li>
<li><strong>已获取 Gitea 账号密码</strong> &mdash; 管理员提供</li>
<li><strong>已获取主密码</strong> &mdash; 管理员提供(用于解密 API 凭证)</li>
<li><strong>能访问 code.letcareme.com</strong> &mdash; 浏览器打开确认</li>
</ul>
</div>
<!-- ============================================================ -->
<!-- 快速参考卡片 -->
<!-- ============================================================ -->
<div class="section">
<h2>快速参考</h2>
<table>
<tr><th>安全特性</th><th>规格</th></tr>
<tr><th>操作</th><th>命令</th></tr>
<tr><td>首次安装</td><td><code>git clone https://code.letcareme.com/bookworm/bookworm-boot.git && cd bookworm-boot && pwsh -ExecutionPolicy Bypass -File install.ps1</code></td></tr>
<tr><td>快速启动</td><td><code>cd bookworm-boot && pwsh -ExecutionPolicy Bypass -File install.ps1 -StartOnly</code></td></tr>
<tr><td>同步更新</td><td><code>cd bookworm-boot && pwsh -ExecutionPolicy Bypass -File install.ps1</code></td></tr>
<tr><td>基础清理</td><td><code>pwsh -ExecutionPolicy Bypass -File stop.ps1</code></td></tr>
<tr><td>完整恢复</td><td><code>pwsh -ExecutionPolicy Bypass -File stop.ps1 -Restore</code></td></tr>
<tr><td>深度清理</td><td><code>pwsh -ExecutionPolicy Bypass -File stop.ps1 -Restore -Deep</code></td></tr>
</table>
</div>
<!-- ============================================================ -->
<!-- 安全须知 -->
<!-- ============================================================ -->
<div class="section">
<h2>安全须知</h2>
<table>
<tr><th>特性</th><th>规格</th></tr>
<tr><td>凭证加密</td><td>AES-256-CBC + PBKDF2 (600,000 迭代)</td></tr>
<tr><td>传输加密</td><td>HTTPS (TLS 1.2+, Let's Encrypt 证书)</td></tr>
<tr><td>凭证存储</td><td>进程级环境变量,不写磁盘</td></tr>
<tr><td>登录保护</td><td>fail2ban (5次失败/小时 → 封禁24h)</td></tr>
<tr><td>完整性校验</td><td>SHA-256 文件哈希验证</td></tr>
<tr><td>凭证存储</td><td>仅进程级环境变量,不写磁盘,不写注册表</td></tr>
<tr><td>登录保护</td><td>fail2ban (5 次失败/小时 &#8594; 封禁 24 小时)</td></tr>
</table>
</div>
<!-- 常见问题 -->
<div class="section">
<h2><span class="num">?</span>常见问题</h2>
<div class="card">
<h3>Q: 提示 "openssl 未找到"</h3>
<p>确认 Git for Windows 已安装。脚本会自动搜索 <code>C:\Program Files\Git</code><code>D:\Git</code> 下的 openssl。</p>
</div>
<div class="card">
<h3>Q: 提示 "执行策略" 错误</h3>
<p>使用 <code>pwsh -ExecutionPolicy Bypass -File install.ps1</code> 运行,或以管理员身份执行 <code>Set-ExecutionPolicy RemoteSigned</code></p>
</div>
<div class="card">
<h3>Q: 克隆失败 / Gitea 不可达</h3>
<p>检查网络是否能访问 <code>https://code.letcareme.com</code>。如在内网环境,可能需要配置代理。</p>
</div>
<div class="card">
<h3>Q: 解密失败</h3>
<p>确认主密码正确(区分大小写)。如忘记密码,需要管理员重新运行 <code>encrypt-secrets.ps1</code> 生成新的 secrets.enc。</p>
</div>
<div class="card">
<h3>Q: Claude Code 启动后没有 Bookworm 横幅</h3>
<p>检查 <code>~/.claude/CLAUDE.md</code> 是否存在。运行 <code>install.ps1</code>(不加 -StartOnly重新同步。</p>
</div>
<div class="card">
<h3>Q: 目标机需要自己的 Claude 订阅吗?</h3>
<p><strong>不需要。</strong>所有 API 请求通过中转站转发,消耗中转站额度,目标机无需任何 Anthropic 账号。</p>
<div class="alert warning" style="margin-top:1rem">
<span class="alert-icon">&#128274;</span>
<div>
<strong>主密码无法找回</strong> &mdash; 请妥善保管。忘记后需管理员重新生成加密凭证。
</div>
</div>
<!-- 快速参考 -->
<div class="section">
<h2>快速参考卡片</h2>
<table>
<tr><th>场景</th><th>命令</th></tr>
<tr><td>首次安装</td><td><code>git clone ... && pwsh -File install.ps1</code></td></tr>
<tr><td>快速启动</td><td><code>pwsh -File install.ps1 -StartOnly</code></td></tr>
<tr><td>同步更新</td><td><code>pwsh -File install.ps1</code></td></tr>
<tr><td>基础清理</td><td><code>pwsh -File stop.ps1</code></td></tr>
<tr><td>完整恢复</td><td><code>pwsh -File stop.ps1 -Restore</code></td></tr>
<tr><td>深度清理</td><td><code>pwsh -File stop.ps1 -Restore -Deep</code></td></tr>
</table>
</div>
</div>
<div class="footer">
Bookworm Portable v1.1 &mdash; Powered by Gitea + Claude Code<br>
Bookworm Portable v1.1 &mdash; 保姆式安装手册<br>
&copy; 2026 Bookworm Smart Assistant
</div>
<script>
function copyCode(el) {
const code = el.querySelector('code').innerText;
navigator.clipboard.writeText(code).then(() => {
el.classList.add('copied');
setTimeout(() => el.classList.remove('copied'), 1500);
});
}
</script>
</body>
</html>