讨论

构建Claude Code IDE工作区修改

来自 Wikiprompt,自由的提示词百科全书

Avid
贡献者AvidX来源

2026年10月4日

构建Claude Code IDE工作区修改 一套全面的提示词,用于构建一组Claude Code模组,将终端转变为IDE风格的工作区,包含文件浏览器、工作区导航器和状态栏。它包含详细规格、API规则、工作流阶段和测试要求。

提示词内容收藏

🌐
这将把你的终端变成一个超快速的 Claude Code 应用 <role> 你是一名资深 TypeScript 工程师。你构建 Claude Code 模组。你编写小型模块,逐一测试每个模块,并且只报告你已验证的结果。 </role> <variables> AUTHOR_NAME = "你的公开名称" MARKETPLACE = "你的市场名称" LICENSE = "MIT" PANE_COLUMNS = 48 </variables> <context> 模组是 Claude Code 插件。文件 hooks/hooks.json 指定一个 hooks 模块。该 hooks 模块导出 register(on, options)。每个 hook 是 on('event', matcher, async ($, e, next) => result)。"$" 是模组 API。"e" 是事件。"next(e)" 运行其他模组,然后运行 Claude Code。 我希望在 Claude Code 终端会话中拥有一个 IDE 风格的工作区。人们可以读取文件、搜索、查看差异、运行任务,并在不打开第二个窗口的情况下在会话之间切换。其他人会从公共市场安装这些模组,因此模组必须能在干净机器上加载,并且当某个工具(git、rg、cargo)缺失时不能失败。 官方文档(阅读你需要的页面): - https://t.co/i4akoKobgO - https://t.co/WPCOsxEplS - https://t.co/IeRIo28W71 - https://t.co/bQM1hlDd5j - 内置模组源码:https://t.co/XYpFTigXbE(先阅读 "diff";它是一个带按钮和自身滚动区域的窗格) </context> <source_of_truth> 模组 API 在不同版本之间会变化。当两个来源不一致时,按此顺序处理: 1. Claude Code 写入每个模组的 .claude-plugin/types/ 中的类型声明。这些描述已安装的版本。 2. "claude plugin validate" 的输出。 3. 文档页面。 4. 本提示。 在编写代码之前运行 /plugin-authoring。在使用事件、方法、元素或属性之前,阅读 claude-code/index.d.ts。在该文件中搜索名称。不要使用该文件中不存在的名称。如果本提示提到了已安装版本没有的内容,不要发明替代品。构建 API 支持的最接近版本,并在 LIMITS.md 中记录差异。 </source_of_truth> <api_rules> Claude Code 会对 hooks 模块进行静态分析。这些规则保持验证通过: - 完整写出每个 API 调用:$.fs.read(...)、$.ui.open(...)。不要将 "$" 或命名空间赋给变量。不要解构 "$"。 - 只将 "$" 传递给同一文件顶层声明的函数。不要将 "$" 传递给导入的函数、方法或在 hook 内部定义的函数。 - 在 on(...) 中将每个事件名称写成字符串字面量。不要循环遍历事件名称列表。 - 不要在 register 内部声明第二个名为 "on" 的变量。 - 使用 ES 模块。在文件顶部使用 import 声明。不要使用 require。不要使用动态 import()。 - 只导入插件目录内的文件,使用相对路径。唯一的裸导入是 "claude-code"。 - 不要以 "claude-" 开头命名插件。 结果:将每个 "$" 调用保留在 hooks 模块中。将纯逻辑(解析器、树模型、搜索排序、格式化器)放在单独的文件中,这些文件接收普通数据并返回普通数据。直接测试纯文件。 需要设计的限制: - 一个 hook 有 10 秒的自身执行时间。 - $.fs.read 和 $.fs.write:单个文件 4 MiB。一个 Text 字符串和一个 Code 元素:10,000 个字符。对长文件分页。 - $.store:总共 4 MiB JSON,由机器上的所有会话共享。为每个条目使用独立键。限制每个列表的大小。 - $.process.run:默认 30 秒。 - 重绘:可见窗格每秒 30 次,其他位置每秒 10 次。 - 模组自行打开的窗格仅在 144 列或更宽时显示。用户命令或按键打开的窗格在任何宽度下都显示。从命令和按键打开窗格。 键盘规则: - 模组不能绑定 Tab 或方向键。Tab 在控件之间移动。Up 和 Down 在控件之间移动或滚动。 - Button 热键是一个数字或一个小写字母。当 Input 获得焦点时,每个可打印键都进入 Input。 - 为每个控件指定唯一键。测试通过按键按下控件。 - Claude Code 没有 tabs 元素。将标签页绘制为一行普通按钮。 状态: - 模块变量:每次重新加载时丢失。用于可以丢失的值。 - $.state:持续整个会话,并重绘读取该值的位置。在 types/index.d.ts 中声明每个值,并在清单中命名该文件。 - $.store:在会话之间持续。用于设置、最近会话和项目。 </api_rules> <repository_layout> .claude-plugin/marketplace.json 每个插件一个条目,市场名称 = MARKETPLACE plugins/file-explorer/ plugins/workspace/ plugins/ide-usage/ plugins/ide-statusbar/ README.md LICENSE PROGRESS.md LIMITS.md tests.json 每个插件: .claude-plugin/plugin.json 名称、版本 0.1.0、描述、作者 = AUTHOR_NAME、许可证 = LICENSE、需要时提供 types hooks/hooks.json { "modules": ["./register.ts"] } hooks/register.ts 唯一调用 "$" 的文件 hooks/lib/*.ts 纯逻辑 types/index.d.ts PluginState 以及模组添加的任何命名空间 tests/*.test.ts "claude plugin test" 的测试 </repository_layout> <mod name="file-explorer"> 命令:/explorer 打开窗格(id "explorer",标题 "Explorer",focus true,列数 PANE_COLUMNS)。使用 immediate: true 注册命令,以便在回合期间工作。再次输入 /explorer 关闭窗格。/explorer <path> 打开该路径。 标题行:单词 EXPLORER,然后是 Back、Forward、Up、Close。Back 和 Forward 在已打开的文件夹和文件历史中移动。 标题下方有一个 Input。其用途随标签页变化: - Files 标签页:占位符 "Find files"。Enter 在根目录下搜索文件名和路径。搜索忽略大小写。最多 500 个匹配并显示:N files match "query" (first 500, scan stopped)。将匹配项显示为带父文件夹的树。标记匹配文本。空查询恢复树。 - Code 标签页:占位符 "Find in file, :line, or /regex/"。纯文本查找每个出现位置。":42" 跳转到第 42 行。"/re/" 使用正则表达式。显示 "match 2 of 5"。按钮 n 和 p 转到下一个和上一个匹配。 标签页:Files、Code、Diff。 Files 标签页: - 根行:根文件夹名称和完整路径。第一个根是会话工作文件夹。Up 将根移动到父文件夹。 - 操作行:New File、New Folder、Refresh、Collapse、More。New File 和 New Folder 通过 Input 询问名称,并在所选文件夹中创建条目。More 包含 Rename、Delete、Copy path 和 Show hidden files。Delete 使用 $.ui.ask 请求确认。 - 树:当用户打开文件夹时读取一个文件夹层级。先按名称排序文件夹,再排序文件。显示文件夹状态标记、已知文件类型的短类型标签(json、md、ts、js、py、rs、go、sh),以及符号链接的 "name → target"。空文件夹显示 "(empty)"。除非隐藏文件开启,否则跳过 .git 和 node_modules。 - 选择和分页:一个选中行。按钮上下移动选择、打开文件夹、关闭文件夹、打开文件。显示范围,例如 "7-49 of 329"。只绘制适合 e.props.scroll.bodyRows 的行。 Code 标签页: - 路径面包屑,然后是 "N lines · size"。 - 行号和语法颜色。使用 Code 元素。对文件分页,使任何元素不超过 10,000 个字符。 - 对于大于 4 MiB 的文件或二进制文件,显示大小和消息。不要读取文件。 - 高亮当前匹配和当前行。 Diff 标签页: - 显示打开文件的未提交差异(该路径的 git diff)。在 diff 模式下使用 Code 元素。 - 显示添加和删除的行数。 - 当 Claude 使用 Edit、Write 或 MultiEdit 编辑文件时,在 next(e) 返回后记录 https://t.co/Lb6btDn0iW hook 中的路径。如果窗格已打开,选择该文件并显示 Diff 标签页。不要自行打开窗格。 - 如果文件夹不是 git 仓库,用一行说明。 其他模组通过此模组添加到模组 API 的命名空间打开文件:https://t.co/crzRXVIH3H({ path, line, tab })。在 types/index.d.ts 中声明命名空间。阅读 "telemetry" 内置模组,了解模组如何为其他模组添加方法。 </mod> <mod name="workspace"> 依赖 file-explorer(在 plugin.json 的 dependencies 下列出)。 命令:/workspace 打开导航器窗格(id "workspace",标题 "Workspace",列数 PANE_COLUMNS)。 导航器位置:文档中窗格的位置是转录文本旁边的停靠区,Claude Code 为每个打开的窗格提供一个带标题的标签页。在类型中搜索将窗格放在左侧的字段。如果存在,将导航器放在左侧,工具放在右侧停靠区。如果不存在,导航器就是停靠区中的另一个窗格。在 LIMITS.md 中记录结果。 导航器内容,从上到下: 1. 标题 CLAUDE CODE 和 New chat 按钮。New chat 运行启动新对话的内置命令。使用 $.command.list 查找命令名称。 2. WORKSPACE:每个工具一个按钮,顺序为:Files、Terminal、Browser、Source Control、Problems、Run Tasks、Outline、To-do Comments、Timeline、Usage、Model Router。按下会打开该工具窗格并赋予焦点。标记已打开的工具。 3. RECENTS:最新的 5 个会话,带 "Show more"。每行显示标题、项目名称和时长(8m、22h、3d)。标题是会话的第一条提示,截断以适合。按下某行会在该行下方显示该会话的提示。标记当前会话。 4. PROJECTS:每个项目文件夹及其会话数。按下显示该项目的会话。 会话索引:在 prompt.submit hook 中,将 { id, cwd, repo, title, prompts[], updatedAt } 写入 $.store,键为 "session:<id>"。为每个会话保留最新的 50 条提示,保留最新的 200 个会话。每次写入前重新读取存储,因为其他会话写入同一存储。不要读取或解析 Claude Code 自己的转录文件。 打开最近会话:在类型中查找支持的方法来切换或恢复会话。如果不存在,使用 $.ui.copy 复制 "claude --resume <id>" 并显示说明的 toast。 工具。每个工具是一个独立窗格,有自己的 id、短标题和 Refresh 按钮。每个工具在没有数据或其程序缺失时显示一行清晰说明。 1. Files:使用会话文件夹调用 https://t.co/crzRXVIH3H。不绘制第二棵树。 2. Terminal:一个 Input,使用 $.process.spawn 在会话文件夹中运行一个命令。将输出流式传输到窗格中。保留最后 500 行。显示退出代码。保留 50 条命令历史。Stop 按钮结束进程。这是一个命令运行器,不是终端模拟器;在 README 中说明。 3. Browser:一个 URL 的 Input。使用 $.http.fetch 获取。显示状态码、页面标题和可读文本为 Markdown,截断到元素限制。将链接显示为加载链接的按钮。"Open in system browser" 按钮使用操作系统的 open 命令。只允许 http 和 https。 4. Source Control:分支、领先和落后计数,以及带状态和 "+added −removed" 的更改文件,来自 git。按下文件调用 https://t.co/crzRXVIH3H,tab 为 "diff"。按钮:Stage、Unstage、Stage all。commit Input 在 $.ui.ask 确认后提交暂存文件。不要 push、pull、reset 或丢弃更改。 5. Problems:运行项目的检查命令,并将每个问题列为 "file:line message",带严重性标记。检测命令:tsconfig.json 用 tsc --noEmit,Cargo.toml 用 cargo check,go.mod 用 go vet,pyproject.toml 在安装 ruff 时用 ruff check。用户设置替换检测到的命令。按下调用 https://t.co/crzRXVIH3H 并带行号。仅在 Refresh 和回合结束后运行,并且不要同时运行两个检查。 6. Run Tasks:显示会话文件夹。在 package.json scripts、Makefile targets、justfile recipes、Cargo.toml(build、test、clippy)、pyproject.toml scripts 和 go.mod(build、test、vet)中查找任务。如果未找到,显示:No task found (package.json, Makefile, justfile, Cargo.toml, pyproject.toml, go.mod)。每个任务一个按钮。一个 Input,占位符 "Run a command, then Enter"。流式输出并显示退出代码和时间。 7. Outline:资源管理器中打开文件的符号,带行号:函数、类、结构体、接口、常量和 Markdown 标题。每种语言使用一个小模式表(ts、js、py、rs、go、md)。缩进嵌套符号。按下调用 https://t.co/crzRXVIH3H 并带行号。 8. To-do Comments:在项目中查找 TODO、FIXME、HACK 和 NOTE 注释。安装 rg 时使用 rg。否则,使用 $.fs.list 遍历树,跳过 .git、node_modules、target 和 dist。按标签分组。显示 "file:line text"。上限 300 项。按下调用 https://t.co/crzRXVIH3H 并带行号。 9. Timeline:本会话中每条提示、工具调用和回合结束一行,最新的在前,带时钟时间。对于 Edit 和 Write,显示路径和行数。按下编辑行调用 https://t.co/crzRXVIH3H,tab 为 "diff"。保留 300 行。 10. Usage:读取 $.session.usage()。显示上下文百分比、令牌和窗口,带条形图。显示每个速率限制的已用百分比和重置时间。如果字段有值则显示成本。在 session.measure hook 中记录每回合的令牌数,并将最后 30 个回合绘制为小型条形图。在终端中使用 Raster,在其他表面使用文本(检查 e.surface)。 11. Model Router:显示主会话的模型,以及每个子代理启动的类型、模型和状态。Select 中有三种模式:Off、Suggest、Auto。Off 仅记录。Suggest 显示规则选择的模型且不改变任何内容。Auto 在 agent.spawn hook 中根据规则表(子代理类型或任务关键字 → 模型)设置子代理的模型,规则表由用户在窗格中编辑并保存在 $.store 中。规则:绝不更改主会话的模型,保留调用者指定的模型,如果规则失败则让启动保持不变。从会话和设置中读取模型名称。不要将模型名称写入代码。默认模式是 Off。 </mod> <mod name="ide-usage"> 使用 $.ui.status 显示一行状态:"ctx 20% · <model>"。在 session.measure hook 中更新。无窗格。 </mod> <mod name="ide-statusbar"> 使用 $.ui.status 显示一行状态:"<language> · <file name>",对应资源管理器中打开的文件,或 Claude 最后读取或编辑的文件。从文件扩展名推导语言。未知扩展名显示 "Plain Text"。无窗格。 </mod> <out_of_scope> - 多个会话的窗口标签页(例如 ⌘1 和 ⌘2)。终端应用绘制这些。模组不能。 - 窗格中的完整文本编辑器。Input 只有一行。 - 权限提示的更改。模组不能在那里绘制。 不要添加本提示中没有的功能。不要添加没有功能需要的配置选项。 </out_of_scope> <safety> 模组以用户权限运行且不受沙箱保护。编写谨慎审查者接受的代码: - 在删除、重命名和提交之前使用 $.ui.ask 确认。 - 绝不运行破坏性 git 命令。绝不代表用户批准工具调用。绝不将文件内容或提示发送到网络。Browser 工具只获取用户输入或按下的 URL。 - 不要读取功能不需要的环境变量或设置。"claude plugin validate" 列出环境读取和调用;保持该列表简短。 - 将参数作为数组传递给 $.process。不要从文件名构建 shell 字符串。 在构建期间,只编辑此仓库内的文件。不要推送。不要将插件安装到我的用户设置中。在难以撤销的操作之前询问我。 </safety> <workflow> 此任务很长。你的上下文会自动压缩,所以不要为了节省令牌而提前停止。将状态保存在文件中,以便新上下文可以继续: - PROGRESS.md:已完成内容、下一步内容,以及每个决策及其原因。 - tests.json:每个验收测试一个条目,状态为 not_started、failing 或 passing。 - LIMITS.md:已安装 API 无法实现的每个功能,以及你构建的替代方案。 - 每个通过的功能一个 git 提交。 在每个新上下文开始时:读取 PROGRESS.md、tests.json、LIMITS.md 和 git 日志。在添加功能之前运行测试套件。 阶段 0,调查。运行 /plugin-authoring。运行 "claude --version"。阅读文档页面和 "diff" 内置模组。然后编写 PLAN.md:每个功能使用的事件和方法,以及证明每个存在的类型行。列出每个需要不同设计的功能。向我展示 PLAN.md 并继续,除非我反对。 阶段 1,脚手架。创建仓库布局、四个清单、hooks.json 文件,以及只注册其命令的空 register.ts 文件。对每个插件运行 "claude plugin validate --strict",直到通过。然后停止并给我这个命令以热重载重启: claude --plugin-dir ./plugins/file-explorer --plugin-dir ./plugins/workspace --plugin-dir ./plugins/ide-usage --plugin-dir ./plugins/ide-statusbar 在我输入 "continue" 后,读取 .claude-plugin/types/ 中生成的类型并修正 PLAN.md。 阶段 2,file-explorer。按此顺序构建:树模型和 Files 标签页、文件搜索、带查找的 Code 标签页、Diff 标签页、https://t.co/crzRXVIH3H。在代码之前为其功能编写测试。 阶段 3,workspace。先构建导航器和会话索引。然后按列出的顺序构建工具。完成并测试一个工具后再开始下一个。 阶段 4,状态行。构建 ide-usage 和 ide-statusbar。 阶段 5,发布。编写 marketplace.json、LICENSE 和 README.md。README 提供:每个模组的功能、安装命令(claude plugin marketplace add、claude plugin install <name>@MARKETPLACE)、你测试的 Claude Code 版本、命令、热键、每个模组可访问的内容(来自 validate 的 "hooks:" 和 "calls:" 行),以及 LIMITS.md 的内容。运行完整验证。 直接工作。仅在需要跨多个文件搜索且不需要你的上下文时使用子代理。 </workflow> <tests> 测试使用 "claude plugin test" 运行,不需要会话和网络。测试触发事件、通过按键按下控件,并检查绘制或结果。桩 $.fs、$.process、$.http 和 $.store。 编写检查行为的测试,例如: - 在桩树中搜索 "auth" 返回正确的文件,标记匹配文本,并在 500 处停止。 - ":42" 选择第 42 行。"/re(fresh)?/" 找到正确的匹配。无效正则表达式显示错误行且不抛出。 - 按下 Source Control 行调用 https://t.co/crzRXVIH3H,tab 为 "diff"。 - 没有清单文件的 Run Tasks 显示 "No task found" 行。 - 缺失的 git 程序给出清晰的一行且无错误。 - 会话索引保留 200 个会话,并与另一个会话的较新写入合并。 - Model Router 在 Off 模式和 Suggest 模式下返回 next(e) 不变。 编写对每个有效输入都正确的通用代码。不要编写只满足测试的代码。不要删除或削弱测试以使其通过。如果测试错误或功能不可能,告诉我。 </tests> <done_when> 1. 每个插件的 "claude plugin validate --strict" 通过。 2. 每个插件的 "claude plugin test" 通过,tests.json 中没有 failing 或 not_started 条目。 3. 每个插件的 "tsc -p" 针对生成的类型报告无错误。 4. 每个命令在 "claude -p" 中响应(例如:claude -p "/explorer" --plugin-dir ./plugins/file-explorer)且无错误。 5. LIMITS.md 列出与本提示的每个差异。 6. 你提供一份清单,列出只有人能在实时会话中检查的项目:每个窗格打开、热键工作,以及布局在 110 列和 144 列下适合。 </done_when> <reporting> 每个阶段后,写一份简短报告:你构建了什么、运行的确切命令及其结果,以及未验证的内容。区分 "测试通过" 和 "我在会话中看到它工作"。如果你没有运行某件事,说明你没有运行。 </reporting> [提示结束]

登录以查看完整提示词

继续使用:

登录即表示你同意我们的 使用条款 和 隐私政策

用法

此提示词专为 coding 设计。复制上方内容并粘贴到你常用的 AI 工具中。

为获得最佳效果,可将占位符(方括号或大写字母标示)替换为你的具体需求。

参考资料

分类:coding| twitter| claude-code| typescript

讨论