bama
BAMA: Build Any Mac App. Agent skills to research, clone, design, build, optimize, and test native macOS apps with Swift and SwiftUI.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证IconKit — a Claude Code skill that designs new icons in the Phosphor style and builds all six weights (thin, light, regular, bold, fill, duotone) as production SVG, from a feature description.
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
A Claude Code skill that designs new icons in the Phosphor style and builds
them in all six weights — thin, light, regular, bold, fill and duotone — as
production SVG, from a description of the feature.
The top two rows don't exist in Phosphor. The bottom four do.
Same grid, same strokes, same six weights, same file format.
Phosphor has 1,512 icons. Your product has a feature it doesn't cover.
Make an icon for AI-generated documents. Phosphor doesn't have one.查看完整 README ↗Phosphor has 1,512 icons. Your product has a feature it doesn't cover.
You say:
Make an icon for AI-generated documents. Phosphor doesn't have one.
You get file-sparkle: six SVGs named and formatted the way Phosphor ships its
own, a preview that puts the new icon in a row with real ones, and, if you ask,
a React component that takes weight, size and color like any built-in
Phosphor icon.
Draw one skeleton. Let the build make the weights. Then look at it.
The model writes a single small SVG of centrelines. A script strokes it at Phosphor's four widths, builds the fill and duotone from roles marked in the source, expands everything to clean outlined paths, and checks the result against rules measured from all 1,512 Phosphor icons. Nobody writes a weight by hand.
Claude Code
git clone https://github.com/Devesh-Shirsath/IconKit.git \
~/.claude/skills/iconkit
Restart Claude Code and just ask. The skill picks itself up whenever you need an icon Phosphor doesn't have, describe a feature that wants an icon, or ask for the bold, fill or duotone version of one.
Codex
git clone https://github.com/Devesh-Shirsath/IconKit.git \
~/.agents/skills/iconkit
Restart Codex, then ask — or call it by name: $iconkit an icon for rate limits.
Any other agent that can run Python — clone the repo into your project and
ask it to follow SKILL.md. AGENTS.md tells it what to read and what to skip.
Claude.ai — Settings → Capabilities → Skills → upload a zip of this repo. Code execution has to be on, because the six weights come from a script. Re-upload whenever the repo changes.
No dependencies. Python 3.8+, standard library only — nothing to pip install.
python3 scripts/iconkit.py find audit log history record
searches Phosphor's names by idea, best match first. And
python3 scripts/iconkit.py build showcase/file-sparkle/file-sparkle.source.svg \
--near file,file-text,file-plus,sparkle,magic-wand,article -o /tmp/file-sparkle
rebuilds one of the showcase icons from its skeleton: six SVGs and a
preview.png.
Phosphor's four stroke weights are one drawing stroked at four widths. Fill and duotone are that same drawing plus a decision about which body goes solid and which gets the tint. Draw six files by hand — or ask a model to — and you get six icons that almost match. Build six from one source and you get one icon in six weights.
This is not approximate. The 44 sources in assets/examples/ are real Phosphor
icons rebuilt this way. scripts/selftest.py rebuilds every one and compares
each weight with the original's outline, and all 44 pass.
your feature description
↓
what does it do? the thing, and what happens to it
↓
does Phosphor already have it? iconkit.py find
↓
choose the picture an object · an object + one modifier · a small diagram
↓
one skeleton of centrelines started from the nearest real icon, not a blank file
↓
decide fill and duotone what goes solid, what is knocked out, what gets the tint
↓
build six outlined SVGs + preview.png
↓
look at the preview, fix the source, rebuild
On a 256 × 256 canvas:
| Weight | How it is made | At 16 px |
|---|---|---|
| thin | the skeleton, stroked at 8 | 0.5 px |
| light | stroked at 12 | 0.75 px |
| regular | stroked at 16 | 1 px |
| bold | stroked at 24 | 1.5 px |
| fill | stroked at 16, bodies solid, details knocked out | |
| duotone | stroked at 16, plus a 20% tint layer |
An ordinary SVG that renders as the regular weight in any viewer. A handful of
data- attributes say what an element becomes in the designed weights. This is
the whole of shield-list:
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" fill="none" stroke="currentColor" stroke-width="16" stroke-linecap="round" stroke-linejoin="round">
<!-- security: Phosphor's shield, unchanged -->
<path d="M216,112V56a8,8,0,0,0-8-8H48a8,8,0,0,0-8,8v56c0,96,88,120,88,120S216,208,216,112Z" data-fill="solid" data-duotone="tint"/>
<!-- the group of rules: two rows, each a condition marker and its rule -->
<g data-fill="knockout">
<circle cx="84" cy="112" r="4" fill="currentColor"/>
<line x1="120" y1="112" x2="176" y2="112" data-not="bold"/>
<line x1="128" y1="112" x2="176" y2="112" data-only="bold"/> <!-- bold: clear of the dot -->
<circle cx="84" cy="152" r="4" fill="currentColor"/>
<line x1="120" y1="152" x2="176" y2="152" data-not="bold"/>
<line x1="128" y1="152" x2="176" y2="152" data-only="bold"/> <!-- bold: clear of the dot -->
</g>
</svg>
SPEC.md has the full format: every role, the keyline shapes, the standard
glyphs, the slash recipe and the naming rules.
Every build writes one, laid out so each question has an answer at a glance.
iconkit.py build and check report three levels.
A clean check means the icon obeys the measurable rules. It does not mean the icon is good. Only looking at the preview tells you that.
icons/file-sparkle/
file-sparkle.source.svg the skeleton — the only file you edit
file-sparkle.svg regular
file-sparkle-thin.svg
file-sparkle-light.svg
file-sparkle-bold.svg
file-sparkle-fill.svg
file-sparkle-duotone.svg
preview.png
FileSparkle.tsx with --react
Each SVG is a single outlined path with fill="currentColor", and duotone
carries its tint path at opacity="0.2" first — Phosphor's own format and
naming. --react writes a component for @phosphor-icons/react:
<FileSparkle weight="duotone" size={24} color="currentColor" />
Two finished icons are in showcase/.
After delivering, the skill asks whether you want the icon added to your Figma icon library as components, and which file. It does nothing in Figma until you answer both. Then it reads how that file already builds its icons — a component set or separate components, how weights are named, the size, the colour style — and matches it, in a section of its own.
It works through Figma's own MCP server or a console/bridge server, whichever the session has.
python3 scripts/iconkit.py find <words…> # search Phosphor's names by idea
python3 scripts/iconkit.py sheet <names|sources…> -o out.png # six-weight contact sheet
python3 scripts/iconkit.py show <name> [weight] # a real icon's path data and ink box
python3 scripts/iconkit.py build <source> [--near a,b,c,d,e,f] [--react] [-o dir]
python3 scripts/iconkit.py check <source> # the checker alone
python3 scripts/iconkit.py compare <source> <name> # how far a source is from a real icon
python3 scripts/selftest.py # after changing the scripts
sheet takes source files as well as Phosphor names, so a draft can sit on the
same sheet as the icons it should match. The image at the top of this page is
one command.
SKILL.md entry point and workflow
SPEC.md every number: grid, strokes, source format, standard parts — start here
AGENTS.md what an AI agent should read, and skip
references/
concept.md from a feature to a drawing, with worked examples
examples.md the 44 example sources, by what they teach
weights.md designing fill, duotone and bold; diagnosing a bad preview
figma.md adding finished icons to a Figma library
scripts/
iconkit.py find · sheet · show · build · check · compare
outline.py strokes and shapes to outlined paths
raster.py the preview renderer
svgpath.py SVG path parsing
selftest.py rebuilds every example against the real icon
assets/
examples/ 44 real Phosphor icons as skeleton sources
phosphor.json.gz Phosphor's paths, for search and comparison
PHOSPHOR-LICENSE
showcase/ two icons made with IconKit, and the sheet above
house, cloud, globe, key), the examples keep the simple version.@phosphor-icons/react
2.1.10, so icons added to Phosphor later won't appear in find.Product and UX designers, design system teams and frontend developers who use Phosphor and keep running into the icon it doesn't have — and don't want the replacement to look like it came from somewhere else.
IconKit was built by Devesh Shirsath, a product designer working on developer tools and API documentation. It is a sibling of Spotkit, which does the same job for product illustrations.
Portfolio · LinkedIn · GitHub · Instagram
Built on Phosphor Icons by Helena Zhang and Tobias
Fried (MIT). assets/phosphor.json.gz holds path data from
@phosphor-icons/react 2.1.10, and the 44 sources in assets/examples/ are
Phosphor icons rebuilt as skeletons. Both stay under Phosphor's licence, which
is included as assets/PHOSPHOR-LICENSE.
IconKit is an independent project. It is not affiliated with or endorsed by Phosphor Icons.
MIT licensed. Contributions welcome, especially new example sources and bold alternates.