Token导航 LogoToken导航

Agent Skill · 前端设计

design-system(设计系统)

用于辅助界面设计、视觉规范、排版、配色、布局和交互体验优化。它适合让 Agent 根据产品场景整理页面结构、生成 UI 方案、检查视觉一致性或改进组件层级。使用时需要结合现有品牌、设计系统和用户任务,不应只堆装饰元素;涉及真实页面改动时,应通过截图或浏览器预览检查文本溢出、对齐和响应式表现。

design-system 是前端设计类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为只读;许可证信息还不明确,第三方扫描已通过,按安装量在前端设计类的 10,216 个 Skill 里排第 2,741。

总安装 1,948周安装 82GitHub Stars 43,663下载 682核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:design-system(设计系统)
来源仓库:https://github.com/getsentry/sentry
仓库路径:skills/design-system
安装命令:
npx skills add https://github.com/getsentry/sentry --skill design-system
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/getsentry/sentry --skill design-system

这个 Skill 是做什么的

前端设计类 Skill 关注页面结构、视觉规范和组件写法,输出通常是可运行的界面代码。

design-system 辅助界面设计、视觉规范和交互体验优化,适合生成 UI 方案或检查一致性。可用于整理页面结构、改进组件层级或优化排版配色。需结合品牌和设计系统使用,不应堆砌装饰元素。涉及真实页面改动时应通过截图或浏览器预览检查文本溢出和对齐。

适用宿主包括 Codex、Claude、Cursor、Gemini CLI,接入前应确认版本、权限和运行环境要求。

来源仓库内路径:skills/design-system

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/getsentry/sentry --skill design-system;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它标注为只读,先用只读任务试一次,确认行为符合预期再扩大使用范围。

常见问题

6 条

design-system 怎么安装?

在终端执行 npx skills add https://github.com/getsentry/sentry --skill design-system。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

design-system 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

design-system 需要什么权限?

权限级别是只读。该 Skill 主要提供规则、说明或参考内容,本身偏只读;真正读写文件、联网或执行命令仍取决于宿主 Agent 的任务。

design-system 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

design-system 用的人多吗?

公开数据是累计安装 1,948 次,近一周安装 82 次,下载 682 次,GitHub 43,663 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

design-system 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。
  • 来源仓库有 43,663 星,维护活跃度相对可查。
  • 标注为只读权限,试用阶段不容易误改本地文件。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理前端设计类任务、又不想每次都手写提示词的人。
  • 只想先试试效果、不希望它改动本地文件的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

前端设计类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
frontend-design

前端设计 · Codex、Claude

8,823,360126,072只读MIT通过
vercel-composition-patterns

Vercel 组合模式 · Codex、Claude

3,858,81625,893需要联网MIT通过
vercel-react-native-skills

Vercel React native skills 前端 · Codex、Claude

2,468,66425,878只读MIT通过
adapt

adapt 搜索 · Codex、Claude

2,027,04023,125操作浏览器未明确通过
bolder

bolder 分析 · Codex、Claude

2,004,28823,130只读未明确通过
design-system

设计系统 · 本页

1,94843,663只读未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Layout and Text Primitives at Sentry

Core Principle

ALWAYS use core components from @sentry/scraps instead of creating styled components with Emotion.

Core components provide consistent styling, responsive design, and better maintainability across the codebase.

Component Implementation Reference

For the complete list of supported props and their types, refer to the implementation files:

  • Layout Components: /static/app/components/core/layout/

- container.tsx - Base container with all layout props - flex.tsx - Flex layout primitive - grid.tsx - Grid layout primitive - stack.tsx - Stack layout primitive (Flex with column direction by default)

  • Typography Components: /static/app/components/core/text/

- text.tsx - Text primitive - heading.tsx - Heading primitive

Layout Primitives

Important: Flex, Grid, and Stack all extend Container. This means every prop available on Container is also available on Flex, Grid, and Stack. When you use <Flex>, you get all Container props (position, padding, border, overflow, etc.) PLUS the flex-specific props. The same applies to Grid and Stack.

