setup-benny

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Set up Benny

配置Benny

Benny ships as a dormant automation pack inside pstack. The plugin manifest exposes only pstack's normal skill root; this file and the two operational files are not slash skills.
The human enters setup by pointing Cursor at the pack's
FOR_AGENTS.md
. The bootstrap flow copies the whole pack into the target repository, then reads this file directly at
.cursor/automations/benny/skills/setup-benny/SKILL.md
.
Benny needs external configuration and two live Cursor automations.
Do not create or update an automation until the user explicitly asks. Never put a secret value in plugin files, prompts, or committed configuration.
Benny作为一个休眠状态的自动化包内置在pstack中。插件清单仅暴露pstack的常规skill根目录;此文件和两个操作文件不属于斜杠技能。
用户通过将Cursor指向包内的
FOR_AGENTS.md
进入配置流程。引导流程会将整个包复制到目标代码仓库,然后直接读取
.cursor/automations/benny/skills/setup-benny/SKILL.md
中的内容。
Benny需要外部配置以及两个可运行的Cursor自动化流程。
除非用户明确要求,否则不要创建或更新自动化流程。绝对不要在插件文件、提示词或已提交的配置中存放敏感值。

1. Copy the pack and enable shared pstack skills

1. 复制自动化包并启用共享pstack技能

Do this before asking for Benny configuration and before invoking the built-in
/automate
skill.
Ask which repository will run the automations. The source pack is the directory containing
FOR_AGENTS.md
. The destination is
<target-repository>/.cursor/automations/benny/
.
Merge the entire source pack into the destination:
  1. Create the destination when it is absent.
  2. Copy every source file to the same relative path.
  3. Preserve destination-only files. Never delete unrelated files during install or refresh.
  4. Keep user-owned configuration, feature maps, and routing maps outside the destination. Never overwrite them.
  5. When an existing source-managed file differs, inspect the diff and merge without discarding local edits. If ownership is ambiguous, stop and ask before replacing it.
  6. Verify that the destination contains
    FOR_AGENTS.md
    , this setup file, both operational files, their references, and the templates.
If this file is already being read from the target destination, treat the copy as complete and run the same verification before continuing.
Add pstack to the target repository's
.cursor/settings.json
. If the file or
.cursor
directory does not exist, create it.
Merge this entry into the existing JSON or JSONC:
json
{
	"plugins": {
		"pstack": { "enabled": true }
	}
}
Preserve every unrelated top-level setting and every other plugin entry. If
plugins.pstack
already exists, change only its
enabled
value. Preserve comments and valid JSONC syntax when the file uses JSONC. Validate the file after editing it.
Reload the target project or start a fresh agent rooted there. Verify that these shared pstack skills resolve from project scope:
  • how
  • why
  • tdd
  • unslop
  • principle-separate-before-serializing-shared-state
  • principle-minimize-reader-load
  • principle-guard-the-context-window
  • principle-sequence-verifiable-units
  • principle-fix-root-causes
  • principle-prove-it-works
Do not count a skill loaded from the current session or a user-scoped plugin. The check must show that a fresh agent in the target repository receives pstack through project settings.
If project-scoped plugin installation is unavailable or any shared dependency does not resolve, stop and explain the failure.
The Benny files are read directly from
.cursor/automations/benny/
. Do not add that directory to a plugin manifest or expect its
SKILL.md
files to appear in the slash-skill list.
Tell the user that
.cursor/settings.json
,
.cursor/automations/benny/
, and any referenced secret-free configuration must be committed before either automation is enabled. Do not commit them unless the user asks.
Once this check passes, live automation prompts may read the committed operational files by their stable repository-relative paths. They must not embed a plugin cache path or copy the file contents.
在请求Benny配置或调用内置的
/automate
技能之前完成此步骤。
询问用户哪个代码仓库将运行自动化流程。源包是包含
FOR_AGENTS.md
的目录,目标路径为
<target-repository>/.cursor/automations/benny/
将整个源包合并到目标路径:
  1. 若目标路径不存在则创建它。
  2. 将所有源文件复制到对应的相对路径下。
  3. 保留仅存在于目标路径的文件。在安装或更新过程中绝不删除无关文件。
  4. 将用户所有的配置、功能映射和路由映射存放在目标路径之外。绝不覆盖这些内容。
  5. 当已存在的源管理文件出现差异时,检查差异并合并,不要丢弃本地编辑内容。若所有权不明确,在替换前先询问用户。
  6. 验证目标路径中包含
    FOR_AGENTS.md
    、此配置文件、两个操作文件、它们的引用以及模板文件。
