ワンクリックで
just-ship-review
/just-ship-review — Branch lokal auschecken, builden, Dev-Server starten und testen
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
/just-ship-review — Branch lokal auschecken, builden, Dev-Server starten und testen
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Neues Projekt im aktuellen Workspace verknüpfen — nur Projekt-ID in project.json schreiben
Board-Verbindung einrichten — via jsp_ Token oder Status prüfen
Just Ship installieren und Projekt konfigurieren — Stack erkennen, project.json befüllen, Board verbinden
Spike-Ergebnis reviewen — Zusammenfassung anzeigen, Follow-Up-Tickets erstellen, Spike-Ticket abschliessen
Single source of truth for how the just-ship pipeline talks to the CEO. Defines the voice (Result-First, tables for lists of 3+, status icons, short active sentences, no inner monologue) and the five Core Templates (develop-complete, ship-complete, ticket-created, epic-created, phase-progress). Every user-facing output string produced by an agent, a skill, or a pipeline phase runs through this skill — never freeform prose. Triggers at the end of /develop, at the end of /ship, in Sidekick replies for ticket/epic creation, in /just-ship-status, and during phase-progress updates. Load whenever you are about to render a terminal block the CEO will read.
The operating system for decision-making in this team. ALWAYS load this skill. It defines what the human decides and what the AI expert team decides autonomously. Use on EVERY task, EVERY conversation, EVERY feature. This skill prevents the anti-pattern of asking the user technical, design, or implementation questions that an expert should answer. It is the single most important skill in the stack — without it, every other skill's quality is bottlenecked by the user being asked questions they shouldn't answer. Triggers on: literally everything. This is not optional. Load it first, always.
| applies_to | all-agents |
| name | just-ship-review |
| description | /just-ship-review — Branch lokal auschecken, builden, Dev-Server starten und testen |
Den fehlenden Schritt zwischen Board und /ship — Branch lokal auschecken, builden, Dev-Server starten, testen, dann shippen oder fixen.
Lies project.json fuer Konventionen, Build-Commands und Pipeline-Config.
Pipeline (optional): Falls pipeline.workspace_id gesetzt → board-api.sh verwenden:
bash .claude/scripts/board-api.sh get "tickets/{N}"
Credentials werden intern aufgelöst.
Falls keine Pipeline konfiguriert: Pipeline-Schritte (Board-Status, Ticket-Info) ueberspringen.
/review (ohne Argument) — Branch-AuswahlSammle alle Feature/Fix/Chore-Branches und praesentiere sie als Auswahl.
git fetch --prune origin
git branch -r --no-merged origin/main | grep -E 'origin/(feature|fix|chore|docs)/' | sed 's|origin/||' | sed 's/^[[:space:]]*//'
Fuer jeden Branch:
gh pr view {branch} --json state -q .state 2>/dev/null || echo "kein PR"T-{N} oder /{N}-), dann:
bash .claude/scripts/board-api.sh get "tickets/{N}" | node -e "
const t = JSON.parse(require('fs').readFileSync('/dev/stdin','utf-8'));
process.stdout.write(t.data?.status || t.status || 'unbekannt');
"
Welchen Branch willst du reviewen?
a) fix/T-385-members-unknown-display (in_review, PR vorhanden)
b) feature/T-287-universal-event-streaming (kein PR)
c) fix/worktree-stale-cleanup (remote gone)
Der User waehlt eine Option, dann weiter mit dem Review-Flow (ab Schritt 1 unten).
Falls keine Branches vorhanden: Keine offenen Branches zum Reviewen. — fertig.
/review T-{N} (mit Ticket-Nummer) — Direkteinstieg$ARGUMENTS enthaelt die Ticket-Nummer (z.B. T-385 oder 385).
Nummer extrahieren und zugehoerigen Branch finden:
git fetch --prune origin
# Pattern 1: T-{N} im Branch-Namen
BRANCH=$(git branch -r | grep -E "T-{N}-" | head -1 | sed 's|origin/||' | sed 's/^[[:space:]]*//')
# Pattern 2: /{N}- im Branch-Namen (ohne T- Prefix)
if [ -z "$BRANCH" ]; then
BRANCH=$(git branch -r | grep -E "/{N}-" | head -1 | sed 's|origin/||' | sed 's/^[[:space:]]*//')
fi
Falls kein Branch gefunden: Kein Branch fuer T-{N} gefunden. Nutze /review ohne Argument fuer eine Uebersicht. — fertig.
Falls Branch gefunden: weiter mit dem Review-Flow.
Falls .claude/.dev-server-pid existiert:
if [ -f .claude/.dev-server-pid ]; then
OLD_PID=$(cat .claude/.dev-server-pid)
kill $OLD_PID 2>/dev/null || true
rm -f .claude/.dev-server-pid
fi
Falls ein Worktree fuer den Branch existiert (.worktrees/T-{N} oder anderes Verzeichnis mit passendem Branch):
# Pruefen ob Worktree existiert
if [ -d ".worktrees/T-{N}" ]; then
WORK_DIR=".worktrees/T-{N}"
fi
Falls Worktree vorhanden: Alle weiteren Schritte im Worktree-Verzeichnis ausfuehren.
Safety-Net: Falls .env.local im Worktree fehlt, Symlink nachholen:
if [ -n "$WORK_DIR" ] && [ ! -e "$WORK_DIR/.env.local" ]; then
REPO_ROOT=$(git rev-parse --show-toplevel)
ln -sf "$REPO_ROOT/.env.local" "$WORK_DIR/.env.local" 2>/dev/null || true
fi
# Uncommitted Changes pruefen
if [ -n "$(git status --porcelain)" ]; then
echo "WARNUNG: Uncommitted Changes vorhanden. Bitte erst committen oder stashen."
exit 1
fi
git checkout {branch}
git pull origin {branch}
Falls Checkout fehlschlaegt (uncommitted Changes): Abbrechen mit Warnung. Das ist der einzige Grund zum Stoppen.
Ausgabe: Branch {branch} ausgecheckt
Falls build.install in project.json gesetzt:
{build.install}
Falls nicht gesetzt, auto-detect:
package-lock.json existiert → npm ciyarn.lock existiert → yarn install --frozen-lockfilepnpm-lock.yaml existiert → pnpm install --frozen-lockfileAusgabe: Dependencies installiert
Lies Build-Command aus project.json (build.web):
{build.web}
Falls Build fehlschlaegt: Output anzeigen. Frage ob Dev-Server trotzdem gestartet werden soll.
Ausgabe:
Build erfolgreich (bei Erfolg)Build fehlgeschlagen — siehe Output oben (bei Fehler)Falls build.dev in project.json gesetzt:
{build.dev}
Starte im Background (Bash run_in_background). Die PID des Background-Prozesses in .claude/.dev-server-pid speichern:
echo $PID > .claude/.dev-server-pid
Hinweis: run_in_background gibt die PID zurueck. Diese sofort in die Datei schreiben.
Falls build.dev NICHT konfiguriert: Dev-Server ueberspringen, nur Build-Ergebnis melden.
Port: Aus project.json Feld build.dev_port lesen, oder aus dem Dev-Server-Output parsen.
Ausgabe: Dev-Server laeuft auf localhost:{port}
Review bereit fuer {branch}:
- Dev-Server laeuft auf localhost:{port}
- Schau's dir an und sag "passt" zum Shippen oder beschreib was gefixt werden soll.
Falls kein Dev-Server (weil build.dev fehlt):
Review bereit fuer {branch}:
- Build war erfolgreich.
- Sag "passt" zum Shippen oder beschreib was gefixt werden soll.
User testet im Browser. Claude wartet auf Antwort.
Trigger-Woerter: "passt", "done", "sieht gut aus", "klappt", "fertig", "ship it", "mach zu"
→ /ship autonom ausfuehren. Keine Rueckfragen.
Der User beschreibt was gefixt werden soll. Dann:
Fix implementieren — direkt in der aktuellen Session, kein Sub-Agent
Dependencies — NUR neu installieren falls package.json, package-lock.json o.ae. geaendert wurde
Build neu ausfuehren:
{build.web}
Dev-Server neu starten:
# Alten Prozess stoppen
if [ -f .claude/.dev-server-pid ]; then
OLD_PID=$(cat .claude/.dev-server-pid)
kill $OLD_PID 2>/dev/null || true
rm -f .claude/.dev-server-pid
fi
# Neuen Dev-Server starten (run_in_background)
{build.dev}
Neue PID in .claude/.dev-server-pid speichern.
Meldung:
Fix angewendet, Dev-Server laeuft. Nochmal testen?
Zurueck zu Schritt 7 — User testet erneut.
Kein Iterations-Limit. Der User entscheidet wann "passt".
Falls der Fix den Build bricht: Build-Output anzeigen, Claude versucht den Build-Fehler automatisch zu beheben. Danach nochmal Build + Dev-Server starten.
/review ohne Argument.claude/.dev-server-pid), dann neuen Branch auscheckenfinishing-a-development-branch aufrufengit add -A oder git add .--force push/ship.env.local, ~/.just-ship/config.json) — IMMER board-api.sh verwenden, der Wrapper resolved Tier-für-Tier