Container

Base layout component that supports all common layout properties. Flex, Grid, and Stack extend Container, inheriting all of its props.

Key Props (see container.tsx for complete list):

  • position: "static" | "relative" | "absolute" | "fixed" | "sticky"
  • padding, paddingTop, paddingBottom, paddingLeft, paddingRight: SpaceSize tokens
  • margin, marginTop, etc.: SpaceSize tokens (deprecated, prefer gap)
  • width, height, minWidth, maxWidth, minHeight, maxHeight
  • border, borderTop, borderBottom, borderLeft, borderRight: BorderVariant tokens
  • radius: RadiusSize tokens
  • overflow, overflowX, overflowY: "visible" | "hidden" | "scroll" | "auto"
  • background: SurfaceVariant ("primary" | "secondary" | "tertiary")
  • display: Various display types
  • Flex item props: flex, flexGrow, flexShrink, flexBasis, alignSelf, order
  • Grid item props: area, row, column
import {Container} from '@sentry/scraps/layout';

// ❌ Don't create styled components
const Component = styled('div')`
  padding: ${p => p.theme.space.md};
  border: 1px solid ${p => p.theme.tokens.border.primary};
`;

// ✅ Use Container primitive
<Container padding="md" border="primary">
  Content
</Container>;

Flex

Use <Flex> for flex layouts. Extends Container, inheriting all Container props plus flex-specific props.

Flex-Specific Props (see flex.tsx for complete list):

  • direction: "row" | "row-reverse" | "column" | "column-reverse"
  • align: "start" | "end" | "center" | "baseline" | "stretch"
  • justify: "start" | "end" | "center" | "between" | "around" | "evenly" | "left" | "right"
  • gap: SpaceSize or "${SpaceSize} ${SpaceSize}" for row/column gap
  • wrap: "nowrap" | "wrap" | "wrap-reverse"
  • display: "flex" | "inline-flex" | "none"

Plus ALL Container props: position, padding, margin, width, height, border, radius, overflow, background, flex/grid item props, and more (see Container section above).

import {Flex} from '@sentry/scraps/layout';

// ❌ Don't create styled components
const Component = styled('div')`
  display: flex;
  flex-direction: column;
  position: relative;
`;

// ✅ Use Flex primitive with props
<Flex direction="column" position="relative" gap="md">
  <Child1 />
  <Child2 />
</Flex>;

Grid

Use <Grid> for grid layouts. Extends Container, inheriting all Container props plus grid-specific props.

Grid-Specific Props (see grid.tsx for complete list):

  • columns: Grid template columns (number or CSS value)
  • rows: Grid template rows
  • areas: Named grid areas
  • gap: SpaceSize or "${SpaceSize} ${SpaceSize}" for row/column gap
  • align: "start" | "end" | "center" | "baseline" | "stretch" (align-items)
  • alignContent: "start" | "end" | "center" | "between" | "around" | "evenly" | "stretch"
  • justify: "start" | "end" | "center" | "between" | "around" | "evenly" | "stretch" (justify-content)
  • justifyItems: "start" | "end" | "center" | "stretch"
  • flow: "row" | "column" | "row dense" | "column dense"
  • autoColumns, autoRows: Size of auto-generated tracks

Plus ALL Container props: position, padding, margin, width, height, border, radius, overflow, background, flex/grid item props, and more (see Container section above).

import {Grid} from '@sentry/scraps/layout';

// ❌ Don't create styled components
const Component = styled('div')`
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: ${p => p.theme.space.md};
`;

// ✅ Use Grid primitive
<Grid columns="repeat(3, 1fr)" gap="md">
  <Item1 />
  <Item2 />
  <Item3 />
</Grid>;

Stack

Use <Stack> for vertical layouts. Stack is essentially Flex with direction="column" by default. It also provides Stack.Separator for adding separators between items.

