bama
BAMA: Build Any Mac App. Agent skills to research, clone, design, build, optimize, and test native macOS apps with Swift and SwiftUI.
让 coding agent 像资深设计师一样做设计,交出能照着开工的稿子。
Translation pending
SkillsHTML · PythonGitHub @caocong1OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
A curated, tagged design-resource catalogue plus an agent skill suite that works like a senior designer - web, mobile and desktop apps, motion, icons, brand and graphic design. 设计资源目录 + 让 agent 像资深设计师一样工作的 skill 套件。
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A designer for coding agents (Claude Code, Codex…): three skills that take any design intent from brief to handoff, review a design or a build with a fresh eye, and build an existing design in your stack; plus a hand-curated, bilingual catalogue of 800+ design resources, an evidence layer of primary-source digests, and an eval harness. Skills are written in English; this README and the research syntheses are in Chinese.Read the full README ↗A designer for coding agents (Claude Code, Codex…): three skills that take any design intent from brief to handoff, review a design or a build with a fresh eye, and build an existing design in your stack; plus a hand-curated, bilingual catalogue of 800+ design resources, an evidence layer of primary-source digests, and an eval harness. Skills are written in English; this README and the research syntheses are in Chinese.
在线页面:https://caocong1.github.io/design-skill-lab/ (首页 · 资源目录 · 套件导览 · 十六种方向的实验页)
这个仓库做四件事:
design-studio、critique-design、implement-design。docs/data/catalog.json 为准)。逐条写明适合查什么、怎么直达、授权、档位、agent 能不能直接读到,中英双语,每条都有缩略图或排字卡。Claude Code 插件(推荐):
/plugin marketplace add caocong1/design-skill-lab
/plugin install design-skill-lab@design-skill-lab
Codex 或手动安装:把 skills/ 下的三个目录整套链进去。
git clone https://github.com/caocong1/design-skill-lab
cd design-skill-lab
mkdir -p ~/.claude/skills # Codex:~/.codex/skills
for d in skills/*/; do ln -sfn "$PWD/${d%/}" ~/.claude/skills/"$(basename "$d")"; done
python3 ~/.claude/skills/design-studio/scripts/feedback_status.py # 自检:反馈采集开着吗,为什么
最好整套装:critique-design 和 implement-design 会读 design-studio 的参考文件和脚本。单独装时,它们的 SKILL.md 也能独立使用。用符号链接安装还有一个好处:git pull 就是升级,反馈也能写回本仓库(见下文"使用反馈")。拷贝安装得到的是副本,升级要重装,反馈采集默认是关着的;宿主自带的安装器也可能是拷贝(2026-09 观察到 Codex 的 skill-installer 是整目录拷贝)。副本也能开采集:把环境变量 DESIGN_SKILL_LAB_INBOX 设成一个已存在的文件夹,条目就写到那里。任何安装方式装完都可以跑上面那条自检。
Windows 上的 Codex(2026-09-29 在 Windows 11、Python 3.14、Node 24 上验证):让 Codex 用它自带的 skill-installer 安装,agent 实际执行的是下面第一条;得到的是副本。
python "$env:USERPROFILE\.codex\skills\.system\skill-installer\scripts\install-skill-from-github.py" --repo caocong1/design-skill-lab --path skills/design-studio skills/critique-design skills/implement-design
python "$env:USERPROFILE\.codex\skills\design-studio\scripts\feedback_status.py" # 自检
Destination already exists 并中止,不会覆盖。先把旧的三个目录改名或删除再装;--ref 可以指定分支或标签。DESIGN_SKILL_LAB_INBOX 设成一个已存在的文件夹。capture.mjs 会打印一条 npx 命令。在 PowerShell 里给它字面路径:npx 的包装脚本会重新解析命令行,命令里的 $script: 变量它取不到。从 0.7.x 升级:原来的 10 个子 skill 已经并入 design-studio,iterate-design-lab 移到了 .claude/skills/。清理失效链接的命令和旧名字的去向见 CHANGELOG.md 0.8.0 的"弃用与迁移"。
装好以后直接说需求,不用点名 skill:
根据这份需求给设备运维后台出一套完整设计,先给三个方向让我选。
这是我们的官网 https://example.com ,找几个参考,告诉我首屏和导航可以怎么改。
我们的巡检 App 整体 UI 优化一下,现有页面在 src/pages/ 下。
给我们的 Flutter 巡检 App 设计设备列表页,手机和平板各一版,最后打一个交接包。
走查 src/views/dashboard 的界面,输出带证据和优先级的评审报告。
照 .design/handoff/tickets/ 的交接包,用 Vue 3 + Element Plus 把工单页实现出来,截图对照验收。
| skill | 版本 | 什么时候用 |
|---|---|---|
design-studio | 0.15.0(suite 版本) | 一切设计意图:完整设计;单个页面、组件、流程、动效、图标、Logo、海报;多套方案;找灵感;整体重设计;设计系统;交接包 |
critique-design | 0.3.5 | 评审、走查、打分、无障碍检查、按交接截图验收实现;也是 design-studio 在新上下文里调用的独立评审 |
implement-design | 0.3.4 | 已经有设计稿、交接包或样稿,要在具体技术栈里实现,并用截图证明还原度 |
模式(契约,名字不变):full、piece、options(可以叠加在任何模式上)、inspire、critique、redesign、handoff、implement。"整体 UI 优化""改版"按 redesign 处理,从产品的功能重新出发,而不是打磨细节。
投入档位按范围选,agent 会说明选了哪一档:
| 档位 | 范围 | 做什么 |
|---|---|---|
quick | 一个组件、图标、小改动、单张图 | 读 → 画 → 渲染 → 底线检查 → 交付 |
standard | 一个页面、流程、品牌物料、找灵感、交接 | quick 之外,看参考、定一小片系统(token)、独立评审、拔高一轮 |
deep | 完整设计、重设计、多个界面或多个目标平台 | 完整的 12 步循环,发散和评审用隔离的子 agent |
循环(deep 走全程):看宿主 → 真相文件(PRODUCT.md、brief、每个界面一份契约)→ 采集参考、出联系表 → 发散(找出品类的惯性 → 参照 → 带种子的随机抽取 → 每个方向一个隔离的子 agent → 方案板)→ 收敛(用户选)→ 系统(DESIGN.md + token)→ 按契约画 → 渲染与底线检查 → 在新上下文里独立评审 → 拔高 → 交付或交接 → 复盘。验证有上限:一轮批量截图、一批修复、至多一轮确认,剩下的如实交代。完整契约在 skills/design-studio/SKILL.md(200 行以内)。
迭代用语:bolder、quieter、distill、harden、clarify、typeset、recompose、colorize、streamline、delight。一个词对应一种改法,其余不动。比如"标题区 typeset 一下"。
维护本仓库用的 iterate-design-lab(0.3.0)在 .claude/skills/,只在本仓库里可用,不随插件安装。
skills/design-studio/references/platforms/(iOS 26–27 Liquid Glass、Android 16 / Material 3 Expressive、HarmonyOS 5/6、小程序、桌面、Web、嵌入宿主),样机套件在 skills/design-studio/assets/mockup-kit/。color_tools.py 算;截图和联系表用 capture.mjs;渲染后的页面用 lint.mjs 做确定性底线检查(见下文"脚本")。宿主项目里默认写到 .design/:
.design/
PRODUCT.md brief.md function-map.md decisions.md
surfaces/<surface>.md 每个界面一份契约(0.8.0 新增)
inspiration/<topic>/ 笔记、截图、联系表
directions/<round>/ 方案板 index.html 与方向卡
system/ DESIGN.md、tokens、preview.html
screens/ motion/ icons/ brand/ graphics/
handoff/<feature>/ 规格、handoff.json、截图、素材、验收报告
critique/<date>-<target>/ 评审报告与精选证据截图,入库(0.8.0 新增)
shots/ 批量截图,不入库
PRODUCT.md 也是 0.8.0 新增的。宿主项目自己有约定(例如 design/、docs/design/、.stitch/ 目录,或 AGENTS.md、CLAUDE.md 里的说明)时照宿主的来;宿主已有 DESIGN.md、token 文件或主题化组件库时原地更新,不另起一套。每个文件都有模板,在 skills/design-studio/templates/:抄结构,不抄里面的值。
文件
| 文件 | 谁写 | 内容 |
|---|---|---|
catalog/resources.jsonl | 人工策展(唯一手改的数据) | 一行一条资源,schema v2 |
catalog/taxonomy.json | 人工 | 15 个域、83 个小节、kind 枚举,都有中英标题与说明 |
catalog/shot-overrides.json | 人工 | 个别站点的截图修正:换地址、隐藏元素、等待、强制用 og 图或排字卡 |
catalog/observed.jsonl | scripts/check-links.py,只追加 | 机器观测:id、checked_at、http、final_url、agent_access(static / js / blocked / unknown)、title、note;同一 id 以最新一条为准 |
docs/assets/thumbs/manifest.json | scripts/shoot-catalog.mjs | 每条的缩略图来源(screenshot / github / og / placeholder)、尺寸、字节、抓取时间、最终地址、HTTP 状态、像素质检(qa.verdict、灰度标准差、边缘密度、主色占比)和尝试记录 |
一行的字段:id、name(可选 name_zh)、url、domain、section、also(第二归属,域:小节)、kind、tags(最多 6 个)、best_for / how_to_use(为什么来、怎么直达:筛选维度、深链写法、API)、zh(中文一句话,必填;可选 zh_how)、access(free / freemium / paid)、login、license、tier(S 同类首选,每个域不超过 15%,而且 agent 要能读到或有 entry_points / api / A 可靠 / B 小众或有明显短板)、status(active / slow / archived / sunset)、lang、region、entry_points、api、caveats、origin、added。
生成物(勿手改,scripts/build-catalog.py 把以上文件合在一起生成):agent 运行时读的 skills/design-studio/references/catalog/(catalog.jsonl 投影、各域视图);站点数据 docs/data/(catalog.json、catalog.js、thumbs.js、给实验页的 lab-catalog.js、给 agent 读的纯文本 llms.txt);首页和目录页里 <!-- gen:* --> 之间的静态区块。
2026-09-27 的状态:S 档 92 条、A 档 587 条、B 档 133 条;agent 可达性(维护者网络下 curl 实测)static 628 条、js 121 条、blocked 60 条、unknown 3 条;缩略图 807 张通过质检(756 张截图、38 张 GitHub 社交卡、13 张 og:image),另外 5 条用排字卡。
怎么查:在线页面的资源目录(搜索支持中文、分面计数、键盘操作、URL 可分享);agent 用 python3 skills/design-studio/scripts/catalog.py find 配色 --domain color,或用 route "<问题>" 找该看哪个域。
怎么加:在本仓库里对 agent 说"用 iterate-design-lab 把这几个站点加进目录:……"。它会查重、实际访问、写中英条目、验链、截图、重建,最后跑闸门。
research/sources/:一份一手来源一个摘要。头部写 url、抓取日期、方法、复核期限;正文是转述,不做镜像。2026-09-27 共 40 份:16 份从旧摘要迁入并重读,24 份新增(Apple Liquid Glass、Material 3 Expressive、HarmonyOS、Fluent 2、WCAG 2.2 与各地无障碍法规、Web Baseline、DTCG 2025.10、DESIGN.md、MCP Apps / Apps SDK / A2UI、AI 标识法规、同类 skill、OOUX、变更厌恶、jlreq、CJK 字体授权)。新增的每份都由独立 agent 对照原文核对过。research/topics/:9 篇中文主题综合。每篇写当前结论、论证、未决问题、对 skill 的约束和变更记录。research/field/:现场证据,包括本站自用记录、匿名化的宿主复盘和评测汇总(evals-2026-09-27.md、evals-2026-09-28.md)。research/INDEX.md:由 scripts/build-research-index.py 生成,列出每份来源被哪些 skill 文件引用。复核期限一过,闸门就会失败。digest / practice / measured)、来源 id 和复核期限(易腐 +90 天,耐久 +365 天)。说明见 research/README.md。
evals/triggers.jsonl 共 100 条中英请求,其中 45 条是近似但不该触发的请求或负例。一个模型只看三份 skill 描述,为每条请求选一个 skill 或选"都不用"。facts.mjs 把帧底边上的一行深底浅字读成了白底,报出一条假的对比度失败(记在套件样本头上)。已修复并加了回归测试,两轮 54 份产物全部重测,只有这一条事实有变;受影响的那一组用正确的事实重评,旧评审存档但不计。见报告第 5 节和 research/field/evals-2026-09-28.md。evals/runs/ 和站点的套件页,汇总写进 research/field/,输了也照样公布。方法见 ,评审规则见 。套件在本地项目里使用时,如果 agent 能解析到本仓库的 feedback/inbox/(符号链接安装时可以),就会静默记下被纠正、指引出错、流程别扭、能力缺口和偏好,宿主项目只按形态描述,不写名字。scripts/collect-feedback.py 把它们聚合成 feedback/report.md;iterate-design-lab 的 evolve 模式分级消化。scripts/evolve.sh 可以挂 launchd 每周跑,但无人值守时只在 evolve/<日期> 分支上写提案和措辞修正,等主人合并。拷贝安装和插件安装解析不到 inbox,采集默认是关着的。三条路:设 DESIGN_SKILL_LAB_INBOX 指向一个已存在的文件夹(本仓库的 feedback/inbox/,或任意文件夹,之后 --import);直接问 agent"反馈采集开着吗",它跑 feedback_status.py 回答;或让它把复盘写成未提交的草稿,再用 scripts/collect-feedback.py --import 收进来。约定见 feedback/README.md。
skills/ 随插件发布的三个 skill
design-studio/ SKILL.md · references/(process、disciplines、platforms、fundamentals、catalog〔生成〕)
· templates/ · scripts/ · assets/mockup-kit/
critique-design/ SKILL.md · references/(rubric、heuristics)· templates/(评审报告、评审子 agent 简报)
implement-design/ SKILL.md · references/stacks.md
.claude/skills/ 仓库内的维护 skill iterate-design-lab
.claude-plugin/ 插件与市场清单(仓库根即插件根)
catalog/ 资源目录:事实来源、分类、机器观测、截图修正
research/ 证据层:sources/、topics/、field/、log.md、backlog.md、INDEX.md(生成)
evals/ 评测:briefs/、triggers.jsonl、评审协议、渲染与测量工具、runs/(各轮结果)
docs/ GitHub Pages:首页、catalog/、skills/、lab/(十六种方向)、data/(生成)、assets/
scripts/ 仓库工具(见下)
feedback/ 使用反馈:inbox/、report.md(生成)、proposals.md、log.md、archive/
raw/repos/ 上游仓库的浅克隆(git 忽略;怎么重新克隆见 research/README.md)
.github/workflows/ CI:闸门 + 站点冒烟测试
package.json 固定版本的 Playwright 与 axe-core,只给仓库工具用
skill 脚本:在 skills/design-studio/scripts/ 下,随 skill 发布,给宿主项目里的 agent 用。每个都支持 --help。
| 脚本 | 做什么 |
|---|---|
capture.mjs + lib/capture-core.mjs | Playwright 截图:地址 × 视口 × 明暗 × 状态;语言与时区(--locale、--timezone);复用登录态、校验构建标记、移除同意弹窗;遇到反爬页、空白页、报错页时以非零码退出;--sheet 出联系表;报告里有批次标识和每张图的摘要,--freeze 冻结交给评审的那一批;路由表里每条路由可以有自己的视口,一次运行拍完一份样稿的各个帧;整页截图超过 Chrome 能画的高度时判失败 |
shot.sh | 零依赖兜底(Chrome 命令行),检测项比 capture.mjs 少 |
lint.mjs | 渲染后页面的确定性底线检查。不过就以退出码 1 结束的:文字对比度(计算加实测)、横向溢出、无名控件;只报警告的:点击区域、transition: all、减少动效、中文排版、token 漂移等 |
color_tools.py | WCAG / APCA 对比度、OKLCH 色阶、色觉模拟 cvd、matrix --from tokens.css |
catalog.py | 查资源目录:find / show / route / recipes / domains(标准库) |
seed.py | 发散时的种子抽取:由 brief、轮次和用户种子决定哪些参照上方案板、谁领头;行尾 pinned 的用户参照单独占位、退出随机池,避免重复 |
feedback_status.py | 自检:这份安装的反馈采集是开是关、条目写到哪、为什么(标准库,macOS / Linux / Windows) |
text_to_path.py | 把字标按字体文件转成 SVG 路径(需要 venv 里的 fontTools) |
仓库工具:在 scripts/ 下。
| 脚本 | 做什么 |
|---|---|
check-lab-invariants.sh → gates.py | 完成的定义,G1–G9 九道闸门:资源目录与生成物 · 缩略图清单 · 来源头部与 INDEX · skill frontmatter、行数预算、reference frontmatter、链接与路径 · 反馈条目 · 触发测试集 · 版本一致 · docs/ 不手写目录数字、链接可达 · 不跟踪杂散文件 |
build-catalog.py(+ site_pages.py) | 校验目录并重建全部生成物;--check 只校验 |
check-links.py | 用 curl 验链,结果追加到 catalog/observed.jsonl;识别挑战页、停放域名、软 404;按主机串行 |
shoot-catalog.mjs | 缩略图:GitHub 仓库用社交卡,其余截图,截图失败或质检不过时退到 og:image,再退到排字卡;每次运行都复检已有文件 |
smoke-site.mjs | 站点冒烟测试:控制台无报错、axe 无严重问题、390 和 320 宽无横向溢出、图片与链接可达、搜索黄金用例、首页体积预算、旧链接跳转、生成区块与数据一致 |
build-research-index.py | 校验来源头部并生成 research/INDEX.md |
collect-feedback.py · evolve.sh | 聚合反馈 · 无人值守的反馈消化(只出提案分支) |
test-feedback-status.py | skill 脚本 feedback_status.py 的自测:链接、拷贝、插件、环境变量四种安装各该怎么回答;CI 在 Linux 和 Windows 上跑 |
test-seed.py | seed.py 的自测:六方向去重、确定性、pinned 参考退出随机池且与 rolled 合并后不重复;CI 在 Linux 和 Windows 上跑 |
依赖分三层,各管各的:skill 脚本只要 Python 标准库和一个 Chromium 系浏览器;capture.mjs 和 lint.mjs 需要 Playwright,项目里装了就用,没装时给出固定版本的 npx 命令,从不拉取未固定的版本。仓库工具里的 Python 全部只用标准库,截图和冒烟测试用 package.json 里固定版本的 Playwright。evolve.sh 需要本机装好 claude CLI。
evals/runs/ 和套件页为准,包括输的部分。evidence: practice)。完成的定义:scripts/check-lab-invariants.sh 退出码为 0(标准库、不联网、几秒内跑完)。CI 在每次 push 和 PR 上跑闸门和站点冒烟测试。
scripts/check-lab-invariants.sh # G1–G9;也可以只跑几道:scripts/check-lab-invariants.sh G4 G7
scripts/build-catalog.py # 改了 catalog/ 之后重建全部生成物(--check 只校验)
scripts/check-links.py --ids a,b # 验链并追加观测(不带 --ids 为全量;--dry-run 不写)
npm ci && npm run shoot -- --ids a,b # 缩略图(--sheet review.png 出联系表供人工复核)
npm run smoke # 站点冒烟测试
python3 scripts/build-research-index.py # 加了或复核了来源之后重建 research/INDEX.md
scripts/collect-feedback.py # 聚合反馈(--check / --archive / --import)
scripts/evolve.sh --dry-run # 看无人值守的反馈消化会做什么
按改动类型:
catalog/resources.jsonl(必须有 zh)→ check-links.py --ids → npm run shoot -- --ids → build-catalog.py → 闸门。docs/ 里的目录数字只能由 build-catalog.py 写进 <!-- gen:* --> 区块;跑 npm run smoke;GitHub Pages 从 main:/docs 发布,Pages 构建显示 built 才算上线。research/sources/<id>.md 的 fetched / review_by,同步引用它的 reference,重建 INDEX,在 research/log.md 记一笔。skills/design-studio/SKILL.md、本 README、CHANGELOG.md 顶部条目和 .claude-plugin/ 两个清单里保持一致(闸门 G7)。skill 版本记录在各 SKILL.md frontmatter 的 metadata.version(design-studio 的版本就是 suite 版本,suite 当前 0.15.0),遵循语义化版本,作用于契约(模式、交付物、产出目录结构、reference 路径);0.x 期间契约仍在定型。每次迭代都记在 CHANGELOG.md;逐来源的抓取日期与复核期限见 research/INDEX.md。
原创内容(skill、脚本、目录条目、研究综合、评测、页面)以 MIT 许可发布;许可范围和第三方材料的说明见 NOTICE。目录里出现的站点名称和商标归各自所有者;research/sources/ 是第三方作品的转述式学习摘要,原文版权归原作者,其中 research/sources/shape-of-ai.md 按其来源的 CC BY-NC-SA 许可提供。
evals/README.mdevals/judging.md