跳到正文
cccskills
免费在 GitHub 公开

pr

Prepare a GitHub pull request from staged changes by generating a branch name, commit message, title, and description. It presents the details for confirmation first, then can create the PR as a draft by default.

中文简介正在准备中。当前显示英语简介。

原文查看原文说明

Create a PR from staged changes with auto-generated branch, title, and description. Use this skill whenever the user wants to create a pull request, ship changes, open a PR, send code for review, or push staged work to GitHub — even if they don't explicitly say "PR".

near/nearcore星标 2,621(GitHub 2,621 + cccskills 0)
集成工具GitHub

实测评分 未实测

查看安装方法

适用场景

  • Open a pull request for staged code changes
  • Send completed work to GitHub for review
  • Create a draft PR with a generated title and summary

包含的文件(1)

  • SKILL.md7.1 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

Create a pull request with automatically generated title and description based on staged changes.

Before starting, read relevant memory files (especially PR-related feedback memories). Memory preferences override the defaults below.

User instructions: $ARGUMENTS

PRs are created as drafts by default (non-draft PRs auto-assign a random codeowner as reviewer, which then has to be reassigned).

If user instructions are non-empty, parse them for the following hints (they are free-form text, not structured flags):

  • "ready" (or "not draft", "no-draft", "non-draft") → create the PR as ready-for-review instead of a draft
  • "fork" → push to the user's own fork instead of origin
  • "reuse-branch" → reuse the current branch instead of creating a new one (default is to create a new branch)
  • A base branch (e.g., "base: shreyan/project/pr1", "base is master") → use as the PR base branch instead of auto-detecting
  • A project name (e.g., "project is spice", "project: resharding") → use as the project instead of auto-detecting
  • A change type (e.g., "type: fix", "type is refactor") → use as the change type instead of auto-detecting
  • Any other text → treat as extra context to incorporate into the PR description