Props (see stack.tsx for complete list):

  • Same as Flex props (inherits all Flex and Container props)
  • direction defaults to "column" (but can be overridden)
  • Stack.Separator component for adding dividers between stack items
import {Stack} from '@sentry/scraps/layout';

// ❌ Don't create styled components for vertical layouts
const Component = styled('div')`
  display: flex;
  flex-direction: column;
  gap: ${p => p.theme.space.md};
`;

// ✅ Use Stack primitive (automatically column direction)
<Stack gap="md">
  <Item1 />
  <Item2 />
  <Item3 />
</Stack>;

// ✅ With separators between items
<Stack gap="md">
  <Item1 />
  <Stack.Separator />
  <Item2 />
  <Stack.Separator />
  <Item3 />
</Stack>;

// ✅ Stack supports all Flex and Container props
<Stack gap="md" padding="lg" position="relative" border="primary">
  <Item1 />
  <Item2 />
</Stack>;

Typography Primitives

Text

Use <Text> for all text content. Never use raw <p>, <span>, or <div> elements with text styling.

Key Props (see text.tsx for complete list):

  • as: "span" | "p" | "label" | "div" (semantic HTML element)
  • size: TextSize ("xs" | "sm" | "md" | "lg" | "xl" | "2xl")
  • variant: ContentVariant | "muted" (see Content Variant Tokens below)
  • align: "left" | "center" | "right" | "justify"
  • bold: boolean
  • italic: boolean
  • uppercase: boolean
  • monospace: boolean
  • tabular: boolean (fixed-width numbers)
  • ellipsis: boolean (truncate with ellipsis)
  • wrap: "nowrap" | "normal" | "pre" | "pre-line" | "pre-wrap"
  • textWrap: "wrap" | "nowrap" | "balance" | "pretty" | "stable"
  • wordBreak: "normal" | "break-all" | "keep-all" | "break-word"
  • density: "compressed" | "comfortable" (line-height)
  • underline: boolean | "dotted"
  • strikethrough: boolean
import {Text} from '@sentry/scraps/text';

// ❌ Don't create styled text components
const Label = styled('span')`
  color: ${p => p.theme.tokens.content.secondary};
  font-size: ${p => p.theme.font.size.sm};
`;

// ❌ Don't use raw elements
<p>This is a paragraph</p>
<span>Status: Active</span>

// ✅ Use Text primitive with semantic 'as' prop
<Text as="p" variant="muted" density="comfortable">
  This is a paragraph
</Text>
<Text as="span" bold uppercase>
  Status: Active
</Text>

Heading

Use <Heading> for all headings. Never use raw <h1>, <h2>, etc. elements.

Key Props (see heading.tsx for complete list):

  • as: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" (REQUIRED)
  • size: HeadingSize ("xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl")
  • variant: Same as Text
  • align: Same as Text
  • italic, monospace, tabular: Same as Text
  • ellipsis, wrap, textWrap, wordBreak: Same as Text
  • density: Same as Text
  • underline, strikethrough: Same as Text

Note: bold and uppercase are NOT available on Heading (headings are always bold).

import {Heading} from '@sentry/scraps/text';

// ❌ Don't style heading elements
const Title = styled('h2')`
  font-size: ${p => p.theme.font.size.md};
  font-weight: bold;
`;

// ❌ Don't use raw heading elements
<h2>My Title</h2>

// ✅ Use Heading primitive with semantic 'as' prop
<Heading as="h2">My Title</Heading>

// ✅ With custom size
<Heading as="h3" size="xl">Large H3</Heading>

Info Components

Important: Always prefer InfoTip and InfoText over using raw <Tooltip> components. These provide consistent, accessible patterns for contextual help.

InfoTip

Use <InfoTip> to add an info icon with tooltip next to labels or headings. It's keyboard accessible and provides a consistent pattern for supplementary help.

