Agent skill

Good First Issue Batch

by jayminwest in jayminwest/warren

File a batch of contributor-ready GitHub issues from the seeds backlog, re-verifying every candidate against HEAD first so no dead issue reaches a contributor.

MITAuto-check passedDevOps & Cloud

Install Good First Issue Batch

skills CLI
$ npx skills add jayminwest/warren --skill good-first-issue-batch -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jayminwest/warren good-first-issue-batch --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jayminwest/warren.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/good-first-issue-batch .claude/skills/good-first-issue-batch && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
good-first-issue-batch
GitHub stars
476
Token cost
~2.2k tokens
SKILL.md length
1,186 words
Files
1
Skills in repo
5
Repo updated
First seen
Licence
MIT

At a glance

File a batch of contributor-ready GitHub issues from the seeds backlog, re-verifying every candidate against HEAD first so no dead issue reaches a contributor.

  • Works in 7 steps: Operating principles → Gather candidates → Verify each candidate against HEAD — the… → …
  • DevOps & Cloud work in your project
  • SKILL.md covers The failure this skill exists…, 1. Operating principles, 2. Gather candidates and 3. Verify each candidate…, plus 4 more sections
  • Calls git, rg and gh

What it does

Good First Issue Batch is an agent skill from jayminwest/warren. File a batch of contributor-ready GitHub issues from the seeds backlog, re-verifying every candidate against HEAD first so no dead issue reaches a contributor. Activate for prompts like "file some good first issues", "open a batch of GFIs", "publish backlog issues to GitHub", "find contributor-ready work", or after an audit that surfaced contributor-sized items.

Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in DevOps & Cloud. It works with GitHub and Kubernetes. The repository describes itself as: Run coding agents like infrastructure, not terminal sessions. Warren manages isolation, lifecycle, spend, recovery, and Git delivery on compute you control. The licence is MIT.

When your agent uses it

  • DevOps & Cloud work in your project

Example prompts

  • “file some good first issues”
  • “open a batch of GFIs”
  • “publish backlog issues to GitHub”
  • “/good-first-issue-batch”

Requirements

  • Python 3

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Operating principles
  2. Gather candidates
  3. Verify each candidate against HEAD — the load-bearing phase
  4. Write the body
  5. File with linkage in both directions
  6. Report
  7. Keeping a filed batch honest

What it can do on your machine

Read from SKILL.md and the folder at commit 5276209. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • rg
    • gh
    • bun
    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Good First Issue Batch loads about 2.2k tokens when it runs. Until then it costs about 97 tokens; SKILL.md has 1,186 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~97
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from jayminwest/warren at commit 5276209, republished under its MIT licence (© jayminwest). 1,186 words, ~2,239 tokens.

