嵌入式开发的人用AI编程工具,和写Web、写业务系统的完全是两个画风。你要的是一个能看懂寄存器手册、能帮你把编译错误从几百行log里捞出来的助手,而不是一个只会生成CRUD的生成器。Claude Code在这个场景里属于少有的、真能在终端里干活的工具。系列写到第14篇,这篇继续深挖基本操作,重点放在安装、权限、会话管理、MCP、Skills这些每个嵌入式开发者都会用到、但官方文档又讲得不够细的地方。
1. 把Claude Code装对:三个平台的环境准备与初始化配置
新接触Claude Code的人,百分之八十的安装问题都出在环境不一致上。嵌入式开发者的机器尤其复杂:有人主力Windows,有人macOS跑着ARM交叉编译链,还有人直接在Ubuntu容器里干活。三个平台的安装路径不完全一样,但核心依赖是同一个:Node.js环境。
1.1 安装前置:Node版本与npm源
Claude Code本质是npm包,先确保安装Node.js。官方建议Node 18以上,我用过的18.x和22.x都没问题,但如果你还在用Node 14或更低,大概率会遇到API兼容报错,别浪费时间折腾,直接升级。
安装方式各平台略有差异:
- macOS用户,系统里装了Homebrew的话最省事。先用brew安装Node,再安装Claude Code。Windows用户强烈建议用Windows Terminal而不是老旧的cmd,编码和交互体验完全不一样。
- 安装包下载受限的环境,要处理下载失败问题。通用解法是切换npm源到国内镜像,大包秒下,之后再跑一次安装命令。
- Ubuntu/Debian系统,如果apt里的Node版本老,更推荐直接装NodeSource源或nvm来管理Node版本,方便随时切换。
# macOS(Homebrew路线) brew install node npm install -g @anthropic-ai/claude-code # Windows(PowerShell) npm install -g @anthropic-ai/claude-code # npm源切换(网络原因导致安装失败的通用解法) npm config set registry https://registry.npmmirror.com npm install -g @anthropic-ai/claude-code安装成功后执行claude --version确认版本号。网络受限机器上即使下载过程漫长,只要出现了版本号,后续登录和模型调用就畅通无阻。
1.2 首次启动:登录认证与订阅校验
首次在终端输入claude会进入登录流程,浏览器自动弹出OAuth认证页面,登录账号后回终端即可开始会话。这一步要特别提醒:Claude Code要求账号具备有效订阅或API额度,否则登录后也会卡在额度不足的报错上。
我实际遇到过一个坑:企业内网环境浏览器弹出不了认证页。解法是复制终端里那串URL,拿到能联网的机器上打开,完成授权后再回到终端。另外多账号用户注意,登录态是全局的,claude命令会读取当前用户配置,切换账号前记得先登出。
1.3 更新与卸载:很多人忽略的两个操作
Claude Code更新频率比较快,旧版本容易出现工具调用异常或模型行为偏差。更新用claude update,它会自动检查最新版本并完成升级。卸载更简单,npm全局卸载即可:
npm uninstall -g @anthropic-ai/claude-code卸载后可以顺手清理残留配置目录(macOS/Linux下是~/.claude,Windows在%USERPROFILE%\.claude),避免下次安装时旧配置干扰新版本。
2. 会话的命脉:清空、压缩与多任务切换
第一次上手Claude Code的人,最容易搞混的就是会话管理逻辑。它和浏览器聊天窗口不一样,每次会话是带着完整上下文密度来的,上下文越长,推理越慢、消耗越大。嵌入式项目动辄几十个文件,如果不管理会话,聊着聊着你会发现它开始答非所问,甚至把STM32的寄存器名串到GD32的工程里。
2.1 /clear:彻底清场,别让它带着旧需求
/clear命令会清空当前会话的全部历史。什么时候该用?当你切换到一个全新的子任务时——比如刚才还在调UART驱动,现在突然要写一份I2C扫描代码——残留的UART上下文对I2C没有任何帮助,反而会污染判断。
实际使用中我习惯随时用/clear:每完成一个独立功能模块就清一次。代价是会丢失中间过程信息,但换来的是每次对话都有干净的上下文起点。要找回之前会话,用claude --resume或claude -r恢复历史会话列表,从上次断点继续。
2.2 /compact:上下文压缩的平衡艺术
/clear是彻底放弃,/compact则是把当前对话的关键信息浓缩后继续。它适合那种任务没完成、但上下文已经快撑爆的场景——比如你让它分析了一段冗长的编译日志,讨论了很久,突然发现漏贴了一个关键宏定义。
执行/compact后,Claude Code会把之前的对话摘要成精简版本,并保留文件状态、未完成的修改记录。我实测过几十次,多数情况下压缩后再续聊,行为连续性比直接重开强很多,尤其适合跨文件重构这类长任务。不过有个细节:压缩后的摘要会不会丢细节,取决于模型对摘要的理解力,遇到复杂架构设计,我更倾向直接用/rewind回退到问题发生前的消息节点,而不是压缩。
2.3 多会话并行:嵌入式开发的正确用法
真正提升效率的是同时开多个会话。一个会话专门查芯片手册和寄存器定义,另一个会话处理编译错误,再开一个做代码审查。终端里Ctrl+C不会杀进程,重新运行claude就是新会话,旧会话保留在恢复列表里。
多会话配合/resume机制,实际体验就是给每个任务建一个专属工位,互不干扰。我建议按模块分会话而不是按时间分会话,这样恢复时意图明确,不用翻历史消息猜当时在干嘛。
3. 给Claude Code配操作权限:从“只读浏览”到“完全放权”
Claude Code不是只和你聊天的,它要读文件、改代码、执行构建命令、跑测试脚本。这些操作都需要权限控制。嵌入式场景下权限设计尤为重要——一个误操作可能触发make flash把开发板刷成砖。
3.1 权限模型:四种模式分别干嘛
每次交互时,Claude Code会按操作类型向你申请权限,主要分文件编辑、命令执行、MCP工具调用这几类。交互式模式下,每来一个操作请求终端都会提示允许或拒绝。一旦允许,后续同类操作通常自动放行。
想跳过提示直接用,有两个参数:
# 自动接受文件编辑权限 claude -a # 完全跳过权限检查(危险,不建议日常使用) claude --dangerously-skip-permissions这里要重点强调:--dangerously-skip-permissions能不用就不用。它在CI自动化、无人工干预脚本里确实有用,但日常开发一旦带上这个参数,Claude Code执行任何命令都不再问你。遇到过同事在RTOS工程里开着skip模式让它重构,结果它顺手执行了一个清理缓存命令,整个build目录被删掉重来,几个小时的编译时间白费。
3.2 权限的精细控制:自定义规则文件
想灵活一些,在~/.claude/settings.json里配权限规则。这个文件支持permissions配置,可以指定allow和deny列表:
{ "permissions": { "allow": [ "Bash(make *)", "Bash(echo *)", "Read(~/workspace/**)" ], "deny": [ "Bash(rm -rf *)", "Bash(make flash)" ] } }规则格式支持通配符,力度可以很细。我个人的策略是:开发库代码时开-a,但涉及烧录、擦除Flash、批量删除这类高危操作用deny列表锁死。单独给嵌入式场景题一个醒——千万别放行make flash这类命令,换成make build、make debug更稳妥。
3.3 团队协作中的权限管理
如果你在团队里推广Claude Code,权限规则必须进版本库。最实用的做法是把统一的settings.json放在用户级配置里,让团队成员拉取后直接覆盖——尤其是deny列表,能拦住90%以上的危险操作。项目级的.claude/settings.json也会被自动读取,适合针对单个工程定制允许/禁止项。
4. 让Claude Code长出手脚:MCP服务器配置实战
很多人在终端里用Claude Code,觉得它只能读文件、写文件,这是对MCP(模型上下文协议)没概念。MCP是Claude Code连接外部工具的标准通道,通过配置MCP服务器,它就能操作数据库、发HTTP请求、读取串口、访问文件系统之外的资源。
4.1 MCP是什么,嵌入式开发有什么用
MCP削平了模型与具体工具之间的门槛,实现了一次配置、全局复用的工具生态。你给Claude Code装一个MCP服务器,它就多了一项能力。嵌入式开发中常用的:
- 文件系统MCP:让它访问指定目录之外的文件,适合跨目录查阅芯片手册、参考代码。
- SQLite MCP:把编译产物、测试数据、串口日志存进SQLite,让它用SQL查,日志分析效率翻倍。
- HTTP请求MCP:直接请求设备REST接口或内部服务,调试网络协议栈时不用再手动curl。
- 串口MCP:直接和开发板串口交互,读打印日志,发指令。
拿串口MCP举例:调试蓝牙模块时,代码写完不再需要自己开串口工具去发AT指令验证,直接让Claude Code通过MCP打开串口、写入指令、读取响应并判断结果。这对交叉编译环境下快速验证驱动逻辑真的是质的提升。
4.2 MCP命令实操:添加、查看、管理
配置MCP服务器最常见的方式是用claude mcp命令:
# 添加一个MCP服务器,npx方式启动 claude mcp add my-serial -- npx @modelcontextprotocol/server-serial # 查看已配置的MCP服务器列表 claude mcp list # 查看某个MCP服务器的详细配置 claude mcp get my-serial # 移除 claude mcp remove my-serialadd后面的服务器名可以自定义,Claude Code会把它注册进配置文件中。注意MCP服务器本身是独立进程,Claude Code启动时会自动拉起,进程异常或依赖缺失会导致MCP不可用,通常先检查Node环境和依赖是否安装完整。
4.3 JSON配置方式与权限联动
有些MCP服务器不好用命令行参数描述,可以直接编辑配置文件。位置在~/.claude.json或项目根目录.mcp.json:
{ "mcpServers": { "sqlite-db": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-sqlite", "--db-path", "./build_meta.db"], "env": { "DB_PATH": "./build_meta.db" } } } }配置完重启Claude Code新会话才会加载。我还发现权限和MCP是联动的:MCP工具调用同样受permissions规则约束,你可以在settings中明确禁止某类MCP工具访问敏感路径,防止Claude Code通过MCP误读密钥文件。
5. 自己动手扩展技能:Claude Code Skills的完整体验
Skills是Claude Code里一个高级但极其实用的能力,相当于给Claude Code准备一个“任务手册”,包含特定领域的知识、流程、示例,你要它执行某类任务时,它会自动加载手册并严格按流程来做。这很适合嵌入式开发的规范化和经验沉淀。
5.1 Skills的目录结构与SKILL.md格式
每个技能是一个目录,放在~/.claude/skills/下(项目范围就放项目目录.claude/skills/)。技能目录里必须有一个SKILL.md文件,用YAML frontmatter描述元信息:
--- name: stm32-driver-review description: 用于评审STM32外设驱动代码,重点检查寄存器配置、中断优先级、DMA描述符初始化 --- # STM32驱动评审流程 ## 输入 嵌入驱动代码文件路径,或粘贴关键代码片段。 ## 步骤 1. 检查外设时钟使能是否遗漏。 2. 检查GPIO复用功能配置与数据手册是否一致。 3. 检查中断服务函数是否在中断向量表中注册。 4. 检查DMA描述符是否在初始化时清零。 5. 给出高/中/低三级风险清单。 ## 输出 按风险优先级输出评审结果,每条必须引用代码行号和寄存器名。description字段是核心,Claude Code根据它与当前任务的语义匹配度决定是否加载技能。因此描述要写得具体,包含项目专有名词,比如芯片型号、接口协议、代码规范名称。
5.2 从GitHub手动安装Skills:两大途径
热词里频繁出现“claude code怎么手动装github上的skills”,这里完整展开。社区生态里已经有不少开源Skills仓库,手动安装的本质就是两步:下载、放目录。
方法一:直接把GitHub仓库clone或下载zip,把技能目录复制到~/.claude/skills/。
方法二:如果你的项目里已经集成了Plugin机制或Claude Code市场,可以用/plugin命令从市场搜索并安装。但很多时候是手动方式更可控,尤其技能包依赖特定Python库或外部工具时,clone下来后还需要检查一下依赖说明。
装好后在会话中并不需要刻意“触发”,直接提出相关任务,Claude Code会根据描述自动匹配。想强制指定技能,在提示词里写明“按照xxx技能工作”即可。
5.3 技巧:把个人经验沉淀成自定义技能
我建了一个团队内部技能,依托这个机制把“编译错误排查”这套经验固化了下来。仓库代码里统一放一份SKILL.md,描述怎么写、报错日志怎么分类,Claude Code一遇到编译报错就直接加载这套规则。
沉淀技能最大的收益,是让团队的“老师傅经验”变成可复用资产,新人按技能走一遍也能复现老手的排查思路,比自己翻文档效率高得多。写技能时建议先从小范围场景开始,跑通了再扩充,避免一上来写得太大、语义匹配效果不佳。
6. 和编辑器与桌面工具联动:从命令行走向可视化
终端用多了你会发现,有个硬伤:代码改动了,想对照上下文看,眼睛要在终端和编辑器之间来回跳。这时候用IDE集成或桌面版体验会好很多。
6.1 VSCode里配置Claude Code
VSCode官方扩展安装好后,侧边栏会出现独立的Claude Code面板。配置方式并不复杂:在扩展设置里指向Claude Code的可执行文件路径,登录一次后它复用终端的认证态。
实际体验中,VSCode版最大的优势是代码改动直接diff在编辑器里,接受/拒绝非常自然。嵌入式工程的文件结构复杂,VSCode的资源管理器配合Claude Code的“查看文件、修改文件”能力,比纯终端直观太多了。需要注意:VSCode集成面板和终端版共享同一份配置,包括MCP服务器和权限规则,改动一处两处都生效。
6.2 桌面版客户端:重操作场景的更好选择
如果你的工作流重度依赖交互式审查代码,桌面版值得试试。它本质是给Claude Code一个更舒适的操作界面,支持分栏显示、会话历史浏览、更清晰的文件修改记录。
桌面版刚推出的时候,有人觉得是“套壳”,实际高频使用下来,大项目里的体验提升是很明显的。尤其是同时开着芯片手册、原理图、代码工程的人,独立窗口的灵活布局比终端专注度好得多。注意桌面版和CLI版的配置目录是兼容的,但启动的会话互不继承,需要自己管理。
6.3 团队协同场景:cc-connect与飞书联动
团队协作中有一个社区工具叫cc-connect,可以把Claude Code的能力接入飞书这类IM工具,常见用法是把汇总报告、构建状态、测试结果推送到飞书群,团队成员不用聚在终端前也能看到AI的产出。
这类联动本质是:Claude Code在后台跑任务,完成后通过webhook把结果发给IM机器人。这边有一个前提,机器人配置和webhook地址需要严格的权限管控,避免任务内容泄露。内部使用反馈来看,推送构建失败原因到飞书群,比截图贴日志高效得多。
7. 高频问题排查实录:安装失败、权限卡住、上下文丢失
用这套工具跑了几个月,资料里踩过的坑基本都遇到了。整理几个高频问题,每个都附排查思路,按顺序查比逐条试错快得多。
7.1 安装下载失败与版本过旧
现象:npm install -g长时间停滞、报ETIMEDOUT、版本号旧。
排查顺序:
- 先拉一下npm源配置:
npm config get registry。如果指向了不知名源,重置为官方源或国内镜像源。 - 版本过旧的话不用反复重装,直接
claude update,它会自动拉取更新。 - 首次安装就失败,检查Node版本,确保在18以上;Node版本正常但仍失败,检查网络限制,下载受阻时优先用镜像源,或从其他机器拷贝安装包。
7.2 权限提示反复出现,无法正常对话
现象:每个操作都弹确认,极其影响节奏。
原因:默认权限模式下,非白名单命令每条都问。嵌入式工程里编译命令多,容易造成频繁确认。
解决:在settings.json的allow列表里加入高频命令模式,比如Bash(make *)、Bash(gcc *)。注意deny列表里始终保留高危命令。想彻底不问就用claude -a,但代价是所有文件编辑都会自动接受,适合已建立好代码回滚习惯的团队。
7.3 恢复会话后上下文丢失
现象:--resume恢复会话,发现之前的文件修改记录、思路摘要都没了。
原因:会话恢复依赖上下文压缩,长任务如果中间执行过/compact,原始细节会被弱化。另外多终端恢复同一个会话,状态会被最后一个启用的会话覆盖。
解决:重要任务不要中途/clear,用/compact只压缩处理阶段;跨终端接管会话时先看恢复列表,别同时从两个终端操作同一个会话。
7.4 中文乱码和输出格式问题
现象:Windows下输出中文变乱码,代码块缩进丢失。
原因:终端编码页不支持UTF-8;或输出渲染异常。
解决:Windows Terminal里设置默认编码为UTF-8;Claude Code本身输出Markdown格式,如果粘贴到别处格式不对,用“复制原始代码块”重新拷贝。
排查问题有个总原则:先看环境,再看权限,最后才怀疑工具本身。Claude Code毕竟是构建在Node生态上的终端工具,绝大多数问题都出在环境配置不统一上,修好环境一切顺畅。
收个尾:说点实操中的心得
这个系列写到现在,越用越觉得Claude Code和嵌入式开发是难得合拍的。以前写驱动,最烦对着几百页芯片手册翻寄存器定义,现在一句话就能让它把关键配置列出来再生成代码框架,我再结合电路核对,效率完全不一样。但也要泼盆冷水,别指望它替代你读懂原理图和数据手册——它更适合当一个称职的“副驾”,懂工具、会查文档、能快速表达,关键决策仍然要你自己拍板。想进阶的话,建议从给Claude Code攒一套私有Skills开始,把你们项目的开发规范、评审清单、排查路径都包装成技能包,让AI慢慢“懂你们团队”,这一步做扎实了,后边的效率提升比任何调参都实在。