Brand Persona Skill logo

Brand Persona Skill

Organization
acnlabs
brand-persona-skill

Distill any commercial entity into a personalized brand agent — a living brand persona with authentic voice, declared service capabilities, and a standard service contract. Every commercial entity has a brand: a name, a style, a way of showing up in the world. This skill exists so that a street vendor, a family clinic, and a global chain can all have their own agent on equal footing. Supports both distillation from existing brand content and declaration from scratch.

Overview

Publisheracnlabs
RepositoryOpenPersona
Skill namebrand-persona-skill
Stars
56
Forks
5
Bundled files
3
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 3 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by acnlabs on GitHub. Read the source before you install it.

Installation

Install the Brand Persona Skill AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/acnlabs/OpenPersona/tree/main/skills/brand-persona-skill
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/acnlabs/OpenPersona.git /tmp/OpenPersona
mkdir -p .claude/skills
cp -r /tmp/OpenPersona/skills/brand-persona-skill .claude/skills/brand-persona-skill
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Brand Persona Skill in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Brand Persona Skill on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Brand Persona Skill is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

brand-persona-skill

brand-persona-skill is an orchestration skill for turning any commercial entity into a personalized brand agent. It distills brand identity from existing content (or guides a declaration from scratch), defines the brand's service capabilities as skills, and generates a full OpenPersona pack that external agents can discover and call.

This is not a tool for creating an agent about a brand. It generates the brand itself as an agent.

Dependency chain:

  • brand-persona-skill → skills/anyone-skill (Phase 1A only — required when distilling from existing content; not needed for Path B declaration)
  • brand-persona-skill → skills/open-persona (Phase 4 — persona pack generation, both paths)
  • persona-knowledge is transparently integrated via anyone-skill when installed — no extra work needed

Generated output: a self-contained {slug}-skill/ persona pack with brand soul, declared service skills, agent-card for A2A discovery, and a service contract for external agents.

Trigger phrases

  • /create-brand-agent
  • "help me create a brand agent"
  • "generate a persona for my brand / shop / studio / institution"
  • "I want to create a personalized agent for my brand / shop / institution"
  • "distill my brand into an agent"
  • "turn my business into a persona"

Source of truth

  • Preset base: presets/commercial-base/persona.json
  • Field mapping template: skills/brand-persona-skill/assets/brand.persona.template.json
  • Service contract template: skills/brand-persona-skill/references/SERVICE-CONTRACT.template.md
  • Generated pack: ./{slug}-skill/

Phase 0 — Path Selection

Ask the user:

Does your brand have any of the following existing content?

  [A] Yes → brand guidelines / customer service records / website copy /
             founder interviews / marketing materials / social media archives
             (any format: .md / .txt / .pdf / chat exports / .json)

  [B] No or very little → declare brand parameters directly

If the user selects [A], proceed to Phase 1A. If the user selects [B], proceed to Phase 1B.


Phase 1A — Brand Soul Distillation (Primary path — selected A)

Load skills/anyone-skill/SKILL.md and follow its instructions.

When anyone-skill asks "Who do you want to distill?", select [6] Archetype — composite persona with no single real-world subject. This is the correct type for a brand persona.

Brand content → anyone-skill data type mapping (use this to guide the user on what to provide):

Brand contentanyone-skill data type
Brand guidelines / VI spec / brand manual.md / .pdf → universal adapter
Customer service records / sales scriptsChat export → chat_export adapter
Website copy / WeChat public account articles.txt / .md → universal adapter
Founder interviews / brand story.txt → universal adapter
Social media archives (X/Instagram)Archive directory → social adapter
Product catalog / FAQ document.md / .pdf → universal adapter

Note: if skills/persona-knowledge/SKILL.md is present, anyone-skill will automatically route brand knowledge into the MemPalace persistent store. No extra steps needed.

Output: a structured brand persona draft with four dimensions extracted:

  • Values (what the brand stands for)
  • Voice (how the brand speaks)
  • Boundaries (what the brand will and will not do)
  • Background (brand history, context, positioning)

Collect this output and proceed to Phase 2.


Phase 1B — Brand Soul Declaration (Secondary path — selected B)

