From aeko-plugin
View and edit the Brand Kit for an AEKO domain — brand name, tagline, tone_of_voice, brand_voice_summary, target_audience, primary_color, logo_url, sample_urls, must_include, forbidden. Surfaces the current snapshot_version + updated_at so users can see freshness. `snapshot_version` bumps on semantic changes (voice / target_audience / must_include / forbidden) but not on cosmetic edits.
How this skill is triggered — by the user, by Claude, or both
Slash command
/aeko-plugin:aeko-brand-kit [domain-id] [view|edit][domain-id] [view|edit]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Manages the live Brand Kit consumed by Plan.md and guide.md generation. The live kit is the source of truth; Plan.md snapshots point back at a `snapshot_version`. Semantic edits can bump the version — downstream `/aeko-update-pdp`, `/aeko-create-content`, and `/aeko-fix-technical` runs will warn if their plan is older than the live kit.
Manages the live Brand Kit consumed by Plan.md and guide.md generation. The live kit is the source of truth; Plan.md snapshots point back at a snapshot_version. Semantic edits can bump the version — downstream /aeko-update-pdp, /aeko-create-content, and /aeko-fix-technical runs will warn if their plan is older than the live kit.
What a Brand Kit is (and isn't). The Brand Kit is your content voice kit — name, tagline, tone, audience, and guardrails that steer how AEKO writes content. It is not a separate "aeko.shop brand" you manage here. When you publish to aeko.shop, the shop brand identity (the public brand page at
aeko.shop/brands/<slug>) is derived from this kit on publish and keyed by your store domain (one shop brand per domain). You don't create or claim a shop brand to publish — publishing auto-creates/updates it. "Connect your brand" (aeko.shop/connect-brand) is a separate, optional step that verifies you own the site to unlock the on-site shop agent; it does not gate publishing.
Contract reference: docs/contracts/action-item-contract.md (AekoBrandKit, AekoBrandKitUpdate).
Frame this as "how AEKO keeps generated content on-brand." In view mode, read-only status must be obvious.
In edit mode, show Before / After / Risk / Undo before applying changes. Avoid schema/backend language unless
the user asks for technical detail.
Language: mirror the user's chat language for user-facing steps, summaries, questions, and risk/undo copy. Keep slash commands, IDs, file paths, channel slugs, schema keys, and tool names in English/ASCII.
domain-id (optional) — UUID. If omitted, Step 1 auto-resolves or prompts.view):
view — print the full kit with version + updated_atedit — interactive edit of one or more fieldsThe user usually does NOT know their domain UUID. Never demand it cold.
$1 is a valid UUID → use it; skip to Step 2.$1 looks like a domain name (e.g. aeko.ai, slound.co.kr), call aeko_list_domains and pick the row whose base_url matches (case-insensitive substring match). If no match, fall through to 3.$1 is missing or unresolvable, call aeko_list_domains:
https://aeko-intelligence.com) and stop.Using <name> (<base_url>) so the user sees what was picked.Only call aeko_get_domain_info when you already have a UUID and want to confirm metadata. Do NOT use it for discovery — it can't list domains.
Call aeko_list_brand_kits(domain_id=<domain_id>) first so draft, generating, failed, and active kits created in the AEKO app are visible. If exactly one kit is returned, use its Kit ID as the selected kit. If multiple kits are returned, show the list and ask the user which kit to view/edit, defaulting to the most recently updated active kit when one exists; otherwise default to the first row.
After selecting a kit, call aeko_get_brand_kit_by_id(kit_id=<uuid>). The tool returns a pre-formatted markdown block; pass it through verbatim. Capture the Kit ID line (renders as - **Kit ID**: \``) into a local variable — Step 5 needs it to PATCH.
Backward compatibility: if aeko_list_brand_kits or aeko_get_brand_kit_by_id is unavailable in an older MCP session, fall back to aeko_get_brand_kit(domain_id). That fallback only sees the latest active kit by domain, so if it 404s while the app shows a draft kit, tell the user to update the AEKO MCP.
Backend-exposed fields (source: api/schemas/brand_kits.py::BrandKitResponse):
brand_name, tagline, logo_url, primary_colortone_of_voice, brand_voice_summary, target_audiencemust_include (phrases to always use), forbidden (phrases to never use), sample_urls (reference pages for voice grounding)metadata.account_tier, metadata.billing_url (drives tier-gate copy in other skills)snapshot_version (bumps only on semantic changes — voice/target_audience/must_include/forbidden), updated_at, status (active / draft / generating / failed)Fields that are null/empty show as (unset) in the formatter — never hide missing fields; missing fields are what the user should consider filling in. Voice fields (tone_of_voice + brand_voice_summary) are the highest-leverage — they feed /aeko-update-pdp, /aeko-create-content, and /aeko-fix-technical at execution time.
view, stop here.Offer follow-ups at the bottom of the output:
/aeko-brand-kit <domain_id> edit to change fields."/aeko-brand-competitor-analysis <brand_or_competitor> to research a competitor you're considering adding to the kit's forbidden / reference copy."edit, gather changesAsk which fields the user wants to change. Accept multiple at once. Every field on BrandKitUpdate is optional and PATCH-style — omitted fields are preserved server-side. Editable fields:
name, status (only active or draft allowed from the client — generating / failed are system-controlled), brand_name, tagline, tone_of_voice, brand_voice_summary, target_audience, primary_color (hex #rgb or #rrggbb), logo_url (absolute URL).sample_urls, must_include, forbidden.For list fields (sample_urls, must_include, forbidden):
Validate before sending:
logo_url — must be an absolute URL. If missing scheme, prepend https://.primary_color — must match ^#(?:[0-9a-fA-F]{3}){1,2}$; reject otherwise.sample_urls — must all be URLs; drop invalid entries with a warning.must_include / forbidden — strip whitespace, de-duplicate case-insensitively, cap each entry at 200 chars.status — only active or draft from the client.Use the kit_id captured in Step 2 and call aeko_update_brand_kit(kit_id=<uuid>, <field>=<value>, ...). The tool accepts the editable fields as named kwargs (see Step 4's list). Server returns the full updated kit, formatted.
Semantic vs cosmetic note: snapshot_version only bumps when a SEMANTIC field changes (brand_voice_summary, tone_of_voice, target_audience, must_include, forbidden). Cosmetic edits (name, tagline, logo_url, primary_color, brand_name, sample_urls) preserve the snapshot so downstream plans don't show a false stale-kit warning.
Show a short diff-style summary:
Updated Brand Kit — <domain_id>
Snapshot version: <old> → <new> (or "unchanged — cosmetic edit")
Changed: tone_of_voice, must_include (+2), forbidden (replaced)
Then re-print the relevant updated sections (not the whole kit unless asked).
If the user added sample_urls or wants to expand reference material, offer:
/aeko-brand-competitor-analysis "<brand_or_competitor>"
so they can deep-dive a reference brand before adding its URL to the kit.aeko_list_brand_kits returns rows but no active kit → show the rows and explain that executor skills using new Plan.md can use the selected brand_kit_id; old active-by-domain flows only see active kits.aeko_get_brand_kit fallback returns not-found → suggest the domain may not be provisioned or the current MCP is too old to see draft kits; show domain info via aeko_get_domain_info.aeko_update_brand_kit returns 4xx with a field error → print the field + reason; do not re-send blindly.aeko_get_action_plan / aeko_get_technical_guide.aeko_complete_action_item or any store-write tool.npx claudepluginhub aeko-intelligence/aeko-plugin --plugin aeko-pluginGuides creation, editing, and verification of skills for AI coding agents using test-driven development with subagent scenarios. Use when authoring or debugging skills.