GitHub Project Release
Turn a local project into a clean GitHub repository that is safe to make public later. Default to
research-code release behavior: clean copy first, private GitHub repo first, audit before push.
Workflow
Inspect the source project before copying.
- Identify the runnable entrypoints, key configs, curated figures/tables, license, citation files,
and upstream dependencies.
- Treat the codebase as source of truth. Do not preserve stale upstream README language as the
release front page.
Check credentials.
- Run
scripts/github_project_release.py auth-check.
- Use the active
gh account as the default owner.
- Never ask the user to paste a GitHub token into chat. If auth is missing, ask them to run
gh auth login or provide credentials through a secure non-chat channel.
Prepare a clean release copy.
- Run
scripts/github_project_release.py prepare --source <project> --dest <release-dir>.
- Keep only what a new user needs to understand and run the project.
- Exclude datasets, checkpoints, logs, generated outputs, raw experiment dumps, paper PDFs, local
submission material, and exploratory files unless the user explicitly overrides the default.
Write or rewrite the README.
- Read
references/readme_playbook.md before drafting README content.
- Use English by default.
- Write for external readers, not for the project owner.
- For research code, cover Context + Run + Cite: what it is, what problem it solves, what is
included, how to install/run the minimal path, and how to cite current and upstream work.
Audit before publishing.
- Run
scripts/github_project_release.py audit --path <release-dir>.
- Treat reported high-risk items as blockers unless the user explicitly accepts them.
- If a paper link is not public, use
Paper link: coming soon. and do not upload PDFs.
Publish privately.
- Run
scripts/github_project_release.py publish --release-dir <release-dir>.
- If the repo does not exist, create a private repo.
- If it exists, push only safe non-rewriting updates.
- Do not force-push, delete, overwrite, or make the repo public unless explicitly requested.
Report the result.
- Include repo URL, branch, commit SHA, visibility, and audit status.
- If any sensitive artifact was accidentally pushed earlier, explain that branch-history cleanup
may not immediately remove exact-SHA access on GitHub; for strict removal, recreate a clean repo.
Script Quick Reference
Resolve <skill-dir> to the directory containing this SKILL.md; do not
assume a particular global skills installation root.
python "<skill-dir>/scripts/github_project_release.py" auth-check
python "<skill-dir>/scripts/github_project_release.py" prepare \
--source /path/to/project \
--dest /path/to/project-github
python "<skill-dir>/scripts/github_project_release.py" audit \
--path /path/to/project-github
python "<skill-dir>/scripts/github_project_release.py" publish \
--release-dir /path/to/project-github
Use --dry-run on prepare or publish to inspect intended actions without copying or pushing.
Defaults
- Visibility: private.
- Owner: active
gh account.
- Repo name: sanitized release directory name, unless
--repo, --owner, or --name is provided.
- Existing repo policy: safe update only.
- README language: English.
- Results policy: paper-confirmed figures/tables/results only; never infer metrics from logs.
- Asset policy: curated explanatory figures/tables only; never bulk-upload raw visualization outputs.
When To Ask
Ask the user only when the answer cannot be derived from the project:
- Target GitHub owner differs from the active
gh account.
- Repo name should differ from the project/release directory.
- A normally blocked file type must be included.
- The user wants public release, force-push, repo deletion, or history rewrite.
- The current project has no clear runnable path and the README would otherwise invent commands.
1---2name: github-project-release3description: Use when preparing or publishing a local project as a clean GitHub repository. Covers new repositories, private staging releases, public README cleanup, updates to existing remotes, and research-code packaging without datasets, checkpoints, papers, or generated artifacts.4license: MIT5---67# GitHub Project Release89Turn a local project into a clean GitHub repository that is safe to make public later. Default to10research-code release behavior: clean copy first, private GitHub repo first, audit before push.1112## Workflow13141. Inspect the source project before copying.15 - Identify the runnable entrypoints, key configs, curated figures/tables, license, citation files,16 and upstream dependencies.17 - Treat the codebase as source of truth. Do not preserve stale upstream README language as the18 release front page.19202. Check credentials.21 - Run `scripts/github_project_release.py auth-check`.22 - Use the active `gh` account as the default owner.23 - Never ask the user to paste a GitHub token into chat. If auth is missing, ask them to run24 `gh auth login` or provide credentials through a secure non-chat channel.25263. Prepare a clean release copy.27 - Run `scripts/github_project_release.py prepare --source <project> --dest <release-dir>`.28 - Keep only what a new user needs to understand and run the project.29 - Exclude datasets, checkpoints, logs, generated outputs, raw experiment dumps, paper PDFs, local30 submission material, and exploratory files unless the user explicitly overrides the default.31324. Write or rewrite the README.33 - Read `references/readme_playbook.md` before drafting README content.34 - Use English by default.35 - Write for external readers, not for the project owner.36 - For research code, cover Context + Run + Cite: what it is, what problem it solves, what is37 included, how to install/run the minimal path, and how to cite current and upstream work.38395. Audit before publishing.40 - Run `scripts/github_project_release.py audit --path <release-dir>`.41 - Treat reported high-risk items as blockers unless the user explicitly accepts them.42 - If a paper link is not public, use `Paper link: coming soon.` and do not upload PDFs.43446. Publish privately.45 - Run `scripts/github_project_release.py publish --release-dir <release-dir>`.46 - If the repo does not exist, create a private repo.47 - If it exists, push only safe non-rewriting updates.48 - Do not force-push, delete, overwrite, or make the repo public unless explicitly requested.49507. Report the result.51 - Include repo URL, branch, commit SHA, visibility, and audit status.52 - If any sensitive artifact was accidentally pushed earlier, explain that branch-history cleanup53 may not immediately remove exact-SHA access on GitHub; for strict removal, recreate a clean repo.5455## Script Quick Reference5657Resolve `<skill-dir>` to the directory containing this `SKILL.md`; do not58assume a particular global skills installation root.5960```bash61python "<skill-dir>/scripts/github_project_release.py" auth-check6263python "<skill-dir>/scripts/github_project_release.py" prepare \64 --source /path/to/project \65 --dest /path/to/project-github6667python "<skill-dir>/scripts/github_project_release.py" audit \68 --path /path/to/project-github6970python "<skill-dir>/scripts/github_project_release.py" publish \71 --release-dir /path/to/project-github72```7374Use `--dry-run` on `prepare` or `publish` to inspect intended actions without copying or pushing.7576## Defaults7778- Visibility: private.79- Owner: active `gh` account.80- Repo name: sanitized release directory name, unless `--repo`, `--owner`, or `--name` is provided.81- Existing repo policy: safe update only.82- README language: English.83- Results policy: paper-confirmed figures/tables/results only; never infer metrics from logs.84- Asset policy: curated explanatory figures/tables only; never bulk-upload raw visualization outputs.8586## When To Ask8788Ask the user only when the answer cannot be derived from the project:8990- Target GitHub owner differs from the active `gh` account.91- Repo name should differ from the project/release directory.92- A normally blocked file type must be included.93- The user wants public release, force-push, repo deletion, or history rewrite.94- The current project has no clear runnable path and the README would otherwise invent commands.