Kelly brand
Brand-narrative single source of truth (TALE: Trace/Architect/Land/Evaluate) with a local App-in-Skill workbench. The agent drafts positioning, the message house of value pillars, the story bank, evidence-backed proof points, and vocabulary/tone guardrails; the human curates which drafts become the CANONICAL narrative; a drift monitor flags off-brand usage across channels. Use when the user invokes $kelly-brand or /kelly-brand, mentions brand narrative, brand messaging, positioning, message house, value pillars, story bank, proof points, tone/vocabulary guardrails, narrative quality (NQS), brand drift, or wants a single source of truth for what the brand says.From its SKILL.md
npx -y skills add mr-kelly/skills --skill kelly-brandAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
3 things to look at
- reads credentialsReads from 5 credential sources: `KELLY_BRAND_ENV_FILE` and 4 more.
- 4 stars4 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
- runs commandsInstructs the agent to run 3 commands, including `app/start.sh` and 2 more.
SKILL.md
13.0 KB, ~3.0k tokens by cl100k_base, as published. Nobody here has run it
Kelly Brand
Overview
Use this skill as the operator for a brand's narrative single source of truth. It keeps a file-backed App-in-Skill workbench over the whole message house — positioning, value pillars, the story bank, evidence-backed proof points, and vocabulary/tone guardrails — plus a drift monitor that flags off-brand usage across channels. The agent drafts; the human curates which drafts are adopted as the canonical narrative; the skill records those adoptions and can export the canonical narrative for downstream use.
Everything is organized by Aaron's TALE discipline — Trace → Architect → Land → Evaluate — and every narrative asset carries the TALE phase and the sub_skill that produced it.
Default interaction mode: App UI. Unless the user explicitly asks for chat-only handling, check onboarding/config, refresh or regenerate the local brand snapshot, start/reuse the local app with app/start.sh, and give the actual local URL. Use chat-only mode only when the user says "纯聊天", "chat only", "不要打开 UI", or similar; in that mode present numbered assets (#1, #2) and take verdicts in the conversation.
Design philosophy follows the App-in-Skill specification paper: https://mr-kelly.github.io/research/app-in-skill-specification-for-pairing-agent-skills-with-a-local-companion-ui.pdf. The agent owns drafting and any external reads/writes; the app reads and writes local files only; the file handoff is the contract; the human's clicks are reserved for judgment — chiefly adopting a draft as canonical.
App UI Screenshots
<table> <tr> <td width="50%"><img src="assets/screenshots/overview.webp" alt="Kelly Brand message house"></td> <td width="50%"><img src="assets/screenshots/drift.webp" alt="Kelly Brand drift alerts"></td> </tr> <tr> <td><strong>Overview</strong><br>The message house — positioning, value pillars, overall NQS, and the drift-alert count.</td> <td><strong>Drift</strong><br>Cross-channel off-brand alerts — offending usage versus the canonical guardrail.</td> </tr> <tr> <td width="50%"><img src="assets/screenshots/narrative.webp" alt="Kelly Brand narrative"></td> <td width="50%"><img src="assets/screenshots/stories.webp" alt="Kelly Brand story bank"></td> </tr> <tr> <td><strong>Narrative</strong><br>Message pillars and vocabulary guardrails, canonical versus draft.</td> <td><strong>Story bank</strong><br>Customer stories and evidence-backed proof points.</td> </tr> </table>Boundary
- The skill may read sources the user provides (positioning inputs, existing site/deck copy, channel exports), draft narrative assets, score them, validate schemas, and write local handoff files.
- The app reads and writes local files only. It must never publish copy, call channel APIs, or change any remote system.
- Adopting an asset to the canonical narrative, exporting the narrative, and resolving a drift alert are approval-required and skill-executed after the human's verdict.
scripts/execute_decisions.tsonly records operations inexecution_report.json; it performs no publishing itself. - Treat unverified claims, regulated claims, and legal/compliance wording as approval-required. A proof point with no named source must be
blocked, not shipped.
The TALE Framework
The 4 phases are both an item facet (phase) and the shape of the work. The 16 sub-skills below are the capability taxonomy — each drafted asset names the sub-skill that produced it in sub_skill.
Trace — map the ground truth
- narrative-baseline-mapper — capture the brand's current story as it actually reads today (origin story, status quo).
- category-narrative-mapper — map how the category talks so the brand can stand apart from it.
- audience-belief-mapper — surface what the audience already believes, needs, and objects to.
- positioning-truth-tracer — trace the defensible truths the positioning can stand on.
Architect — design the message system
- strategic-narrative-designer — write the core positioning statement (the roof of the house).
- message-system-architect — build the value pillars that hold the positioning up.
- brand-language-codifier — codify the vocabulary (say-this/not-that) and guardrails (banned/regulated language).
- story-bank-builder — assemble the story bank of reusable customer and brand stories.
Land — make it usable across channels
- narrative-cascade-planner — plan how the narrative cascades to each channel.
- pitch-narrative-builder — shape the narrative into a pitch.
- narrative-enablement-kit — package the narrative so teams can actually use it.
- proof-point-packager — package proof points with their evidence (a named source and stat).
Evaluate — test, monitor, gate
- message-test-designer — design tests for whether messages land.
- narrative-resonance-monitor — monitor how the narrative resonates.
- narrative-drift-monitor — flag off-brand / misaligned usage across channels (the Drift view).
- narrative-quality-auditor ⛩ — the gate: score narrative quality (NQS 0–100) via the TALE framework and output SHIP / FIX / BLOCK. This gate is prominent on the overview and on every asset.
Narrative Quality Score (NQS) gate
The narrative-quality-auditor ⛩ scores each asset and the narrative as a whole:
- SHIP (score ≥ 80) — ready to adopt as canonical.
- FIX (55–79) — usable but flagged for a concrete revision.
- BLOCK (< 55, or a proof point missing its source) — must not be published or adopted until fixed.
The overview shows the overall NQS with its gate, and each asset card shows its own NQS chip. A BLOCK verdict from the auditor should be mirrored by a blocked status on the item until resolved.
First Run And Onboarding
On invocation, check app/.data/onboarding.json and private config readiness. If onboarding is absent/incomplete, guide setup before doing real narrative work.
Private config priority:
KELLY_BRAND_CONFIG=/absolute/path/to/config.jsonskills/kelly-brand/config.local.json~/.config/kelly-brand/config.jsonskills/kelly-brand/config.example.jsonas template only
Env priority:
- Existing environment variables
KELLY_BRAND_ENV_FILE=/absolute/path/to/.env- Repository root
.env skills/kelly-brand/.env.local~/.config/kelly-brand/.env
Ask for non-secret setup details only: brand profile (name, category, audience, mission), the positioning inputs (for whom / who need / our brand is / that / unlike / because), channels monitored for drift and how each is reached, tone/style and reading level, official URLs, and the risk policy (banned phrases, regulated claims). Never ask the user to paste secrets into chat; channel source URLs/tokens belong only in local env files, referenced by source_url_env/token_env.
When setup is complete and the user confirms, write app/.data/onboarding.json:
{
"completed": true,
"completed_at": "ISO timestamp",
"config_version": "1"
}
Local App
Start the workbench with:
skills/kelly-brand/app/start.sh
The app uses local HTTP on 127.0.0.1, preferring port 3230 through 3999, or KELLY_BRAND_UI_PORT when set. The launcher reuses a running instance only when /api/state proves it is the same app (app: "kelly-brand").
Required app views (hash routes):
#/overview— the message house. The canonical/draft positioning statement at the top, the value pillars, the overall NQS with its gate, canonical vs needs-review counts, and the open drift-alert count.#/narrative— message pillars plus vocabulary/guardrails, canonical vs draft, each editable with its NQS and TALE phase. Adopt / Request changes / Block per asset.#/stories— the story bank and the proof points with their evidence (source + stat). A proof point missing evidence is blocked.#/drift— off-brand/misalignment alerts the drift monitor flagged, each showing the offending usage vs the canonical guardrail, with Approve fix / Dismiss.#/settings— sanitized config summary: brand profile, tone/reading level, banned/regulated language, official URLs, monitored channels with source-readiness booleans, data provider, and onboarding state. Never expose secret values.
The left sidebar keeps the fixed workflow filters (All, Needs Review, Canonical (= approved), Done, Blocked) as primary nav alongside the views. "Canonical" is the UI label for the approved state.
Demo mode:
?demo=1opens a deterministic mock brand (invented "Fernpath") for documentation and screenshots.?demo=overview,?demo=narrative,?demo=stories,?demo=drift, and?demo=settingsselect named scenes.lang=enorlang=zhforces UI chrome language for screenshots.- Demo API responses never read or write files under
app/.data/or any private config.
UI language: support English and Chinese chrome with Auto default. Keep the brand's own narrative content (positioning, pillars, stories) in its original language.
File Contract
Read references/brand-schema.md before editing the app, scripts, or any generated brand JSON.
Primary local files:
app/.data/brand_snapshot.json: normalized narrative snapshot (positioning, items, drift alerts, metrics) generated by the skill/scripts.app/.data/decisions.json: user verdicts and review notes keyed byitem_idoralert_id, written by the app.app/.data/agent_tasks.json: queued agent work — assets inchanges_requestedwith the user's comment. The skill polls this to pick up revisions.app/.data/execution_report.json: latest operations written byscripts/execute_decisions.ts.app/.data/onboarding.json: onboarding completion marker.app/.data/agent.lock: temporary lock while the skill is generating or executing. The app rejects decision writes while it exists.config.local.json: private brand configuration, ignored by git.
Use scripts/validate_ui_schema.ts before relying on a snapshot in the UI. The app shows an empty setup state when no snapshot exists.
Normal Workflow
- Detect mode. Default to App UI.
- Load private config through the config helpers. If only
config.example.jsonexists, enter onboarding. - When the user feeds material (positioning inputs, existing copy, channel exports): acquire
app/.data/agent.lock, updatebrand_snapshot.json— draft/upsert narrative assets by stableitem_idacross the sixtypes, tag each with its TALEphaseandsub_skill, run the narrative-quality-auditor to set eachnqsand the overall NQS, run the narrative-drift-monitor over monitored channels to (re)populatedrift_alerts, recompute metrics — validate withscripts/validate_ui_schema.ts, then release the lock. - Start/reuse the UI and report the URL so the user can review the message house, the story bank, and the drift alerts.
- Poll
app/.data/agent_tasks.jsonforchanges_requesteditems. Re-draft each per the user's comment, re-score it, set it back toneeds_review, and clear the task. - On "adopt" / "promote approved narrative": re-read
decisions.json, re-check the lock, and runscripts/execute_decisions.ts --applyto recordpromote_to_canonical(registrynarrative) andresolve_driftoperations inexecution_report.json. Then, only for approved assets, update the canonical narrative and — if asked —export_narrativeto a markdown file. Mark eachdonein the snapshot afterwards. - Never adopt or export an asset without an explicit
approveverdict. Never let aBLOCK/blocked proof point (no named source) reach any channel.
Safety Defaults
- Treat unverified claims, regulated claims (
organic,#1,guaranteed,certified,carbon-neutral), and legal/compliance wording as approval-required. Every public number must cite a named source. - A proof point without evidence is
blockedby the NQS gate; do not adopt or publish it. - Store only the narrative content needed for review; keep raw channel exports out of the snapshot.
- Redact tokens and credential-like strings from logs, reports, and UI state; expose only boolean source-readiness for configured env vars.
- Keep stable ids (
item_id,alert_id) so repeated updates and executions are idempotent. - If decisions and the snapshot disagree (missing item, stale ref), stop and regenerate rather than guessing.
What ships with it: 51 files
206.3 KB alongside SKILL.md, 24 of them executable
agents/
- openai.yaml269 B
app/
- accent-theme.css7.5 KB
- accent-theme.jsruns7.3 KB
- app.jsruns26.2 KB
- demo-visuals.css1.4 KB
- demo-visuals.jsruns4.4 KB
- i18n/messages.jsruns7.6 KB
- index.html5.3 KB
- server/demo.tsruns17.0 KB
- server/demo-visuals.tsruns12.1 KB
- server/hono.tsruns3.2 KB
- server/index.tsruns779 B
- server/launcher.tsruns2.7 KB
- server/paths.tsruns1.0 KB
- server/setup.tsruns6.3 KB
- server/store.tsruns6.9 KB
- setup-gate.css4.5 KB
- setup-gate.jsruns8.8 KB
- start.shruns465 B
- styles.css20.9 KB
assets/
- screenshots/drift.webp130 B
- screenshots/drift-zh-CN.webp130 B
- screenshots/narrative.webp130 B
- screenshots/narrative-zh-CN.webp130 B
- screenshots/overview.webp131 B
- screenshots/overview-zh-CN.webp131 B
- screenshots/stories.webp130 B
- screenshots/stories-zh-CN.webp130 B
- screenshots/thumbs/drift.webp130 B
- screenshots/thumbs/drift-zh-CN.webp130 B
- screenshots/thumbs/narrative.webp130 B
- screenshots/thumbs/narrative-zh-CN.webp130 B
- screenshots/thumbs/overview.webp130 B
- screenshots/thumbs/overview-zh-CN.webp130 B
- screenshots/thumbs/stories.webp130 B
- screenshots/thumbs/stories-zh-CN.webp130 B
lib/
- data-provider/busabase-provider.tsruns13.4 KB
- data-provider/busabase-schema.tsruns1.3 KB
- data-provider/index.tsruns4.3 KB
- config.example.json1.6 KB
11 more files not listed here. See all 51 in the repository.
Gives 0 of the 12 instructions most marketing audience skills give in ~3.0k tokens
Counted across 690 of the 894 authors here whose files we hold, read 2026-08-07
- Apply Poppins font to headingsin 41 of 690, across 6 files
- Apply Lora font to body textin 41 of 690, across 6 files
- Use Arial fallback for headingsin 39 of 690, across 4 files
- Use Georgia fallback for body textin 39 of 690, across 4 files
- Maintain text hierarchy and formattingin 39 of 690, across 4 files
- Use accent colors for non-text shapesin 38 of 690, across 3 files
- Use RGB values for precise color matchingin 38 of 690, across 3 files
- Use brand colors for primary text and backgroundsin 36 of 690, across 1 file
- Read product marketing context file before asking questions, starting, or auditingin 35 of 690, across 23 files
- Use active voice instead of passive voicein 26 of 690, across 10 files
- Implement or generate appropriate JSON-LD structured datain 24 of 690, across 17 files
- Prioritize clarity over clevernessin 22 of 690, across 8 files
Said here and by no other author read
- start the local app by default
- guide onboarding before doing narrative work
- acquire the agent lock before updating the snapshot
- tag every asset with TALE phase and sub-skill
- score every asset using the quality auditor
- validate snapshot schema before starting the UI
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.