本文へ移動
cccskills
無料GitHub で公開日本語紹介

directions-lab

本番UIと複数のデザイン案を並べて比較できるページを用意し、テーマや動きの切り替え、Storybookへの登録まで進めるスキルです。

原文原文の説明を見る

Scaffold a directions lab that shows shipped UI (Today) beside 2-3 design directions, with surface tabs, theme and animation toggles and the V1 MVP hover motion, registered in design-proposals Storybook. Use for a directions page or lab, or to explore design directions next to production.

paperclipai/paperclipスター 108,531(GitHub 108,531 + cccskills 0)
連携ツールVercel

実行スコア 未検証

インストール方法を見る

こんなときに便利

  • 本番UIとデザイン案を比較したいとき
  • 複数画面のデザイン検討を共有したいとき
  • 機能ごとのデザインラボを作りたいとき
  • Storybookにデザイン案を登録したいとき

日本語での紹介

できること

機能ごとに、本番で使われているUIと2〜3種類のデザイン案を並べて比較する「デザインラボ」を用意します。画面の表示箇所ごとのタブ、テーマとアニメーションの切り替え、各案の一覧を備えたページを生成し、Storybookのデザイン提案カタログにも登録します。本番UIは実際のコンポーネントを使って表示し、比較の基準にします。生成後は画面の枠組みやデータ、各デザイン案を段階的に整え、テストやビルドなどの確認を進めます。キャプチャした画像はレビュー用に添付でき、リポジトリには含めません。

こんなときに便利

実装済みUIと新しい案を同じ条件で比較したいときや、複数の画面にまたがるデザイン検討を共有したいときに向いています。案ごとの見た目や動きを確認しながら、レビュー用の入口を整えたいチームにも役立ちます。

使い方の例

  • 「この機能について、本番UIと3つのデザイン案を比較するラボを作ってください」
  • 「この機能が表示される画面ごとに、デザイン案を見比べられるページを用意してください」
  • 「生成したデザインラボをStorybookに登録し、確認手順を進めてください」

注意点

原文では対象リポジトリのUI構成や機能マップを参照し、Vite、Storybook、テスト環境を使います。生成後の確認には対象プロジェクトの開発環境が必要です。

この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。

資料チェック

SKILL.md の記述から、注意が要る操作と導入の前提を AI が確認しました。点数は実際に動かした結果(実行検証)だけで付けています。

安全面送信・削除・コマンド実行などの扱いが明示されているか
A良好生成失敗時の削除と共有ファイル復元、画像をリポジトリ外に置く手順があります。
導入のしやすさ必要なツールや API キーが少ないか、書かれているか
B一部不足Vite、Storybook、テスト環境と対象リポジトリの構成が前提です。

点数には入れていません。 2026年10月27日 時点で AI(OpenAI Codex)が判定しました。目安なので、入れる前に原文も確認してください。

評価が違うと思ったら、見直しを依頼する

どの項目が、なぜ違うと思うかを書いてください。ログインは不要です。内容を SKILL.md と照らし合わせて評価を作り直し、この欄に反映します。

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

