会话与环境:
在哪聊,在哪干活
一次对话就是一个"会话":自动存盘,可以回来接着聊,也可以复制一份去试别的思路。Claude 干活的地方也不止你的终端:可以在隔离的副本里、在沙箱里、在云端;你也可以在桌面端、网页甚至手机上看着它干。
你在用
Claude 在哪干活
启动时的 claude -c、claude -r 在第 4 课讲过,这一课讲对话里怎么管会话,以及 Claude 能在哪些地方干活。
会话:自动存盘的对话
你和 Claude 的每段对话都边聊边存到你的电脑上。关掉终端、甚至 /clear 之后,都能找回来。
- 存在哪:
~/.claude/projects/<项目目录>/<会话 ID>.jsonl,每个项目一个文件夹。默认保存 30 天,可以用cleanupPeriodDays设置改。 - 起个名字:启动时
claude -n auth-refactor,或者对话里/rename auth-refactor,名字会显示在输入框上方。以后用claude --resume auth-refactor或/resume auth-refactor直接回来。 - 不起名也行:Claude Code 会根据你的第一句话自动生成一个标题,在
/resume的列表里能看到。同时做几件事时,还是起个名字好找。
回来接着聊时,哪些会带回来
| 会带回来 | 不会带回来 |
|---|---|
| 完整的对话记录,包括工具调用和结果 | 后台在跑的命令(第 9A 课) |
| 当时用的模型、子代理身份 | 启动时加的 --mcp-config、--add-dir、--settings 等参数,要重新加 |
还没过期的固定间隔 /loop 任务(自适应的 /loop 要重新运行) | 对话中途用 /add-dir 加的目录 |
权限模式(从终端用 -c 或按名字恢复时;bypassPermissions 和 plan 除外) | 在 /resume 列表里选的会话:沿用你现在的权限模式 |
对话里几个顺手的小工具
| 输入 | 作用 |
|---|---|
! 开头,如 ! git status | 自己直接跑一条命令,不经过 Claude 也不用批准。输出进入对话,Claude 会接着解释 |
/recap | 一句话总结这个会话做了什么。离开 3 分钟以上再回来,会自动显示一条 |
/export | 把整个对话导出成纯文本,拷贝或存成文件 |
/resume | 打开会话列表,换到别的对话(和第 4 课的 claude -r 是同一个列表) |
/color blue | 给这个会话的输入框换个颜色,开了好几个终端时一眼分清 |
分叉、复制、重开:五个命令
做到一半想换个思路?想让另一份拷贝去试?还是干脆开始新任务?这五个命令对"原来那段对话"的处理各不相同。
auth-refactor 已经进行了 4 轮:① 读代码 ② 定方案 ③ 改登录 ④ 跑测试| 命令 | 之后你在哪 | 原来的对话 |
|---|---|---|
/branch [名字] | 在新的副本里 | 原样保留,/resume 能回去 |
/fork [任务] | 留在原处 | 继续用;副本在后台自己跑,结果不回来 |
/subtask 任务 | 留在原处 | 继续用;子代理做完把结果交回来(第 8 课) |
/clear [名字] | 在一段全新的对话里 | 存盘,/resume 能回去 |
/compact [重点] | 还是这段对话 | 前面的内容换成一份摘要,腾出上下文 |
命令行里也能分叉:claude --continue --fork-session。两个终端同时 --resume 同一个会话而不分叉,两边的消息会混在一份记录里。
练一练:这时候用哪个命令?
每个场景选一个最合适的。
worktree:给每个会话一张自己的桌子
同一个项目开两个终端,让两个 Claude 同时改代码,它们会改到同一批文件、互相打架。git worktree 给每个会话一份独立的工作目录和分支,共用同一个仓库历史。
my-app/
main.claude/worktrees/feature-auth/
worktree-feature-authclaude -w feature-auth.claude/worktrees/bugfix-123/
worktree-bugfix-123claude -w bugfix-123.git:提交历史、远程仓库、分支列表都是同一套,只是各自检出的分支不同- 怎么开:
claude --worktree feature-auth(简写-w)。不给名字会自动起一个,比如bright-running-fox。对话中也可以直接说"在 worktree 里做"。 - 从哪开始:默认从远程默认分支(通常是
main)的最新版开新分支,不带你本地没推送的提交。想带上,设置里写"worktree": { "baseRef": "head" }。 - .env 没了?worktree 是全新检出,被 git 忽略的文件不会自动带过去。在项目根目录建一个
.worktreeinclude,按.gitignore的写法列出.env等文件。 - 记得把
.claude/worktrees/加进.gitignore。子代理也能各用一个 worktree:在它的配置里加isolation: worktree。
试一试:退出会话时,worktree 会怎样?
沙箱:给命令围一道墙
权限模式(第 9A 课)是门卫:命令执行前决定放不放、问不问你。沙箱是围墙:命令跑起来以后,由操作系统限制它能写哪些文件、能连哪些网站,连它启动的子进程也一样。
- 怎么开:对话里输入
/sandbox,选一种模式。设置存进项目的.claude/settings.local.json;想所有项目都开,在~/.claude/settings.json里写"sandbox": { "enabled": true }。 - 默认的墙:能写的只有项目目录、临时目录和你加进来的目录;能读整台电脑(包括
~/.ssh!);网络一个网站都没预先放行:Manual 模式下第一次连某个网站时问你,auto 模式下由安全员连同命令一起审。 - 只管 Bash 这类命令:Claude 用 Read、Edit 工具读写文件时,走的还是权限规则;你自己用
!打的命令也不在沙箱里。
沙箱支持 macOS、Linux 和 WSL2,不支持原生 Windows。在 Windows 上要用沙箱,先装 WSL2,在里面运行 Claude Code。Linux 和 WSL2 还要先装 bubblewrap 和 socat 两个包,/sandbox 面板会告诉你缺什么。
试一试:同样几条命令,开不开沙箱有什么不同
假设权限模式是 Manual(每步都问你)。切换下面的开关,看每条命令的结果怎么变:
- 被墙挡住之后:Claude 会看到被拦的路径或网站,可能申请"在沙箱外重试"。Manual 模式下会弹窗问你;auto 模式下交给安全员判断。不想给它这个选项,设置
"allowUnsandboxedCommands": false。 - 跑不了的工具:
docker在沙箱里跑不起来,把"docker *"加进sandbox.excludedCommands,让它在墙外按正常权限流程跑。jest卡住的话,改用jest --no-watchman。 - 放行网站要谨慎:放行
github.com这种大网站,等于给了一条把数据传出去的路。
离开电脑之后:遥控、云端、桌面端
先想清楚一个问题:Claude 在哪台机器上干活?在你的电脑上,它能用你的文件和工具,但电脑得开着;在云端,合上电脑它也照样干,但用不了你电脑上的工具,代码一般从 GitHub 拉。
| Remote Control 远程控制 | 云端会话 | 桌面端 | |
|---|---|---|---|
| Claude 在哪干活 | 你的电脑 | Anthropic 的云端虚拟机 | 选 Local 在你的电脑;选 Cloud 在云端 |
| 你在哪看、在哪说话 | 手机 Claude App、浏览器 claude.ai/code,终端也能同时用 | 浏览器、手机、桌面端 | Claude 桌面应用的 Code 标签页 |
| 怎么开始 | 终端里 /remote-control,或启动时 claude --rc | 网页上直接开,或终端里 claude --cloud "任务" | 下载桌面应用;终端里 /desktop 把当前会话搬过去 |
| 电脑要开着吗 | 要,Claude Code 进程得一直运行 | 不用 | Local 要;Cloud 不用 |
| 能用你本地的文件、MCP | 能 | 不能用本地的 MCP 和工具;代码一般从 GitHub 克隆(仓库没有远程、或没装 GitHub App 时,会把本地仓库打包上传) | Local 能 |
| 适合 | 在电脑上开了头,出门用手机盯着、回答它的问题 | 长任务、一次开好几个、合上电脑也要继续 | 喜欢图形界面:并排的会话、看改动的 diff、网页预览 |
在不同地方之间交接
| 从 | 到 | 怎么做 |
|---|---|---|
| 终端 | 手机 / 浏览器 | /remote-control:连上后终端里出现 /rc active 标记;再输一次 /remote-control,能看到网址和二维码,手机扫一下就行 |
| 终端 | 云端 | claude --cloud "修复登录 bug":在云端新开一个会话去做,不带上你当前这段对话。云端克隆的是 GitHub 上你当前的分支,先推送本地提交 |
| 云端 | 终端 | claude --teleport 或对话里 /teleport(/tp):拉下分支和完整对话。要求本地没有未提交的改动、同一个仓库、同一个账号 |
| 终端 | 桌面端 | /desktop(macOS 和 x64 Windows) |
| 桌面端 | 云端 | 会话工具栏上的 Continue in 菜单 → Claude Code on the Web |
- 都要用 claude.ai 账号登录(Pro、Max、Team、Enterprise),用 API key 不行。Team、Enterprise 还要管理员先打开。
- Remote Control 的安全:你的电脑只往外发 HTTPS 请求,不开任何端口。连接期间,对话记录会存在 Anthropic 的服务器上用来同步;执行和文件仍然只在你的电脑上。
- 桌面端的并行会话:新建会话时勾上 worktree,每个会话就有自己的一份代码(第 4 节讲的)。网页预览的启动方式写在
.claude/launch.json里。
输出样式:换一种说话方式
输出样式决定 Claude 怎么跟你说话:啰嗦还是简洁,要不要讲道理,要不要留点代码给你练手。同一个请求,切换看看回答的差别:
示意:回答内容是虚构的,只为展示各样式的差别。
- 怎么换:
/output-style concise(不分大小写),或/config里选 Output style。选择存进.claude/settings.local.json,下一条消息就生效。 - 写在设置文件里:
"outputStyle": "Concise",这里要区分大小写,写成concise会被当成默认样式。 - Proactive 不改权限:它只是让 Claude 少问"要不要这样做",该弹的权限确认照样弹。
写一个自己的样式
--- name: Diagrams first description: 讲解时先画图 keep-coding-instructions: true --- 讲解代码、架构或数据流时,先画一张 Mermaid 图说明结构,再用文字解释。 图里的节点不超过 15 个。
- 放在
~/.claude/output-styles/(只给自己)或项目的.claude/output-styles/(团队共用)。改了文件要重启 Claude Code 才读到。 keep-coding-instructions: true:保留 Claude Code 自带的写代码规范,只改说话方式。不写这行,自定义样式会把那套规范去掉,适合让 Claude 当写作助手、数据分析师这类不写代码的角色。
| 你想要 | 用 |
|---|---|
| 每条回答都换一种语气、长度或格式 | 输出样式 |
| Claude 知道项目的约定、命令和结构 | CLAUDE.md(第 2 课) |
| 某一类任务的做法,用到时才加载 | Skill(第 5 课) |
| 某件事每次都必须发生,比如改完就格式化 | Hook(第 6 课)。输出样式只是指示,不保证执行 |
状态栏:输入框下面的一行小字
状态栏是你自己写的一个小脚本。Claude Code 把会话信息(模型、目录、上下文用了多少、花了多少钱……)以 JSON 传给它,它打印什么,底部就显示什么。
对话里输入 /statusline 显示模型名、目录和上下文百分比,它会生成脚本、改好设置。想自己动手,用下面的拼装器。
显示什么
效果
Claude Code 传给脚本的 JSON(节选,高亮的是你选的字段)
- bash 版本要先装
jq(解析 JSON 的小工具),并执行chmod +x ~/.claude/statusline.sh。保存设置后马上生效。设置文件里已经有别的内容时,只把statusLine这一段加进去,别整个覆盖。 - Windows 上:设置里的路径用正斜杠
C:/Users/…,反斜杠会被吃掉,脚本静悄悄地不运行。 - 它在本地运行,不花 token;每来一条新回复、切换权限模式等时刷新。脚本要快,慢的命令(比如
git status)要缓存。
终端演练:管好一个会话
在 worktree 里开一个有名字的会话,跑命令、分叉、换输出样式、配状态栏,最后交给手机。点"下一步"回放,放完可以自己输入。
终端画面为教学示意,提示文字、会话 ID 和网址是虚构的;命令、参数与官方文档一致。
进阶与避坑
会话找不到、沙箱开不了、手机连不上……按症状查。
/resume 里找不到昨天的会话
claude -p 跑出来的会话不在列表里,要用会话 ID 恢复。超过 30 天的记录会被自动清理。Windows 上 /sandbox 用不了
Sandboxing requires WSL2,说明你的发行版还是 WSL1,要升级。沙箱默认挡不住读 ~/.ssh
sandbox.credentials,或者在 sandbox.filesystem.denyRead 里列出 ~/.ssh、~/.aws。公司要强制所有人开沙箱,用管理员下发的设置,加上 "failIfUnavailable": true(开不了就不让启动)。worktree 里项目跑不起来
.env 这类被 git 忽略的文件不会带过去(用 .worktreeinclude)。用 git lfs install --local 配置的 LFS 文件在 worktree 里是占位文件,进去跑一次 git lfs pull。手机上连不上 Remote Control
ANTHROPIC_BASE_URL 指向代理,也没有设置 DISABLE_TELEMETRY 等关闭功能开关的变量;电脑上的 Claude Code 还开着。/resume、/plugin 这类命令只能在电脑的终端里用。云端会话里看不到我刚写的代码
claude --cloud 让云端从 GitHub 克隆当前分支,不是你本地的文件。先 git push。反过来 --teleport 拉回本地时,本地不能有未提交的改动,云端的分支也要已经推送。状态栏不显示
chmod +x);是不是打印到了标准输出;手动运行一次看有没有报错,可以用官方的办法喂一段假数据:echo '{"model":{"display_name":"Opus"},"workspace":{"current_dir":"/tmp/my-app"},"context_window":{"used_percentage":25}}' | ~/.claude/statusline.sh。设置了 disableAllHooks 也会关掉状态栏;第一次在这个文件夹用 Claude Code、还没点过信任对话框时,状态栏也会一直空着。老教程里的写法和官方不一样
claude --remote "任务"已改名为--cloud,旧写法还能用,但已弃用。- 没有
claude --sandbox这个启动参数(它只属于claude remote-control)。用/sandbox,或claude --settings '{"sandbox":{"enabled":true}}'。 - 说 macOS 做不到完整的网络隔离:三个平台都由沙箱代理按域名控制网络;
enableWeakerNetworkIsolation只用于一种情况:在 macOS 上配合自建的 TLS 检查代理,让gh、terraform这类工具能通过证书验证。 - 说换输出样式要
/clear或新开会话才生效:现在下一条消息就生效。 - 说会话回顾只对关闭遥测的用户默认打开:现在所有用户默认打开,在
/config里关。 - 说 worktree 没改动就自动删除:只有没起名字的会话才自动删;起过名字的会问你;
-p跑的从不清理。 - 桌面端
.claude/launch.json的格式:是configurations数组,每项写name、runtimeExecutable、runtimeArgs、port,不是command、readyPattern。
小测验
8 道题,每题选完会立刻看到解析。