如果此文件已经从目标路径读取,则视为复制完成,继续前先执行相同的验证步骤。
将pstack添加到目标代码仓库的
.cursor/settings.json
中。若该文件或
.cursor
目录不存在,则创建它们。
将以下条目合并到现有的JSON或JSONC文件中:
json
{
	"plugins": {
		"pstack": { "enabled": true }
	}
}
保留所有无关的顶级设置和其他插件条目。若
plugins.pstack
已存在,仅修改其
enabled
值。若文件使用JSONC格式,保留注释和有效的JSONC语法。编辑完成后验证文件的有效性。
重新加载目标项目或在目标路径启动新的agent。验证以下共享pstack技能可从项目范围中调用:
  • how
  • why
  • tdd
  • unslop
  • principle-separate-before-serializing-shared-state
  • principle-minimize-reader-load
  • principle-guard-the-context-window
  • principle-sequence-verifiable-units
  • principle-fix-root-causes
  • principle-prove-it-works
不要将当前会话或用户范围插件加载的技能计入在内。检查必须确保目标代码仓库中的新agent可通过项目设置获取pstack。
若项目范围的插件安装不可用,或任何共享依赖无法调用,请停止操作并说明失败原因。
Benny文件直接从
.cursor/automations/benny/
读取。不要将该目录添加到插件清单中,也不要期望其
SKILL.md
文件出现在斜杠技能列表中。
告知用户,在启用任一自动化流程之前,必须提交
.cursor/settings.json
.cursor/automations/benny/
以及所有无敏感信息的相关配置文件。除非用户要求,否则不要自行提交。
一旦此检查通过,实时自动化提示词可通过稳定的仓库相对路径读取已提交的操作文件。绝对不要嵌入插件缓存路径或复制文件内容。

2. Adapt the configuration

2. 适配配置

Open these copied examples:
  • ../../templates/configuration.example.yaml
  • ../reproduce-and-fix-issues/references/feature-map.example.md
Create user-owned copies outside
.cursor/automations/benny/
. These are configuration files, not pack files. Example locations:
  • Project config, such as
    .cursor/benny/configuration.yaml
  • Project feature map, such as
    .cursor/benny/feature-map.md
  • Project routing map, such as
    .cursor/benny/routing.md
  • User config, such as
    ~/.config/benny/configuration.yaml
  • User feature map, such as
    ~/.config/benny/feature-map.md
Fill one feature-map section for every user-facing feature the automation may reproduce. Keep it at the user point of view. Do not freeze implementation details or current code paths in the map.
Do not edit the copied examples. Pack refreshes may update source-managed files after conflict review, but they must never touch the user-owned copies.
Prefer committed, secret-free files in the target repository when a fresh automation checkout must read them. Otherwise paraphrase the required values into the live prompt. Reference a repository file only after the built-in
/automate
skill confirms that the file is committed in the repository where the automation runs.
Use stable repository-relative paths for committed pack and configuration files. Never reference the plugin source directory or a plugin cache path from a live automation.
打开以下复制的示例文件:
  • ../../templates/configuration.example.yaml
  • ../reproduce-and-fix-issues/references/feature-map.example.md
.cursor/automations/benny/
之外创建用户所有的副本。这些是配置文件,不属于自动化包文件。示例存储位置:
  • 项目配置:
    .cursor/benny/configuration.yaml
  • 项目功能映射:
    .cursor/benny/feature-map.md
  • 项目路由映射:
    .cursor/benny/routing.md
  • 用户配置:
    ~/.config/benny/configuration.yaml
  • 用户功能映射:
    ~/.config/benny/feature-map.md