Download SKILL.mdSave it as .claude/skills/good-first-issue-batch/SKILL.md (or your agent's skills folder).
name
good-first-issue-batch
description
File a batch of contributor-ready GitHub issues from the seeds backlog, re-verifying every candidate against HEAD first so no dead issue reaches a contributor. Activate for prompts like "file some good first issues", "open a batch of GFIs", "publish backlog issues to GitHub", "find contributor-ready work", or after an audit that surfaced contributor-sized items.

Protocol: Good-First-Issue Batch

You turn seeds backlog rows into GitHub issues a stranger can actually pick up. The hard part is not writing them. It is proving they are still real.

The failure this skill exists to prevent

On 2026-08-07 six issues were bulk-filed straight from seeds rows. Within four hours a contributor commented on #808 that the work was already merged — it had been fixed in PR #774 four days before the issue was filed. Two more issues in the same batch (#806, #807) turned out to be half-dead. Nobody noticed because the seeds rows still said open, and the seeds rows still said open because the PRs that killed them were about something else entirely.

A tracker row is a lead, not evidence. Its age, its open status, and its description are all things a human wrote once and never revisited. The only evidence that a bug is real is the bug, in the code, at HEAD, today.

1. Operating principles

  • Re-derive every claim from HEAD. Never copy a defect description from the seeds row into the GitHub body. Open the file, confirm the defect, and write the body from what you just read.
  • Verify bullets independently. A three-bullet issue is three issues wearing a trenchcoat. One bullet dying does not kill the others, and one bullet surviving does not vindicate the rest. Grade each separately.
  • Line numbers are always stale. Every file:line in an old row has drifted. Re-resolve all of them; cite what you actually saw.
  • A dead issue costs more than no issue. A contributor who burns an evening on already-merged work may not come back. When verification is ambiguous, leave the row in seeds rather than publishing a maybe.
  • Never file for volume. Six solid issues beat twenty speculative ones. There is no quota.

2. Gather candidates

Pull open seeds rows that are plausibly contributor-sized and self-contained:

bash
sd list --status open --format compact
sd search "<theme>" --format compact

Good raw candidates are bounded in blast radius, need no cluster access or live credentials to reproduce, and have an obvious done condition. Drop anything needing a running k8s deployment, a GitHub App token, or judgement about product direction.

Skip rows that already carry a GitHub back-link — they are filed:

bash
python3 -c "
import json
for line in open('.seeds/issues.jsonl'):
    d = json.loads(line)
    gh = (d.get('extensions') or {}).get('github')
    if gh and d.get('status') == 'open':
        print(d['id'], '-> #' + str(gh['issue']))
"

3. Verify each candidate against HEAD — the load-bearing phase

Run all four checks on every candidate. Fan these out with subagents when the batch is larger than three or four; each candidate is independent.

3a. Does the defect literally still exist?

Read the code the row names. Not the row's summary of the code — the code. If the row cites a symbol, confirm the symbol is still there and still wrong:

bash
rg -n "<symbol>" src/
git log --diff-filter=A --format="%h %ad %s" --date=short -- <path-it-names>

If the row references a gate (check:dups, check:size, check:debt), run it. A passing gate means the grandfather entry the issue wanted deleted is already gone. That is exactly how #808 died: resolveTargetDir had been extracted to src/cli/commands/target-dir.ts, and bun run check:dups reported all ten allowlist pairs still matched, with nothing stale to remove.

3b. Born-dead check: was it fixed before it was filed?

Compare the row's createdAt against the history of the files it names.

bash
git log --format="%h %ad %s" --date=short --since=<row createdAt> -- <paths>
git log -S'<symbol>' --format="%h %ad %s" --date=short

The killers are almost never PRs that mention the issue. They are sweeps — "single-source truth sweep", "dedup pass", "consolidate X" — that fix a small defect as collateral and close nothing. Read the diff of any sweep-shaped PR touching the same files since the row was written.

3c. Deletion check: does the thing the issue improves still exist?

An issue asking for better UI on a feature that was later deleted is not a bug, it is an archaeology exhibit. Confirm every state, field, route, and component the row depends on is still live:

bash
rg -n "<state-or-field-name>" src/core/wire.ts src/db/schema/ src/ui/src/

Zero hits across the schema and the UI means the feature is gone. Item 4 of #806 asked for paused-run context on the spectator view; paused had already been removed from RUN_STATES and its columns dropped by migrations 0034/0028 when the plot pass (pl-3a79) retired the whole pause mechanism.

3d. Adjacent-fix check: did another tracker id fix half of it?

Multi-bullet rows rot unevenly. Search for the behaviour the bullet wants, not the tracker id — the PR that delivered it was filed under a different id and will not mention this row:

bash
rg -n "<config-knob-or-constant-the-bullet-asks-for>" src/
git log --oneline --all -S'<constant>' | head

#807 claimed the event-stream lifetime was unlimited. It had been capped at four hours by default since PR #693, filed under warren-3995, which never touched warren-a676. Only the idleTimeout bullet was still true.

Show full SKILL.md (459 more words)Show less
Grade and act
GradeMeaningAction
LIVEEvery bullet reproduced at HEADFile it
PARTIALSome bullets deadRewrite to the surviving bullets, then file. Record what died and why
DEADNo bullet survivesDo not file. Close the seeds row citing the commit or PR that fixed it

For every DEAD row, close it with the evidence rather than leaving it to rot:

bash
sd close <seeds-id>

4. Write the body

Structure, in order:

  1. The defect, as a live file:line claim you personally re-read this session. One or two sentences per bullet.
  2. The fix direction — enough to remove ambiguity, not so much that it is just a diff in prose. Name the in-repo precedent to copy (Projects.tsx:90 already routes its empty-state hint through useOperatorHint — copy that shape) rather than describing the pattern abstractly.
  3. Scope boundaries. Say what is explicitly out of scope so the PR does not sprawl. Name the tests that will need updating.
  4. Getting started. AGENTS.md covers setup and conventions. Run bun run check:all before pushing — warnings count as failures.
  5. Tracked internally as \<seeds-id>`.`

If you rewrote a PARTIAL row, append a dated **Revised YYYY-MM-DD.** note saying which bullets died and what killed them. A contributor who finds the old description in a search result needs to know it was retired deliberately.

Write for someone with no repo context. Expand internal shorthand: "the reap path", "the wire vocabulary", and tracker ids mean nothing to a first-timer. Read .claude/skills/ste-writing/SKILL.md conventions if the prose is drifting toward marketing register.

5. File with linkage in both directions

The 2026-08-07 batch wrote GitHub → seeds but never seeds → GitHub, so a later sd close had no way to reach GitHub. Always write both.

bash
gh issue create \
  --title "<specific, defect-shaped title>" \
  --body-file <path> \
  --label "good first issue,help wanted,type/bug,area/ui,priority/P3,effort/small"

Then immediately record the back-link on the seeds row:

bash
sd update <seeds-id> --extensions '{"github":{"issue":<N>,"url":"https://github.com/jayminwest/warren/issues/<N>"}}'

Label vocabulary is fixed by .github/labels.yml — one type/, one or more area/, one priority/, one effort/. Never invent a label; sync-labels.yml will drop it. Reserve good first issue for effort/small work with a single obvious approach; help wanted alone is right for anything larger.

6. Report

Give the user a table of every candidate with its grade and the evidence that decided it, the URLs filed, and the seeds rows closed as DEAD. State the batch size and say plainly if verification shrank it — "filed 4 of 9 candidates; 3 were already fixed, 2 were ambiguous and left in seeds" is the useful sentence.

7. Keeping a filed batch honest

Issues rot after filing too, by the same mechanisms. Before pointing a contributor at an existing issue, or roughly monthly, re-run section 3 over the open GitHub issues and their linked seeds rows. When a row and its GitHub issue diverge, the code is the tiebreaker — never the tracker, and never the more recently edited of the two.

© jayminwest, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/good-first-issue-batch of jayminwest/warren.

Open the folder on GitHubat commit 5276209

Compare with similar skills

Good First Issue Batch next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Good First Issue Batch compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Good First Issue Batch this skilljayminwest/warren476—~2.2kAutomated safety check: PassMIT
CI CDEliasOulkadi/shokunin114—~3.4kAutomated safety check: NotesMIT
Triage Issueskubernetes-sigs/agent-sandbox4.2k—~1.5kAutomated safety check: PassApache-2.0
Devops Pipelineluongnv89/skills131—~4.8kAutomated safety check: PassMIT
Project Referencesaiskillstore/marketplace430—~2.3kAutomated safety check: NotesNone
GitHub Runnermagnus919/agent-skills113—~1.7kAutomated safety check: PassMIT

Similar skills

  • CI CD

    EliasOulkadi/shokunin

    Design CI/CD pipelines for GitHub Actions, GitLab CI, and CircleCI with matrix builds, test sharding, caching, Docker layer caching, OIDC auth, deployment strategies (rolling, blue-green, canary)…

    114 GitHub stars~3.4k tokensUpdated 3 days ago
    DevOps & CloudAuto-check: notes
  • Triage Issues

    kubernetes-sigs/agent-sandbox

    Official

    Triage open GitHub issues for kubernetes-sigs/agent-sandbox by mapping them to roadmap.md and assigning k8s priority labels + Kanban Priority (P0–P4) on Project

    4.2k GitHub stars~1.5k tokensUpdated today
    DevOps & CloudAuto-check passed
  • Devops Pipeline

    luongnv89/skills

    Configure pre-commit hooks and lean GitHub Actions for shift-left quality assurance.

    131 GitHub stars~4.8k tokensUpdated today
    DevOps & CloudAuto-check passed
  • Project References

    aiskillstore/marketplace

    Look up conventions, patterns, and concrete implementations from your own GitHub repositories checked out locally under ~/projects/referenzen/.

    430 GitHub stars~2.3k tokensUpdated today
    DevOps & CloudAuto-check: notes
  • GitHub Runner

    magnus919/agent-skills

    Deploy, manage, and troubleshoot self-hosted GitHub Actions runners.

    113 GitHub stars~1.7k tokensUpdated yesterday
    DevOps & CloudAuto-check passed
  • Tgf Server Dev

    thkhxm/tgf

    基于 tgf v2(github.com/thkhxm/tgf/v2)用确定性的 tgfctl 工作流创建、验证和维护 Go 游戏服务器项目。

    128 GitHub stars~1.3k tokensUpdated 2 mo ago
    DatabasesAuto-check: notes

More from jayminwest/warren

  • Os Eco Dep Sync

    jayminwest/warren

    Bump warren onto the latest published @os-eco/ versions across package.json + bun.lock and the Dockerfile CLI pins, then run the gates and open a PR.

    476 GitHub stars~1.9k tokensUpdated today
    Auto-check passed
  • Release

    jayminwest/warren

    Prepare, cut, and verify a warren release — tracker audits, version bump, CHANGELOG curation, ROADMAP update, push, then watch the pipeline through to published artifacts.

    476 GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • Seeds Issue Audit

    jayminwest/warren

    Audit and triage open Seeds (sd) issues — find which can be closed, auto-close high-confidence completed ones, and report borderline cases.

    476 GitHub stars~2.7k tokensUpdated today
    Auto-check passed
  • Warren Dogfood Pipeline

    jayminwest/warren

    Full prioritize → dispatch → shepherd → track pipeline against the live warren instance.

    476 GitHub stars~2.9k tokensUpdated today
    Auto-check passed

Categories

Questions about Good First Issue Batch

What does Good First Issue Batch do?

File a batch of contributor-ready GitHub issues from the seeds backlog, re-verifying every candidate against HEAD first so no dead issue reaches a contributor. Good First Issue Batch is an agent skill from jayminwest/warren. File a batch of contributor-ready GitHub issues from the seeds backlog, re-verifying every candidate against HEAD first so no dead issue reaches a contributor.

When should I use Good First Issue Batch?

Good First Issue Batch fits situations like: devOps & Cloud work in your project.

How do I install Good First Issue Batch in Claude Code?

Run `npx skills add jayminwest/warren --skill good-first-issue-batch -a claude-code`. Or copy the skill folder (.agents/skills/good-first-issue-batch in jayminwest/warren) into .claude/skills/good-first-issue-batch in your project. Claude Code loads it when a task matches its description.

How do I install Good First Issue Batch in Codex?

Run `npx skills add jayminwest/warren --skill good-first-issue-batch -a codex`. Or copy the skill folder (.agents/skills/good-first-issue-batch in jayminwest/warren) into .agents/skills/good-first-issue-batch in your project. Codex loads it when a task matches its description.

Can I use Good First Issue Batch in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jayminwest/warren --skill good-first-issue-batch -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/good-first-issue-batch, .gemini/skills/good-first-issue-batch, .github/skills/good-first-issue-batch and .opencode/skills/good-first-issue-batch in your project.

What does Good First Issue Batch need to run?

Going by SKILL.md and its folder, Good First Issue Batch needs the command-line tools its instructions call (git, rg, gh, bun and python3). Our summary lists: Python 3.

Does Good First Issue Batch access the network?

SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Good First Issue Batch safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Good First Issue Batch use?

Good First Issue Batch is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Good First Issue Batch use?

About 2.2k tokens (SKILL.md is roughly 9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Good First Issue Batch?

Skills that share tags, products or a category with Good First Issue Batch: CI CD (EliasOulkadi/shokunin, 114 stars), Triage Issues (kubernetes-sigs/agent-sandbox, 4.2k stars), Devops Pipeline (luongnv89/skills, 131 stars) and Project References (aiskillstore/marketplace, 430 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Good First Issue Batch?

jayminwest (a GitHub user) maintains it in jayminwest/warren, which has 476 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 7, 2026.

Source: jayminwest/warren on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.