Oil Frontend
SkillDev toolsTrigger only when the user explicitly requests oil-frontend, or actively selects it via the Skill picker. Typical expressions include $oil-frontend and "use oil-frontend". Must not auto-trigger on ordinary frontend, UI/UX, component, CSS, interaction, visual, animation, or refactoring requests; mere
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Oil Frontend skill
What this skill tells your AI
The instructions your AI receives, as published by oil-oil/oil-frontend in SKILL.md and read by ahel’s review.
先识别用户任务、业务对象和数据来源,再删除无效内容,建立正确的信息、状态、代码归属和共享实现。
始终遵守
- 从真实用户任务、业务对象和完成结果出发;可见内容只保留能够帮助识别、比较、判断、操作或理解结果的信息。
- 一个用户意图只执行一次,动作必须产生真实结果;数据、操作、忙碌和提交边界保持一致,失败时保留当前对象、位置和已输入内容。
- 常见任务沿用用户已有认知;资源浏览默认展示,编辑必须明确触发,表单只收集当前任务必需且归当前对象所有的数据。
- 图标、强调方式和固定尺寸都必须表达稳定含义;不使用通用 AI 装饰、无意义强调边或只适配当前实例的尺寸制造层级。
- 视觉调整先沿用项目已有的设计变量、组件和密度,再处理层级、间距、排版、表面与反馈;没有项目标准时才使用参考规则中的兜底值,不把兜底值扩张成新的设计系统。
- 同一业务数据和同一含义只保留一个权威来源;优先修复数据流、父布局和共享实现,不在页面使用位置反复打补丁。
- 按业务归属组织组件、Hook、函数、类型、样式和测试;单模块代码就近放置,只有稳定跨模块复用时才进入共享层。
- 遇到复杂逻辑,先检查项目已有能力和成熟库;已有依赖不合适时,可以引入维护良好、与项目兼容的新库,不手写已有成熟方案覆盖的核心能力。简单逻辑直接实现,不为少量代码引入新依赖。
- 项目历史不是正确性的证明;错误模式应被替换,相关使用位置完成迁移后删除旧代码、fallback、legacy 逻辑和失效状态。
参考文件读取顺序
- 触发后先只阅读本文件,明确任务、对象和改动范围,不预先读取参考文件。
- 如果任务不涉及用户可见界面、前端状态与数据流、组件实现或前端代码组织,停止使用本 Skill。
- 先按用户要改变的结果选择一个主要规则,不按文件类型或代码中出现的 CSS、动画关键词选规则。
- 简单局部改动只读取一个主要规则;任务确实同时包含第二个独立问题时才补充一个。只有跨页面综合评审可以读取三个,不得更多。
- 不因关键词出现、文件内链接或“保险起见”继续读取规则。视觉症状由数据、状态或父布局造成时,读取真正负责根因的规则,不额外加载视觉规则。
| 当前任务 | 主要规则 | 仅在这些情况补充 |
|---|---|---|
| “看起来不对”、视觉精修、层级、间距、排版、颜色、圆角、边框、阴影或图标 | 视觉工程 | 需要修改共享 Token、组件默认样式或变体时读 组件与代码组织;改变分栏、滚动或响应式结构时改读 视口与弹窗 为主要规则 |
| 动画、过渡、微交互、展开收起、拖拽反馈、滚动动效或卡顿 | 动效与性能 | 动效承担动作反馈或视觉层级时读 视觉工程;根因是异步状态时改读 状态与加载 为主要规则 |
| 模块边界、组件、Hook、函数、类型、样式归属、共享样式、CSS 组织或共享实现 | 组件与代码组织 | 需要新增检查时读 自动化 |
| 新增或改变文案、动作含义、图标、点击反馈或视觉强调 | 信息与动作 | 涉及对象身份、图片或选择器时读 资源识别 |
数据、状态和布局继续按结果选择:
| 当前任务 | 主要规则 | 仅在这些情况补充 |
|---|---|---|
| 列表、卡片、详情、表格或批量操作 | 集合与详情 | 涉及资源身份时读 资源识别;涉及编辑时读 交互与编辑 |
| 表单、选择、编辑或多步工作流 | 交互与编辑 | 涉及保存范围和流程连续性时读 数据与操作范围 |
| 查询结果、分页、候选集合、保存范围、批量范围或请求结果归属 | 数据与操作范围 | 同时改变 loading、refreshing、empty、error 或 processing 呈现时读 状态与加载 |
| loading、refreshing、empty、filtered-empty、error、queued、processing 或骨架 | 状态与加载 | 同时涉及查询快照、操作范围或保存结果归属时读 数据与操作范围 |
| 改变页面尺寸、分栏、滚动、弹窗结构或响应式行为 | 视口与弹窗 | 涉及下拉、菜单、提示等依附触发器的浮层时读 弹层 |
以下情况不触发额外读取:
- 代码中存在 Tailwind、CSS、
transition或动画库,不代表任务是视觉或动效任务。 - 改变颜色、间距、边框、阴影、排版等可见属性时,以视觉工程为主要规则;只有任务同时要求调整样式归属、共享方式或模块边界时才补充组件与代码组织规则。
- 只修复颜色变量名、类名、类型或导入错误,且不改变视觉结果时,不读取视觉工程规则。
- 只为既有动效改业务状态、事件绑定或数据来源,且不改变运动方式和性能时,不读取动效规则。
- 只移动现有控件,且不改变文案、动作含义或反馈时,不读取信息与动作规则。
- 只调整普通父子容器归属,且不改变尺寸、滚动、弹窗或响应式行为时,不读取视口与弹窗规则。
- 参考文件中的链接只说明相关规则的位置,不表示必须继续读取。
术语速查
本文件和参考规则中的核心词汇,按这里的定义理解:
- 资源身份:让用户认出"这是哪个对象"的最小信息组合——图片 + 名称 + 一个区分字段。例:成员列表显示"头像 + 姓名 + 部门",而不是"uuid + 类型标签"。
- 伪操作:看似可用、实际不产生真实结果的控件。例:点"保存"只改了本地 state、刷新即丢失;删除按钮永久 disabled 占位。
- 单个组件的视觉补丁:在页面使用共享组件的位置,只给这一个组件补样式。例:
<Dialog className="h-[640px]">、!important覆盖、页面专属选择器改组件内部。正确做法是修共享组件本身,或新增按用途命名的组件变体。 - 按用途命名的组件变体(variant):用“为什么不同”命名。例:
variant="destructive"、size="compact"合格;variant="blue"、variant="userListPage"不合格。 - 主导动作:当前页面、弹窗或操作区域中完成主要任务的那一个操作。同一区域最多一个高强调按钮。
- 提交边界:一次修改何时真正生效——即时生效、自动保存、显式统一提交,或仅临时预览。
- 忙碌范围:请求进行中需要防止重复操作的最小区域。单项请求只锁定该项,不用全页遮罩。
- 已提交查询快照:由同一次响应共同确定的查询条件、列表、结果总数和分页信息。新查询完成前,旧快照仍属于旧条件。
- 同类批量任务:对一批同类对象重复填写相同字段的任务,如批量排期、批量改价。
- 可编辑工作表:为同类批量任务让多行持续处于编辑态的表格。与之相对的是资源列表:默认展示,编辑必须明确触发。
决策顺序
改动前依次回答。
任务与对象:
- 用户当前要完成什么任务,什么结果表示完成?
- 页面管理哪个核心对象,字段分别归谁所有?
- 当前是浏览、比较、选择还是编辑,是否沿用用户熟悉的结构和术语?
数据与范围:
- 数据来自完整集合、当前可见集合还是搜索结果?
- 操作、忙碌状态和提交边界分别影响什么范围;远程查询条件与当前列表是否已经属于同一次已提交结果?
- 用户靠哪些信息区分相邻对象?
- 能否删除文字、步骤、确认、重复输入或系统已经知道的字段?
- 哪些信息属于集合,哪些只属于详情?
结构与状态:
- 当前页面、弹窗或操作区域的主导动作是什么?
- 首屏、滚动容器和弹层边界分别由谁负责?
- loading、empty、filtered-empty、queued、processing、error、ready 如何互斥?
视觉与动效,仅在任务要求改变时回答:
- 当前项目用哪些 Token、组件和相邻页面定义层级、密度与动效语言?真正不一致的是哪个可见属性?
- 动效是在反馈状态、解释空间关系还是装饰;能否只使用
transform、opacity或已有组件能力完成?
落点:
- 是否已有正确归属的模块、组件、Hook、函数、类型、统一设计变量或样式,最终应修改哪个数据源、父布局或共享实现?
无法明确回答时,先停止添加界面元素:向用户提出最关键的 1–2 个问题;无法提问时按最小可验证范围实施,并在输出中声明所做的假设。
执行流程
1. 还原事实
- 搜索项目已有的模块、组件、Hook、函数、类型、统一设计变量和样式,确认相同含义是否已经存在正确实现。
- 找出所有使用共享组件的页面和组件,以及相同数据的其他入口。
- 评审请求只给证据与建议;用户要求修改时才实施。
2. 明确范围
- 明确核心对象、字段所有者、数据集合、操作范围、忙碌范围和提交边界。
- 区分页面结构问题、组件默认行为、页面使用方式错误和数据流错误。
- 视觉问题只记录能够指出具体元素、属性、现有依据和代码落点的差异;不能确定正确值时先使用项目既有 Token 或相邻同类组件,不凭审美发明精确数值。
3. 先删除
- 删除不影响判断的内容、重复状态、重复入口、重复确认和只针对单个组件的视觉补丁。
- 删除没有真实状态变化或不能真正保存数据的伪操作。
- 删除已经被新实现替代的旧组件、旧函数、旧类型、旧状态、fallback、legacy 逻辑、旧样式和失效引用。
4. 选择结构
- 先检查项目中同类任务页面和共享容器组件的既定用法;只有既有模式符合本规范时才沿用,否则按真实任务重新选择结构。
- 根据浏览、比较、选择、批量配置或深度编辑任务,选择列表、表格、工作表、选择器、弹窗或完整工作区。
- 让列表负责识别和比较,让详情负责完整内容,让编辑器负责修改。
- 视觉调整按“信息层级 → 空间与对齐 → 排版 → 表面 → 控件状态 → 动效”的顺序处理;前一层已经解决问题时停止,不继续叠加装饰。
5. 修复真正出错的位置
- 优先修复数据范围、操作范围、父布局、共享组件默认行为和含义稳定的组件变体。
- 重复出现的资源身份、菜单、弹层、加载、弹窗和操作栏使用共享组件。
- 只有职责、输入输出和行为稳定重复时才抽象;不要因为局部结构相似就复制组件,也不要用大量页面开关制造万能组件。
- 既有共享组件、函数、样式或数据流本身错误时,在授权范围内直接修复或替换真正出错的共享实现,并处理所有受影响的使用位置;不要为了兼容历史继续新增错误实现。
- 无法在当前范围内全部改完时,停止扩大旧模式,明确报告还剩哪些旧使用位置以及这次改到哪里,不得声称已经统一。
- 修复可重复检测的问题时,判断项目是否确实需要新增 lint、测试或检查规则;需要时按路由表补充读取 自动化,并计入补充规则数量。小改动不为此前置搭建自动化。
- 不修改无关区域。
6. 验证
- 运行项目现有且与改动相关的类型检查、Lint、测试或构建。
- 简单局部改动只检查修改位置、直接行为和最近的使用位置,不展开完整状态矩阵。
- 改动涉及共享组件、数据范围、异步状态、表单流程、滚动、响应式或多个页面时,再检查受影响的状态、数据范围、代表性视口和全部使用位置。
- 视觉改动检查真实内容、主要状态和受影响视口;动效改动只按类型检查适用的中断、重复触发、退出、卸载或滚动行为。只有复杂动效或真实卡顿才使用性能录制,不把每个过渡升级成性能专项。
- 只报告已验证项、未验证项和阻断原因。
独立自检
仅当前端评审涉及多个页面、所有使用共享组件的位置、多种视口或状态,或大范围规则调整时,才派发无历史上下文的独立自检。单页面、单组件、单截图和局部差异由主 Agent 直接检查。
独立自检只接收检查对象、范围和 oil-frontend,不接收对话历史、既有结论、问题猜测、预期答案或修复方案。
输出要求
先给结论,再给证据。只输出:
- 具体问题;
- 应删除的内容;
- 正确的信息、动作和空间结构;
- 应修改的模块、共享组件或数据流;
- 已验证和未验证项。
禁止使用"提升体验""更现代""更直观"等不能指导实现的描述。
不主动扩展成无障碍专项审计。实现 UI 时继续使用原生交互元素,不破坏项目已有的焦点、键盘、标签和 ARIA 行为;只有用户明确要求或当前改动直接造成任务不可完成时才展开检查。
Signals
- GitHub stars
- 122
- Forks
- 5
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
oil-frontend- Source
- github.com/oil-oil/oil-frontend