Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add Dragoon0x/canon --skill canon-avatarsgit clone --depth 1 https://github.com/Dragoon0x/canonWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/dragoon0x/canon/canon-avatars)<a href="https://agentmods.dev/skills/dragoon0x/canon/canon-avatars"><img src="https://agentmods.dev/badge/skills/dragoon0x/canon/canon-avatars/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/dragoon0x/canon/canon-avatars"><img src="https://agentmods.dev/badge/skills/dragoon0x/canon/canon-avatars.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00091 | $0.01850 |
| Opus 5.5 | $0.00036 | $0.00740 |
| Sonnet 5.5 | $0.00018 | $0.00370 |
| Haiku 4.5 | $0.00009 | $0.00185 |
Grade A, and why
canon-avatars scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 2mo ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 206 lines — stays where its author put it; the contents beside it link to each section on GitHub.
CANON · Avatars
Avatars identify a person or entity at a glance. They fail when users can't distinguish them from each other or from generic placeholders.
Sizing
Avatars have a small, fixed scale. Random sizes break visual rhythm.
| Size | Use |
|---|---|
| XS — 16–20px | Inline with text (comment attribution) |
| SM — 24px | Dense lists, table rows |
| MD — 32px | Default (nav bars, lists) |
| LG — 40–48px | Profile cards, user headers |
| XL — 64–80px | Profile pages, detail views |
| XXL — 128px+ | Hero profile view |
Pick 3–4 sizes for your system. Avoid one-off in-between values.
Shape — circle by default
| Shape | When |
|---|---|
| Circle | People (default) |
| Rounded square (6–8px radius) | Organizations, teams, workspaces |
| Square | Product/brand logos, less common for people |
Circle avatars differentiate user identity from brand identity — worth preserving.
Initials fallback
When no image exists, show initials.
┌────────┐
│ AB │
└────────┘
- One or two letters max. "JJ" (John Jacobson) not "JAJ".
- Logic: first letter of first name + first letter of last name. Single name → one letter.
- Font size: avatar diameter × 0.4 (rough rule). 32px avatar → 13px initials.
- Font weight: 500–600 (semibold).
- Center-aligned both axes.
Background color — deterministic, not random
Each user gets a consistent color across the app. Random colors per render = visual identity breaks every refresh.
function avatarColor(id) {
const hash = id.split('').reduce((acc, c) => c.charCodeAt(0) + acc, 0);
const hue = hash % 360;
return `oklch(55% 0.15 ${hue})`;
}
- Hash the user ID (stable, unique) to pick a hue.
- Keep lightness and chroma constrained so all colors feel unified (same lightness, similar chroma).
- 12–20 hues max in the rotation — prevents near-identical variants.
Text contrast on initials
White text on colored background: minimum 4.5:1 contrast. With medium-lightness backgrounds (L ≈ 50–60%), use:
- Lightness 40–55% → white text
- Lightness 60–80% → dark text (near-black tinted with the background hue)
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 2mo ago First seen · 206 lines · 91 tokens per session scan A de9ceb0354e4
canon-avatars is a skill published in the GitHub repository Dragoon0x/canon (6 stars, last pushed 6mo ago), licensed MIT. It adds 91 tokens to every session and 1,850 once invoked, about $0.0004 per session on Opus 5.5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
canon-avatars compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| canon-avatarsDragoon0x/canon | Skill | 6 | 6mo ago | MIT | A | 91 | Claude Code, Codex |
| accessibilitydiegosouzapw/awesome-omni-skills | Skill | 170 | 4mo ago | MIT | C | 119 | Claude Code, Codex |
| accessibilityericrisco/rsc-harness | Skill | 503 | 2d ago | MIT | A | 86 | Claude Code, Codex |
| accessibility-auditoyi77/1ai-skills | Skill | 17 | yesterday | MIT | A | 29 | Claude Code |
| a11y-auditgreglas75/zuvo | Skill | 7 | 3d ago | MIT | A | 147 | Claude Code |
| axe-audittonone-ai/tonone | Skill | 77 | 23d ago | MIT | A | 47 | Claude Code |
| accessibility-compliance-accessibility-audit-v2diegosouzapw/awesome-omni-skills | Skill | 170 | 4mo ago | MIT | A | 76 | Claude Code |