with one click
ship
변경사항을 remote에 올리기 전 의도 단위 커밋, 검증, push를 수행할 때 사용한다.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
변경사항을 remote에 올리기 전 의도 단위 커밋, 검증, push를 수행할 때 사용한다.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
기존 user/project 메모리의 중복·노후 항목을 검토, 통합, 정리할 때 사용한다. 사용자 확인 없이 메모리를 삭제하지 않는다.
서브에이전트·스킬 사용 통계와 미사용 항목을 분석해 인사이트를 도출할 때 사용한다.
코딩·조사 작업을 별도 Picky Pickle에 위임할 때 사용한다. worktree 준비, 지침 작성, Pickle 생성·후속 관리를 수행한다.
Context7 CLI(`ctx7`)로 라이브러리·프레임워크 공식 문서와 API 예시를 조회할 때 사용한다.
새 기능, 큰 변경, 아키텍처 결정 전에 구현보다 설계를 먼저 확정할 때 사용한다.
장기·병렬·대규모 작업을 서브에이전트로 분해·실행·검증하거나 동적 workflow를 설계할 때 사용한다.
| name | ship |
| description | 변경사항을 remote에 올리기 전 의도 단위 커밋, 검증, push를 수행할 때 사용한다. |
| disable-model-invocation | false |
핵심은 3가지다.
기본 동작은 commit + verify + push다. PR 생성은 조건부 후처리다.
gh api를 우선 사용한다.gh api 또는 gh pr create를 사용한다./ship은 브랜치 이름 인자를 옵션으로 받을 수 있다.
main/base여도 묻지 않는다. 그대로 진행한다.TARGET_BRANCH="$ARGUMENTS"
CURRENT=$(git branch --show-current 2>/dev/null)
BASE=$(git remote show origin 2>/dev/null | sed -n '/HEAD branch/s/.*: //p' | head -1)
[ -n "$BASE" ] || BASE=main
if [ -n "$TARGET_BRANCH" ]; then
if git show-ref --verify --quiet "refs/heads/$TARGET_BRANCH"; then
git switch "$TARGET_BRANCH"
else
git switch -c "$TARGET_BRANCH"
fi
fi
CURRENT=$(git branch --show-current 2>/dev/null)
echo "BRANCH: $CURRENT"
echo "BASE: $BASE"
git status --short
git diff --stat
git diff --cached --stat
git remote -v
변경사항이 없거나 push 대상 remote가 불명확하면 중단한다.
git status
git diff --cached
git diff
git log --oneline -5
변경사항을 파일이 아니라 의도 기준으로 나눈다. 예: 의존성 업데이트 / 버그 수정 / 리팩터링 / 테스트 보강 / 문서 정리
아래면 단일 커밋 허용:
<type>: <한 줄 요약>
<선택: 1-2줄 설명>
feat / fix / chore / refactor / docs / test / style
push 전에는 가능하면 아래를 모두 실행한다.
package.json의 scripts.typecheckpackage.json의 scripts.checktsc --noEmitCargo.toml → cargo checkpackage.json의 scripts.lintMakefile의 lintCargo.toml → cargo clippy -- -D warningspackage.json의 scripts.testMakefile의 testCargo.toml → cargo testgo.mod → go test ./...pytest 설정 존재 → pytestpackage.json의 scripts.buildMakefile의 buildCargo.toml → cargo build다음은 조용히 통과시키지 않는다.
출력이 의심스러우면 계속/다른 명령/중단 중 하나를 AskUserQuestion으로 묻는다.
권장 순서:
typecheck → lint → test → build
원칙:
하나라도 실패하면 중단한다.
Ship blocked:
- failed check: <typecheck|lint|test|build>
- command: <실행한 명령>
- reason: <핵심 실패 요약>
허용:
금지:
git status
git log --oneline --decorate -5
push 전 최종 게이트:
하나라도 아니면 중단한다.
브랜치 인자를 받았다면 그 브랜치로 push한다. 없으면 현재 브랜치를 그대로 push한다.
git push -u origin "$(git branch --show-current)"
원칙:
git commit --amend 하지 않는다. 필요하면 새 커밋으로 추가한다.기본 결과:
✅ Shipped!
Branch: <current-branch>
Commits: <N>
Checks: typecheck / lint / test / build
Push: success
이 단계는 아래 경우에만 수행한다.
/ship에 PR 생성이 포함됨가능하면 gh api를 우선 사용한다.
gh api graphql -f query='query($owner:String!, $repo:String!, $headRefName:String!) { repository(owner:$owner, name:$repo) { pullRequests(states: OPEN, headRefName: $headRefName, first: 1) { nodes { url } } } }' -F owner='{owner}' -F repo='{repo}' -F headRefName='{branch}'
이미 PR이 있으면 PR: skipped (already exists) 로 기록한다.
gh apigh pr createPR까지 수행한 경우 결과에 아래를 추가한다.
PR: <url | skipped (already exists)>