claude-code-runner 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +559 -0
  2. package/README.zh-Hans.md +559 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +377 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/config.d.ts +4 -0
  8. package/dist/config.d.ts.map +1 -0
  9. package/dist/config.js +50 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/container.d.ts +23 -0
  12. package/dist/container.d.ts.map +1 -0
  13. package/dist/container.js +971 -0
  14. package/dist/container.js.map +1 -0
  15. package/dist/credentials.d.ts +8 -0
  16. package/dist/credentials.d.ts.map +1 -0
  17. package/dist/credentials.js +145 -0
  18. package/dist/credentials.js.map +1 -0
  19. package/dist/docker-config.d.ts +19 -0
  20. package/dist/docker-config.d.ts.map +1 -0
  21. package/dist/docker-config.js +101 -0
  22. package/dist/docker-config.js.map +1 -0
  23. package/dist/git/shadow-repository.d.ts +30 -0
  24. package/dist/git/shadow-repository.d.ts.map +1 -0
  25. package/dist/git/shadow-repository.js +645 -0
  26. package/dist/git/shadow-repository.js.map +1 -0
  27. package/dist/git-monitor.d.ts +15 -0
  28. package/dist/git-monitor.d.ts.map +1 -0
  29. package/dist/git-monitor.js +94 -0
  30. package/dist/git-monitor.js.map +1 -0
  31. package/dist/index.d.ts +22 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +221 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/types.d.ts +49 -0
  36. package/dist/types.d.ts.map +1 -0
  37. package/dist/types.js +3 -0
  38. package/dist/types.js.map +1 -0
  39. package/dist/ui.d.ts +12 -0
  40. package/dist/ui.d.ts.map +1 -0
  41. package/dist/ui.js +82 -0
  42. package/dist/ui.js.map +1 -0
  43. package/dist/web-server-attach.d.ts +16 -0
  44. package/dist/web-server-attach.d.ts.map +1 -0
  45. package/dist/web-server-attach.js +249 -0
  46. package/dist/web-server-attach.js.map +1 -0
  47. package/dist/web-server.d.ts +27 -0
  48. package/dist/web-server.d.ts.map +1 -0
  49. package/dist/web-server.js +812 -0
  50. package/dist/web-server.js.map +1 -0
  51. package/package.json +77 -0
