You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(github): Skip duplicate-check narration when creating issues (#117)
Add a guardrail to the GitHub skill that suppresses negative
duplicate-search
reporting (e.g. "no duplicates found") when the user explicitly asks to
create
an issue. The agent still searches for duplicates as part of its
research, but
only surfaces results when matches are actually found and are relevant.
Additionally restructures the GitHub skill for clarity:
- Merge `github-issue-api.md` into `api-surface.md` to eliminate
duplicate command references
- Add conditional reference loading table so the agent only loads files
relevant to the current operation
- Separate clone and issue paths into distinct workflow branches
- Group guardrails by concern (execution, quality, scope)
- Remove delegated footer instruction from SKILL.md (already in every
template)
Adds an eval to verify the dupe-narration behavior.
Fixes#113
---------
Co-authored-by: Claude <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: packages/junior-github/skills/github/SKILL.md
+60-34Lines changed: 60 additions & 34 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -8,11 +8,24 @@ allowed-tools: bash
8
8
9
9
# GitHub Operations
10
10
11
-
Use this skill for GitHub issue workflows in the harness. Issues are the primary surface. Repository checkout is limited to `gh repo clone` guidance and execution when local code context is needed.
11
+
Issue workflows and repository checkout via `gh` CLI.
12
+
13
+
## Reference loading
14
+
15
+
Load references conditionally based on the operation:
- Use a full-history clone only when the task explicitly needs history-heavy operations such as`git blame`, `git bisect`, tag/release archaeology, or broad commit-log analysis.
30
-
-If the initial shallow clone is insufficient, deepen incrementally instead of recloning:
49
+
- Use full-history clone only when the task needs `git blame`, `git bisect`, tag/release archaeology, or broad commit-log analysis.
50
+
-Deepen incrementally instead of recloning:
31
51
-`git -C <directory> fetch --depth=<n> origin`
32
52
-`git -C <directory> fetch --unshallow`
33
-
- When cloning a fork, keep the default upstream remote behavior unless the user asks for a different remote name.
34
-
- After checkout, report the local directory and whether the clone is shallow or full. Stop here for clone-only requests.
53
+
- When cloning a fork, keep the default upstream remote behavior unless the user asks otherwise.
54
+
- Report the local directory and whether the clone is shallow or full.
55
+
56
+
---
57
+
58
+
### Issue path
35
59
36
-
3. Classify issue type before drafting:
60
+
#### 3. Classify issue type
37
61
38
62
- Use explicit user type when provided (`bug`, `feature`, `task`).
39
63
- Otherwise infer from intent:
@@ -42,51 +66,53 @@ Use this skill for GitHub issue workflows in the harness. Issues are the primary
- Generalize conversation context: replace user names, slash-command invocations, channel references, and session-specific fragments with the underlying technical problem.
56
82
- Include code snippets when they clarify the problem pattern or proposed change.
57
83
- Cross-reference related issues and PRs when they provide context.
58
-
- For quality gates, use [references/issue-quality-checklist.md](references/issue-quality-checklist.md).
59
-
- For structure examples, use [references/issue-examples.md](references/issue-examples.md).
60
-
- When creating a new issue on behalf of a user, append a final attribution line at the end of the body in the form `Action taken on behalf of <name>.`
61
-
- Use the clearest available user identifier from conversation context. Prefer a human name, then stable handle, and do not omit attribution for delegated mutations.
62
84
63
-
5. Execute operation:
85
+
#### 5. Execute operation
64
86
65
-
-Select the matching declared capability for the operation:
87
+
-Issue the matching capability credential before executing:
- Execute operations as soon as required fields are available. Do not pause for confirmation unless the user explicitly asks for preview/dry-run.
86
105
- Require explicit confirmation only for close/reopen or destructive broad rewrites.
87
-
- Default to shallow clones for efficiency. Do not use a full clone unless the task requires repository history or the user asks for it.
106
+
- Do not overwrite issue fields unless explicitly requested. Prefer partial updates over full body replacement.
107
+
108
+
### Quality
109
+
88
110
- Never claim verification without citing sources.
89
111
- For `bug` issues, do not present a fix as definitive unless root-cause evidence is explicit.
90
-
- Do not overwrite issue fields unless explicitly requested. Prefer partial updates over full body replacement.
112
+
- Do not report negative duplicate-search results to the user (e.g. "no duplicates found"). Searching for duplicates is expected, but only mention duplicates when matches are actually found and are relevant to surface.
113
+
114
+
### Scope
115
+
116
+
- Issue workflows plus repository checkout only. Do not execute pull-request or repository admin mutations.
117
+
- Default to shallow clones. Do not use a full clone unless the task requires repository history or the user asks for it.
91
118
- If repository or installation access is missing, stop and return a concrete remediation message.
92
-
- Scope is issue workflows plus repository checkout. Do not execute pull-request or repository admin mutations in this skill.
"Create an issue for adding rate limiting to the API endpoint in getsentry/junior",
80
+
),
81
+
],
82
+
criteria:
83
+
"The assistant creates a GitHub issue without narrating duplicate-search results. The reply must not mention checking for duplicates, searching for similar issues, or reporting that no duplicates were found. The reply should proceed directly to issue creation and report the result.",
84
+
});
85
+
70
86
slackEval("skills: default repo setup via natural language",{
0 commit comments