Skip to content

feat: ship the Hermes Agent mark, register WorkBuddy's generic one - #134

Merged
yujiezhang-ops merged 1 commit into
mainfrom
feat/hermes-icon
Aug 9, 2026
Merged

feat: ship the Hermes Agent mark, register WorkBuddy's generic one#134
yujiezhang-ops merged 1 commit into
mainfrom
feat/hermes-icon

Conversation

@yujiezhang-ops

Copy link
Copy Markdown
Collaborator

Addresses the actionable part of #133. One of the four got a real mark; three did not, and I did not invent one for them.

Hermes Agent — shipped

lobe-icons publishes a Hermes Agent mark under the same MIT licence the four existing vendor marks come from. I verified the LICENSE file hashes identical to the copy already in this repository, so it is the same audited basis rather than a new one to evaluate.

It is byte-identical to lobe-icons' nousresearch.svg but for the <title>. That is correct, not a mix-up: Hermes Agent is Nous Research's product, so the company mark identifies it. Recorded in the manifest entry so nobody later reads the reuse as carelessness.

Verified in the running app: the row now renders data-mark-kind="asset" and inherits rgb(58,58,60) from its neighbours, so currentColor resolves against the page rather than painting black.

Aider, WorkBuddy — deliberately nothing

Neither has a mark in lobe-icons. Aider has no published brand kit, an open logo/branding issue from 2024, and an Apache-2.0 code licence that grants no trademark rights. WorkBuddy publishes no vector at all.

Copying either favicon would ship vendor artwork with no redistribution basis, which is exactly what asset-rights.json exists to prevent. So they keep generic symbols — and WorkBuddy is now a registered generic rather than reaching AgentIcon's unknown-Agent fallback. Both render the same glyph, so the two states were indistinguishable; "evaluated, nothing redistributable exists" now reads differently from "never looked at".

ChatGPT Desktop already had a mark in the app — that gap is site-only, tracked in #133.

Two things I nearly got wrong

The 19.7KB asset. Every existing mark is ≤1.7KB, and 3132 of Hermes' 4096 coordinates carry three decimals — 0.00075px at 18px. I was going to reduce the precision. That would have been a modification under MIT requiring a declared change, and it would have silently invalidated the recorded hash. Shipped byte-identical instead, so modified stays absent.

The measurement that almost misled me. I rasterised the mark and found 30% of pixels at 18px were mid-grey, and nearly concluded the asset was too detailed for the UI. Then I measured the existing codex mark as a control: 47% grey at the same size. Antialiasing at 18px is universal, not a defect in this asset. Without the control I'd have rejected a perfectly good mark.

New tests

ships each asset byte-identical to its recorded hash — nothing verified that claim before. I confirmed it catches the precision reduction I'd contemplated. It iterates the manifest rather than Agent ids, because chatgpt-desktop reuses codex's rights object and has no file of its own.

registers a mark for every Agent and desktop Agent — so a newly added Agent cannot quietly land on the fallback.

Note the hash test uses path.join, not new URL(..., import.meta.url): Vite statically rewrites that form into an asset reference, which replaced the interpolated filename with undefined at transform time. That cost me a few iterations.

Verification

330 frontend tests (43 files), go test ./..., 6 e2e, check-docs.py, and the release-compliance gate — which caught the new asset and required regenerating third_party/; --check now passes. NOTICE updated: six assets, five from lobe-icons unmodified, and the Aider/WorkBuddy reasoning stated.

Sources: lobe-icons · Aider · Aider logo issue

🤖 Generated with Claude Code

lobe-icons publishes a Hermes Agent mark under the same MIT licence the four
existing vendor marks already come from -- the LICENSE file hashes identical to
the copy in this repository -- so it ships unmodified with source, owner and
SHA-256 recorded.

It is byte-identical to lobe-icons' nousresearch.svg but for the <title>, which
is correct rather than a mix-up: Hermes Agent is Nous Research's product, so the
company mark identifies it. Recorded in the entry so the reuse is not mistaken
for carelessness later.

Aider and WorkBuddy get nothing. Neither has a mark in lobe-icons, Aider has no
published brand kit and an Apache-2.0 code licence that grants no trademark
rights, and WorkBuddy publishes no vector at all. Copying either favicon would
ship vendor artwork with no redistribution basis, which is the thing
asset-rights.json exists to prevent.

WorkBuddy is now a registered `generic` rather than reaching AgentIcon's
unknown-Agent fallback. Both render the same glyph, so the states were
indistinguishable -- "evaluated, nothing redistributable exists" now reads
differently from "never looked at".

Two new tests. One re-hashes every asset against its recorded sha256, because
nothing verified that claim before: reducing the Hermes coordinate precision --
which I considered, since 3132 of its 4096 coordinates carry three decimals,
0.00075px at 18px -- would have left the manifest asserting a hash that no
longer matched. The other asserts every Agent and desktop Agent has a
registered mark, so a new one cannot quietly land on the fallback.

Refs #133

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@yujiezhang-ops
yujiezhang-ops merged commit ff81ee8 into main Aug 9, 2026
4 checks passed
@yujiezhang-ops
yujiezhang-ops deleted the feat/hermes-icon branch August 9, 2026 06:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant