为Paperclip新增或扩展贯穿真实浏览器、服务器、数据库和runner的端到端评估,整理测试数据、判定条件与证据,并在现有报告中查看操作结果。
- 新增完整用户操作流程的评估
- 更新测试数据与判定条件
- 在评估报告中加入截图和产物
为某项功能创建设计方案实验页,将线上界面与两到三种方案并排比较,提供主题和动画切换,并登记到 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.
实测评分 未实测
查看安装方法此技能按功能创建设计方案实验页,把线上实际使用的界面与两到三种设计方案并排展示。生成的页面包含各展示位置的选项卡、主题和动画切换控件,以及方案总览,并会登记到 Storybook 的设计提案目录。线上界面使用实际组件呈现,作为比较基准。生成后,技能会逐步完善页面结构、数据和各设计方案,并进行测试、构建等检查。截取的图片可作为评审附件,不会加入仓库。
适合在相同条件下比较已实现的界面与新方案,或分享涉及多个页面的设计讨论。团队希望提供一个评审入口,让成员查看不同方案的外观和动效时,也可以使用。
原始说明会参考目标仓库的界面结构和功能地图,并使用 Vite、Storybook 与测试环境。生成后进行检查需要目标项目的开发环境。
本介绍由 AI(OpenAI Codex)根据公开的 SKILL.md 撰写。准确的规格请查看下方原文。
AI 根据 SKILL.md 的内容检查了需要注意的操作和使用前提。评分只依据实际运行的结果(实测对比)。
不计入评分。 由 AI(OpenAI Codex)于 2026年10月27日 评估。仅供参考,安装前请同时查看原文。
安装前可以查看交给 AI 代理的指令内容。
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.
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.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.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.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.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.
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.
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 at most two questions, in a single AskUserQuestion call, and skip each
one the brief already answers:
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.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."
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.
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 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:
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).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.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.
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.
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.
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.
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.scaffold.mjs list.references/lab-anatomy.md section 5 and 8
and references/lifecycle.md.<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.ui Vitest suites at once; run the lab's files alone.d=all&s=board from a dev server with more than eight cells; use
the static launch entry (<slug>-directions) for the full board.html:not(.dark) token idiom; new labs put light
values in the base block and dark ones under .dark [data-direction=…].package.json scripts, lockfile changes, PAP ids or localhost
URLs to anything that goes in the PR.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.
| File | Read it when |
|---|---|
references/questions-and-defaults.md | Before asking; derivation tables, eval prompts as flag lines |
references/lab-anatomy.md | Drawing frames or changing the toolbar, state or board |
references/today-fixtures-and-build.md | Mounting Today, the fetch stub, build, capture, deploy |
references/motion-spec.md | Any hover motion; the per-direction checklist |
references/drawing-phases.md | After the scaffold, phase by phase |
references/design-proposals-storybook.md | The story file, the catalog gate, the theme |
references/lifecycle.md | Adopting, shipping or retiring a direction |
references/canonical-directory.md | Only when Tonio approves the governance PR |
references/repo-gates.md | Before the PR |
references/generator.md | Changing the generator |
还没有评价。欢迎分享你的使用感受。
无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。
还没有评论。来写第一条吧。
为Paperclip新增或扩展贯穿真实浏览器、服务器、数据库和runner的端到端评估,整理测试数据、判定条件与证据,并在现有报告中查看操作结果。
为Paperclip Runner添加或扩展行为评估,定义判定条件、执行目标和报告验证数据,利用正常及异常证据验证结果,并保留执行记录与费用。
通过实际浏览器操作网页和应用,检查界面显示与运行情况。结合截图、简单表单填写、错误及网络请求记录,帮助复现问题并确认操作结果。
通过 Paperclip 分配的 AgentMail 收件箱,查看任务关联邮件、发送新邮件或回复,并核查投递结果;重试时保留相同标识,避免重复发送。
检查GitHub、GitLab和Perforce变更中的评审意见、自动检查失败及说明缺漏,整理待办事项,并按请求协助修改和解决已处理的讨论。
根据构想或现有代码仓库,梳理AI智能体的职责、汇报关系与工作交接,生成符合规范的公司或团队文件包,供组织协作和导入Paperclip使用。