@@ -0,0 +1,559 @@
1
+ [English](./README.md) | [简体中文](#)
2
+
3
+ # Claude Code Runner
4
+
5
+ > [!WARNING]
6
+ >
7
+ > - 这项工作处于 alpha 阶段,可能存在安全问题,使用风险自负。
8
+ > - 如有疑问,请发送邮件至 [admin@soraharu.com](mailto:admin@soraharu.com)。
9
+
10
+ 在 Docker 容器内将 Claude Code 作为自主代理运行,并自动集成 GitHub。安全地绕过所有权限提示。
11
+
12
+ ## 为什么选择 Claude Code Runner?
13
+
14
+ Claude Code Runner 的主要目标是通过允许 Claude Code 在没有权限提示的情况下执行,从而实现 **完全异步的智能体工作流**。通过在隔离的 Docker 容器中使用 `--dangerously-skip-permissions` 标志运行 Claude,Claude 可以:
15
+
16
+ - 无需请求权限即可立即执行任何命令
17
+ - 自主进行代码更改
18
+ - 运行构建工具、测试和开发服务器
19
+ - 创建提交并管理 git 操作
20
+ - 在不打断用户的情况下持续工作
21
+
22
+ 通过 **基于浏览器的终端** 访问 Claude,让你可以在处理其他任务的同时监控 AI 助手并与之交互。这创建了一个真正自主的开发助手,类似于 [OpenAI Codex](https://chatgpt.com/codex) 或 [Google Jules](https://jules.dev),但在你的本地机器上运行,并且完全可控。
23
+
24
+ ## 概述
25
+
26
+ Claude Code Runner 允许你在隔离的 Docker 容器中运行 Claude Code,为 AI 辅助开发提供安全的环境。它会自动:
27
+
28
+ - 为每个会话创建新的 git 分支
29
+ - 监控 Claude 所做的提交
30
+ - 提供交互式的更改审查
31
+ - 安全地转发凭证
32
+ - 启用推送/PR 创建工作流
33
+ - 运行自定义设置命令以初始化环境
34
+
35
+ ## 安装
36
+
37
+ 从 npm 全局安装 Claude Code Runner:
38
+
39
+ ```bash
40
+ npm install -g @yanranxiaoxi/claude-code-runner
41
+ ```
42
+
43
+ ### 前置要求
44
+
45
+ - Node.js >= 22.13.0
46
+ - Docker 或 Podman
47
+ - Git
48
+
49
+ ## 使用方法
50
+
51
+ ### 快速开始
52
+
53
+ > **提示**:为了最快的启动速度,使用预构建的官方镜像:在配置中设置 `buildImage: false` 和 `dockerImage: registry.gitlab.soraharu.com/xiaoxi/claude-code-runner:latest`。
54
+
55
+ 只需在任何 Git 仓库文件夹中运行:
56
+
57
+ ```bash
58
+ claude-run
59
+ ```
60
+
61
+ 这将:
62
+
63
+ 1. 创建一个新分支 (`claude/[timestamp]`)
64
+ 2. 启动一个包含 Claude Code 的 Docker 容器
65
+ 3. 在 `http://localhost:3456` 上启动 Web UI
66
+ 4. 自动打开浏览器
67
+
68
+ ### 命令
69
+
70
+ #### `claude-run` (默认)
71
+
72
+ 使用 Web UI 启动新容器(推荐):
73
+
74
+ ```bash
75
+ claude-run
76
+ ```
77
+
78
+ #### `claude-run start`
79
+
80
+ 显式启动带选项的新容器:
81
+
82
+ ```bash
83
+ claude-run start [选项]
84
+
85
+ 选项:
86
+ -c, --config <path> 配置文件 (默认: ./claude-run.config.json)
87
+ -n, --name <name> 容器名称前缀
88
+ --no-web 禁用 Web UI (使用终端附加)
89
+ --no-push 禁用自动分支推送
90
+ --no-pr 禁用自动 PR 创建
91
+ ```
92
+
93
+ #### `claude-run attach [container-id]`
94
+
95
+ 附加到现有容器:
96
+
97
+ ```bash
98
+ # 交互式选择
99
+ claude-run attach
100
+
101
+ # 指定容器
102
+ claude-run attach abc123def456
103
+
104
+ 选项:
105
+ --no-web 使用终端附加而不是 Web UI
106
+ ```
107
+
108
+ #### `claude-run list`
109
+
110
+ 列出所有 Claude Runner 容器:
111
+
112
+ ```bash
113
+ claude-run list
114
+ claude-run ls # 别名
115
+
116
+ 选项:
117
+ -a, --all 显示所有容器 (包括已停止的)
118
+ ```
119
+
120
+ #### `claude-run stop [container-id]`
121
+
122
+ 停止容器:
123
+
124
+ ```bash
125
+ # 交互式选择
126
+ claude-run stop
127
+
128
+ # 指定容器
129
+ claude-run stop abc123def456
130
+
131
+ # 停止全部
132
+ claude-run stop --all
133
+ ```
134
+
135
+ #### `claude-run logs [container-id]`
136
+
137
+ 查看容器日志:
138
+
139
+ ```bash
140
+ claude-run logs
141
+ claude-run logs abc123def456
142
+
143
+ 选项:
144
+ -f, --follow 跟踪日志输出
145
+ -n, --tail <lines> 显示的行数 (默认: 50)
146
+ ```
147
+
148
+ #### `claude-run clean`
149
+
150
+ 删除已停止的容器:
151
+
152
+ ```bash
153
+ claude-run clean
154
+ claude-run clean --force # 删除所有容器
155
+ ```
156
+
157
+ #### `claude-run config`
158
+
159
+ 显示当前配置:
160
+
161
+ ```bash
162
+ claude-run config
163
+ ```
164
+
165
+ ### 配置
166
+
167
+ 创建一个 `claude-run.config.json` 文件(参考 `claude-run.config.example.json`):
168
+
169
+ ```json
170
+ {
171
+ "dockerImage": "claude-code-runner:latest",
172
+ "dockerfile": "./custom.Dockerfile",
173
+ "detached": false,
174
+ "autoPush": true,
175
+ "autoCreatePR": true,
176
+ "autoStartClaude": true,
177
+ "envFile": ".env",
178
+ "environment": {
179
+ "NODE_ENV": "development"
180
+ },
181
+ "setupCommands": ["npm install", "npm run build"],
182
+ "volumes": ["/host/path:/container/path:ro"],
183
+ "mounts": [
184
+ {
185
+ "source": "./data",
186
+ "target": "/workspace/data",
187
+ "readonly": false
188
+ },
189
+ {
190
+ "source": "/home/user/configs",
191
+ "target": "/configs",
192
+ "readonly": true
193
+ }
194
+ ],
195
+ "allowedTools": ["*"],
196
+ "maxThinkingTokens": 100000,
197
+ "bashTimeout": 600000,
198
+ "containerPrefix": "my-project",
199
+ "claudeConfigPath": "~/.claude.json"
200
+ }
201
+ ```
202
+
203
+ #### 配置选项
204
+
205
+ - `dockerImage`: 要使用的基础 Docker 镜像 (默认: `claude-code-runner:latest`)
206
+ - `buildImage`: 在本地构建镜像(默认:true)或从仓库拉取(设置为 false)
207
+ - `dockerfile`: 自定义 Dockerfile 的路径 (可选)
208
+ - `detached`: 在分离模式下运行容器
209
+ - `autoPush`: 提交后自动推送分支
210
+ - `autoCreatePR`: 自动创建拉取请求
211
+ - `autoStartClaude`: 自动启动 Claude Code (默认: true)
212
+ - `envFile`: 从文件加载环境变量 (例如 `.env`)
213
+ - `environment`: 额外的环境变量
214
+ - `setupCommands`: 容器启动后要运行的命令 (例如安装依赖)
215
+ - `volumes`: 旧版卷挂载 (字符串格式)
216
+ - `mounts`: 现代挂载配置 (对象格式)
217
+ - `allowedTools`: Claude 工具权限 (默认: 全部)
218
+ - `maxThinkingTokens`: Claude 的最大思考令牌数
219
+ - `bashTimeout`: bash 命令超时时间(毫秒)
220
+ - `containerPrefix`: 容器名称的自定义前缀
221
+ - `claudeConfigPath`: Claude 配置文件的路径
222
+ - `dockerSocketPath`: 自定义 Docker/Podman 套接字路径(默认自动检测)
223
+
224
+ #### 挂载配置
225
+
226
+ `mounts` 数组允许你将文件或目录挂载到容器中:
227
+
228
+ - `source`: 宿主机上的路径(相对路径从当前目录解析)
229
+ - `target`: 容器中的路径(相对路径从 /workspace 解析)
230
+ - `readonly`: 可选布尔值,使挂载为只读(默认: false)
231
+
232
+ 示例用例:
233
+
234
+ - 挂载不应包含在 Git 中的数据目录
235
+ - 在宿主机和容器之间共享配置文件
236
+ - 挂载构建产物或依赖项
237
+ - 访问宿主系统资源(谨慎使用)
238
+
239
+ #### 使用预构建的容器镜像
240
+
241
+ 默认情况下,Claude Code Runner 在本地构建 Docker 镜像。如果你更喜欢从仓库拉取预构建镜像:
242
+
243
+ **方案 1:使用官方预构建镜像(推荐)**
244
+
245
+ 最简单的方式是使用官方维护的镜像,只需设置 `buildImage: false`:
246
+
247
+ ```json
248
+ {
249
+ "buildImage": false
250
+ }
251
+ ```
252
+
253
+ 官方镜像 `registry.gitlab.soraharu.com/xiaoxi/claude-code-runner:latest` 会自动使用。
254
+
255
+ 然后运行:
256
+
257
+ ```bash
258
+ claude-run
259
+ ```
260
+
261
+ 官方镜像具有以下优势:
262
+ - ✅ 定期维护和更新
263
+ - ✅ 已预配置并测试
264
+ - ✅ 开箱即用
265
+ - ✅ 启动速度更快
266
+ - ✅ 无需指定完整的镜像 URL
267
+
268
+ **方案 2:使用自定义镜像**
269
+
270
+ 如果你在仓库中维护自己的镜像:
271
+
272
+ ```json
273
+ {
274
+ "dockerImage": "myregistry.com/claude-code-runner:latest",
275
+ "buildImage": false
276
+ }
277
+ ```
278
+
279
+ **方案 3:本地构建(默认)**
280
+
281
+ 从仓库中的 Dockerfile 构建镜像:
282
+
283
+ ```json
284
+ {
285
+ "dockerImage": "claude-code-runner:latest",
286
+ "buildImage": true
287
+ }
288
+ ```
289
+
290
+ 这对以下场景很有用:
291
+
292
+ - **开发**:在本地定制镜像
293
+ - **团队工作流**:构建一致的环境
294
+ - **CI/CD 流水线**:生成自定义版本
295
+
296
+ ## 功能特性
297
+
298
+ ### Podman 支持
299
+
300
+ Claude Code Runner 还支持 Podman 作为 Docker 的替代方案。该工具通过检查可用的套接字路径自动检测你是使用 Docker 还是 Podman:
301
+
302
+ - **自动检测**: 工具在标准位置检查 Docker 和 Podman 套接字
303
+ - **自定义套接字路径**: 使用 `dockerSocketPath` 配置选项指定自定义套接字
304
+ - **环境变量**: 设置 `DOCKER_HOST` 来覆盖套接字检测
305
+
306
+ > **重要提示**:如果你使用 Podman 的 rootless(无根)模式,需要启用 Podman socket 服务:
307
+ >
308
+ > ```bash
309
+ > systemctl --user enable --now podman.socket
310
+ > ```
311
+ >
312
+ > 验证 socket 服务是否正在运行:
313
+ >
314
+ > ```bash
315
+ > systemctl --user status podman.socket
316
+ > ```
317
+
318
+ Podman 的示例配置:
319
+
320
+ ```json
321
+ {
322
+ "dockerSocketPath": "/run/user/1000/podman/podman.sock"
323
+ }
324
+ ```
325
+
326
+ 工具将在以下情况下自动检测并使用 Podman:
327
+
328
+ - Docker 套接字不可用
329
+ - 在标准位置找到 Podman 套接字(`/run/podman/podman.sock` 或 `$XDG_RUNTIME_DIR/podman/podman.sock`)
330
+
331
+ ### Web UI 终端
332
+
333
+ 启动基于浏览器的终端界面以与 Claude Code 交互:
334
+
335
+ ```bash
336
+ claude-run --web
337
+ ```
338
+
339
+ 这将:
340
+
341
+ - 以分离模式启动容器
342
+ - 在 `http://localhost:3456` 上启动 Web 服务器
343
+ - 自动打开浏览器
344
+ - 提供完整的终端界面,具有:
345
+ - 实时终端流
346
+ - 复制/粘贴支持
347
+ - 终端调整大小
348
+ - 重新连接功能
349
+
350
+ 非常适合在处理其他任务时监控 Claude 的工作。
351
+
352
+ ### 自动凭证发现
353
+
354
+ Claude Code Runner 会自动发现并转发:
355
+
356
+ **Claude 凭证:**
357
+
358
+ - Anthropic API 密钥 (`ANTHROPIC_API_KEY`)
359
+ - macOS 钥匙串凭证(Claude Code)
360
+ - AWS Bedrock 凭证
361
+ - Google Vertex 凭证
362
+ - Claude 配置文件(`.claude.json`、`.claude/`)
363
+
364
+ **GitHub 凭证:**
365
+
366
+ - GitHub CLI 身份验证(`gh auth`)
367
+ - GitHub 令牌(`GITHUB_TOKEN`、`GH_TOKEN`)
368
+ - Git 配置(`.gitconfig`)
369
+
370
+ ### 沙箱执行
371
+
372
+ - Claude 使用 `--dangerously-skip-permissions` 标志运行(在容器中安全)
373
+ - 为每个会话创建隔离的分支
374
+ - 在容器内完全访问运行任何命令
375
+ - 文件被复制到容器中(而不是挂载),实现真正的隔离
376
+ - 保留 Git 历史以进行适当的版本控制
377
+
378
+ ### 提交监控
379
+
380
+ 当 Claude 进行提交时:
381
+
382
+ 1. 出现实时通知
383
+ 2. 显示带语法高亮的完整差异
384
+ 3. 交互式菜单提供选项:
385
+ - 继续工作
386
+ - 将分支推送到远程
387
+ - 推送分支并创建 PR
388
+ - 退出
389
+
390
+ ### 使用多个容器
391
+
392
+ 同时运行多个 Claude 实例:
393
+
394
+ ```bash
395
+ # 终端 1: 启动主开发
396
+ claude-run start --name main-dev
397
+
398
+ # 终端 2: 启动功能分支工作
399
+ claude-run start --name feature-auth
400
+
401
+ # 终端 3: 列出所有运行中的容器
402
+ claude-run list
403
+
404
+ # 终端 4: 附加到任何容器
405
+ claude-run attach
406
+ ```
407
+
408
+ ## Docker 环境
409
+
410
+ ### 默认镜像
411
+
412
+ 默认 Docker 镜像包含:
413
+
414
+ - Ubuntu 22.04
415
+ - Git、GitHub CLI
416
+ - Node.js、npm
417
+ - Python 3
418
+ - Claude Code(最新版)
419
+ - 构建必需工具
420
+
421
+ ### 自定义 Dockerfile
422
+
423
+ 创建自定义环境:
424
+
425
+ ```dockerfile
426
+ FROM claude-code-runner:latest
427
+
428
+ # 添加你的工具
429
+ RUN apt-get update && apt-get install -y \
430
+ rust \
431
+ cargo \
432
+ postgresql-client
433
+
434
+ # 安装项目依赖
435
+ COPY package.json /tmp/
436
+ RUN cd /tmp && npm install
437
+
438
+ # 自定义配置
439
+ ENV CUSTOM_VAR=value
440
+ ```
441
+
442
+ 在配置中引用:
443
+
444
+ ```json
445
+ {
446
+ "dockerfile": "./my-custom.Dockerfile"
447
+ }
448
+ ```
449
+
450
+ ## 工作流示例
451
+
452
+ 1. **启动 Claude Runner:**
453
+
454
+ ```bash
455
+ cd my-project
456
+ claude-run
457
+ ```
458
+
459
+ 2. **与 Claude 交互:**
460
+
461
+ ```
462
+ > 帮我重构认证模块以使用 JWT 令牌
463
+ ```
464
+
465
+ 3. **Claude 自主工作:**
466
+
467
+ - 探索代码库
468
+ - 进行更改
469
+ - 运行测试
470
+ - 提交更改
471
+
472
+ 4. **审查并推送:**
473
+ - 查看提交通知
474
+ - 审查带语法高亮的差异
475
+ - 选择推送并创建 PR
476
+
477
+ ## 安全考虑
478
+
479
+ - 凭证以只读方式挂载
480
+ - 容器与宿主机隔离
481
+ - 分支限制可防止意外修改主分支
482
+ - 所有更改在推送前需要明确的用户批准
483
+
484
+ ## 故障排除
485
+
486
+ ### Docker 权限问题
487
+
488
+ 将你的用户添加到 docker 组:
489
+
490
+ ```bash
491
+ sudo usermod -aG docker $USER
492
+ # 注销并重新登录以使更改生效
493
+ ```
494
+
495
+ ### 容器清理
496
+
497
+ 删除所有 Claude Runner 容器和镜像:
498
+
499
+ ```bash
500
+ npm run purge-containers
501
+ ```
502
+
503
+ ### 凭证发现失败
504
+
505
+ 显式设置凭证:
506
+
507
+ ```bash
508
+ export ANTHROPIC_API_KEY=your-key
509
+ export GITHUB_TOKEN=your-token
510
+ ```
511
+
512
+ 或使用 `.env` 文件配合 `envFile` 配置选项。
513
+
514
+ ### 构建错误
515
+
516
+ 确保使用 Node.js >= 22.13.0:
517
+
518
+ ```bash
519
+ node --version
520
+ ```
521
+
522
+ ## 开发
523
+
524
+ ### 从源代码构建
525
+
526
+ 从源代码构建和开发 Claude Code Runner:
527
+
528
+ ```bash
529
+ git clone https://gitlab.soraharu.com/XiaoXi/claude-code-runner.git
530
+ cd claude-code-runner
531
+ npm install
532
+ npm run build
533
+ npm link # 创建全局 'claude-run' 命令
534
+ ```
535
+
536
+ ### 可用脚本
537
+
538
+ - `npm run build` - 将 TypeScript 构建为 JavaScript
539
+ - `npm run dev` - 开发的监视模式
540
+ - `npm start` - 构建并运行 CLI
541
+ - `npm run lint` - 运行 ESLint
542
+ - `npm run fix` - 运行 ESLint 并修复格式错误
543
+ - `npm run purge-containers` - 清理所有容器
544
+
545
+ ## 贡献
546
+
547
+ 1. Fork 仓库
548
+ 2. 创建功能分支
549
+ 3. 进行更改
550
+ 4. 运行代码检查:`npm run lint`
551
+ 5. 提交拉取请求
552
+
553
+ ## 感谢
554
+
555
+ [claude-code-sandbox](https://github.com/textcortex/claude-code-sandbox)
556
+
557
+ ## 许可证
558
+
559
+ MIT
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}