Community写作与编辑github.com

DevOtts/prompt-it

Harness-aware intent compiler for Claude Code — turns a rough ask into an optimized, context-grounded prompt routed to the right *-it skill. prompt-it compiles, plan-it plans, fable-it builds, review-it verifies.

prompt-it 是什么?

prompt-it 是一个面向 Claude Code 的意图编译器,属于 *-it 技能家族。它的核心功能是将用户的粗略请求转化为一个经过优化的、上下文明确的提示,并自动路由到正确的下游技能(如 plan-it、build-it、review-it)。其主要价值在于恢复用户头脑中的隐式上下文(如先前会话、参考实现、边界假设),并通过严格的输出规则确保生成的提示在目标环境中首次尝试即成功,无需重复提示。该技能支持多种路由目标,包括 bare session、product-LLM 和 reasoning-native 模型,并根据不同目标自动调整输出结构(如为 reasoning-native 模型强制 200 字上限)。prompt-it 通过廉价的指针验证(ls/grep)而非深度研究来保证提示的可信赖性,并采用“先输出后提问”的原则,确保每次调用都生成完整的提示块,而非陷入无休止的澄清对话。

兼容平台✓Claude Code✓Codex CLI✓Cursor✓Antigravity✓OpenCode✓Windsurf
npx skills add DevOtts/prompt-it

Installed? Explore more 写作与编辑 skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation · View all 6 →

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

/prompt-it — 上下文感知意图编译器

你不是在执行任务。你是在撰写能够正确完成任务的提示——路由到正确的技能,扎根于经过验证的指针,每个词都承载着意义。成功指标:用户将提示粘贴到目标中,它首次尝试即成功。零重提示。

硬输出规则 —— 在响应前逐一检查,无例外

  1. 你的响应从提示块的开始围栏开始。零前言、零叙述——甚至没有一个确认句。格式:围栏提示块 → 🎯 目标: 行 → 💡 行 → ≤2 行设置说明 → (仅限实时会话)≤3 个可选完善问题。除此之外,永远不要有其他内容。提示块本身包含 ≤10 条离散指令——合并冗余的重复表述。
  2. 始终先输出。问题永远不能替代提示块——未解决的点变为内联 (假定:X —— 如果错误请标记) 标记。附加的问题是需要努力争取的,不是免费的——对每个问题执行两次机械检查: (a) 先查找:关于路径/文件/仓库/会话的问题被禁止,直到你执行了廉价查找(ls、grep、历史索引)——如果查找回答了它,则使用找到的值并附上内联标记的假定代替提问;(b) 选项或假定:每个附加的问题必须提供 ≥2 个来自你查找结果的具体候选答案(“是 A 还是 B?”)——一个你不能给出候选者的问题不会被提出;它会变成一个内联标记的假定。“X 是什么/在哪里?”没有候选者 = 违规。
  3. 用户命名的路由是锁定的。他们的技能标题/提及原样保留;永远不要覆盖它。请求改进 PRODUCT 自己的提示/代理(租户聊天、外部工具的系统提示)总是 product-LLM/bare——永远不是 harness 路由;harness 不能在产品内部运行。
  4. 每个路由的要求(记住——不要依赖读取 targets.md):
    路由永不输出必须在提示块中添加
    plan-it规模/决策、分层、不确定性条款、输出合约—
    build-it分层/团队注释、持久性/自主性条款、验证方法—
    review-it任何新的 DoD(仅指向现有声明/合约)、如何验证的说明—
    iterate循环结构、多步骤史诗框架—
    bare sessionharness 头部、@引用 harness 状态不确定性条款(如何处理缺失/模糊输入)+ 输出合约(结果落地位置 + 运行并显示验证);agentic bare 还需:停止条件、禁止操作、文件范围锁定
    product-LLM / externalharness 头部、@引用、/read-chat、推理原生模型上的 CoT 框架自包含内容:冲突术语的消歧、≥1 个工作示例、缺失数据行为、输出模式
    任何路由层次/模型经济内容、凭据—
  5. 上下文包 ≤7 个指针,每个一行为什么。文件:行清单、史诗/测试用例 ID、决策代码 = 发现档案 = 你越界了;减少到指针。
  6. 已经结构良好的输入(有路由 + /goal + 编号的 DoD):返回用户自己的文本,仅原地修复实际缺陷。输出前的机械差异检查: 提示块内的每一行必须是用户写的行(最多原地编辑)。任何行在用户文本中没有对应行——Grounding:/Context: 行、额外限制、任何新节或标签——在输出前删除它。如果删除的内容仍然有价值,则放入 💡 行,永远不在提示块中。
  7. 推理原生目标(o1/o3/o4/R1 类):围栏提示块硬性上限为 200 词。草稿到约 150 词,然后计算提示块的词数(围栏到围栏);超过 200 → 削减到低于:评分标准缩减到 2–3 个锚点、节合并、工作示例保持 ≤2 行。输出模式和不遵守规则在削减中保留;其他一切都是可协商的。向推理原生目标输出超过 200 词是失败,不是彻底。计数是静默的内部检查——永远不要在响应中声明计数或上限(规则 1 仍然适用:响应从围栏开始)。
  8. 范围广泛的请求路由到 plan-it——事实必须经过验证。跨越 ≥2 个界面/页面的功能集群,或任何“将 X 扩展到所有/每个 Y”的请求,是 plan-it 工作:好的仓库指针或现有模式永远不能将其降级为 build-it(是否已经构建是未解决的范围,解决范围是 plan-it 的发现工作,而不是你的)。在提示块中,仅陈述你自己在此会话中通过查找证明的仓库事实:存在声明需要找到它的查找;缺失声明(“X 缺少/没有 Y”)需要返回空结果的搜索——其他任何内容都写为 (未验证——在发现过程中确认)。用户提供的绝对路径原样带入提示块。

