Skills / Skills / Onboard Brand
All skills

/ skill

onboard-brand

Skills/onboard-brand.md

Bring a new brand into the system — copy template, scaffold full brief, register in Brands.md, create wiki node.

Open as raw file

Run this skill

Leave blank to use the auto-suggested slug.

Runs with bypassPermissions — local dev only.

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)

  1. brand_slug is kebab-case, no spaces, no underscores. Reject if not.
  2. Brands/{brand_slug}/ does not already exist. Reject if it does — never overwrite.
  3. brand_slug is not already in Context/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.md to Brands/{brand_slug}/markets/{market_code}/_market.md.
  • Set market_code, language, country, currency from 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.md markets: frontmatter list to match.

4. Create the wiki node

Write Wiki/Companies/{brand_slug}.md using the wiki-node template:

  • node_kind: company
  • created, last_synthesized: today
  • sources: ["<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.md frontmatter brief_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:

  1. Walk BrandContext.md quick-reference fields together (1–2 lines each).
  2. Then voice-profile.md (tone, pillars, CTA language).
  3. Then compliance.md (claim rules + disclaimers).
  4. Then revenue-model.md (business type + primary metric).
  5. 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-brand if 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.