Collect the following from the user, one question at a time:

  1. Brand name — the name the agent will use to introduce itself
  2. Slug — URL-safe identifier, lowercase letters, numbers, hyphens only (e.g. jinguyuan-dumplings)
  3. Industry / domain — e.g. food & beverage, education, retail, healthcare, professional services
  4. One-line bio — what this brand is in one sentence (used as soul.identity.bio)
  5. Personality keywords — 3–5 words describing the brand personality (e.g. "warm, grounded, honest")
  6. Speaking style — how the brand talks to customers (formal / casual / playful / expert / friendly)
  7. Core values — 2–3 things the brand will never compromise on
  8. Hard limits — what the agent must always refuse or escalate (e.g. "never quote prices without checking live data", "never promise delivery times")

Optional: use WebSearch to research competitors or industry tone references if the user needs inspiration.

Output: structured brand soul fields. Proceed to Phase 2.


Phase 2 — Service Skill Declaration (Required — both paths)

Services are skills. Every service capability the brand agent offers maps directly to a skills[] entry in persona.json.

Ask the user the following questions (Questions 1–3 are required; Question 4 is only asked if any service in Question 2 uses A2A delegate):

Question 1: What can the agent do autonomously?

List every service the agent can handle without human involvement. Think in two categories:

  • Information services (knowledge-based): answering questions about the brand, products, policies, hours, locations, pricing, FAQs
  • Action services (execution-based): taking reservations, placing orders, generating queue numbers, checking order status, processing returns

Question 2: How is each service implemented?

For each service declared above, the implementation method is transparent to this skill — the brand chooses based on what they have:

ImplementationWhen to useExample
Knowledge responseInformation queries, no system integrationBusiness hours, product descriptions, policies
Local scriptSpecific business operationsQueue number generation, appointment booking
MCP toolHas own service endpointOrder lookup, inventory check
A2A protocolAgent-to-agent collaborationCross-system business flows
Webhook / APIHas existing ERP / CRM / payment systemOrder management, customer data
Human handoffHigh-risk or complex situationsComplaints, contracts, disputes
A2A delegateOperation belongs to a third-party platform that has its own brand agentF&B: queue via Meituan agent; Hotel: booking via Ctrip agent; Fitness: class sign-up via booking platform agent
MixedMost real businessesAuto-answer queries + escalate transactions

Record the implementation method in the skill's description field.

A2A delegate requires collecting three extra fields:

  1. Third-party agent address — Ask: "Does [third-party platform] have a brand agent on ACN? If yes, provide its ACN slug or agent-card URL. If not, record as tbd."
  2. Routing parameters — Ask: "Does [third-party platform] need any identifiers to locate your specific business? For example, a store ID, merchant ID, property code, or doctor ID on their platform." Record these parameters (e.g. shop_id: 4211342 for a restaurant branch; hotel_id: bj-sanlitun-001 for a hotel property; clinic_id: 88 + doctor_id: 204 for a clinic) — they will be written into the trigger mapping table in Step 4c.
  3. Client-side capability — Ask: "Is there a skill the customer's agent could install to handle this operation directly using the parameters above? For example, meituan-queue for Meituan queue operations, ctrip-booking for Ctrip hotel reservations, wechat-health-booking for healthcare appointments." This enables a three-tier execution model written into the service contract:
  • Tier 1 (preferred): customer agent has capability_needed skill installed → execute directly using the routing parameters provided by this brand agent
  • Tier 2 (when available): third-party brand agent is on ACN → A2A delegate
  • Tier 3 (fallback): neither available → human handoff or platform link

Record all three fields. They will be written into both the trigger mapping table (Step 4c) and the SERVICE-CONTRACT routing table (Step 4d).

Question 3: What must the agent never do?

List hard limits and escalation triggers:

  • Topics or operations the agent must refuse entirely
  • Operations that require explicit user confirmation before execution
  • Situations that must be handed off to a human

Question 4: Confirm A2A delegate routing table (only if A2A delegate was selected in Question 2)

Summarise all A2A delegate entries collected above into a routing table for confirmation before proceeding. For each delegated service, verify the three fields collected in Question 2 are complete:

ServiceRouting parametersClient-side capabilityThird-party agent ACNFallback
{service collected in Q2}{params collected in Q2}{capability collected in Q2}{ACN slug or "tbd"}{platform link or human channel}