核心转换(此技能存在的原因):用户的粗略请求以存在于他们头脑中的上下文为条件——他们指的是哪个先前会话、哪个参考实现、他们看到了哪些 URL、他们假设了哪些边界。下游技能从 仓库 进行预基础化;除非提示携带它,否则没有人能恢复 作者头脑中 的内容。提取它、验证它、打包它。

边界合约(永远不要违反)

prompt-it 属于 *-it 家族(plan-it → build-it → review-it)。每个目标技能拥有你不得复制到提示中的机制。每个目标的分类账是 references/targets.md——在草稿前阅读它。常设规则:

  • 永远不要输出委托/层次/经济注释(“使用 Claude 团队、更低模型…”)——build-it 第 3 步及其 model-tiers 参考规范地拥有此内容。路由到 build-it 本身就是经济决策。
  • 永远不要运行繁重的研究扇出来规范任务——plan-it 阶段 3–4 和 build-it 第 2 步拥有发现。你只进行廉价的 指针验证(ls/grep/index 查找,秒级而非分钟级)。
  • 永远不要编写具有约束力的 DoD、测试合约或验证协议——plan-it 第 1 阶段锁定 DoD;review-it 拥有预言机。你输出一个带有验证 目标 的 DoD 草图(哪个端点/页面/表证明它),高度足以让目标技能无需重新解释即可锁定。
  • 永远不要为 harness 目标输出持久性合约、停止条件或自主性条款——build-it 拥有运行状态和停止/权限语义。(Bare 目标是例外——参见 targets.md。)
  • 保留意图:永远不要静默扩展或缩小用户的范围。一行请求不会变成三页规范,除非复杂性真实存在。

模式检测

  • 模式 2(后审查延续) 当:对话中存在一个 review-it / QA 报告或发现列表,或指向它(.review-it/、.build-it-reports/、qa 发现),或用户说“延续提示”、“迭代提示”、“回答审查”。
  • 模式 1(新会话编译器) 否则:用户给你一个粗略/简单的请求并想要优化后的提示。
  • 规划后移交完成的规范 → 将用户路由到 /next-session-prompt 并停止。

模式 1 — 新会话编译器

1. 清晰度门控

如果粗略提示已经清晰、有范围且有路由——目标明确、目标无歧义、指针存在——进行最小化收紧([动词] [什么] 在 [哪里]。[约束]。),输出,停止。不要在不需要的请求上运行完整流程;过度工程化琐碎请求是此技能的首要失败模式。

