Skip to content
Back to skills

Oss Repo Readiness

ASecurity

Getting a repo "open source ready" isn't about the license — that's a five-minute checkbox. It's about DevEx: whether a developer who has never talked to the maintainer can understand the project, run it, and land a contribution without having to ask a question first. Every piece of friction you remove here is a contributor you don't lose. This skill audits a repo against that bar, using patterns pulled from repos that are genuinely good at this (Vite, shadcn/ui, tRPC, Sentry, Supabase, Rust,...

  • 5 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added August 31, 2026
ai-agentsrustgovueangularkubernetesgitapidatabasesecurity

Works with

  • cli
  • api

Security analysis

A100/100

Scanned August 31, 2026

npx -y skills add markphelps/agent-plugins --skill oss-repo-readiness --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Oss Repo Readiness?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Oss Repo Readiness
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/markphelps-oss-repo-readiness/badge)](https://www.skillsdirectory.com/skills/markphelps-oss-repo-readiness)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: oss-repo-readiness
description:
  Audit and prepare a GitHub repo for open source release, with a focus on
  developer experience (DevEx) — the things that determine whether a stranger
  can go from "found this repo" to "opened a PR" without friction. Use this
  whenever the user wants to open-source a repo, make a private repo public, do
  a "pre-launch checklist" or "OSS readiness audit," improve their
  README/CONTRIBUTING/issue templates, or asks something like "is this repo
  ready for people to use/contribute to." Also trigger for narrower asks that
  are really pieces of this — "write a CONTRIBUTING.md," "set up issue
  templates," "add a CODEOWNERS file" — since those are almost always better
  done as part of the full readiness pass rather than in isolation.
---

# Open Source Repo Readiness

Getting a repo "open source ready" isn't about the license — that's a
five-minute checkbox. It's about DevEx: whether a developer who has never talked
to the maintainer can understand the project, run it, and land a contribution
without having to ask a question first. Every piece of friction you remove here
is a contributor you don't lose. This skill audits a repo against that bar,
using patterns pulled from repos that are genuinely good at this (Vite,
shadcn/ui, tRPC, Sentry, Supabase, Rust, Excalidraw, Caddy) rather than generic
checklist advice.

## Workflow

1. **Inspect the repo.** Read the root directory listing, README, package
   manifest (package.json / Cargo.toml / go.mod / pyproject.toml), CI config,
   and any existing docs. Figure out the language/ecosystem and how big the
   project is — a 200-star CLI and a framework with a plugin ecosystem need
   different amounts of ceremony. Don't assume; look.
2. **Run the audit** using the checklist below. Produce a short gap report: what
   exists, what's missing, what exists but is weak (e.g. a README with no
   quickstart, a CONTRIBUTING.md that's just a boilerplate stub).
3. **Propose, don't dump.** Share the gap report and ask which pieces to tackle
   — or if the user says "just do it," proceed through the checklist in priority
   order (Tier 1 first). Don't generate all nine files unprompted for a repo
   that only asked about its README.
4. **Write files that reflect the actual repo**, not placeholders. Pull the real
   install command from the manifest, the real test command from CI config or
   package scripts, the real license the user wants, the real project name. A
   generated CONTRIBUTING.md that says `npm test` in a Go repo is worse than no
   CONTRIBUTING.md.
5. **Flag what you can't decide for them**: license choice (MIT vs Apache-2.0 vs
   GPL has real implications — explain the tradeoff, don't just pick one),
   whether to enable Discussions, whether to add a CLA. Ask rather than assume
   for anything with legal or governance weight.

## The audit, in priority order

### Tier 1 — the first five minutes of a stranger's visit

These are what someone sees before they've run a single command. Weak here, and
nothing else matters.

- **README.md** — this is the actual product page, not a formality. It needs, in
  order: a one-line description that says what problem this solves (not what
  it's built with), a quickstart that gets someone running something in under 60
  seconds, and only then everything else. The Vite and shadcn/ui READMEs both
  lead with "what is this" before any badge or table of contents. If there's a
  UI, a screenshot or short GIF above the fold does more than three paragraphs
  of description — this is the single highest-leverage thing you can add to a
  README with a visual component. Cut anything that belongs in `/docs` instead:
  full API reference, architecture deep-dives, and changelog entries don't
  belong in the README — link to them.
- **LICENSE** — no license file means the code is not legally usable by anyone,
  full stop, regardless of what the README says. If the user hasn't chosen one,
  ask: MIT/Apache-2.0/BSD for "I want maximum adoption, don't care much what
  people do with it" (most dev-tool repos, including basically all of the ones
  referenced in this skill); Apache-2.0 specifically if patent grant language
  matters (common for anything that touches larger companies' legal review, e.g.
  Kubernetes-ecosystem projects); GPL/AGPL for "I want derivative works to stay
  open" (used deliberately by projects like Grafana pre-relicense, or
  database/infra tools wary of cloud providers repackaging them).
- **Quickstart that actually works** — the single most common OSS-readiness
  failure is a copy-pasted install command that's stale. Before treating the
  README as done, mentally (or actually) walk it as a first-time user would:
  clone, install, run — does the first command in the doc actually work against
  the current repo state?

### Tier 2 — the first contribution

Everything a person needs to go from "I found a bug" or "I want to add X" to a
merged PR without a synchronous conversation.