为自动化流程可能复现的每个用户可见功能填写一个功能映射章节。从用户视角出发,不要在映射中固化实现细节或当前代码路径。
不要编辑复制的示例文件。自动化包更新可能会在冲突审查后修改源管理文件,但绝对不能触碰用户所有的副本。
当新的自动化检出必须读取文件时,优先选择目标代码仓库中已提交的无敏感信息文件。否则将所需值转述到实时提示词中。只有在内置的
/automate
技能确认文件已在自动化运行的代码仓库中提交后,才能引用仓库文件。
对已提交的自动化包和配置文件使用稳定的仓库相对路径。绝对不要在实时自动化中引用插件源目录或插件缓存路径。

3. Fill the required choices

3. 填写必要选项

Ask for or confirm:
  • Source Slack channel ID
  • Optional operations or status channel ID
  • Repository URL and default branch
  • Triage identity or Slack user ID
  • Issue tracker type, team, project, labels, and intake status
  • Tracker adapter skill or MCP actions
  • Optional routing map path
  • Required control skill name
  • Required user-facing feature-map path
  • Status emoji strings
  • Pull request URL format
  • Polling and effort budgets
  • Model slug for triage, repro, code work, and media review
Use only model slugs shown as available in the user's Cursor model picker or supported model list. Do not guess a slug and do not carry over a private default.
The source channel, triage identity, repository, tracker adapter, control skill, and feature map must be explicit. Fail setup if any required value stays ambiguous.
Use pstack's
unslop
skill on the final automation names, descriptions, and prompt shims before saving them.
询问或确认以下内容:
  • 源Slack频道ID
  • 可选的操作或状态频道ID
  • 代码仓库URL和默认分支
  • 分类身份或Slack用户ID
  • 问题追踪器类型、团队、项目、标签和接收状态
  • 追踪器适配skill或MCP操作
  • 可选的路由映射路径
  • 必填的控制skill名称
  • 必填的用户可见功能映射路径
  • 状态表情字符串
  • 拉取请求URL格式
  • 轮询和工作量预算
  • 用于分类、复现、代码工作和媒体审核的模型标识(slug)
仅使用用户Cursor模型选择器中显示的可用模型标识或支持的模型列表。不要猜测标识,也不要沿用私有默认值。
源频道、分类身份、代码仓库、追踪器适配、控制skill和功能映射必须明确。若任何必填值不明确,配置流程失败。
在保存最终的自动化名称、描述和提示词垫片之前,使用pstack的
unslop
skill进行处理。

4. Check integration capabilities

4. 检查集成能力

The triage automation needs:
  • Read access to the configured source Slack channel and its threads
  • Thread-reply access in that channel
  • Attachment metadata and file download access when reports include media
  • Search, read, create, and update access through the configured issue-tracker adapter
The repro automation needs:
  • Read access to the source thread
  • Thread-reply access in the source channel
  • Optional post and edit access in the configured operations channel
  • Repository read and history access
  • A pull request action that can open a draft pull request
  • The configured control-adapter skill
Prefer configured Cursor Slack actions for reads and posts. The optional
BENNY_SLACK_BOT_TOKEN
may fill a narrow gap such as editing one operations status message or downloading an attachment. Store the value in a secret manager or environment, not in YAML.
Do not use undocumented integration endpoints.
分类自动化流程需要:
  • 读取配置的源Slack频道及其线程的权限
  • 在该频道中回复线程的权限
  • 当报告包含媒体时,读取附件元数据和下载文件的权限
  • 通过配置的问题追踪器适配进行搜索、读取、创建和更新的权限
复现自动化流程需要:
  • 读取源线程的权限
  • 在源频道中回复线程的权限
  • 可选的在配置的操作频道中发布和编辑内容的权限
  • 代码仓库读取和历史访问权限
  • 可打开草稿拉取请求的拉取请求操作
  • 配置的控制适配skill
优先使用配置的Cursor Slack操作进行读取和发布。可选的
BENNY_SLACK_BOT_TOKEN
可填补一些特定缺口,比如编辑一条操作状态消息或下载附件。将该值存储在密钥管理器或环境变量中,不要存放在YAML文件里。
不要使用未公开的集成端点。

