Reproduce triaged Slack bugs through a configured app-control adapter, verify existing fixes, and open a bounded draft pull request only after before-and-after proof. Use only from the configured Benny repro automation.
72
88%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Low
Low-risk findings worth noting
Wait for a trusted triage marker in the source thread. Reproduce the exact symptom through the target app's real UI. Verify an existing fix when one exists. Attempt a bounded fix only after a confirmed repro.
Load the external Benny configuration supplied by the automation. If the config, required actions, control adapter, or completed feature map is missing, fail closed.
SendSlackMessage, PostToSlack, chat.postMessage, and all other Slack writes.github.com pull request links.principle-guard-the-context-window for delegated analysis.principle-sequence-verifiable-units, principle-fix-root-causes, and principle-prove-it-works through repro, fix, and verification.Before making a work list or delegating:
SOURCE_THREAD_TS to trigger.thread_ts when present. Otherwise use trigger.ts.SOURCE_THREAD_TS.SOURCE_CHANNEL_ID and SOURCE_THREAD_TS as immutable values.Never replace these values with a reply timestamp, operations timestamp, or status-message timestamp.
Before every source-channel post:
channel=SOURCE_CHANNEL_ID and thread_ts=SOURCE_THREAD_TS.If any check fails, post nothing. Never retry at the root or in a fallback channel.
Watch the source thread for the configured verdict budget. Stay silent while waiting.
Accept a verdict only when:
slack.triage_identity_user_id.SOURCE_THREAD_TS.Public marker forms:
[benny:bug]
[benny:bug] tracker=https://tracker.example/issue/123
[benny:performance]
[benny:performance] tracker=https://tracker.example/issue/123
[benny:other]Proceed only for bug or performance. Capture the optional tracker URL. Stop silently for other, a missing verdict, an untrusted author, conflicting markers, or a timeout.
This marker replaces private bot identities and free-form verdict matching.
Re-read the thread immediately before starting work.
Stop when a person clearly claims the fix, gives a concrete implementation plan, or asks another agent to implement, patch, fix, or open a pull request.
Do not treat these as fix ownership:
Judge the requested action, not the presence of a bot.
If an open pull request or merged commit plausibly fixes this report, switch to references/verify-existing-fix.md.
An artifact may come from the thread, tracker issue, repository history, or pull request search. A claim without a commit or pull request is not a fix artifact.
If a person owns the work but has not produced an artifact, stop. Do not race them.
If slack.operations_channel_id is configured, the coordinator may create one root status message there. This is the only allowed root post in the repro workflow.
Store its coordinates as OPERATIONS_CHANNEL_ID and OPERATIONS_THREAD_TS. Never confuse them with the source coordinates.
Use the configured plain Unicode status strings. Keep status text short:
Prefer configured Cursor Slack actions. Use BENNY_SLACK_BOT_TOKEN only when the user configured it for a narrow missing capability such as editing this one status message. Never expose the token to a worker.
If no operations channel is configured, keep detailed status in the automation run output. Do not substitute a source-channel root message.
Read references/control-adapter.md and the completed map at control.feature_map_path, then invoke the skill named by control.skill_name.
Find the feature-map section that matches the reported user path. Read it before driving the app. If no section covers the feature, mark the run blocked instead of inventing a path or selector.
Require all seven capabilities:
If the adapter is absent or any required capability is missing, mark the operations status as blocked and stop. Do not pretend a screenshot, unit test, state mutation, or source reading is a UI repro.
Read the full source thread and tracker issue when present.
Collect:
Inspect screenshots and video. Use read-only parallel workers for code history, test ideas, blast-radius mapping, and media review when useful. Each worker gets a narrow question and the Slack-write prohibition.
Use pstack's how skill to trace the action through the repository. Use why for regression history and defensive code. Form competing cause hypotheses and identify evidence that would separate them.
Bring up the target app through the control adapter.
Confirm the correct app, workspace, account, data set, and feature state before acting. Use stable app markers. Do not rely on window order or a familiar title alone.
Drive the reported path through real UI actions.
Before calling it reproduced:
An expected dialog, loading state, or setup step is not the bug. Capture the final state that distinguishes correct from broken behavior.
Use the configured repro budget. If the symptom does not reproduce within it, report a clean Could not reproduce outcome. If the environment cannot provide a required capability, report Blocked and state what was missing.
For a successful repro:
Have a read-only media reviewer answer one question: does the evidence visibly show the discriminating broken state?
If the answer is no or uncertain, the repro is not confirmed. Capture better evidence or use Could not reproduce.
Post detailed evidence only in the operations thread when configured. Keep the source update concise.
Update the operations status first.
For Could not reproduce or Blocked, post nothing in the source thread. The operations thread or run output carries the result.
For a confirmed repro, run the source preflight and post at most one unprompted source reply:
Attach evidence only when the configured Slack action keeps it inside the same source thread and the organization's retention policy allows it.
Wait for the configured rejection window. If a person shows that the setup or interpretation was wrong, correct the repro once. Do not start the fix phase until the window closes without a valid rejection.
When a fix artifact exists, follow references/verify-existing-fix.md.
Verification must show the symptom on the baseline and its absence on the patched build. Both paths use the real UI twice.
Do not edit the existing fix, add a competing patch, or open a replacement pull request.
Attempt a fix only when all of these hold:
If any condition fails, keep the repro report and stop without a pull request.
When the gate passes, update operations status to Attempting bounded fix.
The coordinator owns every Slack post, the final diff review, commits, and the pull request.
Read-only workers may:
They do not edit, run external writes, post status, or own the fix.
A tightly scoped code edit may be delegated during this phase only when tool isolation removes Slack credentials and every Slack write action from that worker. Its prompt must still carry the explicit Slack-write ban. The coordinator reviews the edit and runs or verifies the required tests. If tool isolation is uncertain, keep the edit in the coordinator.
Confirm the mechanism with runtime evidence. Eliminate competing hypotheses before editing.
Fix the root cause with the smallest justified change.
tdd skill when there is a cheap local test target, and write the failing test before the fix.Keep the original baseline evidence.
On the patched build:
A compile, unit test, code review, or plausible diff is not after evidence.
Run focused tests, then smoke the blast radius around the changed behavior. Cover nearby states, inputs, permissions, platforms, and failure paths that the change could affect. Stop without a pull request if a regression remains.
Only after before-and-after proof:
https://github.com/{owner}/{repo}/pull/{number}.unslop skill.If pull request creation fails, do not claim success. Keep the commit or branch state in the run output and mark operations status Fix did not land.
On success, mark operations status Draft pull request opened and post one concise reply in the operations thread with the linked pull request. Do not create a second source-channel root or unprompted source reply.
Watch the configured operations thread for one follow-up window.
Always call the control adapter's cleanup capability. Keep artifacts only as long as the configured retention policy allows.
5bf2b15
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.