[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71EX37WSDS9XZ0MWWN9WFX8":3,"skill-same:01M71EX37WSDS9XZ0MWWN9WFX8":165},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":37,"publishedAt":58,"linkOnly":59,"markdownContent":60,"markdownBody":61,"frontMatter":62,"refName":69,"commitSha":70,"skillDirectory":71,"forksCount":72,"repositoryHtmlUrl":73,"repositoryHomepageUrl":74,"ownerHtmlUrl":75,"ownerBlogUrl":76,"ownerDescription":77,"updatedAt":78,"install":79,"resources":92},"01M71EX37WSDS9XZ0MWWN9WFX8","brand-voice",null,"Create, refresh, compare and validate BRAND-VOICE.md from web, Notion, local prose or an interview. Use for brand voice, writing style guide, founder\u002Fpersona voice and voice.extends inheritance. Preserve manual sections and resolve source conflicts. Applying an existing voice to prose belongs to humanize-en -f.","coroboros\u002Fagent-skills","coroboros","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F276246903?v=4","01M71EW9FC462PB6BEAC5P9JK1","Coroboros","01M71EW9G1KB3SQM769D2JMXXZ",5,"MIT","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002FSKILL.md",[18,23,26,29,34],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":30,"categoryName":31,"taxonomyType":32,"taxonomyTypeDesc":33},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",{"categoryNo":35,"categoryName":36,"taxonomyType":32,"taxonomyTypeDesc":33},"01JBSEEDCAT000000000000036","内容创作者",[38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57],"voice","brand","brand voice","invoke","design","child","wikipedia","URL","host","inheritance","local","show","conflicts","write","read","question","capabilities","update","create","writing","2026-11-10 10:12:30",false,"---\nname: brand-voice\ndescription: Create, refresh, compare and validate BRAND-VOICE.md from web, Notion, local prose or an interview. Use for brand voice, writing style guide, founder\u002Fpersona voice and voice.extends inheritance. Preserve manual sections and resolve source conflicts. Applying an existing voice to prose belongs to humanize-en -f.\nwhen_to_use: Routes via `$ARGUMENTS` first token — `extract` (sources → BRAND-VOICE.md; `--extends \u003Cparent>` scaffolds a child), `update` (refresh from new sources), `diff` (regression check; single-arg form when child has `voice.extends`), `validate` \u002F `lint` \u002F `check` (walks chain), `show` (testable rules; `--chain`\u002F`--explain`\u002F`--raw` for inheritance). Skip when the user wants to apply or check prose against an existing voice (rewrite, humanize, \"does this match\") — invoke `\u002Fhumanize-en -f BRAND-VOICE.md` instead.\nargument-hint: \"[extract|update|diff|validate|show] [-s] [-o \u003Cpath>] [-u \u003Curl>] [-n \u003Cid|url>] [-d \u003Cdir>] [-f \u003Cfile>] [refs|paths]\"\nlicense: MIT\ncompatibility: \"Requires filesystem access and Python 3.10+ for bundled validation and inheritance tools. Web and Notion sources require corresponding read capabilities. Interviews use the host's supported question mechanism; local-source work does not require those connectors.\"\nallowed-tools: Read Write Edit Grep Glob WebFetch AskUserQuestion Bash(jq *) Bash(test *) Bash(wc *) Bash(find *) Bash(python3 *) Bash(git *) Bash(mktemp *)\nmetadata:\n  author: coroboros\n  sources: \"github.com\u002Fgoogle-labs-code\u002Fdesign.md; en.wikipedia.org\u002Fwiki\u002FWikipedia:Signs_of_AI_writing; every.to\u002Fon-every\u002Fintroducing-spiral-v3-an-ai-writing-partner-with-taste\"\n---\n\n# Brand Voice\n\n\u003C!-- canonical:writing-rules:start -->\n## Important — Writing rules\n\nApply these rules to emitted prose: docs, comments, commit messages, PR bodies, and release notes.\n\n- Match surrounding punctuation, capitalization, and formatting.\n- Every sentence changes the reader's understanding. Cut it otherwise.\n- Lead with the action or outcome.\n- Use concrete language and lists when they improve comparison or sequence.\n- Assert positively. Reserve negation for real constraints (`NEVER commit secrets`).\n- No marketing words: powerful, robust, seamlessly, leverage, unlock, comprehensive, delightful.\n- No AI tells: delve, tapestry, intricate, pivotal, testament, underscore, crucial, garner, showcase, additionally, moreover, furthermore, indeed.\n- For substantive English prose, use `\u002Fhumanize-en` if installed with the existing scope and authorization. It adds no approval stage; skip redundant passes over short status text.\n\u003C!-- canonical:writing-rules:end -->\n\nGovern `BRAND-VOICE.md` — the canonical writing voice document for a brand. Two layers: YAML frontmatter (machine-readable normative rules consumed by writing skills) plus eleven prose sections (human-readable rationale). Same split as `DESIGN.md` and the same `design-system` skill pattern: a canonical file at the project root, CLI-style subcommands for the lifecycle.\n\nAdditional context from the user: $ARGUMENTS\n\n## Subcommand routing\n\nParse the first positional token of `$ARGUMENTS`. If it matches a verb below, load the referenced file and follow its workflow. Otherwise fall through to the default workflow at the end of this document.\n\n| First token | Mode | Reference |\n|-------------|------|-----------|\n| `extract` | Ingest sources, synthesise canonical voice doc, write to `.\u002FBRAND-VOICE.md` | [`steps\u002Fextract.md`](.\u002Fsteps\u002Fextract.md) |\n| `update` | Refresh an existing voice doc from new sources, preserve manual sections | [`steps\u002Fupdate.md`](.\u002Fsteps\u002Fupdate.md) |\n| `diff` | Show what changed between two versions of the voice doc (git-aware) | [`steps\u002Fdiff.md`](.\u002Fsteps\u002Fdiff.md) |\n| `validate` (aliases: `lint`, `check`) | Lint a voice doc against `canonical-format.md` — verdict + errors + warnings + fix suggestions, CI-friendly exit codes | [`steps\u002Fvalidate.md`](.\u002Fsteps\u002Fvalidate.md) |\n| `show` | Print the flat list of testable rules from the voice doc | [`steps\u002Fshow.md`](.\u002Fsteps\u002Fshow.md) |\n| (none) | See *Default workflow* below | (this file) |\n\nThere is no `apply` subcommand. Application of the voice — rewriting prose to match it — is the consumer skill's job. `humanize-en -f BRAND-VOICE.md` uses `scripts\u002Fextract_rules.py --resolved-json` so its semantic and mechanical passes share the effective mapping. Other consumers follow the same contract. Direct YAML is sufficient only for local rules without `voice.extends`; unavailable resolution of an inherited voice remains an explicit gap.\n\n## Canonical file location\n\nThe voice doc lives at `.\u002FBRAND-VOICE.md` by default — at the project root, versioned in git, alongside `DESIGN.md`, `README.md`, `LICENSE.md`. Override the path with `-o \u003Cpath>` when the voice is multi-project.\n\n`extract` refuses to overwrite an existing file. To refresh, use `update`. To replace, delete first.\n\nWhen `-s` is passed alongside `extract`, the skill also writes a copy to `~\u002F.agents\u002Foutput\u002F{project}\u002Fbrand-voice\u002Fbrand-voice-{slug}.md` for pipeline-history consumers (`{slug}` = kebab of `voice.name`; `{project}` = kebab-cased basename of the git toplevel, else cwd) and reports its fully-expanded absolute path (no tilde, no magic). The canonical file at `.\u002FBRAND-VOICE.md` remains the single source of truth.\n\n### Cross-repo distribution\n\nWhen a brand spans repositories, choose a shared-source pattern and document it in each authorized project's active instruction entrypoint (AGENTS.md, CLAUDE.md or its local equivalent). Identify other consumers without editing projects outside the request:\n\n- **Brand workspace canonical** — keep `BRAND-VOICE.md` at the brand workspace root (e.g. `~\u002F\u003Cbrand>\u002FBRAND-VOICE.md`). Each subproject references it via absolute path: `\u002Fhumanize-en -f ~\u002F\u003Cbrand>\u002FBRAND-VOICE.md draft.md`. Simplest. Best when subprojects share a local workspace.\n- **Monorepo** — `packages\u002Fbrand\u002FBRAND-VOICE.md` consumed by every app in the monorepo. Single PR for cross-cutting voice changes.\n- **Git submodule** — canonical brand repo included as a submodule. Atomic updates via submodule bump. Best when the brand is owned by a separate team.\n- **Published package** — `@\u003Corg>\u002Fbrand-voice` on npm with `BRAND-VOICE.md` plus the bundled scripts (`extract_rules.py`, `voice_lint.py`). Versioned, works cross-repo without a shared filesystem.\n- **Copy + periodic `\u002Fbrand-voice diff`** — a copy in each repo; periodic `diff \u003Ccanonical> \u003Clocal>` catches drift. Simplest tooling, highest drift risk. Pair with a CI check.\n\nNotion-as-source-of-truth is its own pattern: keep the spec in Notion, refresh local `BRAND-VOICE.md` periodically via `\u002Fbrand-voice update -n \u003Cpage-id>`. Notion stays the editorial surface; the local file is the executable artifact.\n\n### Multi-target: one file or many?\n\nThe default and recommended pattern is **one `BRAND-VOICE.md` per brand**. Within that file, `contexts:` handles register variation across document types (RFC vs landing page vs press release), audience segments (B2B vs consumer, technical vs lay), or channels (long-form vs social vs email):\n\n```yaml\ncontexts:\n  rfc:      { density: max, numbered_sections: true }\n  landing:  { sentence_count: 1 }\n  social:   { shorter_form: true, formality_preserved: true }\n```\n\nDifferent contexts share the same lexicon, the same forbidden patterns, the same pronouns — what changes is the register, the sentence rhythm, the example openers.\n\n**Multiple voice files are warranted only when** the brand has genuinely separate sub-brands with separate voices: a luxury group that owns Maison X Couture (institutional, French-rooted) and Maison X Beauty (more accessible, broader audience). Each sub-brand gets its own `BRAND-VOICE.md`. The skills consume each independently — `humanize-en -f maison-x-couture.md` for one, `humanize-en -f maison-x-beauty.md` for the other.\n\n**Inheritance via `voice.extends`** — when sub-voices share a common substrate (founder voice on top of corporate, persona on top of institutional, multi-host media brand), declare `voice.extends: .\u002FBRAND-VOICE.md` on the child file. The child inherits the parent's rules and overrides only what differs. Per-field merge policy, `_replace` \u002F `_remove` overrides, cycle detection, and validation order live in [`references\u002Fcanonical-format.md`](.\u002Freferences\u002Fcanonical-format.md) § Inheritance; a worked example sits in [`references\u002Fexample-multi-voice.md`](.\u002Freferences\u002Fexample-multi-voice.md).\n\nWhen in doubt, start with one file. Adding `contexts.foo` later is cheaper than splitting two files later. Adding `voice.extends` later, when a real second voice emerges, is cheaper than over-engineering inheritance up front.\n\n## Source resolution\n\nSources are combinable — pass any number of `-u`, `-n`, `-d`, `-f`. The skill aggregates all sources into a working draft, then synthesises the canonical format once.\n\n| Flag | Source | Mechanism |\n|------|--------|-----------|\n| `-u \u003Curl>` | URL | `WebFetch` (or your harness's web-fetch tool) direct → fallback `\u002Fmarkitdown -s \u003Curl>` if binary\u002Ferror |\n| `-n \u003Cid\\|url>` | Notion page | Notion MCP fetch tool (page + linked sub-pages, depth 1) — no MCP: export to Markdown and use `-d` |\n| `-d \u003Cdir>` | Folder of MD\u002FMDX | `Glob \u003Cdir>\u002F**\u002F*.md` → aggregate |\n| `-f \u003Cfile>` | Single MD\u002FMDX\u002FTXT | `Read` direct |\n| (none, with `extract`) | Interview | Use the question bank for consequential gaps not already answered by the brief |\n\nFull resolution rules — including failure handling, conflicts, MCP unavailability, large-folder fan-out, and contribution summary — live in [`references\u002Fsource-resolution.md`](.\u002Freferences\u002Fsource-resolution.md).\n\nThe Notion MCP is authorised through Claude Code's permission layer, not via this skill's `allowed-tools`. If the MCP is not installed, `-n` errors with a clear install pointer and the workaround (export Notion → MD, then `-d`).\n\n## Canonical format\n\n`BRAND-VOICE.md` has two parts:\n\n1. **YAML frontmatter** — machine-readable normative rules. Required fields: `voice.name`, `forbidden_lexicon`, `rewrite_rules`, `sentence_norms`. Optional: `core_attributes`, `required_lexicon`, `forbidden_patterns`, `contexts`, `pronouns`, `voice.source_urls`, `voice.last_updated`, `voice.source`.\n2. **Eleven prose sections** in this exact order:\n   1. Core voice attributes\n   2. Rewrite rules — do\u002Fdon't\n   3. Forbidden lexicon and patterns\n   4. Sentence-level norms\n   5. Tone by context\n   6. Pronouns and self-reference\n   7. Format conventions\n   8. Visual pairing\n   9. Quick diagnostic\n   10. Counter-examples\n   11. Reference texts\n\nFull schema, field constraints, manual-section markers, and section-heading normalisation rules: [`references\u002Fcanonical-format.md`](.\u002Freferences\u002Fcanonical-format.md). A complete reference example: [`references\u002Fexample-chanel.md`](.\u002Freferences\u002Fexample-chanel.md).\n\nThe split is deliberate. Tooling reads YAML; humans read prose. Consumers like `humanize-en -f BRAND-VOICE.md` load the complete effective mapping via `extract_rules.py --resolved-json`, while `--full` is the readable inspection format. The source doc can carry richer explanations without requiring every consumer to load all prose.\n\n## Pipeline integration\n\nBrand voice is consumed by writing skills via `-f`. The current consumer is `humanize-en`:\n\n```bash\n\u002Fbrand-voice extract -u https:\u002F\u002Fexample.com\u002Fabout\n  → .\u002FBRAND-VOICE.md\n\n\u002Fhumanize-en -f .\u002FBRAND-VOICE.md draft.md\n  → draft humanized against universal AI tells + brand-specific rules\n```\n\n`$SKILL_DIR` = this skill's folder — `${CLAUDE_SKILL_DIR}` in Claude Code, the directory containing this SKILL.md elsewhere.\n\nTwo ways for a consumer to read the rules:\n\n- **Invoke `extract_rules.py --resolved-json`** when semantic and mechanical consumers must share rules, including `humanize-en -f`. It resolves `voice.extends`, `_replace` and `_remove` once; read and validate against that same mapping. `--full` remains the human-readable format for inspection.\n\n  ```bash\n  python3 \"$SKILL_DIR\"\u002Fscripts\u002Fextract_rules.py --resolved-json .\u002FBRAND-VOICE.md\n  ```\n\n- **Read local YAML directly** when no resolver is available and no inheritance is declared. This path does not resolve `voice.extends`; inherited input requires resolved output before a consumer can claim full rule coverage. A local semantic read is not a mechanical validation result.\n\nBoth shapes are documented in [`references\u002Fschemas.md`](.\u002Freferences\u002Fschemas.md) § extract_rules.py. The `--legacy` flag emits the v1 minimal output (byte-identical to the pre-inheritance shape) for any external consumer pinned to it.\n\nWhen a brand voice rule conflicts with a universal AI-tell pattern (e.g., the voice *requires* em-dashes vs pattern #14), the brand rule wins — it is the user's contract. Conflicts are logged in the consumer's report.\n\n## Validation — `voice_lint.py`\n\nEvery doc the skill writes (or the user authors) is validated by [`scripts\u002Fvoice_lint.py`](.\u002Fscripts\u002Fvoice_lint.py):\n\n```bash\npython3 \"$SKILL_DIR\"\u002Fscripts\u002Fvoice_lint.py .\u002FBRAND-VOICE.md\n```\n\nVerdicts: `GREEN` (zero errors, zero warnings), `YELLOW` (warnings only — acceptable but flagged), `RED` (errors — block). Output is JSON per [`references\u002Fschemas.md`](.\u002Freferences\u002Fschemas.md) § voice_lint.py.\n\n`extract` and `update` lint before writing. RED → fix and re-lint. YELLOW → proceed with the authorized write and report warnings; acceptable warnings do not reopen consent. Audit\u002Fdiff\u002Fvalidate remain read-only.\n\n## Default workflow (no subcommand)\n\nWhen the first token of `$ARGUMENTS` does not match `extract|update|diff|validate|lint|check|show`, the skill behaves as follows:\n\n1. **No `BRAND-VOICE.md` at the target** → suggest `\u002Fbrand-voice extract` with the sources the user mentions inline. Do not silently extract.\n2. **`BRAND-VOICE.md` exists** → run `show --rules` and print the testable rules. Useful when the user types `\u002Fbrand-voice` to glance at the current contract.\n3. **The argument looks like a URL** → suggest `\u002Fbrand-voice extract -u \u003Curl>` (or `\u002Fbrand-voice update -u \u003Curl>` if a doc exists).\n4. **The argument looks like a file path** → suggest the corresponding `-f` invocation.\n\nThe default workflow exists to avoid silent state-modifying actions. Every write goes through an explicit subcommand.\n\n## Rules\n\n- **Canonical file is git-versioned.** Treat `.\u002FBRAND-VOICE.md` as a code asset. Diff before merge. The git history is the audit trail.\n- **Lint before write.** Every `extract` and `update` validates candidate content with `voice_lint.py --target-path \u003Cdestination>` before the authorized write. RED never reaches the canonical target; audit\u002Fpropose remains read-only.\n- **Respect the requested mode.** `extract` refuses an existing target and routes a requested refresh to `update`. An authorized `update` applies a validated diff while preserving manual sections; audit\u002Fpropose and `diff` remain read-only. A source path alone grants no write authority.\n- **Manual sections are sacred.** A section marked `\u003C!-- manual: true -->` is preserved verbatim by `update`. Do not re-synthesise.\n- **Resolve by source authority.** Apply the user's explicit correction or designated authoritative source and report the resolution. Ask only for materially different identities or rules whose authority remains unresolved; a routine requested value refresh needs no second confirmation.\n- **Output paths follow the repo contract.** Default canonical at `.\u002FBRAND-VOICE.md`. Pipeline copies under `~\u002F.agents\u002Foutput\u002F{project}\u002Fbrand-voice\u002Fbrand-voice-{slug}.md` only when `-s` is passed.\n\n## When to defer to another skill\n\n- **Apply the voice on a prose draft** → `\u002Fhumanize-en -f BRAND-VOICE.md \u003Cdraft>`. This skill never humanises.\n- **Convert a non-Markdown source to MD first** → `\u002Fmarkitdown -s \u003Csource>`, then `\u002Fbrand-voice extract -f \u003Cmarkitdown-output>`.\n- **Extract design tokens, not voice** → `\u002Faward-design` and `\u002Fdesign-system`. Brand voice is prose; brand visuals are tokens. Different docs, different lifecycles.\n\n## Reference\n\n- [`steps\u002Fextract.md`](.\u002Fsteps\u002Fextract.md), [`steps\u002Fupdate.md`](.\u002Fsteps\u002Fupdate.md), [`steps\u002Fdiff.md`](.\u002Fsteps\u002Fdiff.md), [`steps\u002Fvalidate.md`](.\u002Fsteps\u002Fvalidate.md), [`steps\u002Fshow.md`](.\u002Fsteps\u002Fshow.md) — per-subcommand workflows, flags, edge cases.\n- [`references\u002Fcanonical-format.md`](.\u002Freferences\u002Fcanonical-format.md) — full schema, required vs recommended sections, section ordering, manual-section markers, inheritance via `voice.extends`. The contract.\n- [`references\u002Fexample-chanel.md`](.\u002Freferences\u002Fexample-chanel.md) — complete reference voice doc, anchored on chanel.com primary sources (Métiers d'art savoir-faire page, House of Chanel history, founder page) plus Met Museum and Wikipedia as cross-references. Use as a structural template.\n- [`references\u002Fexample-multi-voice.md`](.\u002Freferences\u002Fexample-multi-voice.md) — worked example of `voice.extends`: a fictional founder-led startup with parent + child + merged result side-by-side, plus when to use `_replace` vs `_remove` vs default merge.\n- [`references\u002Fsource-resolution.md`](.\u002Freferences\u002Fsource-resolution.md) — how each `-u\u002F-n\u002F-d\u002F-f` flag resolves, failure modes, conflict handling.\n- [`references\u002Finterview-questions.md`](.\u002Freferences\u002Finterview-questions.md) — eight canonical questions for `extract` with no source flag.\n- [`references\u002Fschemas.md`](.\u002Freferences\u002Fschemas.md) — JSON shape for `voice_lint.py`, plain-text shape for `extract_rules.py`. Stable contract for downstream consumers.\n- [`scripts\u002Fvoice_lint.py`](.\u002Fscripts\u002Fvoice_lint.py) — validates a `BRAND-VOICE.md`, walks `voice.extends` chain, emits `chain` and `merged_stats` when inheritance applies. Python 3.7+, no third-party deps.\n- [`scripts\u002Fextract_rules.py`](.\u002Fscripts\u002Fextract_rules.py) — resolves inheritance; `--full` prints readable rules, `--legacy` the v1 format, and `--resolved-json` the shared model\u002Fmechanical mapping consumed by humanize-en.\n- [`scripts\u002Fmeasure_corpus.py`](.\u002Fscripts\u002Fmeasure_corpus.py) — measures stylometric stats from a prose corpus; `--as-sentence-norms` emits a `sentence_norms` dict (or `null` below the 30-sentence threshold) for `extract` to use in place of estimated bounds. stdlib only.\n- [`scripts\u002Flint_all.py`](.\u002Fscripts\u002Flint_all.py) — globs every `BRAND-VOICE*.md` under a root and lints each. Single-command audit for the parent-change blast-radius problem: a parent edit that breaks N children surfaces as N RED verdicts. CI-friendly; recommended in pre-merge hooks.\n- [`scripts\u002Futils.py`](.\u002Fscripts\u002Futils.py) — shared I\u002FO helpers, chain resolution (`resolve_extends_chain`), merge engine (`merge_voice_dicts`, `apply_replace_overrides`, `apply_remove_overrides`). Not invoked directly.\n\n## Gotchas\n\n1. **Child `_replace` directives win over parent rules even when `--chain` shows the parent.** `scripts\u002Futils.py:resolve_extends_chain` walks parent → child; merge applies overrides last. Verify final state with `voice_lint.py` (chain state is in its JSON output; `--chain` is a `show` flag) before merging.\n2. **A structurally invalid parent passes chain resolution but fails lint when linted directly.** Fix: lint every file in the chain via `scripts\u002Flint_all.py`, not just the target; block writes if any ancestor is RED.\n3. **`_replace` \u002F `_remove` only apply to fields in `REPLACE_ALLOWED_FIELDS` \u002F `REMOVE_ALLOWED_FIELDS`** (`scripts\u002Futils.py:334-352`). Overrides on other fields (e.g., `voice`, `source_urls`, `signature_traits`) no-op at merge and surface only at lint time. Always run `voice_lint.py` on the child after override edits.\n4. **Chains over 5 hops fail with `extends-depth-exceeded`** (`scripts\u002Futils.py:332`: `MAX_EXTENDS_DEPTH = 5`). Fix: keep chains short (≤3 hops); flatten when a child needs more than 2 ancestors.\n5. **Resolver discovery:** consumers should find the installed skill through the host before trying known paths. humanize-en accepts local rules standalone but rejects unresolved inheritance; use `--resolved-json` and the exact extraction\u002Frerun guidance instead of copying the resolver or dropping parent rules.\n","# Brand Voice\n\n\u003C!-- canonical:writing-rules:start -->\n## Important — Writing rules\n\nApply these rules to emitted prose: docs, comments, commit messages, PR bodies, and release notes.\n\n- Match surrounding punctuation, capitalization, and formatting.\n- Every sentence changes the reader's understanding. Cut it otherwise.\n- Lead with the action or outcome.\n- Use concrete language and lists when they improve comparison or sequence.\n- Assert positively. Reserve negation for real constraints (`NEVER commit secrets`).\n- No marketing words: powerful, robust, seamlessly, leverage, unlock, comprehensive, delightful.\n- No AI tells: delve, tapestry, intricate, pivotal, testament, underscore, crucial, garner, showcase, additionally, moreover, furthermore, indeed.\n- For substantive English prose, use `\u002Fhumanize-en` if installed with the existing scope and authorization. It adds no approval stage; skip redundant passes over short status text.\n\u003C!-- canonical:writing-rules:end -->\n\nGovern `BRAND-VOICE.md` — the canonical writing voice document for a brand. Two layers: YAML frontmatter (machine-readable normative rules consumed by writing skills) plus eleven prose sections (human-readable rationale). Same split as `DESIGN.md` and the same `design-system` skill pattern: a canonical file at the project root, CLI-style subcommands for the lifecycle.\n\nAdditional context from the user: $ARGUMENTS\n\n## Subcommand routing\n\nParse the first positional token of `$ARGUMENTS`. If it matches a verb below, load the referenced file and follow its workflow. Otherwise fall through to the default workflow at the end of this document.\n\n| First token | Mode | Reference |\n|-------------|------|-----------|\n| `extract` | Ingest sources, synthesise canonical voice doc, write to `.\u002FBRAND-VOICE.md` | [`steps\u002Fextract.md`](.\u002Fsteps\u002Fextract.md) |\n| `update` | Refresh an existing voice doc from new sources, preserve manual sections | [`steps\u002Fupdate.md`](.\u002Fsteps\u002Fupdate.md) |\n| `diff` | Show what changed between two versions of the voice doc (git-aware) | [`steps\u002Fdiff.md`](.\u002Fsteps\u002Fdiff.md) |\n| `validate` (aliases: `lint`, `check`) | Lint a voice doc against `canonical-format.md` — verdict + errors + warnings + fix suggestions, CI-friendly exit codes | [`steps\u002Fvalidate.md`](.\u002Fsteps\u002Fvalidate.md) |\n| `show` | Print the flat list of testable rules from the voice doc | [`steps\u002Fshow.md`](.\u002Fsteps\u002Fshow.md) |\n| (none) | See *Default workflow* below | (this file) |\n\nThere is no `apply` subcommand. Application of the voice — rewriting prose to match it — is the consumer skill's job. `humanize-en -f BRAND-VOICE.md` uses `scripts\u002Fextract_rules.py --resolved-json` so its semantic and mechanical passes share the effective mapping. Other consumers follow the same contract. Direct YAML is sufficient only for local rules without `voice.extends`; unavailable resolution of an inherited voice remains an explicit gap.\n\n## Canonical file location\n\nThe voice doc lives at `.\u002FBRAND-VOICE.md` by default — at the project root, versioned in git, alongside `DESIGN.md`, `README.md`, `LICENSE.md`. Override the path with `-o \u003Cpath>` when the voice is multi-project.\n\n`extract` refuses to overwrite an existing file. To refresh, use `update`. To replace, delete first.\n\nWhen `-s` is passed alongside `extract`, the skill also writes a copy to `~\u002F.agents\u002Foutput\u002F{project}\u002Fbrand-voice\u002Fbrand-voice-{slug}.md` for pipeline-history consumers (`{slug}` = kebab of `voice.name`; `{project}` = kebab-cased basename of the git toplevel, else cwd) and reports its fully-expanded absolute path (no tilde, no magic). The canonical file at `.\u002FBRAND-VOICE.md` remains the single source of truth.\n\n### Cross-repo distribution\n\nWhen a brand spans repositories, choose a shared-source pattern and document it in each authorized project's active instruction entrypoint (AGENTS.md, CLAUDE.md or its local equivalent). Identify other consumers without editing projects outside the request:\n\n- **Brand workspace canonical** — keep `BRAND-VOICE.md` at the brand workspace root (e.g. `~\u002F\u003Cbrand>\u002FBRAND-VOICE.md`). Each subproject references it via absolute path: `\u002Fhumanize-en -f ~\u002F\u003Cbrand>\u002FBRAND-VOICE.md draft.md`. Simplest. Best when subprojects share a local workspace.\n- **Monorepo** — `packages\u002Fbrand\u002FBRAND-VOICE.md` consumed by every app in the monorepo. Single PR for cross-cutting voice changes.\n- **Git submodule** — canonical brand repo included as a submodule. Atomic updates via submodule bump. Best when the brand is owned by a separate team.\n- **Published package** — `@\u003Corg>\u002Fbrand-voice` on npm with `BRAND-VOICE.md` plus the bundled scripts (`extract_rules.py`, `voice_lint.py`). Versioned, works cross-repo without a shared filesystem.\n- **Copy + periodic `\u002Fbrand-voice diff`** — a copy in each repo; periodic `diff \u003Ccanonical> \u003Clocal>` catches drift. Simplest tooling, highest drift risk. Pair with a CI check.\n\nNotion-as-source-of-truth is its own pattern: keep the spec in Notion, refresh local `BRAND-VOICE.md` periodically via `\u002Fbrand-voice update -n \u003Cpage-id>`. Notion stays the editorial surface; the local file is the executable artifact.\n\n### Multi-target: one file or many?\n\nThe default and recommended pattern is **one `BRAND-VOICE.md` per brand**. Within that file, `contexts:` handles register variation across document types (RFC vs landing page vs press release), audience segments (B2B vs consumer, technical vs lay), or channels (long-form vs social vs email):\n\n```yaml\ncontexts:\n  rfc:      { density: max, numbered_sections: true }\n  landing:  { sentence_count: 1 }\n  social:   { shorter_form: true, formality_preserved: true }\n```\n\nDifferent contexts share the same lexicon, the same forbidden patterns, the same pronouns — what changes is the register, the sentence rhythm, the example openers.\n\n**Multiple voice files are warranted only when** the brand has genuinely separate sub-brands with separate voices: a luxury group that owns Maison X Couture (institutional, French-rooted) and Maison X Beauty (more accessible, broader audience). Each sub-brand gets its own `BRAND-VOICE.md`. The skills consume each independently — `humanize-en -f maison-x-couture.md` for one, `humanize-en -f maison-x-beauty.md` for the other.\n\n**Inheritance via `voice.extends`** — when sub-voices share a common substrate (founder voice on top of corporate, persona on top of institutional, multi-host media brand), declare `voice.extends: .\u002FBRAND-VOICE.md` on the child file. The child inherits the parent's rules and overrides only what differs. Per-field merge policy, `_replace` \u002F `_remove` overrides, cycle detection, and validation order live in [`references\u002Fcanonical-format.md`](.\u002Freferences\u002Fcanonical-format.md) § Inheritance; a worked example sits in [`references\u002Fexample-multi-voice.md`](.\u002Freferences\u002Fexample-multi-voice.md).\n\nWhen in doubt, start with one file. Adding `contexts.foo` later is cheaper than splitting two files later. Adding `voice.extends` later, when a real second voice emerges, is cheaper than over-engineering inheritance up front.\n\n## Source resolution\n\nSources are combinable — pass any number of `-u`, `-n`, `-d`, `-f`. The skill aggregates all sources into a working draft, then synthesises the canonical format once.\n\n| Flag | Source | Mechanism |\n|------|--------|-----------|\n| `-u \u003Curl>` | URL | `WebFetch` (or your harness's web-fetch tool) direct → fallback `\u002Fmarkitdown -s \u003Curl>` if binary\u002Ferror |\n| `-n \u003Cid\\|url>` | Notion page | Notion MCP fetch tool (page + linked sub-pages, depth 1) — no MCP: export to Markdown and use `-d` |\n| `-d \u003Cdir>` | Folder of MD\u002FMDX | `Glob \u003Cdir>\u002F**\u002F*.md` → aggregate |\n| `-f \u003Cfile>` | Single MD\u002FMDX\u002FTXT | `Read` direct |\n| (none, with `extract`) | Interview | Use the question bank for consequential gaps not already answered by the brief |\n\nFull resolution rules — including failure handling, conflicts, MCP unavailability, large-folder fan-out, and contribution summary — live in [`references\u002Fsource-resolution.md`](.\u002Freferences\u002Fsource-resolution.md).\n\nThe Notion MCP is authorised through Claude Code's permission layer, not via this skill's `allowed-tools`. If the MCP is not installed, `-n` errors with a clear install pointer and the workaround (export Notion → MD, then `-d`).\n\n## Canonical format\n\n`BRAND-VOICE.md` has two parts:\n\n1. **YAML frontmatter** — machine-readable normative rules. Required fields: `voice.name`, `forbidden_lexicon`, `rewrite_rules`, `sentence_norms`. Optional: `core_attributes`, `required_lexicon`, `forbidden_patterns`, `contexts`, `pronouns`, `voice.source_urls`, `voice.last_updated`, `voice.source`.\n2. **Eleven prose sections** in this exact order:\n   1. Core voice attributes\n   2. Rewrite rules — do\u002Fdon't\n   3. Forbidden lexicon and patterns\n   4. Sentence-level norms\n   5. Tone by context\n   6. Pronouns and self-reference\n   7. Format conventions\n   8. Visual pairing\n   9. Quick diagnostic\n   10. Counter-examples\n   11. Reference texts\n\nFull schema, field constraints, manual-section markers, and section-heading normalisation rules: [`references\u002Fcanonical-format.md`](.\u002Freferences\u002Fcanonical-format.md). A complete reference example: [`references\u002Fexample-chanel.md`](.\u002Freferences\u002Fexample-chanel.md).\n\nThe split is deliberate. Tooling reads YAML; humans read prose. Consumers like `humanize-en -f BRAND-VOICE.md` load the complete effective mapping via `extract_rules.py --resolved-json`, while `--full` is the readable inspection format. The source doc can carry richer explanations without requiring every consumer to load all prose.\n\n## Pipeline integration\n\nBrand voice is consumed by writing skills via `-f`. The current consumer is `humanize-en`:\n\n```bash\n\u002Fbrand-voice extract -u https:\u002F\u002Fexample.com\u002Fabout\n  → .\u002FBRAND-VOICE.md\n\n\u002Fhumanize-en -f .\u002FBRAND-VOICE.md draft.md\n  → draft humanized against universal AI tells + brand-specific rules\n```\n\n`$SKILL_DIR` = this skill's folder — `${CLAUDE_SKILL_DIR}` in Claude Code, the directory containing this SKILL.md elsewhere.\n\nTwo ways for a consumer to read the rules:\n\n- **Invoke `extract_rules.py --resolved-json`** when semantic and mechanical consumers must share rules, including `humanize-en -f`. It resolves `voice.extends`, `_replace` and `_remove` once; read and validate against that same mapping. `--full` remains the human-readable format for inspection.\n\n  ```bash\n  python3 \"$SKILL_DIR\"\u002Fscripts\u002Fextract_rules.py --resolved-json .\u002FBRAND-VOICE.md\n  ```\n\n- **Read local YAML directly** when no resolver is available and no inheritance is declared. This path does not resolve `voice.extends`; inherited input requires resolved output before a consumer can claim full rule coverage. A local semantic read is not a mechanical validation result.\n\nBoth shapes are documented in [`references\u002Fschemas.md`](.\u002Freferences\u002Fschemas.md) § extract_rules.py. The `--legacy` flag emits the v1 minimal output (byte-identical to the pre-inheritance shape) for any external consumer pinned to it.\n\nWhen a brand voice rule conflicts with a universal AI-tell pattern (e.g., the voice *requires* em-dashes vs pattern #14), the brand rule wins — it is the user's contract. Conflicts are logged in the consumer's report.\n\n## Validation — `voice_lint.py`\n\nEvery doc the skill writes (or the user authors) is validated by [`scripts\u002Fvoice_lint.py`](.\u002Fscripts\u002Fvoice_lint.py):\n\n```bash\npython3 \"$SKILL_DIR\"\u002Fscripts\u002Fvoice_lint.py .\u002FBRAND-VOICE.md\n```\n\nVerdicts: `GREEN` (zero errors, zero warnings), `YELLOW` (warnings only — acceptable but flagged), `RED` (errors — block). Output is JSON per [`references\u002Fschemas.md`](.\u002Freferences\u002Fschemas.md) § voice_lint.py.\n\n`extract` and `update` lint before writing. RED → fix and re-lint. YELLOW → proceed with the authorized write and report warnings; acceptable warnings do not reopen consent. Audit\u002Fdiff\u002Fvalidate remain read-only.\n\n## Default workflow (no subcommand)\n\nWhen the first token of `$ARGUMENTS` does not match `extract|update|diff|validate|lint|check|show`, the skill behaves as follows:\n\n1. **No `BRAND-VOICE.md` at the target** → suggest `\u002Fbrand-voice extract` with the sources the user mentions inline. Do not silently extract.\n2. **`BRAND-VOICE.md` exists** → run `show --rules` and print the testable rules. Useful when the user types `\u002Fbrand-voice` to glance at the current contract.\n3. **The argument looks like a URL** → suggest `\u002Fbrand-voice extract -u \u003Curl>` (or `\u002Fbrand-voice update -u \u003Curl>` if a doc exists).\n4. **The argument looks like a file path** → suggest the corresponding `-f` invocation.\n\nThe default workflow exists to avoid silent state-modifying actions. Every write goes through an explicit subcommand.\n\n## Rules\n\n- **Canonical file is git-versioned.** Treat `.\u002FBRAND-VOICE.md` as a code asset. Diff before merge. The git history is the audit trail.\n- **Lint before write.** Every `extract` and `update` validates candidate content with `voice_lint.py --target-path \u003Cdestination>` before the authorized write. RED never reaches the canonical target; audit\u002Fpropose remains read-only.\n- **Respect the requested mode.** `extract` refuses an existing target and routes a requested refresh to `update`. An authorized `update` applies a validated diff while preserving manual sections; audit\u002Fpropose and `diff` remain read-only. A source path alone grants no write authority.\n- **Manual sections are sacred.** A section marked `\u003C!-- manual: true -->` is preserved verbatim by `update`. Do not re-synthesise.\n- **Resolve by source authority.** Apply the user's explicit correction or designated authoritative source and report the resolution. Ask only for materially different identities or rules whose authority remains unresolved; a routine requested value refresh needs no second confirmation.\n- **Output paths follow the repo contract.** Default canonical at `.\u002FBRAND-VOICE.md`. Pipeline copies under `~\u002F.agents\u002Foutput\u002F{project}\u002Fbrand-voice\u002Fbrand-voice-{slug}.md` only when `-s` is passed.\n\n## When to defer to another skill\n\n- **Apply the voice on a prose draft** → `\u002Fhumanize-en -f BRAND-VOICE.md \u003Cdraft>`. This skill never humanises.\n- **Convert a non-Markdown source to MD first** → `\u002Fmarkitdown -s \u003Csource>`, then `\u002Fbrand-voice extract -f \u003Cmarkitdown-output>`.\n- **Extract design tokens, not voice** → `\u002Faward-design` and `\u002Fdesign-system`. Brand voice is prose; brand visuals are tokens. Different docs, different lifecycles.\n\n## Reference\n\n- [`steps\u002Fextract.md`](.\u002Fsteps\u002Fextract.md), [`steps\u002Fupdate.md`](.\u002Fsteps\u002Fupdate.md), [`steps\u002Fdiff.md`](.\u002Fsteps\u002Fdiff.md), [`steps\u002Fvalidate.md`](.\u002Fsteps\u002Fvalidate.md), [`steps\u002Fshow.md`](.\u002Fsteps\u002Fshow.md) — per-subcommand workflows, flags, edge cases.\n- [`references\u002Fcanonical-format.md`](.\u002Freferences\u002Fcanonical-format.md) — full schema, required vs recommended sections, section ordering, manual-section markers, inheritance via `voice.extends`. The contract.\n- [`references\u002Fexample-chanel.md`](.\u002Freferences\u002Fexample-chanel.md) — complete reference voice doc, anchored on chanel.com primary sources (Métiers d'art savoir-faire page, House of Chanel history, founder page) plus Met Museum and Wikipedia as cross-references. Use as a structural template.\n- [`references\u002Fexample-multi-voice.md`](.\u002Freferences\u002Fexample-multi-voice.md) — worked example of `voice.extends`: a fictional founder-led startup with parent + child + merged result side-by-side, plus when to use `_replace` vs `_remove` vs default merge.\n- [`references\u002Fsource-resolution.md`](.\u002Freferences\u002Fsource-resolution.md) — how each `-u\u002F-n\u002F-d\u002F-f` flag resolves, failure modes, conflict handling.\n- [`references\u002Finterview-questions.md`](.\u002Freferences\u002Finterview-questions.md) — eight canonical questions for `extract` with no source flag.\n- [`references\u002Fschemas.md`](.\u002Freferences\u002Fschemas.md) — JSON shape for `voice_lint.py`, plain-text shape for `extract_rules.py`. Stable contract for downstream consumers.\n- [`scripts\u002Fvoice_lint.py`](.\u002Fscripts\u002Fvoice_lint.py) — validates a `BRAND-VOICE.md`, walks `voice.extends` chain, emits `chain` and `merged_stats` when inheritance applies. Python 3.7+, no third-party deps.\n- [`scripts\u002Fextract_rules.py`](.\u002Fscripts\u002Fextract_rules.py) — resolves inheritance; `--full` prints readable rules, `--legacy` the v1 format, and `--resolved-json` the shared model\u002Fmechanical mapping consumed by humanize-en.\n- [`scripts\u002Fmeasure_corpus.py`](.\u002Fscripts\u002Fmeasure_corpus.py) — measures stylometric stats from a prose corpus; `--as-sentence-norms` emits a `sentence_norms` dict (or `null` below the 30-sentence threshold) for `extract` to use in place of estimated bounds. stdlib only.\n- [`scripts\u002Flint_all.py`](.\u002Fscripts\u002Flint_all.py) — globs every `BRAND-VOICE*.md` under a root and lints each. Single-command audit for the parent-change blast-radius problem: a parent edit that breaks N children surfaces as N RED verdicts. CI-friendly; recommended in pre-merge hooks.\n- [`scripts\u002Futils.py`](.\u002Fscripts\u002Futils.py) — shared I\u002FO helpers, chain resolution (`resolve_extends_chain`), merge engine (`merge_voice_dicts`, `apply_replace_overrides`, `apply_remove_overrides`). Not invoked directly.\n\n## Gotchas\n\n1. **Child `_replace` directives win over parent rules even when `--chain` shows the parent.** `scripts\u002Futils.py:resolve_extends_chain` walks parent → child; merge applies overrides last. Verify final state with `voice_lint.py` (chain state is in its JSON output; `--chain` is a `show` flag) before merging.\n2. **A structurally invalid parent passes chain resolution but fails lint when linted directly.** Fix: lint every file in the chain via `scripts\u002Flint_all.py`, not just the target; block writes if any ancestor is RED.\n3. **`_replace` \u002F `_remove` only apply to fields in `REPLACE_ALLOWED_FIELDS` \u002F `REMOVE_ALLOWED_FIELDS`** (`scripts\u002Futils.py:334-352`). Overrides on other fields (e.g., `voice`, `source_urls`, `signature_traits`) no-op at merge and surface only at lint time. Always run `voice_lint.py` on the child after override edits.\n4. **Chains over 5 hops fail with `extends-depth-exceeded`** (`scripts\u002Futils.py:332`: `MAX_EXTENDS_DEPTH = 5`). Fix: keep chains short (≤3 hops); flatten when a child needs more than 2 ancestors.\n5. **Resolver discovery:** consumers should find the installed skill through the host before trying known paths. humanize-en accepts local rules standalone but rejects unresolved inheritance; use `--resolved-json` and the exact extraction\u002Frerun guidance instead of copying the resolver or dropping parent rules.\n",{"name":5,"license":15,"metadata":63,"description":7,"when_to_use":65,"allowed-tools":66,"argument-hint":67,"compatibility":68},{"author":9,"sources":64},"github.com\u002Fgoogle-labs-code\u002Fdesign.md; en.wikipedia.org\u002Fwiki\u002FWikipedia:Signs_of_AI_writing; every.to\u002Fon-every\u002Fintroducing-spiral-v3-an-ai-writing-partner-with-taste","Routes via `$ARGUMENTS` first token — `extract` (sources → BRAND-VOICE.md; `--extends \u003Cparent>` scaffolds a child), `update` (refresh from new sources), `diff` (regression check; single-arg form when child has `voice.extends`), `validate` \u002F `lint` \u002F `check` (walks chain), `show` (testable rules; `--chain`\u002F`--explain`\u002F`--raw` for inheritance). Skip when the user wants to apply or check prose against an existing voice (rewrite, humanize, \"does this match\") — invoke `\u002Fhumanize-en -f BRAND-VOICE.md` instead.","Read Write Edit Grep Glob WebFetch AskUserQuestion Bash(jq *) Bash(test *) Bash(wc *) Bash(find *) Bash(python3 *) Bash(git *) Bash(mktemp *)","[extract|update|diff|validate|show] [-s] [-o \u003Cpath>] [-u \u003Curl>] [-n \u003Cid|url>] [-d \u003Cdir>] [-f \u003Cfile>] [refs|paths]","Requires filesystem access and Python 3.10+ for bundled validation and inheritance tools. Web and Notion sources require corresponding read capabilities. Interviews use the host's supported question mechanism; local-source work does not require those connectors.","main","5ff268fdc77fdf345ffe3ba808e74c82023839f8","skills\u002Fbrand-voice",0,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills","https:\u002F\u002Fcoroboros.com","https:\u002F\u002Fgithub.com\u002Fcoroboros","https:\u002F\u002Fcoroboros.com\u002F","Branch-stable systems.","2026-11-11 14:33:57",{"source":8,"skillName":5,"commands":80,"prompt":90,"zipAvailable":91},[81,84,87],{"tool":82,"command":83},"npx","npx skills add coroboros\u002Fagent-skills --skill brand-voice",{"tool":85,"command":86},"bunx","bunx skills add coroboros\u002Fagent-skills --skill brand-voice",{"tool":88,"command":89},"pnpm","pnpm dlx skills add coroboros\u002Fagent-skills --skill brand-voice","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002FSKILL.md",true,[93,99,103,107,111,115,119,123,129,133,137,141,145,149,153,157,161],{"path":94,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":97,"sourceHtmlUrl":98},"evals\u002Fevals.json","REFERENCE","参考文档",2969,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Fevals\u002Fevals.json",{"path":100,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":101,"sourceHtmlUrl":102},"references\u002Fcanonical-format.md",20754,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Freferences\u002Fcanonical-format.md",{"path":104,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":105,"sourceHtmlUrl":106},"references\u002Fexample-chanel.md",19869,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Freferences\u002Fexample-chanel.md",{"path":108,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":109,"sourceHtmlUrl":110},"references\u002Fexample-multi-voice.md",8066,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Freferences\u002Fexample-multi-voice.md",{"path":112,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":113,"sourceHtmlUrl":114},"references\u002Finterview-questions.md",4471,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Freferences\u002Finterview-questions.md",{"path":116,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":117,"sourceHtmlUrl":118},"references\u002Fschemas.md",11204,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Freferences\u002Fschemas.md",{"path":120,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":121,"sourceHtmlUrl":122},"references\u002Fsource-resolution.md",5510,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Freferences\u002Fsource-resolution.md",{"path":124,"resourceType":125,"resourceTypeDesc":126,"sizeBytes":127,"sourceHtmlUrl":128},"scripts\u002Fextract_rules.py","SCRIPT","脚本",16463,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Fscripts\u002Fextract_rules.py",{"path":130,"resourceType":125,"resourceTypeDesc":126,"sizeBytes":131,"sourceHtmlUrl":132},"scripts\u002Flint_all.py",3952,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Fscripts\u002Flint_all.py",{"path":134,"resourceType":125,"resourceTypeDesc":126,"sizeBytes":135,"sourceHtmlUrl":136},"scripts\u002Fmeasure_corpus.py",8509,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Fscripts\u002Fmeasure_corpus.py",{"path":138,"resourceType":125,"resourceTypeDesc":126,"sizeBytes":139,"sourceHtmlUrl":140},"scripts\u002Futils.py",29413,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Fscripts\u002Futils.py",{"path":142,"resourceType":125,"resourceTypeDesc":126,"sizeBytes":143,"sourceHtmlUrl":144},"scripts\u002Fvoice_lint.py",26064,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Fscripts\u002Fvoice_lint.py",{"path":146,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":147,"sourceHtmlUrl":148},"steps\u002Fdiff.md",6456,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Fsteps\u002Fdiff.md",{"path":150,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":151,"sourceHtmlUrl":152},"steps\u002Fextract.md",9884,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Fsteps\u002Fextract.md",{"path":154,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":155,"sourceHtmlUrl":156},"steps\u002Fshow.md",5854,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Fsteps\u002Fshow.md",{"path":158,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":159,"sourceHtmlUrl":160},"steps\u002Fupdate.md",6634,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Fsteps\u002Fupdate.md",{"path":162,"resourceType":95,"resourceTypeDesc":96,"sizeBytes":163,"sourceHtmlUrl":164},"steps\u002Fvalidate.md",9234,"https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fbrand-voice\u002Fsteps\u002Fvalidate.md",[166,180,190,217,245,267],{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":172,"publishedAt":58},"01M71EZVB829YQPX3AM9ETPJYE","foo","Fixture skill for repo-kind classifier tests.","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Ftests\u002Fcode-ultrareview\u002Ffixtures\u002Fclassify\u002Fskills\u002Fskills\u002Ffoo\u002FSKILL.md",[],[168,173,174,175,176,177,178,179],"fixture skill","repo","classifier","for","kind","tests","fixture",{"skillNo":181,"name":168,"nameZh":6,"description":182,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":183,"categories":184,"keywords":185,"publishedAt":58},"01M71EZSPGWRBJ9JGT0Y5F7YGX","Fixture for compound skills + npm tooling detection.","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Ftests\u002Fcode-ultrareview\u002Ffixtures\u002Fclassify\u002Fmixed-skills-npm\u002Fskills\u002Ffoo\u002FSKILL.md",[],[168,186,187,176,188,189,179],"detection","tooling","compound","npm",{"skillNo":191,"name":192,"nameZh":6,"description":193,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":194,"categories":195,"keywords":199,"publishedAt":58},"01M71EZN3JR87PJ1BBHRG24M39","write-clear-readme","Author, restructure, audit or polish a project README for clarity and scannability. Reads repository truth, preserves anchors and code, and verifies rendering. Explicit author\u002Fpolish requests apply local changes; audit\u002Fpropose stays read-only. Use for README creation, wording, structure and navigation, including skill collections and CLI\u002FSDK docs.","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fwrite-clear-readme\u002FSKILL.md",[196,197,198],{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":35,"categoryName":36,"taxonomyType":32,"taxonomyTypeDesc":33},[200,201,202,51,57,203,48,204,205,206,207,208,209,210,211,212,213,214,215,216],"clear","README","write clear readme","only","project","creation","ls","access","verification","references","libraries","project readme","browser","code","preview","Bash","markdown preview",{"skillNo":218,"name":219,"nameZh":6,"description":220,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":221,"categories":222,"keywords":226,"publishedAt":58},"01M71EZGFF8C081XJVPGJ11AG7","video-loop","Prepare a background video loop for a website with optional crossfade, MP4\u002FWebM encoding and poster extraction. Use for loop joins or web delivery of an existing clip.","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fvideo-loop\u002FSKILL.md",[223],{"categoryNo":224,"categoryName":225,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[227,228,229,230,215,231,232,208,233,234,235,236,237,238,239,240,241,242,243,244],"Video","loop","video loop","hero","architecture","command","loops","optimize","transition","work","inspection","continuity","fix","end","crossfade","Audio","processing","when",{"skillNo":246,"name":247,"nameZh":6,"description":248,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":249,"categories":250,"keywords":252,"publishedAt":58},"01M71EZCS60P8DK9Y34PHGK1R3","ultrapex","Adaptive implementation when the user explicitly selects \u002Fultrapex or asks for this adaptive workflow. Establish accepted outcomes, implement, and verify the final result. Generic implementation requests use \u002Fapex; use \u002Fforge for decisions only and \u002Foneshot for small focused changes.","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fultrapex\u002FSKILL.md",[251],{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},[247,253,254,204,255,240,256,257,258,259,260,261,262,263,264,244,265,46,203,266],"ponytail","select","model","apex","capability","context","Tools","at","result","self","review","workflow","forge","delegation",{"skillNo":268,"name":269,"nameZh":6,"description":270,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":271,"categories":272,"keywords":277,"publishedAt":58},"01M71EZ5Y1QZWEV5K69JT7QK1D","suno-produce","Create and revise Suno v5.5 prompt artifacts from a song, track or album brief. Produces TRACK.md, ALBUM.md for explicit multi-track work, and optional ARTIST.md identity. Validates prompt fields and preserves supplied lyrics. Artifact-only; audio generation stays in Suno. Pure lyric writing and audio post-production use other skills.","https:\u002F\u002Fgithub.com\u002Fcoroboros\u002Fagent-skills\u002Fblob\u002Fmain\u002Fskills\u002Fsuno-produce\u002FSKILL.md",[273,274,275,276],{"categoryNo":224,"categoryName":225,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":27,"categoryName":28,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":35,"categoryName":36,"taxonomyType":32,"taxonomyTypeDesc":33},[278,279,280,281,282,283,284,285,56,286,287,288,265,228,57,46,53,48,289,242],"produce","suno","suno produce","lyric","website","mv","artifact","track","guides","information","song","Meta"]