
setup-benny
Configure Benny and prepare its triage and repro automations. Use when installing Benny or changing its Slack, tracker, repository, routing, control, model, or budget settings.
- Installs
- 789
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/cursor/plugins --skill setup-benny- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads setup-benny automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Set up 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.
1. Copy the pack and enable shared pstack skills
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:
- Create the destination when it is absent.
- Copy every source file to the same relative path.
- Preserve destination-only files. Never delete unrelated files during install or refresh.
- Keep user-owned configuration, feature maps, and routing maps outside the destination. Never overwrite them.
- 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.
- 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:
{
"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:
howwhytddunslopprinciple-separate-before-serializing-shared-stateprinciple-minimize-reader-loadprinciple-guard-the-context-windowprinciple-sequence-verifiable-unitsprinciple-fix-root-causesprinciple-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.
2. Adapt the configuration
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.
3. Fill the required choices
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.
4. Check integration capabilities
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.
5. Prepare the routing map
If the user wants reroutes or owner pings:
- Copy
../triage-issue-reports/references/routing.example.mdoutside.cursor/automations/benny/. - Replace every placeholder with public or organization-local values.
- Keep owner pings off by default.
- 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.
6. Verify the control adapter
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.
7. Prepare the live automations
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.
First-time creation
Create one automation at a time.
For each automation:
- Read the matching copied prompt template as secondary internal source material.
- Turn
FOR_AGENTS.md, the finished Benny configuration, and the template intent into a complete natural-language request. - Tell the live prompt to read and follow its exact committed operational file under
.cursor/automations/benny/. - Use the stable repository-relative path, not a plugin source or cache path. Do not copy the operational file contents into the live prompt.
- Read and follow the built-in
automateskill. - Let
automatediscover Slack channels, the repository, and connected integrations. - Let
automateconfirm that the copied pack and any referenced configuration files are committed in the same repository where the automation will run. - Let
automateshow its draft table, obtain approval, ask readiness, and open the Automations editor. - 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.mdfor 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.mdfor 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
automateconfirms 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.
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.
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.
8. Test thread safety
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:
- Triage stores the root
thread_tsand posts exactly one verdict as a reply. - The verdict contains one configured marker.
- Repro accepts the marker only from the configured triage identity.
- Repro keeps the same immutable source coordinates.
- No source-channel root message appears.
- A delegated worker cannot use any Slack write action.
- 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.
FAQ
What does the setup-benny skill do?
Configure Benny and prepare its triage and repro automations. Use when installing Benny or changing its Slack, tracker, repository, routing, control, model, or budget settings.
How do I install setup-benny?
Run npx skills add https://github.com/cursor/plugins --skill setup-benny in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/setup-benny/ (personal) or .claude/skills/setup-benny/ (project).
Which AI agents can use setup-benny?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is setup-benny safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains setup-benny?
It is published by cursor in cursor/plugins. It has 789 recorded installs.
More from cursor/plugins
thermo-nuclear-code-quality-review
cursor/plugins
Run an extremely strict maintainability review for abstraction quality, giant files, and spaghetti-condition growth. Use for a thermo-nuclear code quality review, thermonuclear review, deep code quality audit, or especially harsh maintainability review.
typescript-best-practices
cursor/plugins
TypeScript best practices. Use when reading or editing any .ts or .tsx file.
how
cursor/plugins
Use for "how does X work", code walkthroughs before changing something, and placement / ownership / layering questions ("where should this live", "which package owns this", "is this the right layer"). Explains subsystem architecture, runtime flow, onboarding mental models. Use why for motivation.
blast-radius
cursor/plugins
Find what a change could break somewhere else before it ships, beyond the diff, and prove the one fact it's safe because of by running real code instead of writing it up. Use for 'blast radius of X', 'what could this break', or reviewing a small diff you don't trust.
Popular productivity & automation skills
agent-browser
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
lark-doc
open.feishu.cn
飞书云文档(Docx / Wiki)内容操作:读取、创建、编辑文档,插入或下载图片附件,以及操作思维笔记。用户提供文档 URL/token(包括 doubao.com 的 /docx/、/wiki/)时使用;按 URL 路径/token 而非域名路由;/page/ 是妙搭应用,非飞书云文档。文档内嵌资源按读取参考中的统一规则分流。独立评论操作走 lark-drive;随正文读取评论使用 docs +fetch。表格或 Base 内部数据操作不在本 skill。
lark-base
open.feishu.cn
飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。
lark-drive
open.feishu.cn
飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、查询权限设置、评论/权限/订阅、标题、版本、飞书文档密级标签(secure labels)和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。
lark-shared
open.feishu.cn
Use for lark-cli setup/auth tasks: auth login/status/logout, user vs bot identity, business-domain permissions (--domain, including all/docs/drive), missing scopes, revoking authorization, or handling notice JSON.
lark-im
open.feishu.cn
飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)、监听卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索群、创建群聊或话题群、管理标记数据、管理 Feed 置顶(添加/移除/查询置顶会话)、管理标签数据、处理卡片回调时使用。