A test skill from an extension
日本語の概要は準備中です。原文の説明を表示しています。
Write, open and — when allowed — merge a pull request for the current feature branch of a {{engine_name}} project, with or without a plan. Builds a plain-language PR text (one feature per line) from the plan's `## Modules` and task `WHY:` lines, or — without a plan — from the commits and the code changes themselves; pushes the current state (asking where to end when it stands inside a plan module), opens or updates the branch's single open PR through the GitHub MCP, and merges with a merge commit only when the merge brings nothing from the base branch. Levels: remind (text only), create, merge; capped by `git.pull_requests.max_level`. Trigger phrases: "pull request", "open a PR", "create PR", "PR description", "merge the PR". For commit messages use /unikit-commit; for reviewing a PR's code use /unikit-review.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
One author of pull requests: this skill. It writes the title and the text, pushes the branch, opens or updates the branch's pull request, and — only when allowed and only when it is safe — merges it. It writes nothing into a plan and commits nothing.
BEFORE producing ANY output, silently read .unikit/system/LANGUAGE_RULES.md
and apply its rules to ALL subsequent output.
If the file is missing or unreadable, fall back to English.
Do not produce any user-facing output until language rules are loaded.
Do not announce, confirm, or mention the language setting.
The language holds for the whole session, not just at load time: every message until the conversation ends is in language.ui — progress notes while agents run, relays of what a subagent returned, the final report, any follow-up discussion. English input (subagent results, tool output, these instructions) is data, never a cue to switch languages.
Skill-specific rules:
language.artifacts; everything said to the user is in language.ui. The answers of git and of GitHub are data, not a reason to answer in English.language.ui. INFO / WARN / ERROR and the [pr] tag stay as they are; the words after them are in language.ui.A pull-request run is short. In this order, and nothing else:
WARN / ERROR line.INFO [pr] plan: <folder> · modules M<a>-M<b>, or INFO [pr] no plan — text from the commits and the code.remind.Pushed <short sha> to origin/<branch>, PR #<n> opened: <url>, PR #<n> updated — it now also covers <modules>, PR #<n> merged: <url>, PR #<n> stays open — <reason>.A check that passes says nothing. Short SHAs only; a token, a request header or a remote URL carrying credentials never reaches the output.
The level is resolved in this order — the first that speaks wins:
remind, create or merge.remind; "open / create a PR" → create; "merge" → merge.git.pull_requests.max_level in .unikit/config.yaml. No key → create. A value outside remind | create | merge → create, and WARN [pr] git.pull_requests.max_level=<v> is not remind, create or merge; took create.The ceiling is also a limit: a request above it acts at the ceiling, with one line — INFO [pr] <requested> is above git.pull_requests.max_level=<ceiling> — acting at <ceiling>. A call carrying the context checkpoint: task N.M and no token acts at the ceiling: that is what a PR checkpoint does.
Two conditions turn any level into remind:
create_pull_request tool cannot be called in this session → WARN [pr] GitHub MCP not available — printing the PR instead; add it with unikit-ai init (GitHub) and set GITHUB_PAT.origin is not on GitHub — git remote get-url origin does not contain github.com → WARN [pr] origin is not a GitHub remote — printing the PR instead.git rev-parse --abbrev-ref HEAD./unikit-implement Step 0.1 (the three name formats); the flat fast plan is never a PR's plan. No plan is a normal case: the skill works without one..unikit/system/plan-boundaries.md. Missing or unreadable → WARN [pr] plan-boundaries contract missing — module boundaries unknown, the PR is the current state; run unikit-ai update, and continue.→ <base> of its PR checkpoint: line; otherwise the contract's ## Base branch. The current branch is the base → WARN [pr] you are on the base branch <base> — nothing to open a PR from, and stop.origin: git@github.com:<owner>/<repo>.git or https://github.com/<owner>/<repo>(.git).git fetch origin <base>. A network error → WARN [pr] fetch failed — using the local origin/<base>, and continue.git status --porcelain is not empty → they are not part of the pull request: WARN [pr] <n> uncommitted file(s) are not part of the PR — commit them with /unikit-commit first. At create and merge the Step 4 question then offers Stop — I will commit first.The pull request is the current state — HEAD — unless the user chooses otherwise. That holds with any plan and without one.
A boundary <sha> in the context (/unikit-implement at a PR checkpoint) → that SHA; at the checkpoint it is HEAD.
An explicit end in the request ("a PR up to abc123") outranks everything computed here.
Inside a module of a plan with PR checkpoints — the contract's ## Push target says when HEAD is inside a module: not every task is [x], and HEAD is not the ## Last completed boundary. Inside a module the skill asks — it never cuts the PR silently. Before any text is written (Step 2 depends on the range), print WARN [pr] HEAD is inside module <name> — a PR up to now carries its unfinished part into an open PR of <previous module>, if there is one, then ask:
AskUserQuestion: Where should the pull request end?
Options:
1. PR everything up to now (HEAD)
2. PR up to the end of <name of the last finished module> (<boundary short>)
3. Cancel
An answer already given in the request ("up to the end of the module", "everything there is") counts, and nothing is asked.
A closed plan — the final pull request after /unikit-verify. A closed plan is read from its checkboxes — no argument marks the final pull request.
Resolve the end once. git rev-parse --verify <end>^{commit} gives <end> and git rev-parse --short <end> gives <end short>; every later command pastes them exactly as printed — a hash is never typed from memory or completed by hand (.unikit/system/plan-boundaries.md → ## Push target). When the end is HEAD, the push source is the literal HEAD.
The start is git merge-base origin/<base> <end>. Nothing between them → INFO [pr] nothing between origin/<base> and <end short> — no PR to make, and stop.
Read {{skills_dir}}/{{self_name}}/references/pr-text.md and follow it. Print the title and the body as a block of their own.
Print the title, the body, the push command git push origin <end>:refs/heads/<branch> and the link https://github.com/<owner>/<repo>/compare/<base>...<branch>?expand=1. Add one line: merge it with a merge commit, never a squash — a squash brings the merged module back into the next pull request. The remote is not touched.
Ask once:
AskUserQuestion: Push <end short> to origin/<branch> and open or update the PR?
Options:
1. Push and open/update
2. Only print the text
3. Cancel
With uncommitted changes (Step 0.7), Only print the text is replaced by Stop — I will commit first.
git push origin <end>:refs/heads/<branch>, <end> as Step 1 resolved it (HEAD when the end is HEAD). The command is announced as the push it is, never as a check or a dry run. The remote refuses it (non-fast-forward, a protected branch) → print git's answer and WARN [pr] push refused — nothing was forced; the branch on the remote has commits this branch does not, and stop. After the push, git ls-remote origin refs/heads/<branch> must print the full <end>; a different SHA → WARN [pr] origin/<branch> is at <short>, not <end short> — check the push, and stop before any pull request call.list_pull_requests with head: "<owner>:<branch>" and state: "open".
create_pull_request with base, head: <branch>, title, body.update_pull_request with title and body, and the line PR #<n> updated — it now also covers <modules>: a pull request follows its head branch, so the new module is already in it.WARN [pr] <n> open PRs for <branch> — updated #<newest>.WARN [pr] GitHub refused the request (<status>) — check that GITHUB_PAT is set for the agent's environment. The text is already printed.Only at the merge level, and only after Step 4: read {{skills_dir}}/{{self_name}}/references/safe-merge.md and follow it.
create_or_update_file, delete_file, create_branch.まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
A test skill from an extension
日本語の概要は準備中です。原文の説明を表示しています。
A test skill from an extension (v2)
日本語の概要は準備中です。原文の説明を表示しています。
Initialize the UniKit framework in a project. Scans the current project to detect the engine and real tech stack, then generates the base framework documents that give AI agents context about the project — the resolved project description, the architecture doc, AGENTS.md, and the user-editable .unikit/config.yaml. This is the one-time, whole-project setup run before any other unikit skill. Use whenever the user wants to initialize, set up, or onboard the framework, e.g. "initialize unikit", "init the framework", "set up unikit", "set up the project", "configure AI context", "scan my project and set it up", "bootstrap the project". It also actualizes the config of a project already set up — say "update the config", "add missing settings", "actualize configuration", "fix my config".
日本語の概要は準備中です。原文の説明を表示しています。
Generate the architecture guidelines for a game project. Scans the project structure and tech stack, then produces .unikit/ARCHITECTURE.md describing the folder layout, dependency rules, and how modules communicate. Name a specific pattern or let it auto-detect. Use when the user wants to define or document the project architecture, e.g. "generate architecture", "describe the architecture", "which architecture should I use", "set up project architecture", or mentions module structure, module boundaries, project organization, or dependency rules.
日本語の概要は準備中です。原文の説明を表示しています。
Archive completed plans. Moves finished folder plans from .unikit/code/plans/<folder>/ to .unikit/code/archive/plans/<folder>/, so plan lookup and the plan lists stop offering them; an unfinished plan moves only when the user picks it, and is marked as unfinished. Lists every plan with its created and last-change dates; plans can be picked by number or by date. Never deletes, renames or commits. Use when user says "archive plans", "archive completed", "archive old plans", "clean up plans", or "show archived plans". Not for .unikit/code/PLAN.md or FIX_PLAN.md; to check that a plan is really done use /unikit-verify, to commit the move use /unikit-commit.
日本語の概要は準備中です。原文の説明を表示しています。
Create conventional commit messages for {{engine_name}} projects by analyzing staged changes. Handles engine-specific concerns like companion file pairing, binary assets, and linking the related plan. ALWAYS use this skill when the user asks to commit, save changes, or create a commit. Trigger phrases include "commit", "create commit", "commit this", "save changes", "save my work". Even if the user simply says "commit" or asks you to commit after finishing a task — invoke this skill, do NOT commit manually via git.
日本語の概要は準備中です。原文の説明を表示しています。