先说一个我最近的感受:我把日常 AI 编程主力环境从 Windows PowerShell 整体搬到了 WSL,并且认认真真把 Claude Code 的 Agent Skills 机制从头梳理了一遍。起因很朴素,当时要同时处理一个路由器固件解包任务和一个 STM32 工程构建任务,Windows 下缺工具、缺脚本运行时、路径还老出问题,而这些东西在 Linux 环境里几乎不存在。真正让我觉得这套组合值得写出来的,是跑通之后才意识到:WSL、Agent Skills、Claude Code 这三层并不是简单叠加。WSL 补上了命令行工具链的短板,Claude Code 给了 Agent 化编程的外壳,Agent Skills 则解决了"模型不知道你的领域规范"这个最实际的问题。这篇文章我就按自己的实操顺序,把环境搭建、排错、Skills 原理、模型扩展、WSL 协同细节全部分享出来,适合三类人看:想在 Windows 上认真做 AI 开发的人、在 WSL 里折腾 Claude Code 卡住的人、以及单纯对 Agent Skills 机制好奇的人。
1. 为什么我把主力终端迁到 WSL:三层结构各自解决什么问题
1.1 在 Windows 下做 AI 编程,痛点到底在哪
先说痛点。Windows 本身不缺开发能力,但缺的是"稳定的命令行一致性"。Claude Code 这类 Agent 工具的工作方式,是让模型通过工具调用去执行终端命令、读取文件、修改代码,它对你的 shell 环境有非常强的依赖。一旦换到 PowerShell,你会发现大量 Linux 习惯的管道、通配符、脚本行为都不一样了。更别说 Windows 路径里的反斜杠、空格、长路径截断,在 Agent 自动拼接命令的时候,常常成为莫名其妙的错误来源。
我第一次让 Claude Code 在 PowerShell 里跑一个多步骤构建脚本,它生成的命令里混着 PowerShell 语法和 bash 语法,反复修了几轮才跑通。后来我意识到,与其调教 Windows 环境,不如直接给它一个 Linux 用户态。WSL 2 本质上是一个轻量虚拟机,但体验上接近原生 Linux。你在里面可以随意用 find、grep、awk、rsync、binwalk 这些工具,Agent 生成的 bash 命令基本不会踩到 Windows 的坑。
1.2 Agent Skills 解决的,是"模型不懂领域规范"的问题
Claude Code 本身已经是个能力很强的 Agent:它能改文件、能跑命令、能看日志、能上网搜索。但真正上手一个具体项目时,你会发现模型对"你这个项目的构建方式、代码规范、发布流程"一无所知。传统做法是在CLAUDE.md里写一大堆说明,让模型每次启动都读一遍。但这样有两个问题:一是写长了浪费上下文,二是很多操作手册只在特定任务下才用得上。
Agent Skills 的思路完全不同。它是把某个领域的操作手册打包成一个目录,每个 skill 有独立的SKILL.md文件,里面写清楚什么时候用、具体步骤是什么、有什么注意事项。Claude Code 会在任务相关时按需加载,而不是一股脑全塞进 context。你可以把它理解成:工位上有一个工具抽屉,抽屉外面贴着标签,Claude 接到任务后先看标签,需要哪份手册抽哪份,而不是每次都把整个柜子的文档背下来。
1.3 这套组合到底适合谁
我用一个表格说清楚它在整个工具链里的位置:
| 场景 | Windows 原生 PowerShell | WSL + Claude Code | 远程 Linux 服务器/容器 |
|---|---|---|---|
| Linux 工具链 | 需要额外装 Git Bash 等 | 原生可用 | 原生可用 |
| 命令行一致性 | 差,PowerShell 与 bash 差异大 | 接近原生 Linux | 完全原生 |
| 图形 IDE 体验 | 最好 | 通过 VSCode Remote-WSL 保持 | 通过 SSH 远程,有延迟 |
| Agent 工具调用稳定性 | 一般,需反复调教 | 好 | 好 |
| 本地 GPU 资源 | 好 | 好,WSL 可直接用 CUDA | 依赖机房或云资源 |
这套组合最适合三类人:做嵌入式/固件/底层开发、需要 Linux 工具链但只有 Windows 机器的开发者;跑数据处理或本地模型实验、同时在 Windows 上有大量 IDE 依赖的人;以及想低成本体验 Claude Code 完整能力、又不想立刻迁移到纯 Linux 桌面的用户。如果你只是写写简单的 Python 脚本,那没必要折腾这套环境,直接在 Windows 上用原版 Claude Code 就行。
2. WSL 安装和磁盘排障:重灾区现场全记录
2.1 开始前必须确认的三件事
装 WSL 之前,先花两分钟确认三件事,能省掉后面一大半问题。
第一,系统版本。Win10 2004 及以上或 Win11 都支持 WSL2,但 Win11 对镜像网络等新特性的支持更完整。系统太老,很多配置项会无效。第二,BIOS 里的虚拟化有没有开。Intel 的 VT-x 或 AMD 的 SVM 如果被关了,后面建虚拟机阶段会直接报错。第三,Windows 功能里是否已经有"适用于 Linux 的 Windows 子系统"和"虚拟机平台"。如果你第一次跑wsl --install,它会自动帮你开启并提示重启,这一步别跳过。
我见过很多人卡在wsl --install完成后一重启就再也装不下去了,其实就是因为重启这一步没做或者做晚了。
2.2 wsl --install 太慢或被重置的现场处理
wsl --install慢,通常不是命令本身的问题,而是它要从微软服务器拉取发行版镜像,网络稍微不稳定就会卡在下载中途。热词里提到的"wsl --install 太慢""wsl --install 网速慢被重置",我全都遇到过。
我的处理顺序是这样的:
- 先指定发行版,不要把选择交给默认流程。
wsl --install -d Ubuntu-22.04或wsl --install -d Debian都比不带参数直接装稳定。想试新系统的,我试过wsl --install -d Debian装 Debian 13,只要先wsl --update把 WSL 内核升到比较新的版本,一般没什么问题。 - 如果下载反复中断,不要死磕那一条命令。试试
wsl --install -d Ubuntu-22.04 --web-download,这个参数会从另外的下载通道拉取发行版,绕开应用商店组件的问题。 - 仍然失败的,手动下载发行版安装包。微软官方有 .appx / .wsl 格式的安装包,下载后双击安装,然后执行
wsl --import导入。这个方法看起来原始,但恰恰最稳。
还有一个容易忽视的点:下载过程中不要反复按 Ctrl+C。中断重启本身会留下半成品状态,下一次安装会因为缓存目录不一致继续失败。我后来学乖了,让它慢慢跑,等不及就去干别的事。
2.3 错误码 WSL/InstallDistro/Service/RegisterDistro/CreateVm/HCS/error_file_n 的完整排查链路
这个报错很长,但拆开看很有信息量。它描述了整个过程:InstallDistro开始安装发行版,Service调用服务,RegisterDistro注册发行版,CreateVm创建虚拟机,最后卡在HCS也就是 Windows 宿主计算服务上,错误代码是error_file_n,简单说就是系统找不到某样东西。
我第一次遇到这个报错,内心是很崩溃的,因为网上几乎找不到完全相同的案例。但按链路拆下来,问题其实就集中在那四五个点上。我分享一条亲身验证过的排查链路,按顺序走:
首先,确认"虚拟机平台"功能真的启用了。去"启用或关闭 Windows 功能"里看,VirtualMachinePlatform和适用于 Linux 的 Windows 子系统两个都要勾上,已经勾了的话,改成先取消再勾选,有时候是状态残留。
其次,不妨强行让 hypervisor 启动。管理员权限的 PowerShell 里执行:
bcdedit /set hypervisorlaunchtype auto执行完必须重启。这个操作直击CreateVm阶段失败的原因,很多情况下 hypervisorlaunchtype 处于关闭状态,WSL2 根本没有办法创建虚拟机。我自己的机器就是这一步解决的。
然后再回来执行:
wsl --update更新 WSL 内核和组件,很多老版本内核和 Win10 新补丁不兼容,也会表现为 HCS 错误。
如果还不行,检查系统组件存储是否损坏。那段时间我的 Windows 更新一直异常,热词里的"wsl安装组件存储已损坏"说的就是这类问题。修复命令如下,需要管理员权限:
DISM /Online /Cleanup-Image /RestoreHealth sfc /scannowDISM先修系统映像,sfc再校验系统文件,跑完后重启电脑,然后再wsl --install。
最后,如果以上全试过仍报error_file_n,考虑安全软件拦截。我在某台机器上遇到类似情况,是网络过滤组件拦了 WSL 的虚拟网络适配器,导致创建虚拟机时找不到设备文件。这种情况下,在功能设置里把 WSL 相关进程加入排除列表,问题立刻消失。这个属于比较隐蔽的坑,查正常日志根本看不出来。
2.4 C 盘空间告急:把发行版完整迁到 D 盘
WSL 默认装 C 盘,用一段时间后你会发现 VHD 虚拟磁盘文件越来越大。把发行版迁到 D 盘,最稳妥的方案不是复制文件夹,而是走一遍导出再导入的流程。
先彻底关闭 WSL:
wsl --shutdown然后导出当前发行版为一个 tar 备份文件:
wsl --export Ubuntu D:\backup\ubuntu-wsl-backup.tar这个 tar 文件会很大,我当时的 Ubuntu 用了小半年,导出来有 30 多 GB。导出完成后注销原发行版:
wsl --unregister Ubuntu注意这一步会删除原发行版的所有数据,一定要确保上一步导出成功了再执行。之后把 tar 导入到 D 盘的指定位置:
wsl --import Ubuntu D:\WSL\Ubuntu D:\backup\ubuntu-wsl-backup.tar --version 2导入之后有个常见问题:WSL 会默认用 root 用户登录,你原来创建的普通用户不在默认登录列表里。解决办法是在发行版的wsl.conf里指定默认用户。在 WSL 里执行:
sudo vim /etc/wsl.conf写入:
[user] default=你的用户名保存后重新进入 WSL 生效。
另外,如果你的 WSL 版本比较新,官方也提供了原地迁移的命令:wsl --manage <发行版名> --move D:\WSL\新目录。但我个人还是推荐导出/导入,因为整个过程等于强制做了一次备份,数据安全性更高。
2.5 .wslconfig 一次性调好内存和网络
WSL2 默认会吃掉大量内存,而且默认 NAT 网络模式下,从 WSL 访问 Windows 宿主机端口还要绕一圈。我建议在 Windows 用户目录下创建.wslconfig,把内存、CPU 和网络模式都固定下来。
先建议最小配置:
[wsl2] memory=8GB processors=4 networkingMode=mirroredmemory和processors是限制 WSL2 资源上限,避免它无限蚕食宿主机内存。networkingMode=mirrored是镜像网络模式,这个配置会让 WSL 和 Windows 共享 localhost,后面 Claude Code 调用 Windows 上跑的本地模型服务时,直接访问localhost就行,非常省事。需要注意,镜像网络模式需要 Windows 11 22H2 或更新版本,如果你还在 Win10,这个配置会被忽略。
修改完.wslconfig,记着wsl --shutdown再重启 WSL 才生效。
3. 安装 Claude Code 与 VSCode 接入:一堆权限和鉴权坑
3.1 两种官方安装方式,我推荐哪种
Claude Code 的官方安装方式主要有两种。npm 全局安装:
npm install -g @anthropic-ai/claude-code以及官方安装脚本:
curl -fsSL https://claude.ai/install.sh | bash两种方式装完都直接有claude命令,验证方式都是claude --version。
我自己的选择是在 WSL 里用 npm 装。原因是版本控制更直观,可以精确指定版本号,升级、回滚都方便。如果你 npm 下载慢,把 registry 切成镜像源再试:
npm config set registry https://registry.npmmirror.com这是常规操作,不影响依赖的完整性。装完之后一定要确认一下路径:
which claude出现~/.local/bin/claude或者/usr/local/bin/claude之类的结果,就说明安装到位了。
这里要多说一句:网上有不少打包好的 Claude Code 桌面版,我不太建议去碰,原因很简单——官方 npm 包和安装脚本足够满足绝大多数场景,第三方打包的二进制你没法确认它的完整性,为了一个界面而引入不可控风险,不值得。
3.2 最容易忽略的坑:到底装在哪一边
很多人第一步就走错了:在 Windows 的 PowerShell 里全局装了 Claude Code,然后打开 WSL 终端发现claude命令不存在。这是因为 Windows 侧安装的 npm 全局包不会自动暴露到 WSL 的 PATH 里。
正确做法是:进入 WSL 发行版的终端,在 WSL 里安装 Node.js,然后在 WSL 里执行 npm 安装。换句话说,哪边要用 Claude Code,就在哪边装。我踩过一次之后总结出的原则是:
- WSL 是主力开发环境,所有依赖和工具都在 WSL 内安装
- Windows 侧只保留 VSCode、Windows Terminal 这类入口应用
- 不要试图让两个环境共享同一个
claude
这样才能保证 Agent 运行时的 PATH、shell、工具链是一致的。
3.3 VSCode Remote-WSL 与 Claude Code 的联动配置
VSCode 配合 WSL 的正确姿势是安装 Remote-WSL 扩展,然后用"在 WSL 中打开文件夹"的方式进入 Linux 环境。这时候左下角会显示WSL: Ubuntu之类的标识,打开的终端也已经是 WSL 的 bash。
把 Claude Code 接到 VSCode 里有两种路径。一种是直接在 WSL 终端里运行claude,这是最传统的方式,交互界面在你的终端面板里。另一种是安装官方的 Claude Code for VS Code 扩展,在 Remote-WSL 窗口下,这个扩展会尝试在你当前的 WSL 发行版里找claude,找到以后就能在侧边栏直接交互,还可以看到 diff 预览。
我的习惯是两者混用:需要大段代码上下文的时候用 VSCode 里的扩展面板,快速跑一个脚本或处理一个报错的时候直接终端开claude。因为终端模式的上下文管理更轻量,启动速度也更快。
3.4 鉴权和组织限制报错的真实原因
登录 Claude Code 时,最让人恼火的报错是这句:your organization has disabled claude subscription access for claude code。
这句话直译是"你的组织已禁用 Claude 订阅对 Claude Code 的访问权限"。它的核心原因是:你当前登录的账号归属于某个组织,而组织的管理员没有在后台允许 Claude Code 这个产品被使用。不是你的网络问题,也不是登录姿势问题,重复尝试没有意义。
解决路径很清晰。如果你使用的是个人订阅账号,确认账号没被绑定到企业组织空间,然后在浏览器里重新登录 Anthropic 控制台,再回 CLI 里/login重新授权。如果确实是公司统一分配的账号,那就只能找管理员,在 Admin Console 里把 Claude Code 的访问权限打开。等管理员改完配置,重新登录就会恢复。
如果你既没有个人账号、又不想走组织审批流程,那本文第 5 节讲的第三方 API 接入和本地模型接入就是你不需要官方登录鉴权的另一种选择。
3.5 直接执行终端命令:claude -p 与批处理场景
Claude Code 日常用交互模式比较多,但真正体现它价值的还有命令模式。非交互执行一条命令:
claude -p "检查当前目录下所有 Python 文件的语法错误"加上--output-format json可以拿到结构化输出,方便脚本解析:
claude -p "对这段日志做分类总结" --output-format json还可以通过管道把文件内容、日志、命令输出直接喂给它:
cat error.log | claude -p "帮我分析日志中的异常原因,用中文回答"交互模式下 Claude 也能直接执行终端命令,这是 Agent 的核心能力。比如你让它"编译这个工程",它会先ls看目录结构、找到构建脚本、然后执行编译命令。默认它会向你请求权限确认,这是安全机制。只有在你非常确定脚本要做什么的前提下,才考虑用--dangerously-skip-permissions跳过确认,而且我强烈建议这个参数只用在隔离环境或临时容器里,不要在生产目录中无脑开。
另外一个实用提示:网页搜索能力在官方订阅模型下是可以用起来的,特别是当你让它做一个技术调研、查某个函数用法的时候。而第三方 API 接入的情况下,这个内置工具往往不可用或能力残缺,别把它当默认功能。
4. Agent Skills 的第一性原理:延迟加载的领域手册
4.1 Skills 和 MCP、Subagent 的边界
关于 Agent Skills,最值得先讲清楚的是它和另外两个热门概念的区别:MCP 服务器和 Subagent。很多人把这几个东西混在一起,其实它们解决的是完全不同的三个层面。
| 机制 | 核心作用 | 类比 | 典型场景 |
|---|---|---|---|
| Agent Skills | 给 Agent 注入领域知识/操作流程 | 抽屉里的操作手册 | 告诉 Agent 如何做 STM32 构建检查 |
| MCP | 让 Agent 读写外部系统/工具 | 万能插座 | 让 Agent 能查数据库、操作 GitHub |
| Subagent | 把任务拆给独立的子 Agent 处理 | 项目组里的小组组长 | 大批量文件审查、并行任务 |
Skills 是"知识型"的,它不提供新的工具能力,而是教 Agent 怎么用手头已有的工具。MCP 是"连接型"的,它把外部系统暴露成工具。Subagent 是"组织型"的,用来隔离上下文、并行干活。如果你要写一个规范文档告诉 Agent 某个领域应该怎么做,那就用 Skills;如果你要接一个外部系统,那就配 MCP;如果你发现 Agent 的上下文太长想分活,那就用 Subagent。
4.2 一个 Skill 的文件结构和触发逻辑
Agent Skills 的目录结构是有约定的。用户级技能放在~/.claude/skills/下,项目级技能放在项目的.claude/skills/下。每个技能是一个独立目录,里面至少有一个SKILL.md文件,还可以包含scripts/、references/等辅助资源:
~/.claude/skills/ └── stm32-build-check/ ├── SKILL.md └── scripts/ └── build_check.shSKILL.md的格式很关键。开头是 YAML frontmatter,用来声明技能的元信息,主要是name和description,description尤其重要,它决定了 Claude 什么时候会想起这个技能。后面的正文部分,就是给 Claude 看的具体操作步骤、规则、注意事项。
触发逻辑其实很朴素:Claude Code 在日常对话中,会根据当前任务语义去匹配各个技能的名字和描述。匹配度足够高时,它会把SKILL.md的内容注入到当前上下文。换句话说,这不是一个每次启动都无条件加载的机制,而是一个按需加载的机制。
4.3 实战:为 STM32 构建检查写一个 Skill
我用一个实际写过的 Skill 来说明。在 WSL 里做 STM32 开发时,我经常让 Claude Code 帮忙改代码,改完总要检查能不能编译通过。最初它每次都不知道该跑什么命令,直到我在项目里放了构建脚本它才正常。所以我把这套流程做成了一个 Skill,命名为stm32-build-check。
目录结构如下:
~/.claude/skills/stm32-build-check/ ├── SKILL.md └── scripts/ └── build_check.shSKILL.md的内容大致是:
--- name: stm32-build-check description: 检查 STM32 工程是否能够编译通过,解析编译错误并给出修复建议。当用户提到 stm32、编译、build、报错、固件、cubeide、cmake、arm-none-eabi 等相关词汇时使用。 --- # STM32 构建检查流程 1. 先查看工程根目录的构建配置文件,判断使用的是 Makefile 还是 CMake。 2. 使用 tools/arm-none-eabi-gcc 工具链执行 make 或 cmake --build。 3. 如果编译失败,提取所有 error 和 warning 信息,定位到具体文件和行号。 4. 分析错误类型:语法错误、宏定义缺失、链接符号未定义、flash 空间溢出等。 5. 给出修复建议,并确保修复后重新编译验证。配套的build_check.sh脚本做具体的事情:
#!/bin/bash cd "$PROJECT_DIR" || exit 1 if [ -f "CMakeLists.txt" ]; then cmake -B build && cmake --build build -j4 elif [ -f "Makefile" ]; then make -j4 else echo "未找到 CMakeLists.txt 或 Makefile" exit 1 fi实际体验下来,Claude Code 在我提到"编译报错"时,真的会自动去加载这个 Skill,然后按里面的流程操作,而不是瞎猜。这个技能描述写得越具体、关键词越明确,触发就越准确。我之前试过把 description 写得很宽泛,结果经常在无关任务里被错误触发,把上下文浪费掉,后来把关键词收敛到编译相关词汇之后,误触率明显下降。
4.4 为什么 Skills 能省 token:和 CLAUDE.md 对比
之前很多人习惯把项目文档、开发规范全部写进CLAUDE.md,这个文件在每次会话启动时都会被读一遍。假设你的文档有 2000 行,每个会话固定多付出 2000 行的 token 成本,其中 80% 的内容在当前任务里其实根本用不到。
Skills 的价值就在于延迟加载:它只暴露一个简短的名字和描述给 Claude 做索引,真正的操作手册只有在相关任务出现时才被加载。从 token 经济学角度看,这相当于把固定成本变成了可变成本。即使你用的是 1M 长上下文的模型,也不代表应该浪费 token。上下文越长,模型对无关信息的注意力衰减越明显,保持上下文精简永远是有利的。
我的分配原则很简单:全局性的、每个任务都需要知道的偏好,放CLAUDE.md,比如"代码风格""禁止格式化某个目录";领域性的、只在特定任务需要的操作流程,放进 Skills,比如构建检查、发布流程、固件烧录流程。后者是典型的"知识包",打包成 Skill 之后还能在多个项目之间复用,这才是它最值钱的地方。
5. 模型扩展:接第三方 API 和本地模型
5.1 cc-switch 切换 DeepSeek、Qwen、GLM 的底层逻辑
Claude Code 官方默认走 Anthropic 的模型和服务,但很多人会因为成本、可用性、或者组织限制的原因,想把它接到第三方模型服务上。热词里提到的 cc switch,就是社区里常用的一个切换工具。
cc-switch 这类工具的本质,是修改 Claude Code 的运行配置,让它把请求发送到别的 API 端点。底层并不神秘,无非是设置几个环境变量:
export ANTHROPIC_BASE_URL=https://你的服务商地址 export ANTHROPIC_AUTH_TOKEN=你的API密钥 export ANTHROPIC_MODEL=deepseek-chat或其它模型名 export ANTHROPIC_SMALL_FAST_MODEL=快速小模型名通过 cc-switch,你可以在图形界面上添加多个服务商,每个服务商填好名称、base_url、api_key、默认模型,然后点切换,工具会帮你把上面这些环境变量或配置文件改好。切换完成后,重启 Claude Code 会话生效。
我实测过接入 DeepSeek、Qwen 和 GLM 的官方 API。整体体验是:第三方模型的工具调用能力相比官方模型有明显差距,特别是涉及多文件修改、跨步骤推理时容易出问题。但如果你只是用 Claude Code 做单文件代码解释、写测试用例、处理日志,这些模型的性价比优势非常明显。建议先跑一个小任务验证模型是否稳定,再决定要不要把它当主力。
这里有个必须注意的点:Anthropic 的 API 格式和各家的 OpenAI 兼容格式并不完全一样。Claude Code 默认发的是 Anthropic 格式的请求,所以你要么选一个提供 Anthropic 兼容端点的模型服务商,要么自己加一层格式转换。cc-switch 本身只是切换工具,不保证帮你做协议转换,配错了端点最常见的表现是:能发起请求但 400 报错。
5.2 LM Studio 本地模型接入:能跑,但别指望逆天
热词里还有"claude code 调用 lmstudio 的本地模型",我试过之后想泼一点冷水:能跑通,但能力上限很明显。
LM Studio 的启动方式很简单:加载一个量化模型,然后点Start Server,默认在http://localhost:1234/v1提供 OpenAI 兼容接口。问题是 Claude Code 需要的是 Anthropic 兼容接口,两者格式不同。所以接入本地模型时,需要一个转换层,把 OpenAI 格式转成 Anthropic 格式。社区里有不少 claude-code-router 之类的项目就是干这个的。
它的使用场景很清晰:处理隐私数据不想出本机、离线环境下开发、或者只是想测试一下 Claude Code 的工作流而暂时没有外部 API。我实测用 7B 到 14B 的本地模型,能完成简单的代码解释、正则调试、文本总结;但让它用 Skills 执行多步骤构建检查、修改多个文件后重新编译,基本会半路翻车。不是路由不工作,是模型本身的指令遵循和工具调用能力撑不起 Agent 任务。
如果你真的想尝试,我的建议是把任务切得很碎。比如一次只让本地模型"查看这个文件并指出三处明显问题",而不是让它"自动修复所有问题并重新构建"。另外,镜像网络模式在这里价值很大,WSL 里直接访问localhost:1234就能连上 Windows 侧跑的 LM Studio,不用再查 IP。
5.3 1M 长上下文:什么时候值得开
Claude Code 支持长上下文模型,热词里的"claude code 1m上下文"说的是这个能力。但长上下文是一把双刃剑。
我自己的体验是,它最适合的场景是:长日志分析、大型仓库结构理解、多文件重构前的全局通读。比如一个服务有几百个文件,你让 Claude 先在 1M 上下文中通读核心模块,再给出重构建议,这种任务普通上下文根本装不下。
但它也有明显代价。第一是成本,输入 token 越多,费用越高,这在小模型 API 上可能还能接受,官方模型上就很肉痛。第二是延迟,从请求发出到首 token 返回明显变慢。第三是超长上下文下模型注意力会漂移,表现为"前面的代码看了,后面的代码忘了"。所以即使有 1M,也不要把所有项目文档、技能手册全都堆进去。正确姿势依然是把大招留给真正需要全局视野的任务,而那些领域规范、操作流程,继续交给 Skills 按需加载。
6. WSL 协同细节:端口、CUDA、Docker、文件访问
6.1 镜像网络模式,彻底解决 localhost 互通
WSL 和 Windows 之间的网络互通,是最多人问的问题之一。默认 NAT 模式下,WSL2 是一个独立的内网地址,你从 WSL 访问 Windows 宿主机,需要先找到宿主机的 IP。传统做法是先看默认网关:
ip route show | grep default输出里的网关 IP 通常就是宿主机在这套虚拟网络里的地址。但这个 IP 偶尔会变,每次重启 WSL 都可能不同,很麻烦。
我推荐直接开镜像网络模式。在.wslconfig里设置:
[wsl2] networkingMode=mirrored开启后,WSL 和 Windows 共享 localhost,你在 WSL 里访问localhost:1234就能连上 Windows 上跑的 LM Studio、数据库、任何本地服务,反之亦然。这对 Claude Code 调用宿主机服务非常关键:比如让它访问 Windows 侧的一个 Web 服务做接口测试,直接 localhost 搞定。
需要提醒的是,镜像网络模式偶尔会和某些安全软件冲突,表现是 Docker 端口映射在 WSL 内访问不通。遇到这种问题先检查安全软件的网络过滤设置,必要时排除 WSL 进程。
6.2 WSL 里配 CUDA 跑 PyTorch
WSL2 支持 GPU 加速是它最香的特性之一。前提条件很简单:Windows 侧装好 NVIDIA 驱动,WSL 里的 Linux 不需要再装驱动,它复用 Windows 的驱动层。
装好后在 WSL 终端里验证:
nvidia-smi能正常列出 GPU 信息就说明 WSL 已经能访问显卡了。之后装 PyTorch,不需要专门去 WSL 里装 CUDA Toolkit,因为 pip 安装的 PyTorch 自带 CUDA 运行时。例如装 CUDA 12.4 对应版本:
pip install torch --index-url https://download.pytorch.org/whl/cu124实测下来,WSL2 里的 GPU 性能接近裸机 Linux,跑小规模训练和推理完全够用。这里最大的坑是:不要尝试在 WSL 内部安装 NVIDIA Linux 驱动,很多人照网上教程装完反而把环境搞坏。WSL 的显卡支持走的是/dev/dxg的透传机制,驱动必须装在 Windows 侧。
6.3 在 WSL 里跑 Docker
新版 WSL 自带 systemd 支持,直接在发行版里装 Docker 比过去简单很多。Ubuntu 下:
sudo apt update sudo apt install docker.io sudo systemctl enable docker sudo systemctl start docker如果你用的是 Docker Desktop,它也有 WSL backend 模式,默认会接管 WSL2 的 docker 命令。我的建议是:日常开发直接在一个 WSL 发行版里跑 docker.io,不依赖 Docker Desktop。原因很简单:资源占用更小、行为更可控、不会因为 Docker Desktop 的自动更新把环境搞挂。
要注意的是,如果你 Windows 上也装了 Docker Desktop,两边同时跑 docker 命令可能冲突。我的做法是:Windows 侧不再装 Docker Desktop,所有的容器工作全部在 WSL 发行版里完成。这样 Claude Code 在 WSL 里发起 docker 命令时,环境始终是一致的。
6.4 Finalshell 连接 WSL Debian 没有目录显示的排查
有人习惯用 Finalshell 这类图形 SSH 工具连 WSL,但会遇到一个很怪的问题:能登录,凭据也对,但文件管理面板里目录是空白的。这种情况我排查了一圈,主要出在 WSL 里的 SSH 服务配置上。
WSL 里要跑 SSH server,通常需要安装:
sudo apt install openssh-server然后确认配置文件/etc/ssh/sshd_config里有这样一行:
Subsystem sftp /usr/lib/openssh/sftp-serverFinalshell 的文件目录功能依赖 SFTP,如果这个子系统路径不对,就会表现为能 SSH 登录但看不到文件。还要确认登录用户的 shell 是/bin/bash而不是/bin/sh,以及用户 home 目录权限不能太封闭。chmod 755 $HOME基本能满足需求。
另一个常见问题是没启动服务或者端口被占。WSL 里先手动验证一下:
sudo systemctl start ssh sudo systemctl enable ssh然后确保 SSH 端口 22 没有被其他服务占用。如果用的是镜像网络模式,Windows 直接ssh 用户@localhost就能连进 WSL,比去查 WSL 的 IP 方便得多。我的个人建议是:既然已经在用 VSCode Remote-WSL 或 Windows Terminal,就优先用这些原生通道,Finalshell 多做一层反而增加配置复杂度。
6.5 顺手用 binwalk 做固件分析
热词里有"wsl使用binwalk",这个我要单独说一句:WSL 在这类安全分析场景里的优势是碾压性的。binwalk 是固件分析、解包、提取的常用工具,Windows 原生的 cmd 和 PowerShell 基本没法愉快地跑这类依赖文件系统权限和符号链接的工具。
在 WSL 里安装非常方便:
sudo apt install binwalk对路由器固件做递归解包提取:
binwalk -Me firmware.bin-M是递归提取,-e是解包已知格式,这个组合能自动扫出嵌入式固件里的 squashfs、cramfs、jffs2 等文件系统,并把它们提取到独立目录。
和 Claude Code 配合的场景很有意思:我在 WSL 里写了一句"用 binwalk 扫描这个固件,把提取到的文件系统结构列出来",Claude 自动执行了binwalk -Me,然后解析输出、列出目录树,整个过程几乎不需要我手动敲命令。这就是 WSL + Claude Code 组合的日常缩影——Linux 工具链负责真正干活,Agent 负责指挥、解读和自动化。
7. 我实际跑完这套环境的真实体会
整套环境从无到有跑通之后,我个人的体会可以浓缩成一句话:WSL 解决的是"运行环境"问题,Claude Code 解决的是"干活方式"问题,Agent Skills 解决的是"领域知识"问题,三者缺一环都不会这么顺。
资源占用方面,16GB 内存的机器上,WSL2 限制 8GB,同时跑着 Ubuntu、一个 Docker 容器、Claude Code 和一个 13B 的本地模型,基本流畅。内存少于 16GB 的机器我建议别同时开本地模型和 Docker,会很吃力。磁盘方面,WSL 的虚拟磁盘文件增长很快,至少留 50GB。
适合这套组合的场景,我的判断是:你是一个 Windows 主力用户,日常要写代码、要跑 Linux 工具、还想用 Agent 提高效率。如果你的工作完全在 Mac 或 Linux 上,那不需要 WSL 这一层,直接装 Claude Code 即可。如果只是偶尔写写脚本,也没必要把环境搞这么重。
最后分享一个我调整过很多次的经验:刚上手时不要同时搞 skills、接第三方模型、配本地模型、开镜像网络,每一个变量都会增加排查复杂度。正确路径是先装 WSL、跑通claude、用官方模型做几天日常开发;然后加第一个 Agent Skill,先把领域规范沉淀下来;最后再考虑 cc-switch 或本地模型。一步一步来,出问题时你能明确知道是哪一层的问题。等你把这条链路都走过一遍,会发现这套组合真正的价值不是某个单点功能,而是它让"AI 在 Linux 环境下替你干活"这件事,在 Windows 机器上变成了一种稳定可复用的日常操作。