技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
domain-creation【数据与研究】Guides you through creating a Honeydew domain — a governance object that scopes entity/field visibility and applies mandatory filters — ideal for setting up contexts for deep analysis. Also covers domain hierarchy — extending parent domains, inheritance and merge rules, multiple inheritance, and removing inherited items.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Before creating domains, ensure you are on the correct workspace and branch. Use get_session_workspace_and_branch to check the current session context. For development work, create a branch with create_workspace_branch (the session switches automatically). See the workspace-branch skill for the full workspace/branch tool reference.
A Honeydew domain is a lightweight governance object that defines a scoped business context over the semantic model.
Domains control:
filters) — applied to every query in the domain, for governance and access controlsource_filters) — applied early at the source level, for performance optimizationDomains are the primary mechanism for creating focused, governed views of the model for specific teams, use cases, or analysis contexts.
Domains can also extend one or more parent domains (extends), inheriting and building on their configuration. This lets you compose reusable base domains into specialized, team- or use-case-specific views. See Domain Hierarchy below.
This skill focuses on domain creation and management. Use
entity-creationto create entities andattribute-creation/metric-creationto add fields before scoping them into a domain. To expose a domain for AI analysis, create an agent referencing it usingcreate_agent(MCP agent tools) or the Honeydew Studio agent builder.
Domains are created using create_object with domain YAML. There is no specialized create_domain tool.
Parameters:
yaml_text — YAML defining the domainRequired permission: Editor or higher.
search_model (with search_mode: EXACT) to find the domain's object_key.update_object with the full updated YAML (yaml_text) and the object_key.Minimal diff rule: When updating, preserve the existing field order and formatting from the current YAML. Only change the fields you need to modify.
search_model (with search_mode: EXACT) to find the domain's object_key.delete_object with that object_key.After a successful create_object or update_object call, the response includes a ui_url field. Always display this URL to the user so they can quickly open the object in the Honeydew application.
Need to create a domain?
│
├─► Does an existing domain already define most of what you need?
│ ├─► Yes, and you WANT to track it → extend it with `extends:` and override only
│ │ the differences (see Domain Hierarchy). Note: extending creates a live
│ │ dependency — future changes to the parent are automatically inherited by
│ │ your domain. Extend when that shared evolution is desirable; define a
│ │ standalone domain if you need to be insulated from the parent's changes.
│ └─► No → define a standalone domain (and consider whether it should become a reusable base)
│
├─► Which entities should be included?
│ └─► Use list_entities / search_model (OR mode) to discover available entities
│
├─► Should all fields be visible, or only a subset?
│ ├─► All fields → omit fields for that entity
│ └─► Subset → use field selectors (supports wildcards and exclusions)
│
├─► Are governance/access filters needed (apply to ALL queries)?
│ └─► Use filters (semantic) with name + sql
│
└─► Are performance/source-level filters needed (apply only when entity is queried)?
└─► Use source_filters with name + sql
A domain can extend one or more parent domains using the extends field, inheriting their configuration and overriding only what differs. This is the recommended way to avoid duplicating entity selections, filters, and governance settings across related domains.
type: domain
name: sales_us
extends:
- base_sales # inherit everything from base_sales
filters:
- name: us_region # add a child-specific filter
sql: customers.country = 'US'
A child inherits from each parent: entities (and their field selections), semantic and source filters, parameters, tags, labels (additive), and all metadata sections.
List items are matched by name (tags by key, metadata sections by name):
sql) defined in the child replace the parent's value.fields) defined in the child extend the inherited list — child field selectors apply on top of the inherited field list.merge: remove (works for entities, filters, source_filters, parameters, and tags).List several parents under extends. Parents are evaluated left-to-right: if more than one parent defines the same item, the rightmost parent wins, and the child overrides all parents. This enables a mixin pattern — e.g. a base data model plus separate security and performance mixins composed into one domain.
Trade-off: extending a domain creates a live dependency on the parent's implementation — any future change to the parent (entities, fields, filters, parameters) is automatically inherited by every domain that extends it. This is exactly what you want when domains should evolve together from a single source of truth, but it means a parent edit can change child behavior unexpectedly. If a domain must stay stable regardless of how others change, define it standalone instead of extending.
See reference.md for the full inheritance rules and examples.md for worked hierarchy examples.
See examples.md for full worked examples covering: basic entity selection, semantic filters, source filters, field selectors, deep analysis context, domain hierarchy (extends / multiple inheritance), and update/delete.
Use these MCP tools before creating domains:
list_entities — List all entities in the model to decide which to includeget_entity — Get detailed info for a specific entity (attributes, metrics, relations)list_domains — List all existing domains in the modelget_domain — Get detailed info for a specific domain (entities, filters, parameters)search_model — Search for entities, fields, domains, or other objects by name (use search_mode: EXACT for known names, OR for broad discovery)get_field — Get detailed info about a specific field (attribute or metric)See reference.md for: full YAML schema, entity selection syntax, field selectors, filter types and syntax, and parameter overrides.
Use the search_docs and query_docs_filesystem tools from the honeydew MCP server to search the Honeydew documentation when:
extends), merge precedence, or composing base domains and mixinsSearch for topics like: "domains", "domain hierarchy", "governance", "filters", "field selectors", "access control", "source filters". The recipes/domain-hierarchy page has a full worked five-domain hierarchy example.
sales_analytics is better than filtered_orders_v2.owner to identify the responsible team or person for governance and accountability.filters) over source filters for governance rules. Source filters apply before computation and can change calculated values.description to document the domain's purpose and intended audience clearly.extends it rather than copying YAML. Override only the differences in the child.sql references must be fully qualified. Always use entity.field notation — unqualified references fail validation.After creating ANY domain, you MUST invoke the validation skill to test and validate that it works correctly.
See validation skill for the full domain validation workflow.
Verify domain exists using search_model (with search_mode: EXACT) to find the new domain by name.
Test with a query — use get_data_from_fields with the domain parameter:
metrics: ["<entity>.count"]domain: "<domain_name>"This verifies that the domain settings (e.g. filter) apply.