codingnanyong's standard starting point for new repos: Linear/GitHub-issue-gated PR flow, Claude + Codex PR review, Slack merge notifications, and the usual community-health files, all pre-wired.
.github/workflows/prepare-feature-pr.yml+.github/scripts/ensure_linear_issue.py— push afeat/<slug>branch and this finds-or-creates the Linear issue, finds-or-creates the mirrored GitHub issue, and opens a Draft PR intodevelopwith both closing references already filled in. No manual issue-pairing steps..github/workflows/pr-policy.yml— every PR intodevelopmust reference a paired Linear issue (COD-n) and a mirrored GitHub issue (#n);mainonly accepts PRs fromdevelop. Validates only — the provisioning above does the creating. See AGENTS.md..github/workflows/claude-review.yml— Claude automatically reviews every PR (needs setup, see below)..github/workflows/notify-slack-on-merge.yml— posts a summary to Slack when a PR merges intodevelop/main.AGENTS.md/CLAUDE.md— agent role & rules (Claude readsCLAUDE.md, which importsAGENTS.md; Codex and other tools readAGENTS.mddirectly).LICENSE(MIT default — swap for an "All Rights Reserved" style notice if this is a content-only repo),CODE_OF_CONDUCT.md,CONTRIBUTING.md,SECURITY.md,.github/pull_request_template.md.docs/kor/GIT_WORKFLOW.md/docs/eng/GIT_WORKFLOW.md— human-readable branch/PR/Linear policy (same policyAGENTS.mdandpr-policy.ymlenforce, written out for people). Add project-specific exceptions after it rather than duplicating the shared parts.
Everything below is a one-time, per-repo step — things only a human can do or decide (create accounts/keys, name the project, click "Install"). Once done, day-to-day PR/issue/Slack work is fully automated; nobody touches these again unless a key rotates or the project is renamed.
- Opening a
feat/<slug>branch → Linear issue created/reused, GitHub mirror issue created/reused, Draft PR opened intodevelop— all handled byprepare-feature-pr.yml. - Every PR event → branch/title/body/issue-pair validated by
pr-policy.yml; nothing to fill in by hand. - Merge into
develop→ mirrored GitHub issue auto-closed bypr-policy.yml, which auto-transitions the Linear issue to Done via Linear's own GitHub integration. - Every PR → reviewed by
claude-review.yml(and Codex, if installed). - Merge into
develop/main→ summary posted to Slack bynotify-slack-on-merge.yml.
- Rename things: update this README,
AGENTS.md's "Project purpose" section, and the license year/holder if needed. - Create
developbranch:git checkout -b develop && git push -u origin develop, then setdevelopas the default branch in repo Settings if that's your convention (or keepmaindefault and just targetdevelopfor feature PRs). - Install the Claude GitHub App: https://github.com/apps/claude → select this repo.
- (Optional) Install a Codex review app (e.g. ChatGPT Codex Connector) via https://github.com/settings/installations if you want a second automated reviewer.
- Add repo secrets (Settings → Secrets and variables → Actions → Secrets) — these are credentials only you can issue:
CLAUDE_CODE_OAUTH_TOKEN(runclaude setup-tokenlocally if you have a Claude subscription) orANTHROPIC_API_KEYSLACK_WEBHOOK_URL(Slack app → Incoming Webhooks, pick your notifications channel)LINEAR_API_KEY(Linear → Settings → API → Create key)GH_PAT— a fine-grained PAT (Contents:read, Issues:write, Pull requests:write on this repo), not the defaultGITHUB_TOKEN.prepare-feature-pr.ymluses it to create the draft PR; PRs created withGITHUB_TOKENdon't retriggerpr-policy.yml(GitHub's anti-recursion rule), so the PR would stay unchecked.
- Add repo variables (Settings → Secrets and variables → Actions → Variables) — the Linear project this repo's issues live in, since that's different per repo:
LINEAR_PROJECT_SLUG— from the Linear project's "Copy link" (the last URL segment)LINEAR_PROJECT_NAME— the project's display name, used as a fallback lookup if the slug ever changes
- Branch protection (optional but recommended): require the
validate-flowandreviewchecks to pass before merging intodevelop/main.
Steps 5–6 are the only inputs the automation actually needs; everything after that (A above) runs itself. For the full day-to-day procedure and manual fallback if a secret expires, see AGENTS.md or CONTRIBUTING.md.