Follow these steps in order:

  1. Validate:

    • Record the current branch name
    • Run git diff --cached to capture the staged diff. If empty, warn the user and stop
    • If there are unstaged changes, briefly warn the user that they won't be included in the PR
    • Do NOT analyze unstaged changes
    • Fetch the GitHub username by running: gh api user --jq .login
    • Determine reuse-branch and base branch:
      • If user instructions specify "reuse-branch", set reuse-branch = true.
      • Otherwise, set reuse-branch = false (this is the default).
      • Base branch: if user instructions specify a base branch, use that. If reuse-branch is true, use master. Otherwise, use the current branch.
      • When reuse-branch is true, use the current branch name as the branch name.
    • Detect push remote:
      • If user instructions contain "fork", determine the user's fork remote:
        1. List remotes: git remote -v
        2. Look for a remote whose URL contains the GitHub username (e.g., github.com/{username}/). This is the fork remote.
        3. Record the fork remote name for later use.
      • If "fork" is not specified, the push remote is origin.
  2. Analyze staged changes (reuse the diff output from Step 1):

    • Read the modified files to understand the surrounding code context
    • Identify the project/area (e.g., spice, resharding, state-sync, ci). If changes span multiple projects, pick the most dominant one. If user instructions specify a project, use that instead.
    • Read the CONTRIBUTING.md "## Pull Requests" section for valid change types and PR title conventions
    • Determine the change type (fix, feat, refactor, doc, test, chore, perf, revert). If multiple apply, pick the most dominant. If user instructions specify a type, use that instead.
    • Generate a short hyphenated task name, 2-4 words (e.g., add-metrics, fix-header-validation, refactor-chunk-apply)
  3. Generate all details — do NOT run any state-modifying commands (no creating branches, committing, or pushing) in this step:

    • Branch name (local) and remote branch name:
      • If reuse-branch is true: the local branch name is the current branch. Skip collision checks.
      • Otherwise, generate a new local branch name:
        • If pushing to a fork: {project}/{task}
        • If pushing to origin: {username}/{project}/{task}
        • Check for collisions: git branch --list <name> (local) and git ls-remote --heads <push-remote> <name> (remote)
        • On collision, append -2, -3, etc.
      • Remote branch name: when pushing to origin, the remote branch must have the {username}/ prefix. If the local branch name already starts with {username}/, the remote name is the same. Otherwise, prepend it: {username}/{local-branch-name}. When pushing to a fork, the remote branch name is the same as the local branch name.
    • Commit message: single line, same style as the PR title
    • PR title: <type>(<project>): <title> — title must be lowercase (per CONTRIBUTING.md)
      • Example: feat(state-sync): add metrics tracking
    • PR description:
      • Concise summary of what changed and why. Use prose, bullet points, or a mix — whatever fits the change best. A one-line description is fine for small changes.
      • Incorporate any extra context from user instructions
      • Do not include implementation details, test plan sections, or AI attribution
    • Draft: false if user instructions opt out via "ready" (or "not draft", "no-draft", "non-draft"), true otherwise
    • Push remote: the fork remote name if "fork" was specified, otherwise origin
  4. Confirm with user:

    • First, print the details in exactly this format (no horizontal rules, no extra fields):
      Branch: <local-branch-name> (remote: <remote-branch-name>)
      Push remote: <push-remote>
      Base branch: <base-branch>
      Draft: Yes/No
      
      PR title: <title>
      
      PR description:
      <description>
      
    • Then use AskUserQuestion with two options: "Yes, create PR" / "Abort"
      • Do NOT put the details inside the AskUserQuestion options
      • The user can select "Other" (built-in) to provide edits — apply their changes and re-confirm
    • If "Abort": stop immediately. Nothing was modified, so no cleanup is needed.
  5. Execute — only after user confirms:

    • If reuse-branch is false, create the branch: git checkout -b <branch-name>
    • Commit staged changes using a HEREDOC for the message:
      git commit -m "$(cat <<'EOF'
      <commit message>
      EOF
      )"
      
    • Push: git push -u <push-remote> <local-branch-name>:<remote-branch-name> (If local and remote names are the same, git push -u <push-remote> <branch-name> is fine.)
    • Create the PR using a HEREDOC for the body:
      • If pushing to a fork, use --head <username>:<remote-branch-name>:
        gh pr create --base <base-branch> --head <username>:<remote-branch-name> \
          --title "<title>" \
          --body "$(cat <<'EOF'
        <description>
        EOF
        )"
        
      • If pushing to origin, use --head <remote-branch-name>:
        gh pr create --base <base-branch> --head <remote-branch-name> \
          --title "<title>" \
          --body "$(cat <<'EOF'
        <description>
        EOF
        )"
        
      Add --draft if the draft flag is set.
    • Display the PR URL on success
    • If push or PR creation fails but the branch was already created locally, tell the user the branch exists and suggest how to retry

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Update NEAR Protocol’s minimum supported version by one and bundle the related feature and configuration cleanup into a single pull request. It also regenerates snapshots and API specifications and runs the prescribed checks.

中文简介正在准备中。当前显示英语简介。

  • Deprecating the next supported protocol version
  • Removing obsolete protocol feature gates
  • Bundling version cleanup into one pull request
near/nearcore26212026年10月29日 更新

Convert a pytest integration test into a deterministic test-loop test. The workflow documents scenarios and setup, studies existing test-loop patterns, plans the migration for confirmation, then writes and verifies the replacement and cleans up references.

中文简介正在准备中。当前显示英语简介。

  • Migrate a pytest integration test to test-loop
  • Document test scenarios before a migration
  • Replace an existing pytest with a deterministic test
near/nearcore26212026年10月29日 更新

pr-review

免费

Review a Rust pull request for merge-blocking problems in correctness, production safety, performance, security, Rust usage, and code comments. It checks surrounding project context and returns actionable findings with file and line references.

中文简介正在准备中。当前显示英语简介。

  • Review a Rust pull request before merging
  • Check a branch diff for blocking issues
  • Look for security and production risks in Rust changes
near/nearcore26212026年10月29日 更新

Regenerate the checked-in OpenAPI specification, insta snapshots, and protocol schema in sequence. The workflow stops when a step fails and asks before copying a changed protocol schema into the tracked file.

中文简介正在准备中。当前显示英语简介。

  • Refresh the checked-in OpenAPI specification
  • Accept updated insta test snapshots
  • Check and review generated protocol schema changes
near/nearcore26212026年10月29日 更新

查看 near 的全部技能

报告此技能的问题