import {InfoTip} from '@sentry/scraps/info';
import {Flex} from '@sentry/scraps/layout';
import {Text} from '@sentry/scraps/text';

// ❌ Don't use Tooltip with arbitrary icons
<Flex gap="xs" align="center">
  <Text>Retention Period</Text>
  <Tooltip title="The number of days...">
    <IconInfo size="xs" />
  </Tooltip>
</Flex>

// ✅ Use InfoTip for contextual help icons
<Flex gap="xs" align="center">
  <Text>Retention Period</Text>
  <InfoTip title="The number of days event data is stored before being automatically deleted." />
</Flex>

Key Props:

  • title: Tooltip content (required)
  • size: "xs" | "sm" (default) | "md"

When to Use:

  • Add context to headings or section titles
  • Show supplementary information without inline text
  • Explain settings or configuration options

InfoText

Use <InfoText> for inline text with a tooltip. It renders text with a dotted underline that reveals a tooltip on hover/focus.

import {InfoText} from '@sentry/scraps/info';

// ❌ Don't wrap text with raw Tooltip
<Tooltip title="Time to First Byte measures the time...">
  <span style={{textDecoration: 'underline dotted'}}>TTFB</span>
</Tooltip>

// ✅ Use InfoText for inline explanations
<InfoText title="Time to First Byte measures the time from the request start until the first byte of the response is received.">
  TTFB
</InfoText>

Key Props:

  • title: Tooltip content (required)
  • Extends Text, so supports all Text props: size, variant, bold, etc.
// With Text styling props
<InfoText title="Small muted text" size="sm" variant="muted">
  Hint text
</InfoText>
<InfoText title="Bold text" bold>
  Important term
</InfoText>

When to Use:

  • Define technical terms or acronyms inline
  • Provide additional context without adding visual clutter
  • Create consistent, accessible inline help patterns

Creating Thin Abstractions