5. Prepare the routing map

5. 准备路由映射

If the user wants reroutes or owner pings:
  1. Copy
    ../triage-issue-reports/references/routing.example.md
    outside
    .cursor/automations/benny/
    .
  2. Replace every placeholder with public or organization-local values.
  3. Keep owner pings off by default.
  4. Allow a ping only for a configured feature owner or a confirmed likely regression author.
If no routing map is configured, triage may classify a report but must not guess a destination or owner.
若用户需要重定向或@负责人:
  1. ../triage-issue-reports/references/routing.example.md
    复制到
    .cursor/automations/benny/
    之外。
  2. 将所有占位符替换为公开的或组织内部的值。
  3. 默认关闭@负责人功能。
  4. 仅允许@配置的功能负责人或已确认的潜在回归作者。
若未配置路由映射,分类流程可对报告进行分类,但不得猜测目标或负责人。

6. Verify the control adapter

6. 验证控制适配

Read
../reproduce-and-fix-issues/references/control-adapter.md
and the user's completed feature map.
Confirm that the named skill can:
  • Bring up the target app
  • Navigate every mapped feature through the real UI
  • Exercise mapped states through declared adapter actions
  • Inspect state without forcing the result
  • Capture screenshots
  • Start and stop a recording
  • Clean up its processes and temporary data
If any capability is missing, leave the repro automation disabled. It must fail closed rather than claim a reproduction it did not perform.
读取
../reproduce-and-fix-issues/references/control-adapter.md
和用户已完成的功能映射。
确认指定的skill具备以下能力:
  • 启动目标应用
  • 通过真实UI导航所有已映射的功能
  • 通过声明的适配操作执行已映射的状态
  • 检查状态而不强制结果
  • 捕获截图
  • 开始和停止录制
  • 清理其进程和临时数据
若任何能力缺失,保持复现自动化流程禁用状态。它必须在无法完成复现时停止,而不是声称已完成复现。

7. Prepare the live automations

7. 准备可运行的自动化流程

Ask whether this is first-time creation or configuration of existing automations.
Read
../../FOR_AGENTS.md
from the copied pack as the primary user-intent source for either path. Use it to understand the two triggers, tools, instructions, outcomes, and shared rules.
询问用户这是首次创建还是配置现有自动化流程。
读取复制包中的
../../FOR_AGENTS.md
作为两种场景下的主要用户意图来源。用它来理解两个触发器、工具、指令、结果和共享规则。

First-time creation

首次创建

Create one automation at a time.
For each automation:
  1. Read the matching copied prompt template as secondary internal source material.
  2. Turn
    FOR_AGENTS.md
    , the finished Benny configuration, and the template intent into a complete natural-language request.
  3. Tell the live prompt to read and follow its exact committed operational file under
    .cursor/automations/benny/
    .
  4. Use the stable repository-relative path, not a plugin source or cache path. Do not copy the operational file contents into the live prompt.
  5. Read and follow the built-in
    automate
    skill.
  6. Let
    automate
    discover Slack channels, the repository, and connected integrations.
  7. Let
    automate
    confirm that the copied pack and any referenced configuration files are committed in the same repository where the automation will run.
  8. Let
    automate
    show its draft table, obtain approval, ask readiness, and open the Automations editor.
  9. Finish the editor handoff for this automation before starting the next one.
Give
automate
this complete triage intent, filled from configuration:
  • Name
    benny-triage
    .
  • Read and follow
    .cursor/automations/benny/skills/triage-issue-reports/SKILL.md
    for every run.
  • Trigger on each new top-level report in the configured source Slack channel.
  • Read the triggering thread and reply only inside it.
  • Use the configured issue-tracker integration.
  • Classify, inspect evidence, trace cause, dedupe, and create only clear new bugs.
  • End one thread-only verdict with the configured
    [benny:bug]
    ,
    [benny:performance]
    , or
    [benny:other]
    marker and optional tracker URL.
  • Never post a source-channel root message.
