onboard-brand
Bring a new brand into the system. Adapted from the brand-onboard pattern at dubbsysthings/google-ads-ai-agentic-system-full, generalized for Obsidian-first multi-brand portfolios (no paid-media specifics).
Pre-flight checks (HARD STOP if any fail)
brand_slugis kebab-case, no spaces, no underscores. Reject if not.Brands/{brand_slug}/does not already exist. Reject if it does — never overwrite.brand_slugis not already inContext/Brands.md. Reject if it is.
Procedure
1. Scaffold from template
Copy Brands/_Template/ to Brands/{brand_slug}/. Preserve the full structure:
BrandContext.md(overview)knowledge-base.md,compliance.md,revenue-model.md,voice-profile.md(the four brief docs)markets/,docs/,themes/Marketing/,Operations/,Notes/Agents/,Skills/(override layer)
2. Fill frontmatter & placeholders
For each .md file under Brands/{brand_slug}/, replace placeholders:
<kebab-case>→{brand_slug}<Display Name>/<Brand Display Name>→{display_name}YYYY-MM-DD→ today's ISO date<https://...>→{website}(if provided; otherwise leave blank with# fill in)
3. Set up the requested markets
For each market code in markets:
- Copy
Brands/_Template/markets/_marketTemplate/_market.mdtoBrands/{brand_slug}/markets/{market_code}/_market.md. - Set
market_code,language,country,currencyfrom the standard mapping (see _System/MarketRegistry.md when it exists; for now, infer from the code:US-en→ US/en/USD,GB-en→ GB/en/GBP, etc.). - Update
BrandContext.mdmarkets:frontmatter list to match.
4. Create the wiki node
Write Wiki/Companies/{brand_slug}.md using the wiki-node template:
node_kind: companycreated,last_synthesized: todaysources: ["<a class="wikilink wikilink-broken" href="#">Brands/{brand_slug}/BrandContext</a>"]links: ["<a class="wikilink wikilink-broken" href="#">Wiki/Companies/grandview-media-group</a>"]status: synthesized,confidence: medium- Body: 2–4 sentence summary linking to the BrandContext.
5. Register in the holding-co roster
Append a new row to the table in Context/Brands.md:
| {brand_slug} | {display_name} | active | [Brands/{brand_slug}/BrandContext.md](../Brands/{brand_slug}/BrandContext.md) |
6. Compute brief completeness
Walk the four brief docs. For each section header, check if the body is still placeholder copy (any (fill in), <...>, or section bodies with only template scaffolding). Score:
- Each filled section: +1 point
- Total possible across the 4 docs: ~30 sections
- Normalize to 0–100; write back to
BrandContext.mdfrontmatterbrief_completeness.
7. Append Log entry
Via log-operation:
- agent:
ea-orchestrator(or whoever invoked) - skill:
onboard-brand - input:
{brand_slug}, {display_name}, markets={markets} - output:
Brands/{brand_slug}/ - artifacts:
<a class="wikilink wikilink-broken" href="#">Wiki/Companies/{brand_slug}</a>,<a class="wikilink wikilink-broken" href="#">Brands/{brand_slug}/BrandContext</a> - notes:
brief_completeness={N}(typically 0 on first run)
8. Hand-off (interactive)
Ask Adam if he wants to fill in the four brief docs now, or come back later. If now:
- Walk
BrandContext.mdquick-reference fields together (1–2 lines each). - Then
voice-profile.md(tone, pillars, CTA language). - Then
compliance.md(claim rules + disclaimers). - Then
revenue-model.md(business type + primary metric). - Then
knowledge-base.md(audience first; performance signals come over time as data lands).
After each section is filled, recompute brief_completeness and update the frontmatter.
Failure modes
- Brand already exists: abort, suggest
offboard-brandif the user wants to retire the existing one first. - Slug collision in Brands.md but not on disk: flag as inconsistent state; ask Adam before resolving (don't auto-fix).
- Template missing files: abort and surface —
_Template/is the contract; don't degrade silently.
Hard rules
- This skill is transactional: if any step 1–6 fails, roll back partial state. Never leave a half-onboarded brand on disk.
- Never overwrite an existing brand folder.
- Always create the wiki node — graph navigability is part of the contract.