You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There's no structured concept of a "brand" anywhere in Bakin. Today the word only shows up as:
Free-text in usageConstraints for the create-image runtime skill (plugins/images/defaults/runtime-skills/create-image/SKILL.md)
A routing heuristic in plugins/images/lib/routing.ts that sniffs the literal string "brand" to pick a provider
A UI placeholder ("brand-voice") in the workflows node-config drawer
So when an agent generates an asset, writes copy, or builds anything customer-facing, there's no machine-readable source of truth for voice, style, colors, logos, or reference material. Brand consistency depends entirely on whatever got pasted into a prompt.
Proposal
A first-class brand primitive — a named bundle of branding guidelines that can be linked to tasks, projects, workflows, etc., and consumed by generation paths.
Arbitrary attachments — markdown docs, images, examples of on-brand output
This smells like a new agent-package kind (kind: "brand" alongside agent | skill-pack | workflow-pack | lesson-pack) — brands are content, not code, which is exactly the plugins-vs-packages split. Alternative: a dedicated brands plugin with its own storage under ~/.bakin/brands/. Tradeoff to work through in the spec — packages get install/lockfile/projection machinery for free; a plugin gets UI, routes, and search indexing for free. (Possibly both: plugin owns the UI/API, package kind is the distribution format.)
Linking
brandId (or brands[]) on tasks, projects, and workflow instances — same pattern as other cross-object references
UI affordance to pick a brand when creating/editing those objects
Consumption
Dispatch: when a task has a linked brand, inject the brand context (style guide, palette, voice rules) into the agent's prompt/context
Copy/writing: brand voice doc available to any agent producing prose
Hooks: expose brands.get / brands.resolveForTask via the HookRegistry so any plugin can consume brand context without direct imports
Open questions for the spec
One brand per object or multiple (e.g., agency use-case)?
Inheritance: does a task inherit its project's brand?
How much is structured (colors as hex arrays) vs. freeform markdown?
Versioning — do brand edits invalidate/flag previously generated assets?
Why
Ensures assets created, copy written, and anything agent-produced uses the right brand, voice, and visual identity — today that guarantee doesn't exist beyond prompt discipline.
Problem
There's no structured concept of a "brand" anywhere in Bakin. Today the word only shows up as:
usageConstraintsfor the create-image runtime skill (plugins/images/defaults/runtime-skills/create-image/SKILL.md)plugins/images/lib/routing.tsthat sniffs the literal string "brand" to pick a provider"brand-voice") in the workflows node-config drawerSo when an agent generates an asset, writes copy, or builds anything customer-facing, there's no machine-readable source of truth for voice, style, colors, logos, or reference material. Brand consistency depends entirely on whatever got pasted into a prompt.
Proposal
A first-class brand primitive — a named bundle of branding guidelines that can be linked to tasks, projects, workflows, etc., and consumed by generation paths.
Package shape (to be defined)
A brand bundle would include some mix of:
This smells like a new agent-package kind (
kind: "brand"alongsideagent | skill-pack | workflow-pack | lesson-pack) — brands are content, not code, which is exactly the plugins-vs-packages split. Alternative: a dedicatedbrandsplugin with its own storage under~/.bakin/brands/. Tradeoff to work through in the spec — packages get install/lockfile/projection machinery for free; a plugin gets UI, routes, and search indexing for free. (Possibly both: plugin owns the UI/API, package kind is the distribution format.)Linking
brandId(orbrands[]) on tasks, projects, and workflow instances — same pattern as other cross-object referencesConsumption
brands.get/brands.resolveForTaskvia the HookRegistry so any plugin can consume brand context without direct importsOpen questions for the spec
Why
Ensures assets created, copy written, and anything agent-produced uses the right brand, voice, and visual identity — today that guarantee doesn't exist beyond prompt discipline.