ce-product-pulse
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseProduct Pulse
产品Pulse报告
ce-product-pulsedocs/pulse-reports/The skill does not mutate the product, the database, or any external system. Its only writes are pulse settings appended to (the unified CE local config, gitignored, machine-local) and the report file (). MCP and other data-source tools are invoked read-only; if a tool offers write modes, do not use them.
.compound-engineering/config.local.yamldocs/pulse-reports/...ce-product-pulsedocs/pulse-reports/该Skill不会修改产品、数据库或任何外部系统。它仅会将Pulse设置追加写入(统一的CE本地配置文件,已加入git忽略,仅本地机器可见)以及报告文件()。调用MCP及其他数据源工具时仅使用只读模式;若工具提供写入模式,请勿使用。
.compound-engineering/config.local.yamldocs/pulse-reports/...Interaction Method
交互方式
Default to the platform's blocking question tool: in Claude Code (call with first if its schema isn't loaded), in Codex, in Gemini, in Pi (requires the extension). Fall back to numbered options in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question.
AskUserQuestionToolSearchselect:AskUserQuestionrequest_user_inputask_userask_userpi-ask-userAsk one question at a time. Reserve multi-select for first-run configuration only.
默认使用平台的阻塞式提问工具:Claude Code中使用(若其架构未加载,需先调用并传入);Codex中使用;Gemini中使用;Pi中使用(需安装扩展)。仅当工具集中无阻塞式工具或调用出错时(如Codex编辑模式),才退而求其次在聊天中使用编号选项——不得因需要加载架构而使用备选方案。切勿跳过问题而不告知用户。
AskUserQuestionToolSearchselect:AskUserQuestionrequest_user_inputask_userask_userpi-ask-user一次仅提出一个问题。仅在首次运行配置时使用多选功能。
Lookback Window
回溯窗口
<lookback> #$ARGUMENTS </lookback>
Interpret the argument as a time window. Common forms:
- ,
24h,48h- trailing hours72h - ,
7d- trailing days30d - - short-window (useful during launches)
1h
If the argument is empty, default to from config (resolved in Phase 0); if that is also unset, fall through to the hard default of . If the argument is unparseable, ask the user to clarify.
pulse_lookback_default24hApply a 15-minute trailing buffer to the window's upper bound. Many analytics and tracing tools have ingestion lag; querying right up to under-reports the most recent events. For a window, query .
now24h[now - 24h - 15m, now - 15m]<lookback> #$ARGUMENTS </lookback>
将参数解析为时间窗口。常见格式包括:
- 、
24h、48h- 最近N小时72h - 、
7d- 最近N天30d - - 短窗口(适用于发布期间)
1h
若参数为空,则默认使用配置中的值(在第0阶段解析);若该值也未设置,则使用硬默认值。若参数无法解析,请询问用户进行澄清。
pulse_lookback_default24h为窗口的上限设置15分钟的延迟缓冲。许多分析和追踪工具存在数据摄入延迟;直接查询到会漏报最新事件。对于窗口,查询范围应为。
now24h[now - 24h - 15m, now - 15m]Core Principles
核心原则
- Read it like a founder. No hardcoded thresholds. Do not label things "bad" or "good" by default - present the numbers and let the reader judge.
- Single page. Target 30-40 lines of terminal output. If the report is getting long, cut.
- No PII in saved reports. Do not include user emails, account IDs, or message content in the report written to disk.
- Parallel where safe, serial where it matters. Analytics and tracing queries run in parallel. Database queries run serially to avoid load.
- Memory through saved reports. Every run writes to so past pulses are browseable as a timeline.
docs/pulse-reports/ - Read-only database access only. If a database is used as a data source, the connection must be read-only. The interview refuses to accept read-write credentials. Database access is optional - many products complete the pulse with analytics and tracing alone.
- Strategy-seeded when available. If exists, the interview reads it before asking questions and carries forward the product name and key metrics as seeds. The goal of data-source setup is to wire up whatever connections are needed to actually measure those metrics.
STRATEGY.md
- 以创始人视角阅读报告。不设置硬编码阈值。默认情况下不要将事物标记为“好”或“坏”——仅展示数据,由读者自行判断。
- 单页呈现。终端输出目标为30-40行。若报告过长,需进行精简。
- 保存的报告中不含个人可识别信息(PII)。写入磁盘的报告中不得包含用户邮箱、账户ID或消息内容。
- 安全场景下并行,关键场景下串行。分析和追踪查询并行执行。数据库查询串行执行以避免负载过高。
- 通过保存的报告留存历史记录。每次运行都会写入目录,因此过往的Pulse报告可按时间线浏览。
docs/pulse-reports/ - 仅使用只读数据库访问。若将数据库作为数据源,连接必须为只读模式。配置流程拒绝接受读写权限凭证。数据库访问为可选操作——许多产品仅通过分析和追踪即可完成Pulse报告。
- 有策略文档时优先使用其种子数据。若存在文件,配置流程会在提问前读取该文件,并沿用其中的产品名称和关键指标作为初始数据。数据源配置的目标是建立所需的连接,以实际衡量这些指标。
STRATEGY.md
Execution Flow
执行流程
Phase 0: Route by Config State
第0阶段:根据配置状态路由
Config (pre-resolved):
!
(top=$(git rev-parse --show-toplevel 2>/dev/null); [ -n "$top" ] && cat "$top/.compound-engineering/config.local.yaml" 2>/dev/null) || (common=$(git rev-parse --path-format=absolute --git-common-dir 2>/dev/null); main="${common%/.git}"; [ -n "$main" ] && cat "$main/.compound-engineering/config.local.yaml" 2>/dev/null) || echo '__NO_CONFIG__'If the block above contains YAML key-value pairs, extract values for the keys listed under "Config keys" below.
If it shows , the file does not exist — treat this as a first run.
If it shows an unresolved command string, read from the repo root using the native file-read tool (e.g., Read in Claude Code, read_file in Codex). If the file does not exist, treat as first run.
pulse_*__NO_CONFIG__.compound-engineering/config.local.yamlConfig keys:
- -- string, used in report titles. Required for routing: if unset, skill is unconfigured.
pulse_product_name - -- one of
pulse_lookback_default,1h,24h,7d(default:30d)24h - -- string, the engagement event name
pulse_primary_event - -- string, the value-realization event name
pulse_value_event - -- comma-separated string of 0-3 event names
pulse_completion_events - --
pulse_quality_scoringor defaulttrue(AI products only)false - -- string scored 1-5 when
pulse_quality_dimensionis true; ignored otherwisepulse_quality_scoring - -- string identifying analytics provider (e.g.,
pulse_analytics_source,posthog,mixpanel)custom - -- string identifying tracing provider (e.g.,
pulse_tracing_source,sentry,datadog)custom - -- string identifying payments provider (e.g.,
pulse_payments_source,stripe); omit if not usedcustom - --
pulse_db_enabledor defaulttrue; whenfalse, read-only DB access is part of the pulsetrue - -- comma-separated
pulse_metric_sourcespairs giving per-strategy-metric source overrides (e.g.,metric=source). Strategy metrics not listed fall back toretention_d7=posthog,nps=delightedand are rendered with apulse_analytics_sourcemarker so the implicit routing is visible.(default source) - -- comma-separated string of strategy-doc metric names awaiting instrumentation; rendered as
pulse_pending_metricsin each pulse report until instrumentation landsno data - -- comma-separated string of strategy-doc metric names intentionally excluded from the pulse; the metric stays in
pulse_excluded_metricsbut is not surfaced in pulse reportsSTRATEGY.md
Routing:
- is unset (or config file missing) -> First run. Go to Phase 1 (interview), then Phase 2.
pulse_product_name - is set -> Skip to Phase 2.
pulse_product_name
If the argument was , , or , go to Phase 1 regardless of config state.
setupreconfigureedit config配置(预解析):
!
(top=$(git rev-parse --show-toplevel 2>/dev/null); [ -n "$top" ] && cat "$top/.compound-engineering/config.local.yaml" 2>/dev/null) || (common=$(git rev-parse --path-format=absolute --git-common-dir 2>/dev/null); main="${common%/.git}"; [ -n "$main" ] && cat "$main/.compound-engineering/config.local.yaml" 2>/dev/null) || echo '__NO_CONFIG__'若上述代码块包含YAML键值对,请提取以下“配置键”中列出的键对应的值。
若显示,则表示文件不存在——将其视为首次运行。
若显示未解析的命令字符串,请使用原生文件读取工具(如Claude Code中的Read、Codex中的read_file)从仓库根目录读取。若文件不存在,视为首次运行。
pulse_*__NO_CONFIG__.compound-engineering/config.local.yaml配置键:
- -- 字符串,用于报告标题。路由必填项:若未设置,则Skill未配置。
pulse_product_name - -- 可选值为
pulse_lookback_default、1h、24h、7d(默认值:30d)24h - -- 字符串,用户参与事件名称
pulse_primary_event - -- 字符串,价值实现事件名称
pulse_value_event - -- 逗号分隔的字符串,包含0-3个事件名称
pulse_completion_events - --
pulse_quality_scoring或默认值true(仅适用于AI产品)false - -- 当
pulse_quality_dimension为true时,用于1-5分评分的维度字符串;否则忽略pulse_quality_scoring - -- 字符串,标识分析服务提供商(如
pulse_analytics_source、posthog、mixpanel)custom - -- 字符串,标识追踪服务提供商(如
pulse_tracing_source、sentry、datadog)custom - -- 字符串,标识支付服务提供商(如
pulse_payments_source、stripe);若未使用则省略custom - --
pulse_db_enabled或默认值true;当为true时,只读数据库访问是Pulse的一部分false - -- 逗号分隔的
pulse_metric_sources对,用于覆盖策略指标的数据源(如metric=source)。未列出的策略指标将 fallback 到retention_d7=posthog,nps=delighted,并显示pulse_analytics_source标记以明确隐式路由。(default source) - -- 逗号分隔的字符串,包含策略文档中待埋点的指标名称;在埋点完成前,每份Pulse报告中这些指标将显示为
pulse_pending_metricsno data - -- 逗号分隔的字符串,包含策略文档中有意排除在Pulse之外的指标名称;这些指标仍保留在
pulse_excluded_metrics中,但不会在Pulse报告中展示STRATEGY.md
路由规则:
- 未设置(或配置文件缺失) → 首次运行。进入第1阶段(配置流程),然后进入第2阶段。
pulse_product_name - 已设置 → 跳过第1阶段,直接进入第2阶段。
pulse_product_name
若参数为、或,则无论配置状态如何,均进入第1阶段。
setupreconfigureedit configPhase 1: First-Run Interview
第1阶段:首次运行配置流程
1.0 Seed from strategy (if available)
1.0 从策略文档获取种子数据(若存在)
Before asking any questions, read using the native file-read tool. If the file exists, extract:
STRATEGY.md- The product name from the key in the YAML frontmatter, falling back to the H1 title (stripping the trailing
namesuffix, e.g.,Strategy-># Spiral Strategy) if frontmatter is missingSpiral - The list of key metrics from the section, one per line
## Key metrics
Open the interview by surfacing what was extracted: announce that a strategy doc was found, show the seeded product name and the list of key metrics that will be carried into event/data setup, and invite the user to correct any of it before continuing.
If does not exist, note that explicitly in chat: no strategy doc on file, running setup from scratch, and mention that can seed pulse later if run first.
STRATEGY.mdce-strategy在提问前,使用原生文件读取工具读取。若文件存在,提取:
STRATEGY.md- 从YAML前置元数据的键中获取产品名称;若无前置元数据,则从H1标题中提取(去除末尾的
name后缀,例如Strategy→# Spiral Strategy)Spiral - 从部分提取关键指标列表,每行一个指标
## Key metrics
配置流程开始时,先展示提取到的内容:告知用户已找到策略文档,展示将用于事件/数据配置的种子产品名称和关键指标列表,并邀请用户在继续前进行修正。
若不存在,则在聊天中明确说明:当前无策略文档,将从头开始配置,并提及若先运行,后续可为Pulse提供种子数据。
STRATEGY.mdce-strategy1.1 Interview
1.1 配置流程
Read . This load is non-optional - the pushback rules, anti-pattern examples, and metric-to-source mapping logic live there.
references/interview.mdRun the interview in this order:
- Product name (confirm or edit the seeded value)
- Primary engagement event
- Value-realization event
- Completions or conversions (0-3)
- Quality scoring (opt-in, AI products only)
- Data sources - wire up connections for each agreed metric and event. Nudge toward MCP. Reject read-write database access. DB entirely optional.
- System performance - a short recommended setup for top errors and latency. Users rarely have strong opinions here; present defaults and accept.
- Default lookback window
Apply the pushback rules in for each section. Treat every metric, event, and signal the user proposes against the SMART bar (specific, measurable, actionable, relevant, timely) spelled out in under "Overall Rules" - push back on anything vague, vanity, or unactionable.
references/interview.mdreferences/interview.mdIf the user offers read-write database access, refuse and offer the alternatives documented in section 6.
references/interview.mdWrite the captured config to as flat keys, using the schema in under "Config file shape". Resolve the repo root with . To write: (1) if the file or directory does not exist, create and write the YAML file; (2) if the file exists, merge new keys into the existing YAML, preserving any non-pulse keys (e.g., ) untouched. If is not already covered by the repo's , offer to add the entry before writing. Show the resulting pulse block to the user in chat and offer one round of edits.
<repo-root>/.compound-engineering/config.local.yamlpulse_*references/interview.mdgit rev-parse --show-toplevel.compound-engineering/work_delegate_*.compound-engineering/config.local.yaml.gitignoreAfter the config is written, run the scheduling recommendation from section 9: offer to set up a recurring run so the user gets the pulse on a cadence instead of having to remember to run it. Accept yes/no/later. If yes, hand off to whichever scheduling primitive the current harness exposes — the in-plugin skill if it is installed, otherwise note that scheduling is platform-specific (cron, GitHub Actions, the host's own automation) and emit a brief hint covering what would need to run. Do not schedule inline. Then proceed to Phase 2.
references/interview.mdschedule读取。此步骤为必填项——其中包含异议处理规则、反模式示例以及指标到数据源的映射逻辑。
references/interview.md按以下顺序执行配置流程:
- 产品名称(确认或修改种子数据中的值)
- 主要用户参与事件
- 价值实现事件
- 完成或转化事件(0-3个)
- 质量评分(可选,仅适用于AI产品)
- 数据源——为每个商定的指标和事件建立连接。优先推荐MCP。拒绝读写数据库访问。数据库访问完全可选。
- 系统性能——针对顶级错误和延迟的简短推荐配置。用户对此通常无强烈意见,展示默认配置并接受。
- 默认回溯窗口
每个环节均需遵循中的异议处理规则。将用户提出的每个指标、事件和信号与“总体规则”部分中阐述的SMART标准(具体、可衡量、可操作、相关、及时)进行比对——对模糊、虚荣或不可操作的内容提出异议。
references/interview.mdreferences/interview.md若用户提供读写数据库访问权限,需拒绝并提供第6节中记录的替代方案。
references/interview.md将捕获的配置以扁平的键写入,使用“配置文件格式”部分中的架构。通过解析仓库根目录。写入规则:(1) 若文件或目录不存在,创建目录并写入YAML文件;(2) 若文件已存在,将新键合并到现有YAML中,保留所有非Pulse键(如)不变。若未被仓库的覆盖,需在写入前询问用户是否添加该条目。在聊天中展示最终的Pulse配置块,并提供一轮编辑机会。
pulse_*<repo-root>/.compound-engineering/config.local.yamlreferences/interview.mdgit rev-parse --show-toplevel.compound-engineering/work_delegate_*.compound-engineering/config.local.yaml.gitignore配置写入完成后,执行第9节中的调度推荐:提议设置定期运行,使用户无需手动触发即可按节奏获取Pulse报告。接受“是”、“否”或“稍后”的回复。若用户同意,移交至当前工具集提供的调度原语——若已安装插件内的 Skill则使用该工具,否则说明调度是平台特定的(如cron、GitHub Actions、宿主自身的自动化工具),并简要提示需要运行的内容。不得直接在线调度。之后进入第2阶段。
references/interview.mdschedulePhase 2: Run the Pulse
第2阶段:运行Pulse报告
If Phase 1 ran (first run, or / argument), re-read from the repo root using the native file-read tool to pick up any edits accepted during the Phase 1 review step. Otherwise, use the values already extracted in Phase 0. Apply hard defaults for any unset settings (see Phase 0 "Config keys").
setupreconfigure.compound-engineering/config.local.yamlpulse_*若已执行第1阶段(首次运行,或参数为/),需使用原生文件读取工具从仓库根目录重新读取,以获取第1阶段审核步骤中接受的任何编辑内容。否则,使用第0阶段已提取的值。对任何未设置的参数应用硬默认值(见第0阶段“配置键”)。
setupreconfigure.compound-engineering/config.local.yamlpulse_*2.1 Dispatch Queries
2.1 分发查询
Run these in parallel (different tools, no shared load):
- Product analytics query (primary event count, value-realization count, completions, conversion ratios) over the window
- Application tracing query (error counts by category, latency distribution, top error signatures) over the window
- Payments query, if configured (new customers, churn, revenue delta) over the window
Run these serially, after the parallel batch:
- Read-only database queries. One at a time. Tight, scoped queries only. Never full-table scans on large tables. If a DB query would be expensive, skip it and note "DB query skipped (estimated cost too high)".
以下查询并行执行(使用不同工具,无共享负载):
- 产品分析查询(窗口内的主要事件计数、价值实现事件计数、完成事件计数、转化率)
- 应用追踪查询(窗口内按类别统计的错误数、延迟分布、顶级错误特征)
- 支付查询(若已配置,窗口内的新客户数、 churn 率、收入变化)
并行批处理完成后,以下查询串行执行:
- 只读数据库查询。一次执行一个。仅执行范围严格限定的查询。切勿对大表执行全表扫描。若数据库查询成本过高,跳过该查询并记录“DB query skipped (estimated cost too high)”。
2.2 Optional: Sample Quality Scoring
2.2 可选:样本质量评分
If is (AI products only), sample up to 10 sessions or conversations from the window and score each 1-5 on the dimension recorded in .
pulse_quality_scoringtruepulse_quality_dimensionScoring discipline: Default to 4 or 5 when the session looks normal. Reserve 1-3 for sessions with a clear failure mode (product gave wrong answer, user got stuck, error surfaced). If every session is scoring 3, the bar is too strict; if every session is scoring 5, the bar is too loose.
No PII in the score summary. Capture a count distribution (e.g., "8x 5, 1x 4, 1x 2") and a short anonymized note on any session scored below 4. Do not include message content or user identifiers in the saved report.
若为(仅适用于AI产品),从窗口内抽取最多10个会话或对话,并根据记录的维度为每个会话打1-5分。
pulse_quality_scoringtruepulse_quality_dimension评分规则: 若会话正常,默认打4或5分。仅当会话存在明确故障模式(产品给出错误答案、用户陷入困境、出现错误)时打1-3分。若所有会话均打3分,说明评分标准过严;若所有会话均打5分,说明评分标准过松。
评分摘要中不含PII。记录分数分布(例如“8个5分,1个4分,1个2分”),并对任何评分低于4分的会话添加简短的匿名说明。保存的报告中不得包含消息内容或用户标识符。
2.3 Assemble the Report
2.3 组装报告
Read . Fill in the template using the query results. Four sections, in order:
references/report-template.md- Headlines - 2-3 lines summarizing the window
- Usage - primary engagement, value realization, completions, quality sample
- System performance - latency (p50/p95/p99) and top 5 errors by count with one-line explanation each
- Followups - 1-5 things worth investigating
Keep the total to 30-40 lines. If a section is thin, leave it thin; do not pad.
读取。使用查询结果填充模板。报告分为四个部分,顺序如下:
references/report-template.md- 头条摘要 - 2-3行总结时间窗口内的情况
- 使用情况 - 主要用户参与、价值实现、完成事件、质量样本
- 系统性能 - 延迟(p50/p95/p99)以及按计数排序的前5个错误,每个错误配一行说明
- 后续跟进 - 1-5个值得调查的事项
总篇幅控制在30-40行。若某部分内容较少,无需填充,保持简洁即可。
2.4 Write the Report
2.4 写入报告
Save to using the local time of the run. Create if it does not exist.
docs/pulse-reports/YYYY-MM-DD_HH-MM.mddocs/pulse-reports/Surface the Headlines and top Followup in chat. Provide the full file path so the user can open the saved report.
使用运行时的本地时间将报告保存至。若目录不存在,需创建该目录。
docs/pulse-reports/YYYY-MM-DD_HH-MM.mddocs/pulse-reports/在聊天界面展示头条摘要和顶级后续跟进事项。提供完整文件路径,方便用户打开保存的报告。
Phase 3: Routine Hook
第3阶段:常规提示
First-run setup already offered scheduling (see Phase 1.1 end). Phase 3 is a lighter re-surface for ad-hoc runs:
- If the argument was a known schedule keyword (,
daily,hourly), note that this run is ad-hoc and suggest scheduling via the harness's available primitive (the in-pluginweeklyskill where present; otherwise a platform-native option) for recurring runs.schedule - If no schedule is on file and this is the third or later pulse run the user has done, mention once that scheduling is available. Don't nag on every run.
Never schedule automatically. Any scheduling handoff requires explicit confirmation.
首次运行配置已提供调度选项(见第1.1阶段末尾)。第3阶段是针对临时运行的轻量级提示:
- 若参数为已知的调度关键字(、
daily、hourly),需说明此次运行为临时运行,并建议通过工具集提供的原语设置定期运行(若已安装插件内的weeklySkill则使用该工具;否则使用平台原生选项)。schedule - 若当前无调度记录,且此次是用户第三次或更多次运行Pulse,可提及一次调度选项。切勿每次运行都提醒。
切勿自动调度。任何调度移交均需用户明确确认。
What This Skill Does Not Do
该Skill不具备的功能
- Does not report "what shipped." Shipped work lives in the issue tracker and commit history, not here. Pulse is strictly about user experience and system performance.
- Does not set thresholds or alert the user. The reader interprets.
- Does not persist PII in saved reports.
- Does not mutate the database or any external system. All queries are read-only.
- Does not replace tracing dashboards or analytics tools. It consolidates a single-page read; deep investigation still uses the native tools.
- 不报告“已发布内容”。已发布工作记录在问题追踪器和提交历史中,不在此报告中。Pulse仅关注用户体验和系统性能。
- 不设置阈值或向用户发送警报。由读者自行解读数据。
- 不在保存的报告中留存PII。
- 不修改数据库或任何外部系统。所有查询均为只读。
- 不替代追踪仪表板或分析工具。它仅整合为单页报告供快速阅读;深入调查仍需使用原生工具。
Learn More
更多说明
The "read like a founder" posture and the single-page constraint are deliberate. Dashboards with 40 metrics produce attention sprawl; one page with the right four sections forces the reader to notice what matters. The saved-reports folder is designed to be a team's working memory, not a data warehouse - past pulses are grepable, diffable, and disposable.
“以创始人视角阅读”的定位和单页约束是刻意设计的。包含40个指标的仪表板会分散注意力;而包含四个关键部分的单页报告能迫使读者关注重要内容。保存报告的目录旨在作为团队的工作记忆,而非数据仓库——过往的Pulse报告可被 grep 检索、对比差异,且可随时丢弃。