Skill Wiki v0.1.0

文档 / architecture / domain-plugin

本页目录

领域插件

Skill Wiki 出厂没有任何内置领域。一个领域就是放在你 corpus 根目录的一份 domain.yaml。运行时启动时发现并注册它。

为什么走配置驱动

早期原型把领域硬编码在运行时 —— 加一个 "fintech" 都得改代码。 这让 fork、自定义、发布领域 corpus 都很痛。v0.1.0 翻了过来: 每个领域都是一份 YAML 配置 + 递归发现。

流程

Domain extension flow — drop in a YAML, restart, done

primes/                                  ┐
├── sources/                             │
│   └── @my/                             │  scanned recursively
│       ├── ...                          │  by discoverDomains()
│       └── domain.yaml  ←  one per pack ┘

                  ▼
       ┌──────────────────────┐
       │  DomainRegistry      │  in-memory map
       │  (per-process)       │
       └──────────────────────┘
                  │
                  ▼
        runtime queries pick up
        domain-specific:
          • tag boosts
          • intent fields
          • L5 validator hooks

domain.yaml 声明什么

一个示例,取自一个假想的 security corpus。同样的形状对任何领域都适用 —— 字段名是协议层的;才是领域特定的。

name: security
version: "1.0.0"
description: "Application security knowledge for AI agents — input validation, authn/authz, crypto, …"

# Hierarchical taxonomy of sub-domains.
hierarchy: threat-model

# Multi-axis tags the retriever can boost on.
axes:
  - risk-class
  - attack-surface
  - data-sensitivity
  - control-family
  - severity

# Composition contract scaffold (defaults).
contract:
  input-validation: atom-checklist
  authn: atom-token-flow

# L5 validators (optional).
validators:
  - name: sql-injection-shape
    checker: regex
    pattern: "(?i)\\b(or|and)\\b\\s+1\\s*=\\s*1"
  - name: owasp-input-validation
    checker: ai-judge
    rubric: "@security/rubric-owasp-input-validation"

运行时怎么用它

Tag boost

带有 axes: 中标签的原子,在检索器的 IntentObject 命中时获得乘性加权。 比如打了 owasp-input-validation 标签的原子,在 intent 是 focus: "input-validation" 时排名更靠前。

Intent 字段

L1(意图分类)读 axes 决定要在 IntentObject 里填哪些字段。 一个 security 的 L1 产出 { axes: ["attack-surface", "control-family"], persona: "@security-auditor", ... }; 另一个领域的 L1 产出的形状完全不同。

L5 validator hook

validators 数组描述怎么校验生成结果。每一项是一个二元组(checker 名字、参数)。 参考 v0.1.0 支持两个 checker:regexai-judge。 领域插件可以通过 MCP server 的插件槽注册更多 checker。

发现规则

  • $PRIME_DIR 递归扫描,最多 4 层深。
  • 文件名必须正好是 domain.yaml,任何层级都行。
  • 已加载领域之间名字必须唯一。冲突在启动时硬抛错。
  • 允许 Unicode 标签。Emoji 标签也行。
  • 每个 server 进程加载一次;kill -HUP 重新加载。

取舍

插件模型让 v1 协议本身可以不知道你的领域。代价:协议层的校验必须领域无关。 领域特定的智能放在 L1 / L5 插件里。

怎么写 domain.yaml,见 拓展 → domain.yaml