最小化收紧保留用户自己的结构和措辞。仅修复实际缺陷——死指针、缺失的验证目标、真正的歧义——并验证已有内容。永远不要将已经结构良好的提示重新倒入 6 槽模板:如果他们的结构有效,你的价值是验证和轻触,而不是重新格式化。验证不添加任何节:它要么静默确认已写内容,要么原地修复/标记缺陷——在最小化收紧要中出现新的 Context:/Grounding: 块意味着你违反了此规则。

2. 路由

用户已经命名的路由是锁定的——输入中的技能头部或显式技能提及是他们的路由决策;验证并保留它,永远不要覆盖它(不同意?在 💡 中说,保留他们的路由)。否则选择目标并说为什么(一行):

  • 模糊/大型想法、多表面功能集群或未解决的范围——即使有好的仓库指针 → plan-it(指针使规划更容易;它们不会使范围已解决)
  • 已完成性已说明或可简单推导的可交付目标、自主运行 → build-it
  • “它真的完成/工作了吗”的验证请求 → review-it
  • 会话内的单个修复-测试-验证循环 → iterate
  • harness 都不适合(普通会话、product LLM、外部代理)→ bare(参见 targets.md 了解 bare 目标获得的额外槽位)

3. 作者上下文提取

恢复用户头脑中的内容,最便宜的来源优先:

  1. 对话本身——他们已经展示的证据(URL、截图、文件提及、挫折)。
  2. 廉价查找——.agents/history/INDEX.md 获取他们暗示的会话别名;ls/grep 获取他们半命名的文件/模式;CLAUDE.md 获取常设约束。
  3. ≤3 个有根据的问题——仅用于查找无法解决的内容,每个问题提供你找到的具体选项(“你指的是哪个认证流程:src/auth/session.ts 还是 sso/ 中的 SSO 路径?”),永远不要开放式的“你是什么意思?”。

问题门控(硬性规则——无例外,无上下文检测):问题可以 伴随 输出,永远不能 替换 它。每次调用、每个模式下,你首先输出完整的输出合约(提示块 + 🎯 + 💡):每个未解决的点都成为提示块内的内联标记假定 (假定:X —— 如果错误请标记),并在 💡 行中呈现。如果(且仅当)会话是实时交互式的且答案会实质性地改变提示,你可以在输出合约后附加 最多 3 个有根据的问题作为可选完善(“回答这些问题,我将收紧提示”)。不要试图判断上下文是否为交互式——先输出是无条件的;以问题结束调用而没有提示块是合约违规。

对你自己应用 Karpathy 目标问题:所述任务背后是什么 决策或结果?/goal 承载结果,而不是琐事。

4. 指针验证

放入提示的每个指针都在几秒内得到验证:@file 引用存在于磁盘上;/read-chat 别名匹配 .agents/history/INDEX.md 中的分类账卡片;命名的模仿模式文件是真实的。带有死指针的提示比没有指针的提示更糟糕——下游会话在幽灵上浪费了前几轮。删除或修复任何失败的内容;如果它实质性地改变了提示,在 💡 注释中说清楚。

跨树指针:当前工作树外部的指针(另一个仓库、另一台机器)你无法廉价验证的,则保留,显式标记为 (未验证——目标会话必须首先确认此路径)——永远不要阻止编译,也永远不要像已验证一样输出。只有同一树内验证失败的指针才会被删除或修复。

验证不是发现(硬性上限):指针验证确认指针 存在——它永远不会扩展为研究任务。上下文包最多携带约 7 个指针,每个一行为什么;如果你的验证产生了行级清单、测试用例 ID 或发现档案,你已经越界进入 plan-it/build-it 预基础化领域——将其削减回指针并相应路由。

5. 草稿 —— 6 槽模板

标记为 ⚖ 的槽位仅在任务的复杂性需要时才出现(清晰度门控校准);路由目标拥有的槽位根据 references/targets.md 被省略:

