Rules and skills that teach AI agents how to contribute to open source projects without being the villain.
95
91%
Does it follow best practices?
Impact
96%
3.55xAverage score across 20 eval scenarios
Advisory
Suggest reviewing before use
Run a pre-submission checklist before the contributor hits "Create Pull Request." Process the checks in order, do not skip ahead. Only applies to contributions to external open source projects — skip for internal or personal projects. This skill assumes recon has been done and the venue decision has been made. If a PR is not the right venue, this skill should not be running — go back to propose.
Research grounding for each check is in skills/preflight/REFERENCES.md.
Every PR description MUST contain an AI disclosure section. Check for it first — this is the most commonly missed item.
AI_POLICY.md.Disclosure must be specific: which tool, what it was used for, what was human-written vs. AI-assisted.
| Quality | Example |
|---|---|
| Bad | "I used AI to help write this." |
| Good | "Code drafted with Claude Code, reviewed and modified by me, tests written manually." |
Self-check: Can you see an "AI Disclosure" or equivalent section in the PR description? If not, add one now.
Compare the PR's diff against typical PR size from recon findings:
Fetch the target repo's PR templates — do not rely on recon notes, and do not guess the path. Then apply skills/preflight/body-template-compliance-rubric.md as the final verification rubric for pr_description.md:
bash .tessl/tiles/tessl-labs/good-oss-citizen/skills/recon/scripts/bash/github.sh templates-pr OWNER/REPOThe helper command emits a JSON envelope (see skills/recon/SKILL.md for the contract). Read data.templates — an array of {path, content} entries. If it is empty, treat the repo as having no PR template. Otherwise:
<chosen-filename> — matches the change type of this PR because <reason>"). If multiple exist, pick the one matching change type; if none match, use the first listed.pr_description.md itself. If information is elsewhere in that body file, move or copy it into the expected section instead of asking again.pr_description.md until the rubric result would be Matches well enough. Do not draft a public comment during preflight; edit the local PR body file instead. If genuinely missing information requires contributor input, leave a clear placeholder and mark Check 3 as failing.If no template exists, verify the PR description at minimum contains:
Do NOT create a PR template in a repo that lacks one — this is consumer-side compliance, not a suggestion to maintainers.
In the preflight report, include the template-compliance result (Matches well enough, Slight deviation, or Significant deviation) plus any remaining genuine missing information or manual checks.
Verify the contribution matches project conventions discovered during recon:
.editorconfig, linter, and formatter configs.fix(queue): raise QueueFullError when queue is at capacity. Do not just describe the format in the PR checklist; produce the artifact.fix/2-queue-full-error. Do not just claim compliance in the checklist.CONTRIBUTING.md says make test and make lint, run both. If it says npm test and npm run lint, run both. Do not run only tests and skip linting. Do not rely on CI to catch problems — that shifts the burden to maintainers.CHANGELOG.md exists and CONTRIBUTING.md mentions updating it, verify the contributor has added an entry under [Unreleased] for the change.AUTHORS file updates, version bumps, etc.Signed-off-by: via git commit -s. This is a legal attestation the contributor must make personally — the AI agent cannot sign on your behalf." Do NOT just check a box in the PR template.Verify the contribution does not include:
.claude/, .cursor/, .aider/, or other agent tool directoriesTo detect leaked agent directories, run:
find . -type d \( -name '.claude' -o -name '.cursor' -o -name '.aider' -o -name '.continue' \) ! -path './.git/*'Any output from this command is a blocker — remove those directories before submission.
Verify the contribution does not exhibit patterns flagged by automated slop detectors:
Before submitting, confirm with the contributor:
If the answer to any of these is no, the PR is not ready.
Summarize as a checklist with pass/fail/warning for each check. For any failures, explain what needs to change before submission. For warnings, explain the risk and let the contributor decide.
Before you are done, verify all three artifacts below exist. If any is missing, the skill is not complete.
pr_description.md in the workspace root — MANDATORY file containing the full PR description (AI disclosure section, issue reference, every section from the project's PR template filled). Chat output alone does NOT satisfy this — the file must exist on disk. Keep it out of the PR diff: do not add, commit, or push that file to the target repository.Do not submit the PR. That is the contributor's action.