setup-benny
Configure Benny and prepare its triage and reproduce runs on pi.
Skill by gh0stwin
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/gh0stwin-setup-benny
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: productivity, finance
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/setup-benny
What's inside
- Skill name
setup-benny- Description
- Configure Benny and prepare its triage and reproduce runs on pi. Use when installing Benny or changing its intake source, Slack CLI, tracker, repository, routing, verification, model, or budget settings.
- License
- MIT
- Instructions
- 251 lines in SKILL.md · view on GitHub
Files (1)
- SKILL.md
SKILL.md (first lines)
# Set up Benny The human enters setup by pointing pi at the pack's `FOR_AGENTS.md`, or by running `/skill:setup-benny` from a session rooted in the target repository. Either way this file is the checklist. The destination is `<target-repository>/.pi/automations/benny/`. Benny needs external configuration, an intake source, and two headless pi runs. pi has no hosted automations, so the runs are GitHub Actions workflows (`templates/*.yml`) or the local runner (`runner/benny-run.ts`). Both invoke `pi -p`. Benny takes reports from Slack, GitHub issues / the CLI, GitLab issues, or any source that can build an intake binding (the generic webhook/CLI intake). Slack is one option, not a requirement: a user who does not use Slack sets `intake.source: github`, `intake.source: gitlab`, or `intake.source: webhook` and never provides a Slack CLI or token. Every run receives one intake binding: the source item, the source thread, the single verdict location, and the adapter that reads and posts. The operational files are written in those terms, and [`../../references/intake-binding.md`](../../references/intake-binding.md) is the contract behind them. Do this before asking for Benny configuration. ## 1. Choose the intake source Ask which intake the user wants and record it as `intake.source` in the configuration: - **Slack** (default): reports arrive as messages in a source channel and Benny replies in the source thread through a repository-provided Slack CLI. Steps 6 and 11's Slack checks apply. - **GitHub issues / CLI**: reports arrive as issues or as `benny-run.ts --event` invocations. Benny posts the verdict as an issue comment through the tracker adapter. No Slack CLI, no Slack token, and no `slack:` section in the config. - **GitLab issues / CLI**: reports arrive as GitLab issues or as `benny-run.ts --event` invocations naming the issue `iid` and URL. Benny posts the verdict as exactly one comment on the issue through the GitLab tracker adapter. Set `gitlab.project` and `gitlab.token_env`; no Slack CLI, no Slack token, and no `slack:` section in the config. - **Webhook / CLI**: reports arrive from any source that can hand the runner a binding: a source item, a source thread, a verdict location, and the adapter read and post commands. The binding travels in the event, so this intake needs no Slack values and no intake section beyond `intake.source: webhook`. If the user does not use Slack or does not want to incorporate it, choose the GitHub, GitLab, or webhook intake and continue without Slack. Do not block setup on a missing Slack CLI for that choice. ## 2. Choose the target repository Ask which repository will run Benny. Treat the directory containing `FOR_AGENTS.md` as the source pack. ## 3. Merge the pack 1. Merge the entire source pack into `<target-repository>/.pi/automations/benny/`. 2. Preserve every destination-only file. Never delete unrelated files or overwrite user-owned configuration, feature maps, or routing maps. 3. When an existing destination file at a source-managed path differs, review the diff and merge without discarding local edits. If ownership is ambiguous, stop and ask before replacing it. 4. Verify that the copied `FOR_AGENTS.md` and `skills/setup-benny/SKILL.md` exist in the target repository. ## 4. Install pi-pstack for the target repository Add pi-pstack to the target repository's project settings so a fresh checkout resolves the shared skills Benny uses (`how`, `why`, `tdd`, `unslop`, and the principle skills): ```bash pi install -l git:github.com/gh0stwin/pi-pstack ``` That writes `.pi/settings.json`. If the file already exists, preserve every unrelated setting and package. Do not hand-edit JSON: rerun `pi install -l` for the addition and leave the rest alone. Then run `pi list -l` and confirm `pi-pstack` resolves in project scope. ## 5. Ask for the configuration Ask for each value below and record it in a user-owned configuration file outside this pack, for example `.pi/benny/configuration.yaml`. Start from [`../../templates/configuration.example.yaml`](../../templates/configuration.example.yaml). Required for every intake: - Intake source (`slack`, `github`, `gitlab`, or `webhook`) - Repository URL and default branch - Tracker adapter and its target fields - Verification skill name and completed feature-map path - Models per role, as pi model ids from `pi --list-models` - Status emoji strings - Budgets Required for the Slack intake only: - Source Slack channel id - Triage identity (the Slack user id Benny posts as) - Slack CLI command name Required for the webhook intake only: - The binding each source sends: source item, source thread, verdict location, and the adapter read and post commands. Record the shape in the source's own documentation; the runner validates it per event. Required for the GitLab intake only: - GitLab project path (`gitlab.project`), for example `group/project` - The name of the environment variable that holds the GitLab token (`gitlab.token_env`), for example `GITLAB_TOKEN`. The token itself stays in the environment or a secret manager, never in YAML and never in the repository. Optional: - Operations channel id (Slack intake) - Routing map path - `BENNY_SLACK_BOT_TOKEN` for the narrow capabilities the Slack CLI exposes (Slack intake only) Use only model ids that `pi --list-models` reports, or `inherit-parent` / `auto`. Do not guess an id and do not carry over a private default. For `intake.source: slack`, the source channel, triage identity, Slack CLI, repository, tracker adapter, verification skill, and feature map must be explicit. For `intake.source: github`, the Slack values are not asked for and their absence is not an error; the repository, tracker adapter, verification skill, and feature map must be explicit. For `intake.source: gitlab`, the Slack values are not asked for and their absence is not an error; the GitLab project and token environment, tracker adapter, verification skill, and feature map must be explicit. For `intake.source: webhook`, only the repository, tracker adapter, verification skill, and feature map are asked for; the event carries the rest. Fail setup if a required value stays ambiguous. ## 6. Provide the Slack CLI (Slack intake only) Skip this step when `intake.source` is `github`, `gitlab`, or `webhook`; a no-Slack install has no CLI contract to satisfy. pi has no Slack integration, so Benny reads and posts through a CLI the repository provides. Set its name in `slack.cli`. It must implement: ```text <cli> thread <channel> <ts> # JSON: root message and replies <cli> permalink <channel> <ts> # permalink URL <cli> post <channel> <ts> <text> # reply in the thread, prints the new ts <cli> react <channel> <ts> <emoji> # add a reaction <cli> edit <channel> <ts> <text> # edit a message the identity owns <cli> download <file-id> <dest> # write an attachment to dest ``` The CLI owns the token. Keep the token in a secret manager or the environment, never in YAML, never in the repository, and never in a worker's environment. If the user wants the Slack intake and the repository has no such CLI, stop and tell the user Benny cannot post. Do not substitute a browser session or a personal token. If the user does not use Slack, switch to `intake.source: github`, `intake.source: gitlab`, or `intake.source: webhook` instead of building a CLI. ## 7. Prepare the tracker adapter The tracker is an adapter, not a required vendor. `gh issue` is the reference adapter for GitHub Issues, `glab issue` for GitLab, and a Linear, Jira, or other adapter may implement the same contract. Record the adapter command in `tracker.adapter`. The adapter must be able to search, read, create, update, and link issues, and to cancel an issue this run created when the source handoff fails. For the GitHub and GitLab intakes it also carries the verdict: the run posts one issue comment on the source issue instead of a Slack thread reply. `tracker.adapter` is required for those intakes, and the runner fails closed without it. ## 8. Verify the verification skill Read [`../reproduce-and-fix-issues/references/verification-adapter.md`](../reproduce-and-fix-issues/references/verification-adapter.md) and the user's completed feature map. The verification skill named in `verification.skill_name` must provide all seven capabilities: bring up, navigate, drive the real UI, inspect state read-only, capture screenshots, record video, and clean up. If the project has no such skill, offer once to generate one with `/skill:create-verification-skill`. Copy and fill [`../reproduce-and-fix-issues/references/feature-map.example.md`](../reproduce-and-fix-issues/references/feature-map.example.md) to `verification.feature_map_path`. Pack refreshes must not overwrite it. ## 9. Prepare the routing map
From gh0stwin/pi-pstack, MIT.
More from gh0stwin/pi-pstack
- 0.526score
triage-issue-reports
gh0stwin
Triage one report through its intake binding with a single verdict, evidence review, cause-aware routing, tracker dedupe, and fail-closed ticket creation.
SkillBFreshness: BClaude Code +9 - 0.526score
reproduce-and-fix-issues
gh0stwin
Reproduce triaged bugs through a configured app-verification adapter, verify existing fixes, and open a bounded draft pull request only after before-and-after…
SkillBFreshness: BClaude Code +9 - 0.520score
create-skill
gh0stwin
Author, revise, or validate a pi skill (a SKILL.md folder) against the Agent Skills standard.
SkillBFreshness: BClaude Code +9 - 0.501score
interrogate
gh0stwin
Use for "interrogate", "adversarial review", "multi-model review", "challenge this", "stress test this code", "find blind spots", or "tear this apart".
SkillBFreshness: BClaude Code +9 - 0.501score
how
gh0stwin
Use for "how does X work", code walkthroughs before changing something, and placement / ownership / layering questions ("where should this live", "which…
SkillBFreshness: BClaude Code +9 - 0.499score
make-bot-ui
gh0stwin
Use when building a custom UI (page, dashboard, buttons) that should wake a pi agent from a local server, when the user must provide a wake token, or when…
SkillBFreshness: BClaude Code +9 - 0.496score
automate-me
gh0stwin
Use for "automate me", "create/update/refresh my -mode skill", "turn/capture my preferences or working style into a skill", or wanting agents to follow how…
SkillBFreshness: BClaude Code +9 - 0.496score
deslop
gh0stwin
Remove AI-generated code slop and clean up code style on the current branch's diff.
SkillBFreshness: BClaude Code +9 - 0.496score
no-comments
gh0stwin
Spawn Comment Sicko, fix accepted findings, and offer encodings for claimed constraints.
SkillBFreshness: BClaude Code +9 - 0.496score
blast-radius
gh0stwin
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…
SkillBFreshness: BClaude Code +9
Signals
- Stars
- 0
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Sep 14, 2026 (1 month ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/gh0stwin/pi-pstack
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from gh0stwin
- 0.526score
triage-issue-reports
gh0stwin
Triage one report through its intake binding with a single verdict, evidence review, cause-aware routing, tracker dedupe, and fail-closed ticket creation.
SkillBFreshness: BClaude Code +9 - 0.526score
reproduce-and-fix-issues
gh0stwin
Reproduce triaged bugs through a configured app-verification adapter, verify existing fixes, and open a bounded draft pull request only after before-and-after…
SkillBFreshness: BClaude Code +9 - 0.520score
create-skill
gh0stwin
Author, revise, or validate a pi skill (a SKILL.md folder) against the Agent Skills standard.
SkillBFreshness: BClaude Code +9 - 0.501score
interrogate
gh0stwin
Use for "interrogate", "adversarial review", "multi-model review", "challenge this", "stress test this code", "find blind spots", or "tear this apart".
SkillBFreshness: BClaude Code +9 - 0.501score
how
gh0stwin
Use for "how does X work", code walkthroughs before changing something, and placement / ownership / layering questions ("where should this live", "which…
SkillBFreshness: BClaude Code +9 - 0.499score
make-bot-ui
gh0stwin
Use when building a custom UI (page, dashboard, buttons) that should wake a pi agent from a local server, when the user must provide a wake token, or when…
SkillBFreshness: BClaude Code +9
Cite this page
setup-benny skill. Agent Mart. https://agentmart.dev/skills/gh0stwin-setup-benny (last updated 2026-10-24)