- **CONTRIBUTING.md** — dev environment setup, how to run tests, branch/commit
  conventions if any, and what the PR review process looks like (response-time
  expectations help — tRPC and Sentry both state roughly how fast maintainers
  respond). If the project uses a specific commit format (Conventional Commits
  is the common one, used by Vite/Vue/Angular-descended projects because it
  drives automated changelogs/semver), say so explicitly with an example, not
  just a link to the spec.
- **Issue templates** (`.github/ISSUE_TEMPLATE/`) — GitHub's issue _forms_
  (YAML, not just markdown templates) are the current standard: structured
  fields for repro steps, environment, expected vs actual behavior. Bug report +
  feature request at minimum. A blank issue box gets you "it doesn't work" with
  no repro; a form gets you something actionable. Include a `config.yml` that
  points support questions to Discussions instead of Issues if Discussions is
  enabled — keeps the issue tracker from filling with questions.
- **Pull request template** (`.github/pull_request_template.md`) — a short
  checklist (tests added, docs updated, linked issue) catches the common gaps
  before review rather than after.
- **"Good first issue" labeling** — not a file, but worth flagging: GitHub's own
  research found repos where ~25% of open issues are labeled "good first issue"
  see meaningfully more first-time contributors than those without. If the repo
  has open issues and none are labeled, that's a cheap, high-leverage fix — ask
  the user if they want help identifying 3-5 candidates from the current issue
  list.
- **CODEOWNERS** (`.github/CODEOWNERS`) — only worth adding once there's more
  than one maintainer or the repo has distinct areas of ownership; skip for
  solo-maintainer projects, it's pure overhead there.

### Tier 3 — trust and governance signals

These matter more as the project grows past "a few people trying it" — don't
over-invest here for a brand-new repo, but flag them as the project matures.

- **CODE_OF_CONDUCT.md** — the Contributor Covenant is the de facto default;
  almost no project needs a custom one. Its main value isn't the document
  itself, it's signaling "this is a maintained, professional space" to a
  first-time contributor deciding whether to engage.
- **SECURITY.md** — even a few lines (how to report a vulnerability privately,
  e.g. a security@ email or GitHub's private vulnerability reporting) matters
  the moment the project has real users, because the alternative is someone
  disclosing a vulnerability in a public issue.
- **CHANGELOG.md** — Keep a Changelog format (or auto-generated from
  Conventional Commits via changesets/semantic-release) tells people what
  changed between versions without reading commit history. Auto-generated is far
  more sustainable than hand-maintained for anything with regular releases.
- **Governance / MAINTAINERS file** — only for projects with multiple
  maintainers or that want to signal a path from contributor to maintainer. Skip
  for solo projects.
- **FUNDING.yml** (`.github/FUNDING.yml`) — only if the maintainer actually
  wants funding/sponsorship; trivial to add (GitHub Sponsors, Open Collective,
  etc.) and shows up as a "Sponsor" button on the repo.

### Tier 4 — DevEx polish

The difference between "usable" and "a pleasure to contribute to." Higher
effort, worth it for projects expecting sustained outside contribution.

- **CI on every PR** — tests + lint + build running automatically and visibly (a
  status check on the PR, plus a badge in the README) is table stakes for trust;
  a contributor shouldn't have to wonder if their change broke something.
- **Devcontainer / one-command setup** (`.devcontainer/`, or a
  `Makefile`/`justfile`/npm script that does everything) — removes "what version
  of X do I need" as a source of friction entirely. Rust projects lean on
  `cargo` doing this for free; polyglot or C-dependency-heavy projects benefit
  the most from an explicit devcontainer.
- **Discussions enabled** — for Q&A and proposals that shouldn't live in the
  issue tracker. Worth enabling once the issue tracker starts accumulating "how
  do I..." questions.
- **Badges that mean something** — build status, license, latest version, and
  maybe a Discord/Slack invite if community chat exists. Skip decorative badge
  walls; each one should answer a real question a visitor has ("does this still
  work," "what license," "can I ask a question somewhere"). A star-history chart
  is a nice-to-have late addition, not a priority.
- **Repo topics + a real "About" description** — cheap, easy to forget, and is
  how people find the repo via GitHub search/topic browsing at all.

## Writing the actual content

When generating README/CONTRIBUTING/templates, don't reach for boilerplate. Base
every command on what's actually in the repo:

- Pull the run/build/test/lint commands from `package.json` scripts, `Makefile`
  targets, `Cargo.toml`, CI workflow files, or existing docs — don't guess at
  conventional command names.
- Match the project's actual tone. A terse, code-forward CLI dev-tool README
  (think ripgrep or fd) reads differently from a README for a broader
  application-facing OSS project (think Excalidraw or Supabase).
- If the repo has no tests yet, don't write a CONTRIBUTING.md section
  instructing contributors to run tests that don't exist — flag the gap instead
  and ask if they want a minimal test setup first.
- Keep the README's first screen (before any scroll) to: name, one-line pitch,
  and the quickstart. Everything else — full docs, architecture, FAQ — can live
  below the fold or in `/docs`, linked rather than inlined.

## Output

Default to writing the files directly into the repo at their conventional paths
(`README.md`, `CONTRIBUTING.md`, `.github/ISSUE_TEMPLATE/*.yml`, etc.) rather
than dumping content into chat — these are meant to be committed. Summarize what
was added/changed and call out anything that still needs a human decision
(license choice, whether to enable Discussions, who owns CODEOWNERS entries)
rather than silently picking for them.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.