
oh-my-pi 工程散文改写指南用 implementation-scratchpad 语体重构系统提示词【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi导读本指南围绕 rewrite-system-prompt.style.md 展开它是 oh-my-pi 项目用于把自然语言风格的提示词文档改写成极简实现草稿implementation-scratchpad语体的风格规范。文章会完整解析风格规则、硬性约束与 JSON 协议并结合 rewrite-system-prompt.ts 的实现细节说明哪些行会被改写、哪些行必须逐字节保留、改写结果如何被校验。读完你既能独立套用这套语体改写自己的提示词文档也能理解自动化管线背后的行分类、令牌保全与容错回退机制。一、这份风格文档是什么从工程散文到实现草稿oh-my-pi 的 Agent 系统提示词默认输入为 packages/coding-agent/src/prompts/system/system-prompt.md中包含大量面向 LLM 的自然语言指导。风格文档定义了一种刻意未完成感的语体模仿工程师边写代码边记笔记的思维流删掉主语、冠词和toThe color wheel is hidden写成Color wheel hidden以固定小动词集合开头Need、Could、Well、Lets等用松散小词不断对冲maybe、perhaps、could、~、okay散布在从句中间形成思考的质感以单词式裁决收尾Fine.、Good.、Nice.、complicated.这种风格的价值在于它把决策过程在多个方案间权衡、否定、锁定压缩进极短的句子让模型在推理时以最小 token 开销完成同样的规划同时保留原始的技术判断逻辑。二、风格规则的完整拆解文档# Style一节共给出 11 条具体规则逐条展开如下。2.1 删除冠词、主语与不定式 to规则原文Drop articles, subjects, and to. Strip a, the, I, and the infinitive to wherever the meaning survives.在语义不受损的前提下一律去掉冠词a、the主语I不定式符号to示例对照原句工程散文改写后scratchpadI need to render the SVG backgroundNeed render SVG backgroundThe color wheel is hiddenColor wheel hidden2.2 以小动词集合开启从句规则原文Open clauses with a small fixed set of verbs. Most sentences start with Need, Need maybe, Need perhaps, Could, Well, or Lets.动词选择承载语义状态Need未解决的待办事项unresolved to-dosWell / Lets刚刚拍板的决策decisions youve just committed to。文档给出一个关键范例说明选择如何被锁定The shift from Need maybe set palette width… to Well set .wb-pen-rack… is how a choice gets locked in.即先用Need maybe试探一旦决定就用Well收口动词本身即体现决策状态机。2.3 用裸语气词持续对冲规则原文Hedge constantly with bare particles. maybe, perhaps, could, might, ~, okay.语气词不放在句首做铺垫而是散布在从句中间width 420 maybe okheight 220 maybe文档强调The hedging is the texture; dont smooth it out.对冲本身就是语体的纹理不允许被平滑掉。2.4 以单词式裁决收尾规则原文End deliberations with one-word verdicts as full sentences. Fine. Good. Nice. complicated. Fine.一个讨论线程以完整句子的单个裁决词关闭。典型模式是抛出想法 → 指出问题 → 一笔带过transform scale? complicated. Fine.2.5 自问自答同一口气内解决规则原文Self-interrogate, then resolve in the same breath.提出片段式问题后立刻回答或挥开For smaller viewport, width 420 maybe ok. In screenshot browser 1200.We have width 420; max-width calc. But control positions fixed…2.6 用裸 But 转折规则原文Pivot on a bare But. Mid-thought reversals get a lone But with no setup.思维中途的反转用孤立的But开头不做任何铺垫Could use scale? Not needed? … But to get proper arc positions, flex plus transform works okay.2.7 用分号串联微从句内联原始数字与单位规则原文Chain micro-clauses with semicolons; inline raw numbers and units.不要叙述测量过程直接把数字丢进句子width constant 280; visible width 420absolute left 82 top 24, height 1122.8 压缩因果关系规则原文Collapse cause and effect. Conditionals get telegraphed.条件句被电报化压缩If color hidden, width row stays.For eraser state, no swatches means width row maybe still at y 157.2.9 不设框架地穿插代码片段规则原文Interleave code fragments without framing.在推理中途直接丢入代码不需要这里是代码之类的引言代码之后继续散文width 420; max-width calc:max-width: calc(100% - 40px);But control positions fixed…2.10 保持现在时与中性情绪规则原文Stay in present tense, neutral affect. No feelings, no let me think, no recap of what you just did.不允许出现情绪、let me think、或对已完成动作的回顾始终保持问题上的纯前向推进。三、硬性约束Hard constraints令牌保全是第一优先级风格规则之上文档列出 5 条不可违背的硬性约束其中最重要的是第一条——技术令牌逐字节保全3.1 所有技术令牌必须原样保留Preserve every technical token EXACTLY as written, with the same characters, casing, and number of occurrences.受保护的令牌类型包括反引号代码段like thisXML/HTML 标签like-this模板表达式{{like.this}}URL、文件路径、flag、命令名、API 名、数字、单位约束明确说明如果压缩从句会导致这些令牌丢失就保留该令牌——任何令牌缺失都会导致改写被拒绝the rewrite is rejected when any token goes missing。绝不重写、重排、拆分或删除代码段/标签/{{…}}表达式的内部内容。这一约束直接呼应了目标文件的形态——system-prompt.md 中大量使用 XML 标签system-conventions、Handlebars 模板表达式{{#if …}}、{{#each skills}}、{{toolRefs.think}}和内联代码段这些结构性令牌一旦被改写就可能破坏提示词模板的渲染逻辑。3.2 RFC-2119 关键词保持大写MUST、MUST NOT、REQUIRED、SHOULD、SHOULD NOT、RECOMMENDED、MAY、OPTIONAL、NEVER、AVOID即使被去掉主语也必须保持大写You MUST load context→MUST load context而不是must load contextYou NEVER yield→NEVER yield这与 system-prompt.md 开头system-conventions中RFC 2119的约定完全一致——大写本身就是被解析的语义。3.3 子句起始动词大写Need、Could、Well、Lets、Check、Risk、Fix、Run、Fine、Good、Decision等草稿起始动词需要大写。3.4 只改写不翻译、不注释、不总结Rewrite only. Do not translate, annotate, summarize, or explain. No commentary.输出中禁止任何元评论。3.5 一对一映射One fragment in maps to exactly one fragment out. Never merge two fragments, never split one, never reorder.输入片段与输出片段严格一对一禁止合并、拆分或重排。四、协议ProtocolJSON 批处理格式文档定义了模型与调用方之间的通信协议输入单个 JSON 对象每个片段带整数id和原始文本{items:[{id:1,text:fragment},{id:2,text:fragment}]}输出同构 JSON 对象id一一对应顺序可任意{items:[{id:1,text:rewritten fragment},{id:2,text:rewritten fragment}]}硬性要求响应中只能有这个 JSON 对象前后不允许任何 markdown 围栏或散文返回的条目数量 MUST 等于输入条目数量且id必须一致每个text值 MUST 是合法 JSON——内部的每个双引号和换行都必须转义。五、源码实现rewrite-system-prompt.ts 如何执行这套规范风格文档不是孤立的规范文本它被 rewrite-system-prompt.ts 直接作为 LLM 的 system prompt 使用脚本通过import STYLE_GUIDE from ./rewrite-system-prompt.style.md with { type: text }加载整个管线完整实现了协议与约束。以下是实现与规范的对应关系。5.1 管线总览脚本以行为单位处理提示词文件块级跳过YAML frontmatter 与围栏代码块逐字节保留绝不发送给模型blockSkipMask见 rewrite-system-prompt.ts行分类判断一行是结构行保留还是散文行改写isVerbatimLine剥离把行拆成prefix core suffix{{…}}块令牌与列表标记归入 prefix/suffix 原样保留peel批量请求散文行按 chunk 分组、并发发送给 OpenRouter令牌校验每个改写结果必须通过preservesTokens校验失败则回退为原文重组写回默认原地覆盖in place。5.2 结构行 vs 散文行的判定isVerbatimLine在 rewrite-system-prompt.ts 中isVerbatimLine按以下规则把行判为逐字保留空行Markdown 标题/^#{1,6}\s/与水平线/^[-*_]{3,}\s*$/剥离掉 Handlebars 表达式、XML 标签、代码段和 URL 后剩余字母词少于 3 个且不含句子标点——这正好保护了 XML 标签、Handlebars 指令、模板数据列表项和token: label定义行。这解释了风格文档中结构令牌逐字节保留如何在工程上落地system-conventions、{{#if renderMermaid}}这类行在送到模型之前就被识别为 verbatim根本不参与改写。5.3 脆弱令牌的正则与多重性校验FRAGILE_RErewrite-system-prompt.ts定义了必须存活的令牌/\{\{[^}]*\}\}|[^]*|[^]*|[A-Za-z][\w.-]*:\/\/\S/g覆盖四类模板表达式{{…}}、尖括号标签、反引号代码段、URL。preservesTokensrewrite-system-prompt.ts用计数 Map 校验出现次数multiplicity——每个令牌在原句中出现的次数必须全部出现在改写结果中数量不足即判失败。这与风格文档same number of occurrences的措辞精确对应。5.4 重试与容错回退makeOpenRouterRewriterrewrite-system-prompt.ts实现了改写出错 → 降级为原文的韧性设计模型回复先经parseItemsResponse宽容解析剥掉围栏、在无法直接解析时截取首个{到末个}之间的 JSON 片段只接受通过preservesTokens的改写未通过者进入重试队列重试耗尽后该行保留原文调用方rewriteAll侧同理返回 Map 中缺失的 id 或令牌丢失的改写一律回退原始行。即flaky batch degrades to unchanged, never to corruption——批次故障退化为未改动绝不产生损坏。5.5 并发控制与 OpenRouter 调用细节默认模型anthropic/claude-sonnet-4.5默认端点https://openrouter.ai/api/v1并带HTTP-Referer与X-Title头请求使用 OpenAI 风格的 JSON-Schema 强制响应格式REWRITE_RESPONSE_FORMATstrict: true从协议层保证模型返回{items:[{id,text}]}结构批内重试间隔为400ms × (attempt1)线性退避。六、CLI 实战如何运行改写任务脚本通过 Bun 运行支持完整参数集。全部用法与默认值如下默认值取自 rewrite-system-prompt.ts 与parseCli# 原地改写默认系统提示词 OPENROUTER_API_KEY… bun scripts/rewrite-system-prompt.ts # 改写所有内置 prompt rule始终原地 OPENROUTER_API_KEY… bun scripts/rewrite-system-prompt.ts --all # 改写指定文件并输出到别处 OPENROUTER_API_KEY… bun scripts/rewrite-system-prompt.ts -i a.md -o b.md # 仅做规划不发网络请求 bun scripts/rewrite-system-prompt.ts --dry-run完整参数表参数说明默认值-i, --input path源文件packages/coding-agent/src/prompts/system/system-prompt.md-o, --output path单文件运行输出默认原地覆盖等于输入--all改写全部内置 prompt 与 rule始终原地关--model idOpenRouter 模型 IDanthropic/claude-sonnet-4.5--base-url urlOpenRouter 兼容端点https://openrouter.ai/api/v1--chunk n每个请求的散文行数3--concurrency n并行请求数6--retries n每个 chunk 的网络/解析重试次数2--temperature n采样温度0.4--limit n每个文件仅改写前 N 行散文0 全部0--dry-run只分类 分块、打印计划不联网关--all模式的扫描范围由PROMPT_GLOBS定义rewrite-system-prompt.ts覆盖packages/coding-agent/src/prompts/**/*.mdpackages/coding-agent/src/commit/prompts/*.md与agentic/prompts/*.mdpackages/coding-agent/src/autoresearch/*.mdpackages/coding-agent/src/discovery/builtin-rules/*.mdpackages/agent/src/compaction/prompts/*.mdpackages/ai/src/prompts/*.mdpackages/typescript-edit-benchmark/src/prompts/*.md同时会跳过*.rewritten.md旧产物。运行前须设置环境变量OPENROUTER_API_KEY未设置会直接报错退出。七、前置条件与适用边界运行环境脚本以#!/usr/bin/env bun声明使用Bun.file、Bun.Glob、Bun.sleep等 Bun 专属 API需在 Bun 运行时下执行目标文件形态默认目标 system-prompt.md 是包含 XML 系统约定system-conventions、RFC 2119 大写关键词与大量 Handlebars 条件块的模板文件——正是风格文档结构令牌逐字节保全约束所要保护的场景失败语义令牌丢失、网络错误、解析失败均不会损坏文件而是回退到原文输出统计中分别计为changed与fallback见rewriteAll的RewriteStats。结语rewrite-system-prompt.style.md是一份语体即协议的规范风格规则负责把工程散文压缩为信息密度极高的实现草稿硬性约束负责保证模板的结构令牌与语义关键词在改写中零丢失JSON 协议则让这条规则可以被任何支持 JSON 输出的模型直接消费。而 rewrite-system-prompt.ts 证明了这套规范的可执行性——从行分类、令牌多重性校验到失败回退每一个约束都在代码里有对应的落地实现。如果你正在维护自己的 Agent 提示词模板这份风格文档和它配套的管线是一套可以直接借鉴的提示词减肥方案。【免费下载链接】oh-my-pi⌥ Coding agent with the IDE wired in项目地址: https://gitcode.com/GitHub_Trending/oh/oh-my-pi创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考