含まれるファイル(70)

  • SKILL.md15.4 KB
  • agents/openai.yaml291 B
  • assets/motion/v1-mvp-motion.css787 B
  • assets/PRECEDENT187 B
  • assets/templates/api-routes.ts.mjs531 B
  • assets/templates/api-stub.ts.mjs1.9 KB
  • assets/templates/build-info.ts.mjs220 B
  • assets/templates/define-lab.ts.mjs3.9 KB
  • assets/templates/direction/index.tsx.mjs445 B
  • assets/templates/direction/MotionSpecimen.tsx.mjs2.3 KB
  • assets/templates/direction/SlotBody.tsx.mjs521 B
  • assets/templates/direction/tokens.css.mjs1.1 KB
  • assets/templates/entry.html.mjs752 B
  • assets/templates/fixtures.ts.mjs1.2 KB
  • assets/templates/frames/AppShell.tsx.mjs5.2 KB
  • assets/templates/frames/Board.tsx.mjs4.8 KB
  • assets/templates/frames/LabToolbar.tsx.mjs4.4 KB
  • assets/templates/frames/Slot.tsx.mjs329 B
  • assets/templates/frames/SurfaceFrame.tsx.mjs1.3 KB
  • assets/templates/frames/SurfaceView.tsx.mjs540 B
  • assets/templates/kit.ts.mjs1.9 KB
  • assets/templates/lab-state.ts.mjs1.8 KB
  • assets/templates/lab.css.mjs74 B
  • assets/templates/launch-entries.json.mjs680 B
  • assets/templates/main.tsx.mjs6.2 KB
  • assets/templates/providers.tsx.mjs920 B
  • assets/templates/registry.ts.mjs1.6 KB
  • assets/templates/shot.cjs.mjs10.0 KB
  • assets/templates/stories/compare.stories.tsx.mjs3.4 KB
  • assets/templates/tests/api-stub.test.ts.mjs1.6 KB
  • assets/templates/tests/lab-state.test.ts.mjs3.1 KB
  • assets/templates/tests/motion-contract.test.ts.mjs5.7 KB
  • assets/templates/tests/registry.test.ts.mjs2.5 KB
  • assets/templates/tests/today.test.tsx.mjs2.0 KB
  • assets/templates/today/adapters.ts.mjs748 B
  • assets/templates/today/index.tsx.mjs387 B
  • assets/templates/today/SlotBody.tsx.mjs972 B
  • assets/templates/vite.config.mjs.mjs2.9 KB
  • evals/asks-how-many-directions/case.yaml343 B
  • evals/asks-how-many-directions/graders/01-expected-output.md347 B
  • evals/asks-how-many-directions/prompt.md197 B
  • evals/multi-surface-three-directions/case.yaml674 B
  • evals/multi-surface-three-directions/graders/01-expected-output.md672 B
  • evals/multi-surface-three-directions/prompt.md510 B
  • evals/single-surface-two-directions/case.yaml398 B
  • evals/single-surface-two-directions/graders/01-expected-output.md397 B
  • evals/single-surface-two-directions/prompt.md284 B
  • references/canonical-directory.md15.5 KB
  • references/design-proposals-storybook.md29.2 KB
  • references/drawing-phases.md21.7 KB
  • references/generator.md25.7 KB
  • references/lab-anatomy.md28.7 KB
  • references/lifecycle.md18.9 KB
  • references/motion-spec.md21.1 KB
  • references/questions-and-defaults.md15.6 KB
  • references/repo-gates.md20.8 KB
  • references/today-fixtures-and-build.md34.9 KB
  • scripts/lib/args.mjs2.4 KB
  • scripts/lib/capabilities.mjs2.1 KB
  • scripts/lib/check.mjs10.6 KB
  • scripts/lib/context.mjs8.6 KB
  • scripts/lib/modes.mjs1001 B
  • scripts/lib/ports.mjs1.9 KB
  • scripts/lib/registry-edit.mjs5.2 KB
  • scripts/lib/render.mjs3.6 KB
  • scripts/lib/shared-files.mjs2.9 KB
  • scripts/lib/verify.mjs1.8 KB
  • scripts/lib/write.mjs2.3 KB
  • scripts/scaffold.mjs14.3 KB
  • scripts/scaffold.test.mjs33.7 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

Directions lab

A directions lab is how design explorations are made in this repo: one page, one feature, Today plus two or three directions, every surface the feature appears on, and the same controls every time, so a shared link reads the same to everyone. The artifact directions lab (ui/src/artifact-directions) is the precedent and stays the frozen reference; this skill generates new labs in the same shape without redrawing the plumbing by hand.

What you are making

  • The page. ui/<slug>-directions.html plus ui/src/<slug>-directions/, a second Vite entry with no backend. All state lives in the URL (?d=&s=&theme=&chrome=&anim=, plus proposal=1 for the proposal palette). A registry module is the single source for the direction ids, digit keys, labels, surfaces, landing view and story id; the toolbar, keyboard, overview board and capture script read it at runtime, and add-direction keeps the story's per-direction export in step, so a direction is one registry entry plus one directory.
  • The toolbar. Row 1 is the directions row: the numbered directions then 0.Today last, as a segmented control, with Theme and Animation right-aligned. Row 2 is the surfaces row: Overview plus one tab per surface. Row 2 is written only when the lab is scaffolded with more than one surface (a surface added later to a one-surface lab needs row 2 by hand, references/lab-anatomy.md section 8); with one surface the keyboard legend joins row 1. Nothing else goes in the header.
  • Today. Always present, always 0.Today, always the shipped components mounted on the lab's fixtures through small adapters and a fetch stub. It is the control every direction is judged against, so it is never a redraw.
  • The directions. Two or three, numbered, each a self-contained kit directory with its own scoped tokens.css. Every direction carries the V1 MVP motion block verbatim and a test that proves it, so hover feels the same across labs. Read references/motion-spec.md before touching any of it.
  • The directory entry. One story file under ui/storybook/stories/design-proposals/ with a stable id, catalogued as a proposal. The design-proposals Storybook is becoming the canonical directory of the design system; a lab exists there from its first commit.