After the triage editor handoff is complete, give
automate
this complete repro and fix intent:
  • Name
    benny-reproduce
    .
  • Read and follow
    .cursor/automations/benny/skills/reproduce-and-fix-issues/SKILL.md
    for every run.
  • Trigger on the same new top-level reports in the configured source Slack channel.
  • Use the configured repository and default branch.
  • Read the source thread and reply only inside it.
  • Include pull request creation and the configured tracker, control-adapter, and feature-map requirements. Paraphrase mapped user paths and states unless
    automate
    confirms an eligible committed file in the same repository.
  • Wait for a trusted triage marker before acting.
  • Reproduce the exact symptom twice through the mapped real UI and capture evidence.
  • Verify an existing fix without authoring over it.
  • Attempt an optional bounded fix only after confirmed repro, then open a draft pull request when proof and checks pass.
  • Never post a source-channel root message.
Do not duplicate
automate
's Slack, repository, integration, completeness, authentication, draft-review, approval, readiness, or editor-handoff work.
逐个创建自动化流程。
针对每个自动化流程:
  1. 读取对应的复制提示词模板作为次要内部参考资料。
  2. FOR_AGENTS.md
    、已完成的Benny配置和模板意图整合成完整的自然语言请求。
  3. 告知实时提示词读取并遵循
    .cursor/automations/benny/
    下已提交的准确操作文件。
  4. 使用稳定的仓库相对路径,而非插件源或缓存路径。不要将操作文件内容复制到实时提示词中。
  5. 读取并遵循内置的
    automate
    skill。
  6. automate
    发现Slack频道、代码仓库和已连接的集成。
  7. automate
    确认复制的自动化包和所有相关配置文件已在自动化运行的代码仓库中提交。
  8. automate
    展示其草稿表格、获取批准、询问准备情况并打开Automations编辑器。
  9. 完成此自动化流程的编辑器交接后,再开始下一个。
automate
提供以下由配置填充的完整分类意图:
  • 名称为
    benny-triage
  • 每次运行时读取并遵循
    .cursor/automations/benny/skills/triage-issue-reports/SKILL.md
  • 在配置的源Slack频道中,每条新的顶级报告触发流程。
  • 读取触发线程并仅在该线程内回复。
  • 使用配置的问题追踪器集成。
  • 分类、检查证据、追溯原因、去重并仅创建清晰的新bug。
  • 在仅线程内的结论末尾添加配置的
    [benny:bug]
    [benny:performance]
    [benny:other]
    标记,以及可选的追踪器URL。
  • 绝不发布源频道的根消息。
分类编辑器交接完成后,向
automate
提供以下完整的复现与修复意图:
  • 名称为
    benny-reproduce
  • 每次运行时读取并遵循
    .cursor/automations/benny/skills/reproduce-and-fix-issues/SKILL.md
  • 在配置的源Slack频道中,由相同的新顶级报告触发流程。
  • 使用配置的代码仓库和默认分支。
  • 读取源线程并仅在该线程内回复。
  • 包含拉取请求创建以及配置的追踪器、控制适配和功能映射要求。转述已映射的用户路径和状态,除非
    automate
    确认同一仓库中存在符合条件的已提交文件。
  • 在执行操作前等待可信的分类标记。
  • 通过已映射的真实UI复现确切症状两次并捕获证据。
  • 验证现有修复而不覆盖原作者内容。
  • 仅在确认复现后尝试可选的有限修复,然后在验证通过且检查完成后打开草稿拉取请求。
  • 绝不发布源频道的根消息。
不要重复
automate
在Slack、代码仓库、集成、完整性、认证、草稿审核、批准、准备情况或编辑器交接方面的工作。

Existing automations

现有自动化流程

The built-in
automate
skill is creation-only. Do not use it to search for, inspect, or update existing automations.
Finish configuration, routing, control-adapter, and feature-map validation. Then give the user this concise editor checklist.
For the existing triage automation, update:
  • Name and description
  • Direct instruction to read
    .cursor/automations/benny/skills/triage-issue-reports/SKILL.md
  • New top-level Slack report trigger and source channel
  • Slack thread read and reply capabilities
  • Issue-tracker integration
  • Paraphrased triage instructions, thread-only rule, and Benny verdict markers