⚠️ CRITICAL: ALWAYS prompt the user for confirmation before creating abstractions over layout primitives (Container, Flex, Grid, Stack, Text, Heading) when the intent is to DRY (Don't Repeat Yourself) repeated props.

You can create thin abstractions over primitives with the purpose of improving the semantic structure by using meaningful names (e.g., TableCell vs generic Flex) and with the purpose of providing some default props. It is very important that you do this sparingly, and only when it is a net gain for readability. For example, if there are only two instances of the duplicated props, and they are placed next to each other, the price of the abstraction outweights the terseness.

Before creating an abstraction, you MUST:

  1. Ask the user for confirmation
  2. Explain what abstraction you plan to create
  3. Justify why the abstraction is worth the added complexity
  4. Wait for explicit approval before proceeding
import {Flex, type FlexProps} from '@sentry/scraps/layout';

// ❌ Don't repeat the same props everywhere
<Flex align="center" gap="xs" flex="1" padding="sm">Content 1</Flex>
<Flex align="center" gap="xs" flex="1" padding="sm">Content 2</Flex>
<Flex align="center" gap="xs" flex="1" padding="sm">Content 3</Flex>
<Flex align="center" gap="xs" flex="1" padding="sm">Content 4</Flex>

// ✅ Create a thin wrapper with default props (AFTER USER CONFIRMATION)
function TableCell(props: FlexProps) {
  return <Flex align="center" gap="md" {...props} />;
}

<TableCell>Content 1</TableCell>
<TableCell>Content 2</TableCell>
<TableCell align="start">Content 3</TableCell>{/* Can override defaults */}

Key points:

  • ALWAYS prompt for user confirmation BEFORE creating the abstraction
  • Extend the primitive's props type (extends FlexProps)
  • Set defaults on JSX component and spread {...props} to allow overrides
  • Don't use styled components - compose primitives instead

General Guidelines

1. Use Responsive Props

Most props support responsive syntax using breakpoint keys.

// ❌ Don't use styled media queries
const Component = styled('div')`
  display: flex;
  flex-direction: column;

  @media screen and (min-width: ${p => p.theme.breakpoints.md}) {
    flex-direction: row;
  }
`;

// ✅ Use responsive prop signature
<Flex direction={{xs: 'column', md: 'row'}}>

2. Prefer Gap/Padding Over Margin

Container supports margin props but they are deprecated. Use gap on parent containers instead.

// ❌ Don't use margin between children
const Child = styled('div')`
  margin-right: ${p => p.theme.space.lg};
`;

// ✅ Use gap on parent container
<Flex gap="lg">
  <Child1 />
  <Child2 />
</Flex>;

3. Split Layout from Typography

Don't couple layout and typography in a single styled component. Use separate primitives.

// ❌ Don't couple layout and typography
const Component = styled('div')`
  display: flex;
  flex-direction: column;
  color: ${p => p.theme.tokens.content.secondary};
  font-size: ${p => p.theme.font.size.lg};
`;

// ✅ Split into layout and typography primitives
<Flex direction="column">
  <Text variant="muted" size="lg">
    Content
  </Text>
</Flex>;

4. Check Implementation Files for All Props

The implementation files contain the complete, up-to-date list of supported props with TypeScript types. When in doubt:

  • Read /static/app/components/core/layout/container.tsx for base layout props
  • Read /static/app/components/core/layout/flex.tsx for Flex-specific props
  • Read /static/app/components/core/layout/grid.tsx for Grid-specific props
  • Read /static/app/components/core/layout/stack.tsx for Stack-specific props
  • Read /static/app/components/core/text/text.tsx for Text props
  • Read /static/app/components/core/text/heading.tsx for Heading props

Token Reference

Spacing Tokens (SpaceSize)

Use these for gap, padding:

  • "0", "2xs", "xs", "sm", "md", "lg", "xl", "2xl", "3xl"
  • Multiple values: "md lg" (vertical horizontal)
  • Responsive: {{xs: "sm", md: "lg"}}

Border Tokens (BorderVariant)

Use these for border prop:

  • "primary", "muted", "accent", "danger", "promotion", "success", "warning"

Radius Tokens (RadiusSize)

Use these for radius prop:

  • "0", "2xs", "xs", "sm", "md", "lg", "xl", "2xl", "full"

Text Size Tokens

  • TextSize: "xs" | "sm" | "md" | "lg" | "xl" | "2xl"
  • HeadingSize: "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl"

Surface Variant Tokens (SurfaceVariant)

Use these for background prop on layout components:

  • "primary", "secondary", "tertiary"

Content Variant Tokens (ContentVariant)

Use these for variant prop on Text and Heading:

  • ContentVariant: "primary" | "secondary" | "accent" | "danger" | "promotion" | "success" | "warning"
  • Plus "muted": Text and Heading also accept "muted" in addition to ContentVariant values

Quick Reference Checklist

Before creating a styled component, ask:

  • ✅ Can I use <Flex>, <Grid>, or <Stack> for layout?
  • ✅ Can I use <Stack> for vertical layouts with default column direction?
  • ✅ Can I use <Container> for borders/padding/positioning?
  • ✅ Can I use <Text> or <Heading> for typography?
  • ✅ Can I use <InfoTip> or <InfoText> instead of <Tooltip>?
  • ✅ Can I use responsive props instead of media queries?
  • ✅ Can I use gap instead of margins?
  • ✅ Does the primitive support the prop I need? (Check implementation files)

If you answered yes to any of these, use the primitive instead.

平台分布

Codex

36.78%
按下载量换算251

Claude

27.39%
按下载量换算187

Cursor

18.41%
按下载量换算126

Gemini CLI

9.48%
按下载量换算65

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

只读

该 Skill 主要提供规则、说明或参考内容,本身偏只读;真正读写文件、联网或执行命令仍取决于宿主 Agent 的任务。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。目前只有一个公开来源,建议同时核对源仓库。

继续浏览同类 Skills