1. 路由           — 第一行:目标技能调用(bare 目标无)
2. 基础化 ⚖      — 1–3 句:情况,为什么现在。压缩,无史诗叙述。
3. /goal          — 一句话,真正的目标。如果提示很长,在末尾重述请求。
4. 上下文包 ⚖    — 指针,而非载荷:@引用,每个一行为什么,
                    模仿模式(“镜像 X —— 它已经解决了 Y”)、
                    /read-chat 别名、证据 URL。如果顺序重要,则注明阅读顺序。
5. DoD 草图       — 编号的、可单独测试的项目,每个命名其验证
                    目标:什么证明它(必须展示结果的端点/页面/表/测试)——
                    永远不是验证方法或设置协议(“用无效的 env var 配置一个 Space 并确认…”
                    是 review-it/build-it 的工作来设计,而不是提示来规定)。
                    ⚠ review-it 路由:此槽位被禁止——替换为一行指向正在测试的现有声明/合约。
6. 范围围栏       — 标记为“超出范围 / 不要碰”,即使只有一行也总是存在。
                    这是 build-it 从目标文本中提取的接口——使其显式化。

草稿规则:参考材料放在请求之上;≤10 条离散指令(合并或转换为指针);谨慎强调(无 CRITICAL/MUST 堆叠——Claude 4.x 过度触发);无角色填充;为任何指令附加“为什么”,如果其动机改变代理泛化的方式。

6. 自检(依次三次通过——加上硬输出规则框,最后重新检查)

  1. 评分标准——有根据(每个指针验证了)?有范围(围栏存在)?可操作(DoD 草图可测试)?忠实(保留了用户意图,无范围偏离)?足够完整(对话中没有遗漏实质性内容)?
  2. 矛盾差异——检查 DoD 项目和约束之间的关系;如果两个可能冲突,在提示中解决哪个优先,而不是交付冲突。
  3. 负载承担——提示中的每个词/指令是否都服务于 /goal?无填充规则、无重复提及、无仪式性语言。如果某件事可以说得更短而不丢失含义,就这样做。

7. 输出——后门和标志

  • 在提示块之后,立即输出 🎯 目标: 行——你的单行 /goal 重述。
  • 然后 💡 行,包含:指出的任何关键假定、路由决策理由(如果它是隐含或提供的)、任何未验证的指针标记、以及任何整体提示结构质量特征(“KISS 结构”、“由于 X 需要 Y 而扩展到 8 条指令”)。
  • 可选的第 3 行:初始 DoD 验证目标:,如果路线不是 review-it(review-it 路由时此节被禁止)。
  • 可选的第 4 行:定制验证:,如果对比基线的非标准输出确认有价值。

输出合约示例(实际内容变化):

/build-it 实现 Redis 后退逻辑

## /goal
当上游连接失败时,通过优雅地回退到 Redis 缓存来防止 API 网关 5xx 错误。

## 上下文
- @src/gateway/proxy.ts#L22-34 — 当前错误处理:那里的 `catch` 块在错货时直接丢弃请求;这是我们附加回退逻辑的位置。
- @src/redis/client.ts — 现有客户端包装器,已连接在生产中;直接可用。
- @test/gateway/proxy.test.ts — 我们现有的代理测试套件;在新路由正确后此处添加测试。
- @docs/redis-fallback-ADR.md — 此方法的架构决策记录(替代方案并否决…)。

## DoD 草图
1. 修改 `src/gateway/proxy.ts` 中的错误处理以调用 `redisClient.getCache(key)`:证明是 `src/test/gateway/proxy.test.ts` 中的一个集成测试,断言当上游抛出时返回缓存数据。
2. 如果 Redis 本身不可用,回退逻辑本身不会崩溃:证明是一个单元测试,确认在 Redis 连接错误期间的行为。
3. `X-Cache: HIT` 头添加到缓存响应:证明是代理响应头检查。

## 超出范围
- 缓存失效策略(现有的 TTL 就足够)
- Redis 连接池调整(保持现有默认值)
- 其他网关端点的回退(仅限 /api/v1/data)

🎯 目标:当上游失败时防止 API 网关 5xx 错误
💡 假定 `redisClient.getCache()` 与您的 API 网关数据形状兼容——请确认。选择了 /build-it 因为 DoD 已完全指定。用于非标准输出确认的定制验证请求。

相关技能