For the existing repro automation, update:
  • Name and description
  • Direct instruction to read
    .cursor/automations/benny/skills/reproduce-and-fix-issues/SKILL.md
  • Matching Slack trigger and source channel
  • Repository and default branch
  • Slack thread read and reply capabilities
  • Pull request action
  • Tracker, control-adapter, and feature-map requirements
  • Paraphrased marker wait, evidence, verification, and bounded-fix instructions
Ask the user to update each existing automation directly in its Automations editor. Do not create replacements or duplicates.
内置的
automate
skill仅用于创建。不要用它来搜索、检查或更新现有自动化流程。
完成配置、路由、控制适配和功能映射验证。然后向用户提供以下简洁的编辑器检查清单。
对于现有分类自动化流程,更新:
  • 名称和描述
  • 直接读取
    .cursor/automations/benny/skills/triage-issue-reports/SKILL.md
    的指令
  • 新的顶级Slack报告触发器和源频道
  • Slack线程读取和回复能力
  • 问题追踪器集成
  • 转述后的分类指令、仅线程规则和Benny结论标记
对于现有复现自动化流程,更新:
  • 名称和描述
  • 直接读取
    .cursor/automations/benny/skills/reproduce-and-fix-issues/SKILL.md
    的指令
  • 匹配的Slack触发器和源频道
  • 代码仓库和默认分支
  • Slack线程读取和回复能力
  • 拉取请求操作
  • 追踪器、控制适配和功能映射要求
  • 转述后的标记等待、证据收集、验证和有限修复指令
请用户直接在Automations编辑器中更新每个现有自动化流程。不要创建替代或重复的流程。

Creation boundary

创建边界

Never call a direct automation backend service or backend automation tool. Never use a browser URL that carries draft fields. Never build or open a Cursor protocol deep link. For new automations, the only finish path is the built-in
automate
skill's reviewed Automations editor handoff.
Do not enable either automation until the thread-safety test passes after the editor save.
绝不调用直接的自动化后端服务或后端自动化工具。绝不使用包含草稿字段的浏览器URL。绝不构建或打开Cursor协议深度链接。对于新自动化流程,唯一的完成路径是内置
automate
skill经过审核的Automations编辑器交接。
在编辑器保存后通过线程安全测试之前,不要启用任一自动化流程。

8. Test thread safety

8. 测试线程安全性

Use a test channel or a harmless test report.
Before testing, confirm that the target repository's
.cursor/settings.json
,
.cursor/automations/benny/
, and every referenced secret-free configuration file are committed on the branch used by the automation checkout. Confirm that both live prompts point at their exact committed operational files. If any check fails, stop. Tell the user that the automation cannot be enabled yet.
Verify:
  1. Triage stores the root
    thread_ts
    and posts exactly one verdict as a reply.
  2. The verdict contains one configured marker.
  3. Repro accepts the marker only from the configured triage identity.
  4. Repro keeps the same immutable source coordinates.
  5. No source-channel root message appears.
  6. A delegated worker cannot use any Slack write action.
  7. Missing coordinates, a deleted parent, or a failed preflight produces no post and no tracker issue.
Enable normal traffic only after all seven checks pass.
使用测试频道或无害的测试报告。
测试前,确认目标代码仓库的
.cursor/settings.json
.cursor/automations/benny/
以及所有相关的无敏感信息配置文件已在自动化检出使用的分支上提交。确认两个实时提示词都指向其准确的已提交操作文件。若任何检查失败,请停止操作。告知用户自动化流程暂时无法启用。
验证以下内容:
  1. 分类流程存储根
    thread_ts
    并仅发布一条结论作为回复。
  2. 结论包含一个配置的标记。
  3. 复现流程仅接受来自配置的分类身份的标记。
  4. 复现流程保持相同的不可变源坐标。
  5. 不会出现源频道的根消息。
  6. 委托的worker无法使用任何Slack写入操作。
  7. 缺失坐标、父线程删除或预检查失败时,不会发布任何内容或创建追踪器问题。
只有在所有七项检查通过后,才允许正常流量进入。