| name | design-ship |
| license | MIT |
| compatibility | Claude Code 2.1.220+. Requires: design-import skill, claude-design-orchestrator agent. Composes: cover, expect, create-pr. |
| description | One-shot pipeline turning a claude.ai/design link into a pull request: scaffold via /ork:design-import, stories and specs via /ork:cover, browser verification via /ork:expect, then open the PR. Use when a design link should come back as a PR with no intermediate steps; if all you need is the components written to disk, run /ork:design-import instead. |
| argument-hint | <handoff-url | path-to-bundle.json> |
| tags | ["claude-design","design-ship","end-to-end","pr","handoff","ship-it","frontend"] |
| context | fork |
| background | false |
| version | 1.0.0 |
| author | OrchestKit |
| user-invocable | true |
| complexity | complex |
| persuasion-type | collaborative |
| effort | high |
| model | sonnet |
| agent | claude-design-orchestrator |
| allowed-tools | ["Read","Write","Edit","Glob","Grep","Bash","WebFetch","AskUserQuestion","Agent","TaskCreate","TaskUpdate","TaskList"] |
| skills | ["design-import","cover","expect","remember","memory"] |
| metadata | {"category":"workflow-automation"} |
| triggers | {"keywords":["design ship","design to pr","ship claude design","handoff to pr","design-ship"],"examples":["ship this Claude Design handoff: https://claude.ai/design/abc123","design URL in, PR out","design-ship /tmp/handoff.json"],"anti-triggers":["import only","scaffold only","brainstorm"]} |
| paths | ["src/components/**/*.{tsx,css}","**/*.stories.{ts,tsx}","tests/e2e/**",".claude/design-handoffs/**"] |
Design Ship
One command: Claude Design handoff URL → reviewable GitHub PR.
/ork:design-ship https://claude.ai/design/abc123
/ork:design-ship /tmp/handoff-bundle.json
When to use
You have a Claude Design handoff URL (or file) and want a PR opened against the current branch. No intermediate steps, no manual test generation, no manual PR drafting.
For just-the-import (no tests, no PR), use /ork:design-import instead.
Pipeline
Handoff bundle (URL or file)
│
▼
┌──────────────────────────────┐
│ 1. /ork:design-import │ Scaffold components, write provenance
│ (delegates to orchestrator │ Tokens reconciled
│ for parse + dedup) │ Components written or reused
└──────────┬───────────────────┘
│
▼
┌──────────────────────────────┐
│ 2. /ork:cover │ Storybook stories per new component
│ (Storybook + Playwright) │ Playwright E2E for new routes/views
└──────────┬───────────────────┘
│
▼
┌──────────────────────────────┐
│ 3. /ork:expect │ Diff-aware browser verification
│ (CDP + ARIA-tree-first) │ Screenshots saved for PR body
└──────────┬───────────────────┘
│
▼
┌──────────────────────────────┐
│ 4. /ork:create-pr │ PR opened with:
│ │ - Claude Design URL link
│ │ - Before/after screenshots
│ │ - Component scaffold list
│ │ - Coverage delta
│ │ - Label: claude-design
└──────────┬───────────────────┘
│
▼
┌──────────────────────────────┐
│ 5. UPDATE PROVENANCE │ Patch .claude/design-handoffs/<id>.json
│ │ with the opened PR number + URL
└──────────────────────────────┘
Pre-flight
Before starting the pipeline, verify the working tree is clean enough to ship:
status = Bash("git status --porcelain")
if status:
AskUserQuestion(questions=[{
"question": "Working tree has uncommitted changes. How to proceed?",
"header": "Pre-flight",
"options": [
{"label": "Commit them first", "description": "Run /ork:commit, then proceed with ship"},
{: , : },
{: , : },
{: , : }
],
:
}])
current_branch = Bash()
current_branch (, , ):
AskUserQuestion(questions=[{
: ,
: ,
: [
{: , : },
{: , : }
],
:
}])