skills/ship/SKILL.md
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly. Run: node scripts/gen-skill-docs.mjs --> --- name: ship description: > Automated release workflow with comprehensive quality gates. Triggers on "배포", "릴리스", "ship it", "PR 만들어", "release", "deploy", "create PR", "push this", "ship". Non-interactive: user says /ship, next thing they see is the PR URL. Delegates commit organization to OMC git-master, review to code-reviewer, verification to verifier. Sends PR notification vi
npx skillsauth add Kit4Some/Oh-my-ClaudeClaw skills/shipInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
name: ship description: > Automated release workflow with comprehensive quality gates. Triggers on "배포", "릴리스", "ship it", "PR 만들어", "release", "deploy", "create PR", "push this", "ship". Non-interactive: user says /ship, next thing they see is the PR URL. Delegates commit organization to OMC git-master, review to code-reviewer, verification to verifier. Sends PR notification via messenger. allowed-tools:
You are running the /ship workflow. This is non-interactive, fully automated.
Do NOT ask for confirmation at any step. The user said /ship which means DO IT.
Run straight through and output the PR URL at the end.
Only stop for:
Never stop for:
Before executing this skill:
Load context from memory:
memory_search(query: "{skill-relevant-query}", associative: true, limit: 5)
memory_search(tag: "{skill-name}", limit: 3)
Review returned memories for relevant past context, decisions, and patterns.
Check OMC state for active work:
state_get_status()
If conflicting active tasks exist, warn the user before proceeding.
Detect current branch (for git-related skills):
git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "not-a-git-repo"
Check proactive mode:
state_read("occ-proactive")
If "false": do NOT proactively suggest other OpenClaw-CC skills during this session.
Only run skills the user explicitly invokes.
Log skill activation:
memory_daily_log(type: "note", entry: "Skill activated: /{skill-name}")
Before starting work, load relevant context from the 3-layer memory system:
# Search for related past work
memory_search(query: "{task description}", associative: true, limit: 5)
# Search by relevant tags
memory_search(tag: "{relevant-tag}", limit: 3)
# Check for recent related daily logs
memory_search_date(start: "{7 days ago}", end: "{today}", category: "daily-logs", limit: 5)
Use retrieved context to:
If critical related memories exist, summarize them before proceeding:
Found {N} related memories:
- {memory_1 title}: {brief relevance}
- {memory_2 title}: {brief relevance}
Detect the correct base branch for diff and PR operations:
# Method 1: Check if there's an existing PR for this branch
BASE=$(gh pr view --json baseRefName -q .baseRefName 2>/dev/null)
# Method 2: Check repo default branch
if [ -z "$BASE" ]; then
BASE=$(gh repo view --json defaultBranchRef -q .defaultBranchRef.name 2>/dev/null)
fi
# Method 3: Fallback to common defaults
if [ -z "$BASE" ]; then
if git show-ref --verify --quiet refs/heads/main 2>/dev/null; then
BASE="main"
elif git show-ref --verify --quiet refs/heads/master 2>/dev/null; then
BASE="master"
else
BASE="main"
fi
fi
echo "Base branch: $BASE"
Use $BASE for all subsequent operations:
git diff origin/$BASE...HEAD — Changes on this branchgit log origin/$BASE..HEAD — Commits on this branchgh pr create --base $BASE — PR targeting correct branchgit status (never use -uall). Uncommitted changes are always included.git diff $BASE...HEAD --stat and git log $BASE..HEAD --oneline to understand what's being shipped.Fetch and merge the base branch so tests run against the merged state:
git fetch origin $BASE && git merge origin/$BASE --no-edit
If merge conflicts: try auto-resolve simple ones. If complex, STOP and show them. If already up to date: continue silently.
Detect the project's test framework automatically:
# Check package.json for test command
TEST_CMD=""
if [ -f "package.json" ]; then
TEST_CMD=$(node -e "try{const p=require('./package.json');console.log(p.scripts&&p.scripts.test||'')}catch(e){}" 2>/dev/null)
fi
# Check for common test runners
if [ -z "$TEST_CMD" ]; then
if [ -f "jest.config.js" ] || [ -f "jest.config.ts" ]; then
TEST_CMD="npx jest"
elif [ -f "vitest.config.ts" ] || [ -f "vitest.config.js" ]; then
TEST_CMD="npx vitest run"
elif [ -f "pytest.ini" ] || [ -f "pyproject.toml" ]; then
TEST_CMD="python -m pytest"
elif [ -f "Cargo.toml" ]; then
TEST_CMD="cargo test"
elif [ -f "go.mod" ]; then
TEST_CMD="go test ./..."
fi
fi
if [ -n "$TEST_CMD" ]; then
echo "Test command detected: $TEST_CMD"
else
echo "No test framework detected"
fi
If no test framework detected:
Usage: Run detected command with $TEST_CMD
Run detected test command:
$TEST_CMD 2>&1 | tee /tmp/ship_tests.txt
If any test fails: Show failures and STOP. Do not proceed. If all pass: Continue — note counts briefly.
Post-test LSP diagnostics:
If OMC LSP tools are available, run diagnostics on changed files:
lsp_diagnostics_directory("<changed-directory>")
Flag any type errors, unused imports, or lint issues that tests might not catch.
Delegate to OMC test-engineer for coverage analysis:
Agent(subagent_type: "oh-my-claudecode:test-engineer", prompt: "
Analyze test coverage for the diff: git diff origin/$BASE...HEAD
1. Trace every changed codepath
2. Map each branch against existing tests
3. Output ASCII coverage diagram with [TESTED] and [GAP] markers
4. Generate tests for uncovered paths (max 20 tests)
5. Run generated tests, commit passing ones
")
Fast path: All paths covered → "Step 3.4: All new code paths have test coverage ✓"
Delegate to OMC code-reviewer for structural review:
Agent(subagent_type: "oh-my-claudecode:code-reviewer", prompt: "
Review diff: git diff origin/$BASE
Two-pass review:
Pass 1 (CRITICAL): SQL safety, race conditions, secrets exposure, auth gaps
Pass 2 (INFORMATIONAL): Dead code, magic numbers, style, N+1 queries
Classify each finding as AUTO-FIX or ASK.
AUTO-FIX: apply directly, report one line per fix.
ASK: collect for user decision.
")
If AUTO-FIX items applied → commit: fix: pre-landing review auto-fixes
If ASK items remain → present via AskUserQuestion, one batch.
If VERSION file exists:
git diff origin/$BASE...HEAD --stat | tail -1If no VERSION file: skip this step.
If CHANGELOG.md exists:
git log $BASE..HEAD --onelineIf TODOS.md exists:
Organize changes into logical, independently valid commits:
| Order | Category | |-------|----------| | 1 | Infrastructure (deps, config, CI) | | 2 | Data/Schema (migrations, types) | | 3 | Core logic (services, controllers) | | 4 | Tests | | 5 | VERSION + CHANGELOG + TODOS.md |
Each commit: conventional message, independently valid, no broken imports. Final commit gets co-author trailer:
Co-Authored-By: Claude Opus 4.6 <[email protected]>
NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE.
Before pushing, if ANY code changed after Step 3's test run:
Rationalization prevention:
If tests fail: STOP. Fix and return to Step 3.
git push -u origin $(git rev-parse --abbrev-ref HEAD)
gh pr create --base $BASE --title "<type>: <summary>" --body "$(cat <<'EOF'
## Summary
<bullet points from CHANGELOG>
## Test Coverage
<coverage diagram from Step 3.4>
## Pre-Landing Review
<findings from Step 3.5>
## Test Plan
- [x] All tests pass
- [x] Pre-landing review complete
- [x] Verification gate passed
🤖 Generated with [Claude Code](https://claude.com/claude-code)
EOF
)"
Output the PR URL.
After completing the workflow, persist results to the 3-layer memory system:
Log completion to daily log:
memory_daily_log(type: "done", entry: "{skill-name}: {brief result summary}")
Store significant findings (importance ≥ 6):
memory_store(
category: "{appropriate category}",
title: "{descriptive title}",
content: "{structured result content}",
tags: ["{skill-name}", "{project}", "{relevant-tags}"],
importance: {6-10 based on significance}
)
Link to related memories (if applicable):
memory_link(source: "{new_memory_id}", target: "{related_id}", relation: "{related|derived|refines}")
| Content Type | Category | Subcategory | |-------------|----------|-------------| | Bug fix / debugging | knowledge | debugging | | Code review results | projects | {project-name} | | Design decisions | projects | {project-name} | | Research findings | knowledge | {topic} | | Release / deploy | projects | {project-name} | | Person-related info | people | — | | Task / action item | tasks | — |
Send notifications for significant events via messenger:
| Event | Platform | Priority | |-------|----------|----------| | Task/pipeline completed | telegram | Normal | | Verification failed | telegram | High | | Long-running task done (10+ min) | telegram | Normal | | Critical error or blocker | telegram | High | | PR created / release shipped | all | Normal | | Importance ≥ 8 memory created | telegram | Normal |
messenger_send(
platform: "telegram",
message: "[{skill-name}] {status_emoji} {brief description}\n\n{details if relevant}"
)
Status Emojis:
memory_daily_log(entry: "Shipped: {PR title} #{PR number}", type: "done")
messenger_send(platform: "all", message: "✅ [ship] PR created: {PR URL}\n{summary}")
Every skill must end with one of these status codes:
| Code | Meaning | When to Use | |------|---------|-------------| | DONE | All steps completed, evidence provided | Root cause found + fix verified, PR created, review finished | | DONE_WITH_CONCERNS | Completed with warnings or caveats | Tests pass but coverage dropped, fix applied but can't fully verify | | BLOCKED | Cannot proceed, requires user intervention | 3 failed attempts, missing permissions, external dependency down | | NEEDS_CONTEXT | Missing information to continue | Unclear requirements, need user clarification |
3-strike rule: After 3 failed attempts at any step, STOP and escalate to user. Do not continue guessing. Present what was tried and ask for direction.
Scope escalation: If fix/change touches 5+ files unexpectedly, pause and confirm with the user before proceeding.
Security uncertainty: If you are unsure about a security implication, STOP and escalate. Never guess on security.
Verification requirement: Never claim DONE without evidence.
═══════════════════════════════════════
Status: {DONE | DONE_WITH_CONCERNS | BLOCKED | NEEDS_CONTEXT}
Summary: {one-line description of outcome}
Evidence: {test output, verification results, or blocking reason}
═══════════════════════════════════════
development
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly. Run: node scripts/gen-skill-docs.mjs --> --- name: web-researcher description: > Web research with OMC team parallel execution. Triggers on "웹에서 찾아", "최신 정보", "리서치해", "동향", "web research", "find online", "latest info", "look up", "search the web", "trend analysis" and similar. v3: Spawns research-agent in parallel for multi-angle search. Deduplicates via memory_similar. Builds knowledge graph connections. For comprehensive
tools
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly. Run: node scripts/gen-skill-docs.mjs --> --- name: unfreeze description: > Remove edit scope restriction set by /freeze or /guard. Triggers on "unfreeze", "편집 제한 해제", "잠금 해제", "remove freeze", "unlock edits". allowed-tools: - Bash - Read --- # /unfreeze — Remove Edit Restrictions ## Preamble Before executing this skill: 1. **Load context from memory**: ``` memory_search(query: "{skill-relevant-query}", associative:
tools
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly. Run: node scripts/gen-skill-docs.mjs --> --- name: task-analyzer allowed-tools: - Bash - Read - Write - Edit - Glob - Grep - Agent - AskUserQuestion - WebSearch description: > Autonomously analyzes and executes tasks with a structured plan. Triggers on "분석해", "작업 계획", "이거 해줘", "자동으로 처리해", "계획 세워", "workflow 만들어", "analyze", "task plan", "do this", "handle automatically", "make a plan", "create a workflow",
documentation
<!-- AUTO-GENERATED from SKILL.md.tmpl — do not edit directly. Run: node scripts/gen-skill-docs.mjs --> --- name: session-tracker description: > Session context tracking with OMC state bridge. Triggers automatically at session start or on "마지막 세션", "이전 작업", "어디까지 했지", "last session", "continue where I left off", "resume work" and similar. v3: Dual-writes to both OMC state (notepad/project-memory) and OpenClaw-CC persistent memory. Uses session-manager agent for cross-system continuity