Hard rules, because the repo's gates enforce them and reviewers expect them: no code comments in anything you commit, no file of 600 lines or more in a lab (check refuses at 600), no package.json script, no lockfile change, no screenshots or generated catalog files in the repo.

Before you start

Run from the repo root on a branch of your own (claude/<slug>-directions, from origin/master). Check that ui/node_modules/.bin/vite exists; if not, pnpm install --frozen-lockfile. Then run the generator's own tests:

node --test .agents/skills/directions-lab/scripts/scaffold.test.mjs

Red here usually means a template or the motion asset has drifted from the precedent (ui/src/artifact-directions/directions/d5-v1-mvp/tokens.css); two cases also read the real feature map and the catalog script, so a changed feature-map row or catalog message shows up here too. Fix the generator before scaffolding anything; a lab built on a stale template fails later in ways that look like your drawing.

Read the brief, then ground the subject

Extract four things from what Tonio wrote: the subject (its slug and title), the places it appears (one surface per place), a stated count or names of the directions, and any flag or component names. Then look at the code before you ask anything:

rg -l "<Subject>" ui/src/components ui/src/pages
rg -n "<subject word>" maps/feature-map/*.md

The first grep gives the component files, the flag hook (use<Feature>Enabled), and, by following useQuery/queryFn into ui/src/api/*, the /api/ routes Today must answer. The second gives the capability ids the story cites. This grounding is what makes the surfaces question specific instead of generic. references/questions-and-defaults.md has the full extraction and derivation tables.

Ask, in one call

Ask at most two questions, in a single AskUserQuestion call, and skip each one the brief already answers:

  1. How many directions? Options 2 and 3. Say in the question that three unnamed directions scaffold as 1.Refine (tokens and spacing, same structure), 2.Rework (new components, same layout) and 3.Rethink (new layout), two as 1.Refine and 2.Rethink, and are renamed later. Skip when the brief states a count or names the directions.
  2. Which surfaces? Multi-select from the usage sites the grep found, plus "only one place". Two or more selections produce the surfaces row. Skip when the brief names the places.

Never ask about theme, animation, Today, ports, the slug or the landing view; those are fixed by the skill. When no question can be asked (a headless run), write this before doing anything else, then proceed: "Defaulting to three directions and one surface (<surface>) because I cannot ask; change later with scaffold.mjs add-direction."

State what you derived, then scaffold

Before running the generator, state every derived value in your reply: slug and title, each surface as id:Label:width@nav with the line the width comes from, the direction count and names, the group, the capabilities with their feature-map rows (or [] and the exception sentence), the flag hook and the /api/ paths Today will need. A wrong slug or capability is cheap to catch here and expensive after files exist. Then:

node .agents/skills/directions-lab/scripts/scaffold.mjs new \
  --slug composer --title "Composer" \
  --surfaces thread:Task-thread:960@tasks,panel:Right-panel:434@tasks \
  --directions 3 --dry-run

Read the plan (paths, ports, cells, story), drop --dry-run, and run it. new renders everything in memory, refuses existing paths, writes the lab, the html entry, the Vite config, the story file, two .claude/launch.json entries and one .gitignore line, then verifies: the Storybook catalog check, the lab's own Vitest files, and a Vite build. On any failure it deletes what it wrote and restores the two shared files, so a half-written lab never breaks pnpm test or tsc -b for the whole repo (ui/vitest.config.ts has no include filter and ui/tsconfig.json includes all of src). Quote the --json output in your reply.

--surfaces takes id:Label:width@nav per place, where nav is the sidebar item the shell highlights (tasks, artifacts or other) and the width is the product's own constant for that place (see references/questions-and-defaults.md). Flags you will use: --names a,b,c for stated names, --group Components|Pages|Layouts|Patterns (Components when the grep hits ui/src/components), --capabilities area/key,... (validated against maps/feature-map; omit for [] plus an exception sentence), --company name:PREFIX (default acmehats:ACM), --landing auto|all|today|<id>, --ports dev,preview (the generator picks free ones), --keep-on-failure to inspect a failed scaffold.

Look at it

Start the dev entry the generator added, preview_start {name: "<slug>-directions-dev"}, and open three URLs: / (the landing), /?d=today&s=<first surface> and /?d=<first direction id>&s=<first surface> (d1-refine when the directions are unnamed). Confirm document.documentElement.dataset.labAnim === "1", hover a motion specimen and watch the front rise and the two pages turn, press a, hover again and see only the fill change. Read the console for [<slug>-directions] unhandled lines: each one is a route Today will need. The overview board and the capture script never show the movement (iframes take no pointer; stills ask for reduced motion; --hover records one hovered frame, not the transition), so the transition is verified only this way.

Commit the scaffold, then draw

Commit the untouched scaffold first as feat(ui): scaffold the <title> directions lab. Reviewers then see the redraw as its own diff, not buried under plumbing. Draw in this order; references/drawing-phases.md has the done-when for each:

  1. Frames. Replace each data-lab-stub="frame-<surface>" region with the product chrome around that place: copy the product's class strings, freeze the registry width, reuse presentational primitives, let nothing scroll internally. The precedent frames show how (ThreadFrame, PanelFrame, GalleryFrame, AppShell).
  2. Fixtures and Today. Retype the per-surface data in kit.ts to the props each place receives, fill fixtures.ts, mount the shipped component in directions/today/<Pascal>Body.tsx (PascalCase of the surface id, so ThreadBody.tsx for thread) through adapters.ts, and register exactly the routes it fetches inside registerFeatureRoutes() in api-routes.ts. Today is done when it matches the product on the same data and its test passes with the real component.
  3. Directions. One at a time: replace the motion specimen with the drawing, keep the hook names (data-front on every treatment branch, data-rotate and data-spread with the inline base angle), put every raw value in that direction's tokens.css (light base, .dark override), and leave the motion block alone. Run scaffold.mjs check --slug <slug> after each phase.

Phase 2 comes before 3 because the slot props change shape in phase 2 and every kit follows the type.

Capture

node ui/src/<slug>-directions/shot.cjs --port <dev> --d all --out <scratch dir>

Captures are rest states at 1440×900, DPR 2, both themes; attach the PNGs to the PR, never to the repo. --hover adds a rest/hover pair per direction from a second browser context that allows motion; the browser pane with the Animation toggle on is still the only place to judge the motion itself.

Hand off

node .agents/skills/directions-lab/scripts/scaffold.mjs check --slug <slug> --strict --run

--strict refuses any remaining data-lab-stub marker; --run runs the lab's tests, the catalog check, the token gates, a Vite build of the lab and cd ui && pnpm typecheck, stopping at the first failure, and prints a ## Verification block whose Not run: lines name what stays manual (pnpm build-storybook, the repo-wide typecheck); --json returns the same results as data, with those items under notRun. Open the PR with every section of .github/PULL_REQUEST_TEMPLATE.md filled, the linked-issue path B with three filled feature-request labels, the story id, the launch entries and the Vercel alias if you deployed. Offer the DESIGN.md directory row as text in the PR body; never apply it from a lab PR.

If the skill itself is in your diff, force-add it: /.agents/ is git-ignored and the repo's tracked skills were added with git add -f.

Storybook and the design directory

new writes ui/storybook/stories/design-proposals/<slug>-directions.stories.tsx with meta id design-<slug>-directions, title Design proposals/<Group>/<Title> directions/Compare, a literal parameters.paperclip block (status: "proposed", home: "design-proposals", implementation: "prototype", boundary: "fixtures", capabilities, exception, notes) and stories Compare, Today, one per direction, and TodayProductionPalette (the decorator themes the whole iframe with the proposal palette; this one opts out so Today can be seen as shipped). The page itself renders the production palette by default; ?proposal=1 wraps it in the proposal theme for a side-by-side with the entry. The catalog script validates all of it at Storybook start, in cd ui && pnpm typecheck and in CI.

The lifecycle a direction moves through, and what to edit by hand at each step, is in references/lifecycle.md: proposed (what new writes), adopted (product code behind an experimental setting, with a feature-home story), current (flag removed), historical (retired with a replacement, moved out of the proposals folder keeping its id). Today the catalog forces every entry in the proposals folder to stay proposed; the governance change that would let the directory carry current entries is written up as paste-ready diffs in references/canonical-directory.md. Offer it once, as its own PR, only when Tonio says yes.

Later asks

  • Add a direction: scaffold.mjs add-direction --slug <slug> --name <Name> (next digit, registry entry, kit directory with the motion block and a specimen, the story's D<N> export, then check, rolling back on failure). The toolbar legend follows the registry at runtime. The generator refuses a fourth without --force-count, which also records allowMore in the registry; the story description's "1–N" sentence is the one thing to update by hand. Once phase 2 has retyped the slot props in kit.ts, add-direction refuses and prints the by-hand steps instead, because a generated kit would not fit the new props.
  • List labs: scaffold.mjs list.
  • Rename a direction, add a surface, or move a direction through the lifecycle: by hand, following references/lab-anatomy.md section 5 and 8 and references/lifecycle.md.
  • Publish: build with <SLUG>_DIRECTIONS_OUT_DIR=<dir>/paperclip-<slug>-directions, remove sw.js from the output, vercel deploy <that dir> --prod --yes from its parent; the basename names the project and the alias is the public URL. references/today-fixtures-and-build.md section 11 has the details.

Do not

  • Run two full ui Vitest suites at once; run the lab's files alone.
  • Land on d=all&s=board from a dev server with more than eight cells; use the static launch entry (<slug>-directions) for the full board.
  • Copy the artifact lab's html:not(.dark) token idiom; new labs put light values in the base block and dark ones under .dark [data-direction=…].
  • Edit the motion block in a lab. A different rise or fan is Tonio's decision.
  • Add comments, package.json scripts, lockfile changes, PAP ids or localhost URLs to anything that goes in the PR.

Maintaining the skill

The generator's templates were derived from the precedent at the commit recorded in assets/PRECEDENT. scripts/scaffold.test.mjs pins the generated structure and asserts the motion asset still equals the precedent's block after substitution; when the precedent changes, re-derive the template and bump the pin. references/generator.md explains the template conventions and the context object.

References

FileRead it when
references/questions-and-defaults.mdBefore asking; derivation tables, eval prompts as flag lines
references/lab-anatomy.mdDrawing frames or changing the toolbar, state or board
references/today-fixtures-and-build.mdMounting Today, the fetch stub, build, capture, deploy
references/motion-spec.mdAny hover motion; the per-direction checklist
references/drawing-phases.mdAfter the scaffold, phase by phase
references/design-proposals-storybook.mdThe story file, the catalog gate, the theme
references/lifecycle.mdAdopting, shipping or retiring a direction
references/canonical-directory.mdOnly when Tonio approves the governance PR
references/repo-gates.mdBefore the PR
references/generator.mdChanging the generator

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

add-product-e2e-eval

無料概要あり

Paperclipで実際のブラウザからサーバー、データベースまで通すE2E評価を追加・拡張し、操作結果や証拠を既存のレポートで確認できるようにするスキル。

  • 一連の利用操作の評価を追加したいとき
  • テスト用データと判定条件の更新
  • 評価レポートに画像や成果物を載せたいとき
paperclipai/paperclip10.9万2026年10月29日 更新

add-runner-eval

無料概要あり

Paperclip Runnerの動作評価に、判定条件や実行対象、レポート用データを追加・拡張し、根拠と実行履歴を残して検証するスキル。

  • Runnerの動作評価を追加したいとき
  • 正常・不正な証拠で判定を検証
  • 実行対象リストと継続評価の更新
paperclipai/paperclip10.9万2026年10月29日 更新

agent-browser

無料概要あり

実際のブラウザでWebページやアプリを操作し、表示や動作を検証します。画面の撮影、簡単なフォーム入力、エラーや通信の記録を通じて、不具合の再現と確認を支援します。

  • UI変更後の画面を確認したいとき
  • JavaScript描画の内容を読みたいとき
  • 画面の不具合とエラーを再現したいとき
paperclipai/paperclip10.9万2026年10月29日 更新

agentmail

無料概要あり

Paperclipで割り当てられたAgentMailの受信箱を使い、メールに紐づく依頼の確認、新規送信、返信、配信状況の確認までを扱うスキルです。

  • 担当タスクに紐づくメールを確認したいとき
  • 割り当てられた受信箱から新規送信
  • 会話内の特定メッセージへの返信
paperclipai/paperclip10.9万2026年10月29日 更新

check-pr

無料概要あり

GitHub・GitLab・Perforceの変更を対象に、レビュー指摘、CIの失敗、説明文の不足を確認し、対応事項の整理から依頼に応じた修正まで支援するスキル。

  • 変更を提出する前に点検したいとき
  • 失敗したチェックと修正事項の確認
  • 人とボットのレビュー指摘の整理
paperclipai/paperclip10.9万2026年10月29日 更新

company-creator

無料概要あり

目的に合うAIエージェントの役割や指揮系統、仕事の受け渡しを整理し、新規の構想や既存リポジトリから仕様に沿った会社・チームのパッケージを作るスキル。

  • 構想からエージェント会社を作りたいとき
  • リポジトリをチーム構成にまとめたいとき
  • 役割分担と仕事の受け渡しの設計
paperclipai/paperclip10.9万2026年10月29日 更新

paperclipai のスキルをすべて見る

このスキルの問題を報告する