How to install ubiquitous-language
npx skills add https://github.com/vinvcn/mattpocock-skills-zh-cn --skill ubiquitous-languageFull instructions (SKILL.md)
Source of truth, from vinvcn/mattpocock-skills-zh-cn.
name: ubiquitous-language description: 从当前 conversation 提取 DDD-style ubiquitous language glossary,标记 ambiguities 并提出 canonical terms。保存到 UBIQUITOUS_LANGUAGE.md。Use when user wants to define domain terms, build a glossary, harden terminology, create a ubiquitous language, or mentions "domain model" or "DDD". disable-model-invocation: true
Ubiquitous Language
从当前 conversation 中提取并形式化 domain terminology,整理成一致 glossary,并保存到本地文件。
Process
- Scan the conversation,寻找 domain-relevant nouns、verbs 和 concepts
- Identify problems:
- 同一个词被用于不同 concepts(ambiguity)
- 不同词被用于同一个 concept(synonyms)
- 模糊或 overloaded terms
- Propose a canonical glossary,对 term 选择保持 opinionated
- Write to
UBIQUITOUS_LANGUAGE.md,在 working directory 中使用下面格式 - Output a summary,在 conversation 中内联总结
Output Format
写一个 UBIQUITOUS_LANGUAGE.md 文件,结构如下:
# Ubiquitous Language
## Order lifecycle
| Term | Definition | Aliases to avoid |
| ----------- | ------------------------------------------------------- | --------------------- |
| **Order** | A customer's request to purchase one or more items | Purchase, transaction |
| **Invoice** | A request for payment sent to a customer after delivery | Bill, payment request |
## People
| Term | Definition | Aliases to avoid |
| ------------ | ------------------------------------------- | ---------------------- |
| **Customer** | A person or organization that places orders | Client, buyer, account |
| **User** | An authentication identity in the system | Login, account |
## Relationships
- An **Invoice** belongs to exactly one **Customer**
- An **Order** produces one or more **Invoices**
## Example dialogue
> **Dev:** "When a **Customer** places an **Order**, do we create the **Invoice** immediately?"
> **Domain expert:** "No — an **Invoice** is only generated once a **Fulfillment** is confirmed. A single **Order** can produce multiple **Invoices** if items ship in separate **Shipments**."
> **Dev:** "So if a **Shipment** is cancelled before dispatch, no **Invoice** exists for it?"
> **Domain expert:** "Exactly. The **Invoice** lifecycle is tied to the **Fulfillment**, not the **Order**."
## Flagged ambiguities
- "account" was used to mean both **Customer** and **User** — these are distinct concepts: a **Customer** places orders, while a **User** is an authentication identity that may or may not represent a **Customer**.
Rules
- Be opinionated. 同一概念有多个词时,选择最好的一个,并把其他列为 aliases to avoid。
- Flag conflicts explicitly. 如果 term 在 conversation 中被模糊使用,在 "Flagged ambiguities" section 中指出,并给出明确 recommendation。
- Only include terms relevant for domain experts. 除非 module 或 class 名在 domain language 中有意义,否则跳过。
- Keep definitions tight. 最多一句。定义它是什么,不定义它做什么。
- Show relationships. 使用粗体 term names,并在明显时表达 cardinality。
- Only include domain terms. 跳过 generic programming concepts(array、function、endpoint),除非它们有 domain-specific meaning。
- Group terms into multiple tables,当自然 clusters 出现时使用(例如按 subdomain、lifecycle 或 actor)。每组有自己的 heading 和 table。如果所有 terms 属于一个 cohesive domain,一个 table 就够,不要强行分组。
- Write an example dialogue. 写一段 dev 与 domain expert 之间的短对话(3-5 exchanges),展示 terms 如何自然互动。对话应澄清相关 concepts 的边界,并展示精确使用 terms。
Example dialogue
Dev: "How do I test the sync service without Docker?"
Domain expert: "Provide the filesystem layer instead of the Docker layer. It implements the same Sandbox service interface but uses a local directory as the sandbox."
Dev: "So sync-in still creates a bundle and unpacks it?"
</example>Domain expert: "Exactly. The sync service doesn't know which layer it's talking to. It calls
execandcopyIn— the filesystem layer just runs those as local shell commands."
Re-running
在同一 conversation 中再次调用时:
- 读取已有
UBIQUITOUS_LANGUAGE.md - 合并后续讨论中的新 terms
- 如果理解演进,更新 definitions
- 重新标记任何新 ambiguities
- 重写 example dialogue 以纳入新 terms
Related skills
More from vinvcn/mattpocock-skills-zh-cn and the wider catalog.
grill-me
围绕 plan 或 design 持续 interview user,直到达成 shared understanding,并逐一解决 decision tree 的每个分支。Use when user wants to stress-test a plan, get grilled on their design, or mentions "grill me".
grill-with-docs
Grilling session that challenges your plan against the existing domain model, sharpens terminology, and updates documentation (CONTEXT.md, ADRs) inline as decisions crystallise. Use when user wants to stress-test a plan against their project's language and documented decisions.
setup-matt-pocock-skills
Sets up an `## Agent skills` block in AGENTS.md/CLAUDE.md and `docs/agents/` so the engineering skills know this repo's issue tracker (GitHub or local markdown), triage label vocabulary, and domain doc layout. Run before first use of `to-issues`, `to-prd`, `triage`, `diagnose`, `tdd`, `improve-codebase-architecture`, or `zoom-out` — or if those skills appear to be missing context about the issue tracker, triage labels, or domain docs.
tdd
使用 red-green-refactor loop 做 test-driven development。Use when user wants to build features or fix bugs using TDD, mentions "red-green-refactor", wants integration tests, or asks for test-first development.
diagnose
面向棘手 bug 和性能回退的纪律化 diagnosis loop。Reproduce → minimise → hypothesise → instrument → fix → regression-test. Use when user says "diagnose this" / "debug this", reports a bug, says something is broken/throwing/failing, or describes a performance regression.
improve-codebase-architecture
根据 CONTEXT.md 中的 domain language 和 docs/adr/ 中的 decisions,寻找 codebase 的 deepening opportunities。Use when the user wants to improve architecture, find refactoring opportunities, consolidate tightly-coupled modules, or make a codebase more testable and AI-navigable.