Ask the user to confirm or correct any row. Once confirmed, this table is written verbatim into SERVICE-CONTRACT.md in Phase 4.

Output mapping:

  • Each declared service → one entry in skills[] with name, description, and optional trigger
  • A2A delegate services → also recorded in the routing table (see Phase 4)
  • Hard limits → appended to soul.character.boundaries

Phase 3 — Write persona.json

Merge Phase 1 brand soul and Phase 2 service skills into a complete persona.json using presets/commercial-base as the base. Apply this field mapping:

SourceTarget field
Phase 1A/1B brand namesoul.identity.personaName
Phase 1A/1B slugsoul.identity.slug
Phase 1A/1B one-line biosoul.identity.bio
Phase 1A/1B personality keywordssoul.character.personality
Phase 1A/1B speaking stylesoul.character.speakingStyle
Phase 1A/1B core values + hard limitssoul.character.boundaries (combined as a single string; list items separated by newline)
Phase 1A/1B background / brand storysoul.character.background (if available from distillation)
Phase 2 service skills listskills[] (each entry: name, description, optional trigger)
Phase 2 additional hard limitsappend to soul.character.boundaries
Base fieldsall other fields from presets/commercial-base/persona.json

Use skills/brand-persona-skill/assets/brand.persona.template.json as a writing guide. Do not copy the template file directly — it contains _comment fields that will cause schema validation errors. Write a new persona.json based on its structure, with all _comment keys removed.

Gate — Soul Gate: before proceeding, verify:

  • soul.identity.personaName is non-empty
  • soul.identity.slug matches ^[a-z0-9-]+$
  • soul.identity.bio is non-empty
  • soul.character.personality is non-empty

If any field is missing, return to Phase 1 to collect it.

Gate — Service Gate: verify:

  • skills[] contains at least one entry with a non-empty name
  • soul.character.boundaries is non-empty

If either check fails, return to Phase 2.


Phase 4 — Generate Persona Pack

Load skills/open-persona/SKILL.md and follow its generation instructions.

Step 4a — Run the generator

bash
npx openpersona create --config persona.json --output ./{slug}-skill

Gate — Generate Gate: if openpersona create exits non-zero, read the validation error, fix persona.json, and retry.

Step 4b — Write behavior guide

Fill skills/brand-persona-skill/assets/behavior-guide.template.md with brand-specific values and write the result to ./{slug}-skill/soul/behavior-guide.md, overwriting the framework default. Apply this mapping:

PlaceholderSource
{{brandName}}Phase 1A/1B brand name
{{oneLinerBio}}Phase 1A/1B one-line bio
{{onboardingQuestion_1/2/3}}3 realistic first questions a customer would ask this brand
{{blindspotRedirect}}Escalation channels declared in Phase 2 (human handoff channel, official website, customer service number, etc.)
{{confirmationRequiredOps}}Action services from Phase 2 that require confirmation (list each by name)
{{brandVibe}}Phase 1A/1B vibe / personality keywords
{{speakingStyleNote}}Phase 1A/1B speaking style, condensed to one sentence
{{brandBoundaries}}soul.character.boundaries from Phase 3

Step 4c — Generate trigger mapping table

From the Phase 2 skills[] list, write a trigger mapping table and append it to ./{slug}-skill/SKILL.md under a new section ## Trigger Scenarios. For each declared service skill, produce one or more rows:

markdown
## Trigger Scenarios

| What the customer might ask | Corresponding operation |
|---|---|
| {realistic user phrasing for skill_1} | {skill_1 name and implementation method} |
| {realistic user phrasing for skill_2} | {skill_2 name and implementation method} |
...

Use natural customer language in the left column (questions a real customer would type, not technical names). Use the skill name + implementation method in the right column.

For A2A delegate skills, expand the right column to show all three execution tiers on separate lines. The table row format for an A2A delegate entry looks like this:

markdown
| "How long is the wait? Can you add me to the queue?" | **queue-waitlist** (A2A delegate)<br>Tier 1: install `meituan-queue` → params: shop_id `4211342`<br>Tier 2: A2A → `acn://meituan-queue-agent` (tbd)<br>Tier 3: fallback → https://meituan.com/restaurant/4211342 |

