Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/tomevault-io/skills-registry --skill send명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SOC 직업 분류 기준
SKILL.md 표시 중
| name | send |
| description | >- Use when this capability is needed. |
A workflow that takes local changes from working directory to merge/pull request. Each phase gates the next -- if something fails, stop and report rather than pushing broken code upstream.
IMPORTANT: All git commands in this skill MUST use --no-pager to prevent interactive
paging from hanging the shell.
Parse $ARGUMENTS (appended at the bottom of this skill) to extract the user's intent.
feat: add repo argument support to prime command):
Store as INTENT and use it throughout:
type: description or type(scope): description), otherwise use it
as input to the commit toolDeriving a branch slug from intent:
Strip conventional commit prefix if present (feat: , fix(scope): , etc.), lowercase,
replace spaces and special characters with hyphens, collapse consecutive hyphens, truncate
to 50 characters, strip leading/trailing hyphens.
Example: feat: add repo argument support to prime command → add-repo-argument-support-to-prime
git -- version controlopengroup.org, gitlab): requires glabgithub.com): requires ghwt (worktrunk) -- worktree-based branching and commitsaipr -- AI-powered commit message generationSandbox note: In bare repo worktree layouts (.bare/ directory), branch creation writes
to .bare/refs/heads/. This may require sandbox write access to the repo's .bare/ path.
git --no-pager status --short
If clean, also check for unpushed commits:
git --no-pager log --oneline @{upstream}..HEAD 2>/dev/null
If both are clean, STOP -- nothing to send. If there are unpushed commits but no local changes, skip to Phase 4 (Push).
Run these checks. The results gate all later phases.
Remote platform:
REMOTE_URL=$(git remote get-url origin 2>/dev/null)
if echo "$REMOTE_URL" | grep -q "github\.com"; then
PLATFORM=github
elif echo "$REMOTE_URL" | grep -qE "opengroup\.org|gitlab"; then
PLATFORM=gitlab
else
PLATFORM=unknown
fi
Bare repo / worktree layout:
IS_BARE_WORKTREE=false
if [ -f .git ]; then
IS_BARE_WORKTREE=true
fi
This matters for branch naming -- bare repos cannot use slashes in branch names because
they create subdirectories under .bare/refs/heads/ which may conflict or fail.
Worktree tool:
if command -v wt >/dev/null 2>&1 || command -v git-wt >/dev/null 2>&1; then
HAS_WT=true
else
HAS_WT=false
fi
Commit tool (prefer wt step commit > aipr > manual):
if [ "$HAS_WT" = true ]; then
COMMIT_TOOL=wt
elif command -v aipr >/dev/null 2>&1; then
COMMIT_TOOL=aipr
else
COMMIT_TOOL=manual
fi
git branch --show-current
Branch naming rules (gated by IS_BARE_WORKTREE):
IS_BARE_WORKTREE=true: use flat names with hyphens (e.g., add-repo-argument-support)IS_BARE_WORKTREE=false: use slashed names (e.g., feature/add-repo-argument-support)On main or master:
These are release branches -- changes must go on a feature branch.
If INTENT is available (from ARGUMENTS), auto-derive a branch name from the slug and
create the branch without asking the user:
# Example for bare worktree with INTENT slug "add-repo-argument-support"
git checkout -b add-repo-argument-support
# Example for standard clone
git checkout -b feature/add-repo-argument-support
If no INTENT, ask the user for a feature name, then create the branch.
On dev:
The user is on the integration branch -- cannot merge from dev to dev. Same logic as
above: auto-derive from INTENT if available, otherwise ask.
When using wt for branch creation:
# wt always uses flat names for worktree directory names
wt switch --create <slug> --base dev
This changes the working directory to a new worktree path. All subsequent commands run from the new directory.
On feature/* or any other name: proceed normally.
GitLab:
glab api "projects/:id/merge_requests?source_branch=$(git branch --show-current)&state=opened" \
--hostname community.opengroup.org 2>/dev/null
GitHub:
gh pr list --head "$(git branch --show-current)" --state open --json number,author 2>/dev/null
If an open MR/PR exists and the author is not the current user, ask: "You're on the
<branch> branch from MR/PR #X by <author>. Do you want to contribute these changes
to that MR/PR, or create a separate one?" If they want to contribute, hand off to the
contribute skill.
A quick sanity check -- catch obvious problems before they become review comments.
git --no-pager diff --stat
git --no-pager diff
.env files.tfstate, .env, credential filesRun checks based on which file types changed -- skip checks that don't apply. Only run a check if the relevant tool is available.
.tf files changed):
terraform fmt -check -recursive ./infra 2>/dev/null
terraform fmt -check -recursive ./platform 2>/dev/null
.yaml or .yml files changed):
git --no-pager diff --name-only --diff-filter=ACM -- '*.yaml' '*.yml' | xargs -I{} python3 -c "import yaml, sys; yaml.safe_load(open(sys.argv[1]))" {}
.json files changed):
git --no-pager diff --name-only --diff-filter=ACM -- '*.json' | xargs -I{} python3 -c "import json, sys; json.load(open(sys.argv[1]))" {}
.py files changed) -- syntax check only:
git --no-pager diff --name-only --diff-filter=ACM -- '*.py' | xargs -I{} python3 -m py_compile {}
pom.xml exists and .java files changed) -- compile check only:
mvn compile -q 2>/dev/null
If any check fails, STOP and report. Do not proceed to commit.
Stage changes and create a conventional commit. The method depends on which tools are available (detected in Phase 0b). If INTENT is available and already follows conventional commit format, prefer using it as the commit message rather than auto-generating -- the user told you what this change is.
wt step commit (if HAS_WT=true)worktrunk handles staging, diff analysis, and message generation:
wt step commit
Review the generated message -- if it doesn't follow the commit rules below, amend.
If wt step commit fails (non-zero exit), fall through to Option B or C. Don't stop
the workflow because of a tool failure when alternatives exist.
aipr commit -s (if aipr is available)git add -A
git commit -m "$(aipr commit -s)"
git add -A
If INTENT is available and matches conventional commit format (type: ... or
type(scope): ...), use it directly as the commit message. Otherwise, generate
the message from the staged diff using the
Commit Prompt Reference.
git commit -m "<message>"
type(scope): descriptionCo-Authored-By trailers -- not for any AI or agentSigned-off-by unless the user explicitly requests DCO sign-offPush the branch to the remote:
git push -u origin $(git branch --show-current)
GitLab:
glab mr list --source-branch="$(git branch --show-current)"
GitHub:
gh pr list --head "$(git branch --show-current)" --state open
If one already exists, report its URL and skip creation.
Default target: dev (OSDU convention). If no dev branch exists on the remote, fall
back to main or master:
git --no-pager ls-remote --heads origin dev main master 2>/dev/null
Use the first branch that exists, in order: dev, main, master.
If INTENT is available and follows conventional commit format, use it as the title. Otherwise, derive from the most recent commit (or summarize if multiple commits):
TITLE=$(git --no-pager log -1 --format='%s')
Analyze the commit log and diff stats to produce a description:
DIFF_STATS=$(git --no-pager diff --stat origin/$TARGET_BRANCH..HEAD)
COMMITS=$(git --no-pager log origin/$TARGET_BRANCH..HEAD --format='%s%n%b')
Use the MR Description Prompt Reference as a guide for the description structure. When INTENT is available, incorporate the user's stated purpose into the Summary section as the "why" -- don't just describe the diff mechanically.
GitLab:
ASSIGNEE=$(glab auth status 2>&1 | grep 'Logged in' | sed 's/.* as \([^ ]*\).*/\1/')
glab mr create \
--title "$TITLE" \
--description "$BODY" \
--target-branch "$TARGET_BRANCH" \
--assignee "$ASSIGNEE" \
--remove-source-branch
GitHub:
gh pr create \
--title "$TITLE" \
--body "$BODY" \
--base "$TARGET_BRANCH"
After all phases complete, present a compact summary:
Review: <clean or list of concerns addressed>
Commit: <short-hash> <commit message>
Branch: <branch-name> -> pushed to origin
MR/PR: <URL>
Source: danielscholl/claude-osdu — distributed by TomeVault.