前端审查
- 作者仓库星标 0
- 作者更新于 实时读取
- 作者仓库 skills-registry
- 领域
- 通用
- 兼容 Agent
-
- Claude Code
- Cursor
- Cline
- Codex
- Windsurf
- Gemini CLI
- +20
- 信任分
- 88 / 100 · 社区维护
- 作者 / 版本 / 许可
- @tomevault-io · 未声明 license
- Token 消耗评级
- 低消耗
- 接入复杂程度
- 需简单配置
- 是否需要外部 API Key
- 不需要
- 兼容的系统
- 未声明(默认跨平台)
- 底层运行要求
- Python
- 文件与系统权限
-
- 只读
- 允许写入 / 修改
- Shell 执行
- 读取环境变量
- 网络行为
- 仅限本地
- 安装命令数
- 26 条
档案由构建时根据 SKILL.md 与安装命令自动衍生,可能与作者实际意图存在差异。
需要注意: 未限定 allowed-tools,默认拥有全部工具权限。
---
name: send
description: >- Use when this capability is needed. A workflow that takes local changes from working director…
category: 通用
runtime: Python
---
# send 输出预览
## PART A: 任务判断
- 适用问题:通用任务拆解、检查和交付。
- 输入要求:目标材料、限制条件、期望输出和验收方式。
- 证据边界:围绕“Argument Handling / Prerequisites / Phase 0: Preflight”读取原文规则,不把推断写成作者承诺。
## PART B: 执行结果
- **01** 任务判断:确认你的需求是否属于通用任务拆解、检查和交付,并标出输入、限制和预期结果。
- **02** 执行计划:优先按“Argument Handling / Prerequisites / Phase 0: Preflight”拆成步骤,说明每一步会读取什么、修改什么、产出什么。
- **03** 交付结果:给出可复制的命令、文件改动、检查清单或内容草稿,并说明如何继续迭代。
- **04** 风险边界:结合 读取文件、写入/修改文件、执行终端命令、读取环境变量、主要在本地完成、通常不需要额外 API Key 给出执行前确认项。
## Running Rules
- 读取文件、写入/修改文件、执行终端命令、读取环境变量;主要在本地完成;通常不需要额外 API Key。
- 先小样例验证,再放大到真实任务。
- 交付时同时给结果、检查口径和下一步迭代建议。 原文没有稳定的斜杠命令要求。安装验证后通常全局生效,直接在对话里点名这个 Skill 并描述任务即可。
告诉 Agent 目标文件或材料、期望结果、不可改范围、是否允许联网或执行命令。本 Skill 的权限画像是:读取文件、写入/修改文件、执行终端命令、读取环境变量。
先用一个小任务确认它会围绕“Argument Handling / Prerequisites / Phase 0: Preflight”工作;涉及文件或命令时,先看 diff、日志、预览或测试结果。
检查最终产物是否包含明确结果、必要证据和下一步动作;如果输出泛泛而谈,就补充输入、边界和验收标准后重跑。
---
name: send
description: >- Use when this capability is needed. A workflow that takes local changes from working director…
category: 通用
source: tomevault-io/skills-registry
---
# send
## 什么时候使用
- 把通用方向的常用动作沉淀成 Agent 可调用的技能 适合处理通用任务拆解、检查、交付和复盘,核心价值是把输入、判断、执行、验证和交付边界固定下来,避免 Agent 泛泛回答。 把任务拆成可执行、可检查、可继续迭代的步骤;通常不需要额外…
- 面向通用任务拆解、检查和交付,优先处理能明确输入、步骤和验收标准的工作。
## 需要提供什么
- 目标材料、目录范围、期望结果和不可改动内容。
- 是否允许联网、执行命令、读写文件或调用外部服务。
## 执行规则
- 围绕「Argument Handling / Prerequisites / Phase 0: Preflight」组织步骤,不把推断写成作者事实。
- 读取文件、写入/修改文件、执行终端命令、读取环境变量;主要在本地完成;通常不需要额外 API Key。
- 先跑小样例,确认结果可检查后再扩大任务范围。
## 输出要求
- 给出最终产物、关键证据、验证方式和下一步动作。
- 信息不足时标记 unknown,不编造命令、平台或依赖。 作者原文负责流程事实;仓库文件负责来源和命令;流狐只补充适用场景、限制和质量判断。
skill "send" {
输入层 -> 用户目标 + 目标文件 + 禁止范围 + 验收标准
上下文层 -> Argument Handling / Prerequisites / Phase 0: Preflight
规则层 -> SKILL.md 触发条件 / 执行顺序 / 输出格式
运行层 -> Python | 读取文件、写入/修改文件、执行终端命令、读取环境变量 | 主要在本地完成
安全层 -> 通常不需要额外 API Key + 小任务验证 + diff / 日志复核
输出层 -> 可复制结果 + 检查清单 + 下一步迭代
} Send: Review, Commit, Push, and Merge/Pull Request
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.
Argument Handling
Parse $ARGUMENTS (appended at the bottom of this skill) to extract the user's intent.
- No arguments: Proceed normally -- auto-generate everything.
- Arguments provided (e.g.,
feat: add repo argument support to prime command): Store asINTENTand use it throughout:- Branch name (Phase 0d): derive a slug from the intent
- Commit message (Phase 3): use as the commit subject if it follows conventional
commit format (
type: descriptionortype(scope): description), otherwise use it as input to the commit tool - PR/MR title (Phase 5): use as the title
Deriving 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
Prerequisites
git-- version control- Remote CLI (auto-detected from remote URL):
- GitLab remotes (
opengroup.org,gitlab): requiresglab - GitHub remotes (
github.com): requiresgh
- GitLab remotes (
- Optional (graceful degradation if absent):
wt(worktrunk) -- worktree-based branching and commitsaipr-- AI-powered commit message generation
Sandbox 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.
Phase 0: Preflight
0a. Check for changes (bail early if nothing to send)
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).
0b. Detect environment
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
0c. Get the current branch
git branch --show-current
0d. Branch safety
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.
0e. Contribution check -- am I on someone else's branch?
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.
Phase 1: Lite Code Review
A quick sanity check -- catch obvious problems before they become review comments.
- View the full diff:
git --no-pager diff --stat git --no-pager diff - Scan the changes for:
- Hardcoded secrets, credentials, API keys,
.envfiles - Files that should not be committed: binaries,
.tfstate,.env, credential files - Obvious bugs or logic errors
- Hardcoded secrets, credentials, API keys,
- Present a brief review summary listing changed files and any concerns.
- If there are blocking concerns (secrets, dangerous files), STOP and ask the user to fix them before continuing.
Phase 2: Quality Checks
Run checks based on which file types changed -- skip checks that don't apply. Only run a check if the relevant tool is available.
- Terraform (
.tffiles changed):terraform fmt -check -recursive ./infra 2>/dev/null terraform fmt -check -recursive ./platform 2>/dev/null - YAML (
.yamlor.ymlfiles 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 (
.jsonfiles changed):git --no-pager diff --name-only --diff-filter=ACM -- '*.json' | xargs -I{} python3 -c "import json, sys; json.load(open(sys.argv[1]))" {} - Python (
.pyfiles changed) -- syntax check only:git --no-pager diff --name-only --diff-filter=ACM -- '*.py' | xargs -I{} python3 -m py_compile {} - Java (
pom.xmlexists and.javafiles changed) -- compile check only:mvn compile -q 2>/dev/null
If any check fails, STOP and report. Do not proceed to commit.
Phase 3: 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.
Option A: 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.
Option B: aipr commit -s (if aipr is available)
git add -A
git commit -m "$(aipr commit -s)"
Option C: Manual commit (fallback)
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>"
Commit rules -- hard requirements (apply to ALL options)
- One-line summary under 72 characters:
type(scope): description - Types: feat fix docs refactor chore ci style test build perf
- Use imperative mood (add, implement, fix -- not adds, added, adding)
- Add 1-2 detail lines only for large changes (15+ files). Max 3 lines total.
- NEVER add
Co-Authored-Bytrailers -- not for any AI or agent - NEVER add "Generated with", "Built by", or any agent/AI attribution
- NEVER add
Signed-off-byunless the user explicitly requests DCO sign-off
Phase 4: Push
Push the branch to the remote:
git push -u origin $(git branch --show-current)
Phase 5: Merge / Pull Request
5a. Check for an existing MR/PR
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.
5b. Determine the target branch
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.
5c. Determine the title
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')
5d. Generate the description
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.
5e. Create the MR/PR
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"
5f. Report the MR/PR URL to the user.
Final Summary
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.
先判断是否适合
作者设计意图
作者的方法与取舍
边界和复核