Gerrit Permission Manager
theneoai/awesome-skills
Expert manager for Gerrit multi-repository and multi-branch permission configurations.
Internal landing helper for public workflows that already hold explicit commit and landing authorization; commits scoped changes, pushes, and creates or updates a PR with a value-first description.
$ npx skills add leo-kuang-ai/spec-first --skill spec-commit-push-pr -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install leo-kuang-ai/spec-first spec-commit-push-pr --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/leo-kuang-ai/spec-first.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/spec-commit-push-pr .claude/skills/spec-commit-push-pr && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "spec-commit-push-pr" agent skill from https://github.com/leo-kuang-ai/spec-first/tree/master/skills/spec-commit-push-pr into .claude/skills/spec-commit-push-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec-commit-push-pr", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/leo-kuang-ai/spec-first/tree/master/skills/spec-commit-push-prType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add leo-kuang-ai/spec-first --skill spec-commit-push-pr -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install leo-kuang-ai/spec-first spec-commit-push-pr --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/leo-kuang-ai/spec-first.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/spec-commit-push-pr .agents/skills/spec-commit-push-pr && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "spec-commit-push-pr" agent skill from https://github.com/leo-kuang-ai/spec-first/tree/master/skills/spec-commit-push-pr into .agents/skills/spec-commit-push-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec-commit-push-pr", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add leo-kuang-ai/spec-first --skill spec-commit-push-pr -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install leo-kuang-ai/spec-first spec-commit-push-pr --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/leo-kuang-ai/spec-first.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/spec-commit-push-pr .cursor/skills/spec-commit-push-pr && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "spec-commit-push-pr" agent skill from https://github.com/leo-kuang-ai/spec-first/tree/master/skills/spec-commit-push-pr into .cursor/skills/spec-commit-push-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec-commit-push-pr", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/leo-kuang-ai/spec-first.git --path skills/spec-commit-push-pr--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add leo-kuang-ai/spec-first --skill spec-commit-push-pr -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install leo-kuang-ai/spec-first spec-commit-push-pr --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/leo-kuang-ai/spec-first.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/spec-commit-push-pr .gemini/skills/spec-commit-push-pr && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "spec-commit-push-pr" agent skill from https://github.com/leo-kuang-ai/spec-first/tree/master/skills/spec-commit-push-pr into .gemini/skills/spec-commit-push-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec-commit-push-pr", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install leo-kuang-ai/spec-first spec-commit-push-prInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add leo-kuang-ai/spec-first --skill spec-commit-push-pr -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/leo-kuang-ai/spec-first.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/spec-commit-push-pr .github/skills/spec-commit-push-pr && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "spec-commit-push-pr" agent skill from https://github.com/leo-kuang-ai/spec-first/tree/master/skills/spec-commit-push-pr into .github/skills/spec-commit-push-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec-commit-push-pr", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add leo-kuang-ai/spec-first --skill spec-commit-push-pr -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install leo-kuang-ai/spec-first spec-commit-push-pr --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/leo-kuang-ai/spec-first.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/spec-commit-push-pr .opencode/skills/spec-commit-push-pr && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "spec-commit-push-pr" agent skill from https://github.com/leo-kuang-ai/spec-first/tree/master/skills/spec-commit-push-pr into .opencode/skills/spec-commit-push-pr/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "spec-commit-push-pr", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
spec-commit-push-prInternal landing helper for public workflows that already hold explicit commit and landing authorization; commits scoped changes, pushes, and creates or updates a PR with a value-first description.
Spec Commit Push PR is an agent skill from leo-kuang-ai/spec-first. Internal landing helper for public workflows that already hold explicit commit and landing authorization; commits scoped changes, pushes, and creates or updates a PR with a value-first description.
Its SKILL.md is about 5.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 18 other files, including reference files (for example `evals/cases/description-only-non-mutating.yaml`, `evals/cases/no-landing-auth-stops-before-push.yaml` and `evals/eval.yaml`).
It sits in Development, covering Authorization and RBAC. The repository describes itself as: 仓库原生 AI Coding Harness —— 把一次性 AI 对话变成可治理、可验证、可沉淀的工程闭环 · spec-first.cn. The licence is MIT.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 74655dc. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (Shell and JavaScript), which the agent can run.
Shell commands in SKILL.md call:
gitghFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and gh, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Spec Commit Push PR loads about 5.6k tokens when it runs, and up to ~13k if it reads all its reference files. Until then it costs about 54 tokens; SKILL.md has 3,091 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from leo-kuang-ai/spec-first at commit 74655dc, republished under its MIT licence (© leo-kuang-ai). 3,091 words, ~5,597 tokens.
.claude/skills/spec-commit-push-pr/SKILL.md (or your agent's skills folder). This skill also uses 10 other files; get the full folder from GitHub.Go from working changes to an open pull request, rewrite an existing PR description, or generate a description without touching git state.
This is an internal-only helper. A public workflow may delegate the full commit/push/PR path only after the current user or a visible upstream handoff has established both commit_authorization: authorized and landing_authorization: authorized. workflow invocation does not authorize commit, push, or PR creation; mode:pipeline, tool permission, a feature branch, a green test suite, or an existing PR are execution facts, not authority. Missing commit authority stops before staging/commit with commit_authorization_missing; missing landing authority stops before push or PR mutation with landing_authorization_missing.
Description-only generation remains non-mutating, but applying a description with gh pr edit is a landing mutation and still requires explicit landing authority. This helper never broadens the caller's run-owned file scope or absorbs unrelated dirty paths.
Asking the user: When this skill says "ask the user", use the platform's blocking question tool: AskUserQuestion in Claude Code (call ToolSearch with select:AskUserQuestion first if its schema isn't loaded) or request_user_input in Codex. Fall back to presenting the question in chat only when no blocking tool exists in the harness or the call errors (e.g., Codex edit modes) — not because a schema load is required. Never silently skip the question.
Three flavors of intent. Pick one and follow the matching path; otherwise default to the full workflow.
gh pr edit/gh pr create only if the user asks.mode:pipeline modifier: Set by orchestrated callers such as spec-lfg. Run the resolved mode non-interactively and suppress every blocking ask. The existing-PR rewrite question defaults to not rewriting; in description-update mode the preview ask is skipped and the rewrite applies directly because the update invocation is already the apply intent. Any other suppressed ask takes its conservative documented default: keep the current branch when possible, and stop/report instead of guessing when a base, PR, or branch state cannot be resolved. After an authorized full-workflow landing, return a structured watch_handoff containing the PR number/URL, head SHA, base ref/SHA when available, and the caller's existing authorization source and scope. This handoff lets the pipeline owner enter its bounded review/CI/head/base-currency watch; it grants no new authority. Ordinary standalone and description-only runs do not start or recommend a watch by default.
The landing disclosure for mode:pipeline includes bounded PR-feedback fixes and only a repo-policy-approved, non-rewriting branch-currency update. This helper never authorizes or performs merge, rebase, force-push, or history rewrite as part of that handoff. If the repository policy is absent or currency requires rewriting history, return branch-currency-update-required to the caller.
On platforms other than Claude Code, skip to the "Context fallback" section below and run the command there to gather context.
In Claude Code, the six labeled sections below contain pre-populated data. Use them directly -- do not re-run these commands.
Git status:
!git status
Working tree diff:
!git diff HEAD
Current branch:
!git branch --show-current
Recent commits:
!git log --oneline -10
Remote default branch:
!git rev-parse --abbrev-ref origin/HEAD
Existing PR check:
!gh pr view --json url,title,state
In Claude Code, skip this section — the data above is already available.
Run these commands separately to gather context without interleaving unrelated output:
git status
git diff HEAD
git branch --show-current
git log --oneline -10
git rev-parse --abbrev-ref origin/HEAD 2>/dev/null || echo 'DEFAULT_BRANCH_UNRESOLVED'
gh pr view --json url,title,state 2>/dev/null || echo 'NO_OPEN_PR'Ask the user: "Update the PR description for this branch?" If declined, stop.
Use the current branch and existing PR check from context. If the current branch is empty (detached HEAD), report no branch and stop. If the PR check returned state: OPEN, note the PR url and proceed to DU-3. Otherwise, report no open PR and stop.
Read references/pr-description-writing.md once now — the core principle at the top governs every step. DU-3 walks through Pre-A then Steps A through H without re-reading. Run Pre-A in PR mode using the existing PR's URL from DU-2 (it resolves the commit range, diff, and current body). Then continue with Steps A through H from the already-loaded reference to compose the title and body. If the user provided focus (e.g., "include the benchmarking results"), apply it as steering — do not let it override the writing principles or fabricate content the diff does not support.
Evidence decision: the writing reference preserves any existing ## Demo or ## Screenshots block from the current body by default. If the user's focus asks to refresh or remove evidence, honor that. If no evidence block exists and one would benefit the reader, ask for an existing URL/path or state that evidence capture is not available in this workflow.
Compare and confirm. Briefly explain what the new description covers differently from the old one. Ask the user to confirm before applying. If the user provided focus, confirm it was addressed.
If confirmed, apply with gh pr edit. Substitute <TITLE> verbatim; if it contains ", `, $, or \, escape them or switch to single quotes.
The body must be written to a temp file and passed via --body-file <path>. Never use --body-file -, stdin pipes, heredoc-to-stdin, or --body "$(cat ...)" — wrappers and stdin handling can silently produce an empty PR body while gh still exits 0 and returns a URL.
BODY_FILE=$(mktemp "${TMPDIR:-/tmp}/spec-pr-body.XXXXXX")Use the platform's file-write tool to write the composed body markdown to $BODY_FILE verbatim. Do not embed the body in a shell heredoc, stdin pipe, command substitution, or inline shell string.
gh pr edit --title "<TITLE>" --body-file "$BODY_FILE"Report the PR URL.
Use the context above. All data needed for this step and Step 3 is already available -- do not re-run those commands.
The remote default branch value returns something like origin/main. Strip the origin/ prefix. If it returned DEFAULT_BRANCH_UNRESOLVED, an error, or a bare HEAD, try:
gh repo view --json defaultBranchRef --jq '.defaultBranchRef.name'If both fail, fall back to main.
If the current branch is empty (detached HEAD), explain that a branch is required. Ask whether to create a feature branch now.
git check-ref-format --branch "$BRANCH_NAME", create with git checkout -b "$BRANCH_NAME", and use that for the rest of the workflow.If the working tree is clean (no staged, modified, or untracked files), determine the next action:
git rev-parse --abbrev-ref --symbolic-full-name @{u} to check upstream.git log <upstream>..HEAD --oneline for unpushed commits.Decision tree:
references/branch-creation.md, follow its decision flow, then continue from Step 5. If no, stop.Priority order for commit messages and PR titles:
type(scope): description (conventional commits).When using conventional commits, choose the type that most precisely describes the change. Where fix: and feat: both seem to fit, default to fix:: a change that remedies broken or missing behavior is fix: even when implemented by adding code. Reserve feat: for capabilities the user could not previously accomplish. Other types (chore:, refactor:, docs:, perf:, test:, ci:, build:, style:) remain primary when they fit better. The user may override for a specific change.
Use the current branch and existing PR check from context. If the branch is empty, report detached HEAD and stop.
If the PR check returned state: OPEN, note the URL -- this is the existing-PR flow. Continue to Step 4 and 5 (commit any pending work and push), then go to Step 7 to ask whether to rewrite the description. Only run Step 6 if the user confirms the rewrite. Otherwise (no open PR), continue through Steps 6, 7, and 8 in order.
<base>, and uncommitted checkout collisions. Read references/branch-creation.md and follow its decision flow, then continue to step 2 below.git add -p). When ambiguous, one commit is fine.git add -A or git add .. Follow conventions from Step 2 and use -F for the message body:COMMIT_MSG=$(mktemp "${TMPDIR:-/tmp}/spec-commit-message.XXXXXX")
cat > "$COMMIT_MSG" <<'EOF'
commit message here
EOF
git add file1 file2 file3
git commit -F "$COMMIT_MSG"git push -u origin HEADThe working-tree diff from Step 1 only shows uncommitted changes at invocation time. The PR description must cover all commits in the PR.
Read references/pr-description-writing.md once now — the core principle at the top governs every step. Step 6 walks through it in order (Pre-A through H) with one interruption (the evidence decision below). Do not re-read the file later; refer to it by step letter.
Resolve the commit range and diff. Run Step Pre-A from the reference (current-branch mode by default; PR mode if a PR ref was passed in from description-only mode). Pre-A handles base detection, in-repo SHA fetching with the refs/pull/N/head fallback, and the API-only fallback for fork-PRs and any local-git failure. Use Pre-A's commit list and diff (not Step 1's working-tree diff or git log -10) for both the evidence decision below and the rest of the reference.
Evidence decision (before composition). Before running the full decision, two short-circuits:
User explicitly asked for evidence. If the user's invocation requested it ("ship with a demo", "include a screenshot"), proceed directly to capture. If capture turns out to be not possible (no runnable surface, missing credentials, docs-only diff) or clearly not useful, note that briefly and proceed without evidence — do not force capture for its own sake.
Agent judgment on authored changes. If you authored the commits in this session and know the change produces no material claim a reviewer needs evidence for (internal plumbing, backend refactor without user-facing effect, type-level changes, inert documentation, pure refactors), skip the prompt without asking. Classify by runtime purpose, not extension: markdown or YAML that acts as runtime agent instructions, configuration, generated product content, policy code, or deployment behavior is not auto-skippable.
Otherwise, run the full decision: if the branch diff changes behavior or makes a material claim a reviewer cannot establish from the diff alone (UI, CLI output, API behavior with runnable code, generated artifacts, workflow output, ranking/scoring logic, deployment/config behavior) and evidence is not otherwise blocked (unavailable credentials, paid services, deploy-only infrastructure, hardware), ask: "This PR has behavior or risk that would benefit from evidence. Include existing evidence in the PR description?"
## Demo section.When evidence would not change reviewer confidence (inert documentation, changelog-only edits, release metadata, test-only changes, or pure internal refactors), skip without asking.
Concept teaching gate (before composition). Use the repo root from context; if it is empty or shows a literal command string, resolve it at runtime with git rev-parse --show-toplevel. Read <repo-root>/.spec-first/config.local.yaml with the native file-read tool. Only an active, non-commented pr_teaching_section: key counts; lines starting with # are comments, and the shipped template documents optional keys as commented examples. The gate is off only when the active value is exactly false; a missing file, missing key, or any other value means the default is on. The same read resolves pr_teaching_archive: as archive eligibility only: an active value of exactly true makes archival available but does not authorize a repo write. A current-user archive:on invocation, or a visible upstream handoff that explicitly includes the exact explainer path set, establishes archive_authorization: authorized; config, teaching-section eligibility, commit authority, and landing authority do not. archive:off disables archival for the run.
Compose the title and body. Continue with Steps A through H from the already-loaded reference (commit classification, evidence handling, concept judgment when the gate is on, narrative framing, sizing, writing voice and principles, visual communication, title format, body assembly, the plain-text Spec-First footer, and the compression pass). For an existing PR, the current body was already read in Pre-A.
Apply via gh pr create (new PR) or gh pr edit (existing PR). Substitute <TITLE> verbatim; if it contains ", `, $, or \, escape them or switch to single quotes.
The body must be written to a temp file and passed via --body-file <path>. Never use --body-file -, stdin pipes, heredoc-to-stdin, or --body "$(cat ...)" — wrappers and stdin handling can silently produce an empty PR body while gh still exits 0 and returns a URL.
BODY_FILE=$(mktemp "${TMPDIR:-/tmp}/spec-pr-body.XXXXXX")Use the platform's file-write tool to write the composed body markdown to $BODY_FILE verbatim. Do not embed the body in a shell heredoc, stdin pipe, command substitution, or inline shell string; arbitrary PR body text can contain delimiter-like or shell-sensitive content.
Explainer archival. This runs only in full workflow, with archive eligibility on, archive_authorization: authorized, a composed ## New concepts section, and a body that will be applied by this run. Before any directory/file write, derive the final slug for every concept, show the exact repo-relative docs/explainers/YYYY-MM-DD-<concept-slug>.md paths (including which existing files would be overwritten), and add only those accepted paths to the caller exact write set. Missing authorization or an unaccepted path preview skips archival with archive_authorization_missing; it does not block the PR. A declined existing-PR rewrite, or a pipeline-defaulted no rewrite, skips archival entirely so no unlinked doc commit is left behind. All paths resolve from the repo root, never the CWD. With two taught concepts, write one file per concept and stage both in the single commit. Execute these transitions immediately before the gh create/edit call:
git check-ignore -q docs/explainers/YYYY-MM-DD-<concept-slug>.md from the repo root. The check works on not-yet-created paths. If the path is ignored, print a one-line warning and skip archival entirely, writing nothing and never using git add -f.docs/explainers/ if needed, with YAML frontmatter title, date, input_shape: concept, subject, and the teaching content. Overwrite an existing file only when that exact overwrite appeared in the accepted preview.git add those file(s) only, commit with docs(explainer): teach <concept>[, <concept>], and push. If the commit reports nothing to commit, the doc is already committed from a prior run; keep the link and continue.## New concepts section, then rewrite $BODY_FILE with the final composed body before applying.If the doc write, commit, or push fails, warn and continue to PR creation or edit without the link. Never strand the flow between commit and PR.
test -s "$BODY_FILE" || { echo "ERROR: PR body file is empty"; exit 1; }
if grep -q '<the composed body markdown goes here, verbatim>' "$BODY_FILE"; then echo "ERROR: PR body placeholder was not replaced"; exit 1; fi
PR_URL=$(gh pr create --title "<TITLE>" --body-file "$BODY_FILE")
printf '%s\n' "$PR_URL"
gh pr view "$PR_URL" --json body --jq '.body' | grep -q '[^[:space:]]' || { echo "ERROR: PR body was empty after create"; exit 1; }Keep the title under 72 characters; the writing reference already emits a conventional-commit title in that range.
The new commits are already on the PR from Step 5. Report the PR URL, then ask whether to rewrite the description.
If no -- skip Step 6 entirely and finish. Do not run composition or evidence capture when the user declined the rewrite.
If yes, perform these three actions in order. They are separate steps with a hand-off boundary between them -- do not stop between actions.
Run Step 6 to compose the new title and body.
Preview and confirm. Read the first two sentences of the Summary, plus the total line count. Ask the user (per the "Asking the user" convention at the top of this skill): "New title: <title> (<N> chars). Summary leads with: <first two sentences>. Total body: <L> lines. Apply?" The first two sentences of the Summary carry most of the reviewer's attention. If the user declines, they may pass focus text back for a regenerate; do not apply.
If confirmed, apply with gh pr edit:
test -s "$BODY_FILE" || { echo "ERROR: PR body file is empty"; exit 1; }
if grep -q '<the composed body markdown goes here, verbatim>' "$BODY_FILE"; then echo "ERROR: PR body placeholder was not replaced"; exit 1; fi
gh pr edit --title "<TITLE>" --body-file "$BODY_FILE"
gh pr view --json body --jq '.body' | grep -q '[^[:space:]]' || { echo "ERROR: PR body was empty after edit"; exit 1; }Then report the PR URL (Step 8).
Output the PR URL.
For an authorized full-workflow mode:pipeline landing, also return:
watch_handoff:
pr_number: <number>
pr_url: <url>
head_sha: <sha>
base_ref: <ref-or-null>
base_sha: <sha-or-null>
authorization_source: <visible-upstream-source>
authorization_scope: <visible-upstream-scope>This is a fact-only handoff to the caller. It does not start a watch, retain raw provider content, or authorize merge, rebase, force-push, history rewrite, additional data egress, credentials, or external communication.
If a body applied by this run contains a ## New concepts section, print one line after the PR URL in every mode: New concepts: <name>[, <name>]. In interactive full-workflow runs, follow it with one line per taught concept: Run spec-explain <name> to go deeper. Do not print the trailer when this run applied no body, including a rewrite that was declined or pipeline-defaulted to no, or when no PR exists.
© leo-kuang-ai, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 10 other files (references) in skills/spec-commit-push-pr of leo-kuang-ai/spec-first.
Open the folder on GitHubat commit 74655dc
Spec Commit Push PR next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Spec Commit Push PR this skillleo-kuang-ai/spec-first | 107 | — | ~5.6k | Automated safety check: Pass | MIT | |
| Gerrit Permission Managertheneoai/awesome-skills | 184 | — | ~2.5k | Automated safety check: Pass | MIT | |
| Azure Data ExplorerMicrosoftDocs/Agent-Skills | 777 | — | ~4.9k | Automated safety check: Pass | CC-BY-4.0 | |
| Azure Route ServerMicrosoftDocs/Agent-Skills | 777 | — | ~1.5k | Automated safety check: Pass | CC-BY-4.0 | |
| Payloadpayloadcms/payload | 45k | 5 repos | ~6.2k | Automated safety check: Pass | MIT | |
| Plugin BuilderAIDotNet/NextCoWork | 638 | — | ~2.4k | Automated safety check: Pass | Apache-2.0 |
theneoai/awesome-skills
Expert manager for Gerrit multi-repository and multi-branch permission configurations.
MicrosoftDocs/Agent-Skills
Expert knowledge for Azure Data Explorer development including troubleshooting, best practices, decision making, architecture & design patterns, limits & quotas, security, configuration…
MicrosoftDocs/Agent-Skills
Expert knowledge for Azure Route Server development including troubleshooting, best practices, architecture & design patterns, limits & quotas, security, and configuration.
payloadcms/payload
A skill your agent uses when working with Payload projects (payload.config.ts, collections, fields, hooks, access control, Payload API).
AIDotNet/NextCoWork
Author, package, and debug NextCoWork plugins — the single entry point.
fullstackhero/dotnet-starter-kit
Add a new permission end-to-end — server constant + endpoint gate, and (admin app) mirror it into the permissions catalog + route guard.
leo-kuang-ai/spec-first
Audit mobile App PRD/Figma/local-source consistency across page routes, KMP/Clean Architecture, components, analytics, i18n, engineering quality, and industry lenses before runtime validation; use…
leo-kuang-ai/spec-first
Create a durable cross-session handoff or resume from a user-selected continuity source.
leo-kuang-ai/spec-first
Give a decisive, project-grounded verdict on an external input — judged against the current project, not in the abstract.
leo-kuang-ai/spec-first
Resolve PR review feedback by evaluating validity and fixing issues with conflict-aware resolver dispatch.
leo-kuang-ai/spec-first
Analyze explicit Riffrec product-feedback captures, including riffrec-.zip, the Riffrec session.json + events.json + recording.webm + voice.webm bundle, or media/notes the user identifies as a…
leo-kuang-ai/spec-first
Document a recently solved problem or durable project vocabulary in docs/solutions/ or CONCEPTS.md.
Categories
Internal landing helper for public workflows that already hold explicit commit and landing authorization; commits scoped changes, pushes, and creates or updates a PR with a value-first description. Spec Commit Push PR is an agent skill from leo-kuang-ai/spec-first. Internal landing helper for public workflows that already hold explicit commit and landing authorization; commits scoped changes, pushes, and creates or updates a PR with a value-first description.
Spec Commit Push PR fits situations like: tasks that involve Authorization and RBAC.
Run `npx skills add leo-kuang-ai/spec-first --skill spec-commit-push-pr -a claude-code`. Or copy the skill folder (skills/spec-commit-push-pr in leo-kuang-ai/spec-first) into .claude/skills/spec-commit-push-pr in your project. Claude Code loads it when a task matches its description.
Run `npx skills add leo-kuang-ai/spec-first --skill spec-commit-push-pr -a codex`. Or copy the skill folder (skills/spec-commit-push-pr in leo-kuang-ai/spec-first) into .agents/skills/spec-commit-push-pr in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add leo-kuang-ai/spec-first --skill spec-commit-push-pr -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/spec-commit-push-pr, .gemini/skills/spec-commit-push-pr, .github/skills/spec-commit-push-pr and .opencode/skills/spec-commit-push-pr in your project.
Going by SKILL.md and its folder, Spec Commit Push PR needs a shell and JavaScript for the scripts in its folder and the command-line tools its instructions call (git and gh). Our summary lists: Node.js; A Bash shell.
SKILL.md contains no URLs. Its commands use git and gh, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Spec Commit Push PR is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.6k tokens (SKILL.md is roughly 22k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 7.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Spec Commit Push PR: Gerrit Permission Manager (theneoai/awesome-skills, 184 stars), Azure Data Explorer (MicrosoftDocs/Agent-Skills, 777 stars), Azure Route Server (MicrosoftDocs/Agent-Skills, 777 stars) and Payload (payloadcms/payload, 45k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
leo-kuang-ai (a GitHub user) maintains it in leo-kuang-ai/spec-first, which has 107 GitHub stars. The repository holds 35 skills in this directory. The repository was last updated on September 24, 2026.
Source: leo-kuang-ai/spec-first on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.