More examples by industry (same table row format):

markdown
| "I'd like to book a room for two nights" | **room-booking** (A2A delegate)<br>Tier 1: install `ctrip-booking` → params: hotel_id `bj-sanlitun-001`<br>Tier 2: A2A → `acn://ctrip-booking-agent` (tbd)<br>Tier 3: fallback → https://ctrip.com/hotels/bj-sanlitun-001 |

| "Can I book an appointment with Dr. Li?" | **appointment-booking** (A2A delegate)<br>Tier 1: install `wechat-health-booking` → params: clinic_id `88`, doctor_id `204`<br>Tier 2: A2A → `acn://wechat-health-agent` (tbd)<br>Tier 3: fallback → hospital registration portal |

The customer agent reads the three tiers and chooses the best available execution path at runtime.

Step 4d — Write service contract

Copy skills/brand-persona-skill/references/SERVICE-CONTRACT.template.md
→ ./{slug}-skill/references/SERVICE-CONTRACT.md

Fill in all {{placeholder}} values with the information collected in Phase 2.

For the Third-Party Agent Routing section, use the routing table collected in Phase 2 Question 4:

  • If the third-party agent's ACN address is known → fill in acn://{slug} and set status to active
  • If only a platform link is known → fill in the URL and set status to link-fallback
  • If neither is known → set status to tbd and fill in a human-readable fallback instruction

The routing table is the most important part of the contract for customer agents — it tells them the complete service map of this brand, including what this agent delegates and where.


Phase 5 — Validate and Publish

Gate — Contract Gate: verify that ./{slug}-skill/agent-card.json has a non-empty skills[] array. agent-card.json is auto-generated by openpersona create — its skills[] maps directly from persona.json's skills[]. If it is empty, the root cause is an empty skills[] in Phase 3; return to Phase 2 to declare at least one service skill and regenerate.

Confirm the generated pack structure with the user:

{slug}-skill/
├── SKILL.md              ← brand agent behavior rules
├── persona.json          ← brand declaration
├── agent-card.json       ← A2A discovery credential
├── acn-config.json       ← ACN registration config
├── soul/
│   ├── injection.md      ← brand soul injection
│   ├── constitution.md   ← ethical foundation (inherited)
│   └── behavior-guide.md ← brand behavior guide
├── scripts/
│   └── state-sync.js     ← cross-session state management
└── references/
    ├── SERVICE-CONTRACT.md  ← service capabilities and boundaries
    └── SIGNAL-PROTOCOL.md   ← host integration guide

Optional — Register on ACN:

bash
npx openpersona acn-register {slug} --endpoint https://your-agent-endpoint.example.com

This publishes the brand agent's agent-card.json to the Agent Communication Network so other agents can discover and call it without installing any brand-specific skill. The --endpoint flag is the only value the brand must supply — everything else (agent-card.json, acn-config.json) was auto-generated by openpersona create.


Failure routing

GateOn failure
Soul GateReturn to Phase 1, collect missing fields
Service GateReturn to Phase 2, add at least one service skill
Generate GateRead openpersona validate error, fix persona.json fields, retry
Contract GateReturn to Phase 2, verify skills[] is populated, regenerate

Human approval required

Always ask for explicit confirmation before:

  • Executing take_number, place_order, cancel_order, or any state-changing operation
  • Publishing or registering the agent to ACN or any external network
  • Any operation declared in the service contract as requiring confirmation

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Brand Persona Skill AI skill do?

Distill any commercial entity into a personalized brand agent — a living brand persona with authentic voice, declared service capabilities, and a standard service contract. Every commercial entity has a brand: a name, a style, a way of showing up in the world. This skill exists so that a street vendor, a family clinic, and a global chain can all have their own agent on equal footing. Supports both distillation from existing brand content and declaration from scratch.

Why use Brand Persona Skill on TypingMind?

Because you install it once and use it with any model. Brand Persona Skill is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Brand Persona Skill in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/acnlabs/OpenPersona/tree/main/skills/brand-persona-skill. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Brand Persona Skill?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Brand Persona Skill?

As many as you like. As long as a model supports skills, you can use Brand Persona Skill with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Brand Persona Skill AI skill free?

Yes. It is published on GitHub by acnlabs under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