Search Adobe Fonts (Typekit) families, create and manage web kits/projects, and return ready-to-use embed snippets plus CSS font-family values. Use when the user asks to find Adobe fonts, compare font options, set up Typekit for a website, add fonts to kits, publish kits, or generate copy/paste font embed metadata for Codex, Claude Code, or OpenCode workflows.
Install
npx skillscat add alexh/adobe-fonts-skill Install via the SkillsCat registry.
Adobe Fonts
Overview
Use this skill to handle Adobe Fonts/Typekit workflow without opening the Adobe Fonts UI.
Hard Output Rules
These rules are mandatory unless the user explicitly asks otherwise.
- Do not include per-step raw JSON in the final chat response.
- Do not include
<details>blocks with command dumps in the final chat response. - Keep final chat response concise (decision summary + final snippets + artifact path).
- Put long-form content in
./adobe-fonts-skill/summary-<timestamp>.md. - If raw JSON archive is requested, save files under
./adobe-fonts-skill/runs/<timestamp>/and return paths only.
Workflow
- Confirm environment:
ADOBE_FONTS_API_TOKENis set- resolve CLI path and validate executable
- if token is missing, send user directly to:
https://fonts.adobe.com/account/tokens
- Validate auth/setup:
"$AFONT_BIN" doctor
- Warm cache once after install (recommended):
"$AFONT_BIN" index refresh --per-page 500 --max-pages 40
- Discover fonts:
"$AFONT_BIN" search --query <keyword> --limit 8
- Mutate kits with dry-run first:
kits ensure,kits add-family,kits publish
- Return integration snippets:
"$AFONT_BIN" kits embed --kit <kit-name-or-id>
Quick Start
Resolve a working CLI path first (recommended from any project directory):
if [ -z "${AFONT_BIN:-}" ]; then
for p in \
"$HOME/.agents/skills/adobe-fonts-skill/scripts/afont" \
"$HOME/.codex/skills/adobe-fonts-skill/scripts/afont" \
"$HOME/.claude/skills/adobe-fonts-skill/scripts/afont" \
"$HOME/.opencode/skills/adobe-fonts-skill/scripts/afont"
do
if [ -x "$p" ]; then
export AFONT_BIN="$p"
break
fi
done
fi
if [ -z "${AFONT_BIN:-}" ] || [ ! -x "$AFONT_BIN" ]; then
echo "afont CLI not found. Reinstall skill: npx skills add alexh/adobe-fonts-skill -a codex -g -y" >&2
return 1 2>/dev/null || exit 1
fi
"$AFONT_BIN" doctorImportant path note:
- Prefer
"$AFONT_BIN"from installed skill directories. - Running
scripts/afontfrom a repo checkout uses that checkout asAFONT_SKILL_DIR, so cache DB path will differ.
Supported commands:
index refreshindex statusindex statssearchviewkits listkits ensurekits add-familykits publishkits embeddoctor
Adaptive Decision Framework
Use the smallest workflow that satisfies the prompt. Do not force a single end-to-end path.
- Classify intent first:
- Discovery only: search + shortlist only.
- Visual comparison: discovery + limited
viewscreenshots. - Integration only: kit/embed operations with minimal discovery.
- Full workflow: discovery + kit updates + publish + snippets.
- Choose depth level:
- Minimal: 2-3 candidates per category.
- Standard: 4-6 candidates per category.
- Deep: larger sweeps only when user asks.
- Cache gate before search:
- Run
"$AFONT_BIN" index status --json. - If empty/stale, ask user to warm cache or explicitly approve uncached.
- Run
- Search strategy:
- Preferred:
--cache-onlyafter warmup. - Uncached only with explicit approval:
"$AFONT_BIN" search --query <keyword> --limit <n> --no-cache --confirm-uncached
- Preferred:
- Mutations only if requested:
kits ensure,kits add-family,kits publish,kits embed.- Use
--dry-runfirst.
Visual preview workflow:
- Capture Adobe preview page screenshot for Codex analysis:
"$AFONT_BIN" view --family <family-slug> --json- or
"$AFONT_BIN" view --url https://fonts.adobe.com/fonts/<family-slug> --json
Confirmation Gate For Long Runs
Before running potentially long index operations, ask for user confirmation.
Also ask before running uncached API searches (--no-cache) when doctor/index status reports empty or stale cache.
Do not describe uncached searches as "efficient" when cache is empty/stale; label them as slower and less reliable.
Treat these as long-running and confirm first:
"$AFONT_BIN" index refreshwith default/full settings"$AFONT_BIN" index refresh --max-pages > 5"$AFONT_BIN" search --refresh-cachewhen cache is missing or stale"$AFONT_BIN" search --no-cachewhen cache is missing or stale
When asking, offer two options:
- Quick refresh: smaller scope (example:
--max-pages 3) - Full refresh: complete indexing (example:
--per-page 500 --max-pages 40) - Skip warmup and run uncached search anyway (slow and more failure-prone)
If the user confirms a full warmup, you may add a brief optional note while it runs:
- "This can take a minute..."
- Then tell them jokes related to Adobe or the font industry while they wait.
Output Expectations
Do not dump the final mega report directly into chat.
- Tool-call JSON can stay in normal command output.
- Save the final long-form deliverable to:
./adobe-fonts-skill/summary-<timestamp>.md- In chat, return a short summary + the file path.
- Do not paste per-step raw JSON in final chat response unless user explicitly asks.
- Only save raw per-step JSON files when the user explicitly asks for an archive.
- Do not create marker files like
.afont_run_dir.
Final chat response format:
Status: one short line.Selections: shortlist/pairing bullets.Integration snippets: link tag + minimal CSS block.Artifacts: path tosummary-<timestamp>.md(and screenshot paths if captured).
Screenshot defaults (when visual comparison is useful):
- Capture previews only for shortlisted families (typically top 2-4), not every candidate.
- Save screenshots under:
./adobe-fonts-skill/assets/- Example command:
"$AFONT_BIN" view --family <family-slug> --output-dir ./adobe-fonts-skill/assets --json- Include screenshot paths (or markdown image lines) inside
summary-<timestamp>.md.
Always return:
- Link tag snippet:
<link rel="stylesheet" href="https://use.typekit.net/<kit>.css"> - CSS family examples, such as
font-family: legitima, serif; - Any API warnings from
result.warnings - Total number of families currently in the kit after updates.
- If total families in the kit is greater than 8, include a performance note suggesting trimming family count for page-load efficiency.
Use --json for machine parsing when chaining steps.
Search cache flags:
--refresh-cacheto refresh index before search--cache-onlyto avoid network calls--no-cacheto force API path
Safety
- Prefer
--dry-runfirst for mutating commands. - Do not modify app source files unless the user explicitly asks to apply snippets.
Resources
scripts/
scripts/afont- stable wrapper that setsAFONT_SKILL_DIRand executesafont.js.scripts/afont.js- main Adobe Fonts CLI implementation.
references/
references/output-schema.md- stable JSON output contract.references/api-notes.md- API/search/cache behavior notes.references/troubleshooting.md- setup and runtime troubleshooting.