vendor-pack.json file that says how one vendor looks inside Allternit. It has three tiers. The tier is a property of the file, so a pack can move up a tier by editing its JSON.
Tier 1 is the destination. If you can build an MCP server with a View, do that.
What a pack cannot change
- The “via Allternit” badge is always shown.
viaBadge.enabledmust betrue. You can change the label text (up to 32 characters). - The Allternit provenance header is not restyled. It sits outside the pack’s styling and uses none of the pack’s variables.
- Logos are shown as supplied.
logo.recolormust befalse. Allternit does not recolor or distort a logo.
vendor-pack.json
Tier 1: open MCP App
Tier 2: tokens
tokens is a DTCG document. The importer supports the color, fontFamily, fontWeight, number, and dimension types. The name of the top-level group decides how a token is used: color (or colors), font (fonts, typography), radius (radii, borderRadius), and spacing (space). It also supports:
$typeinherited from parent groups.{alias}references, such as{color.brand}, resolved with cycle detection.- Dimension values as strings (
"14px") or objects.
--vp-<path>, for example color.brand becomes --vp-color-brand. Variables are scoped to [data-vendor-pack="<id>"], so they apply to the vendor surface only. A value that could carry unsafe CSS is skipped and reported.
Tier 3: look pack
How a vendor supplies design tokens
- Export your tokens from your design tool or repository as DTCG JSON.
- Keep to the supported types and group names above. Use aliases for semantic names (
bubblepointing atbrand) so one change updates everything. - Put them under
tokensinvendor-pack.jsonand settierto2. - Validate the file against the field rules above.
brand color yourself.
Not yet available
- Persisting packs on the server. The registry is in memory.
- A submission or review flow for vendor packs.
- Look-profile fields beyond those listed above, such as approval-card and computer-view styling.
Built-in thread looks
The workspace also carries compiled React look packs insrc/lib/gateway/look-packs/, separate from the JSON pack format above. Built-ins cover every vendor listed under Subscriptions, including each vendor’s adapter aliases. Unrecognised vendors use a neutral default look. Channel threads have looks for Slack, Telegram, Discord, WhatsApp, Microsoft Teams, email, and SMS.
The host keeps the via Vendor provenance chip outside pack styling. Packed threads omit the decorative dot-grid backdrop. Bubbles wrap long text and fenced code scrolls inside its block at phone width. A vendor look does not establish that its connection is working: Gemini and Copilot are new, use best-effort ui_bridge, and have not yet been verified against the live services. Connect them under Settings → Subscriptions after reading the terms warning.
Opt-in host composer skin
Vendor threads keep Allternit’s composer by default, including send, stop, attachment, voice, and action behaviour. The single opt-in flag isuseVendorComposerSkin.enabled in src/lib/gateway/look-packs/composer-skin.ts, default false.
Application code can turn it on with:
isVendorComposerSkinEnabled() reads the flag outside React. composerSkinFor() supplies a supported pack’s radius, colours, placeholder, send style, leading mark, and optional model-name slot. Packs without a skin keep the host composer. Neither the flag nor a JSON composerStyle replaces the host’s interaction behaviour.
Add a compiled vendor look
UsecreateLookPack from src/lib/gateway/look-packs/pack-kit.tsx. Supply a CreateLookPackSpec: stable vendorId and surfaceKey, wordmark and logo or monogram, status vocabulary, light tokens and light/dark page colours, user/agent row shapes, and composer shape. The factory builds transcript, message, activity, approval, content, and composer components.
Define the pack’s scoped light and dark CSS variables in look-packs.css; register it with registerLookPack() in builtin.ts. Register carried vendor aliases against the same surfaceKey. Keep host provenance visible, retain actual approval handlers, and verify narrow screens, long unbroken text, fenced code, streaming, and the default host composer. Phone pane controls belong to the host, outside the pack; both phone surfaces use those controls.