Documentation
¶
Overview ¶
Package skill 实现 Agent Skills 开放标准(https://agentskills.io)。
一个技能就是一份带 YAML frontmatter 的 markdown 文档(SKILL.md):frontmatter 声明 name / description 等元信息,正文是指令内容。技能只做「上下文注入」,不是 可执行工具——采用渐进式披露(progressive disclosure):
- 仅把技能元信息(name / description / location)以 XML 注入系统提示词;
- 正文(Instructions)不注入,模型判断需要时按 location 自行读取 SKILL.md 文件。
设计参考 crush/internal/skills 与 opencode/internal/skills。
Index ¶
- Constants
- func DiscoverWithStates(paths []string) ([]*Skill, []*SkillState)
- func ToPromptXML(skills []*Skill) string
- type DiscoveryState
- type Registry
- func (r *Registry) Filter(names ...string) *Registry
- func (r *Registry) Get(name string) (*Skill, bool)
- func (r *Registry) Has(name string) bool
- func (r *Registry) List() []*Skill
- func (r *Registry) Names() []string
- func (r *Registry) PromptBlock(selected ...string) string
- func (r *Registry) Register(s *Skill)
- func (r *Registry) Unregister(name string)
- type Skill
- type SkillState
- type Store
Constants ¶
const ( // SkillFileName 是技能描述文件的文件名。 SkillFileName = "SKILL.md" // MaxNameLength 是技能名允许的最大长度。 MaxNameLength = 64 // MaxDescriptionLength 是技能描述允许的最大长度。 MaxDescriptionLength = 1024 )
Variables ¶
This section is empty.
Functions ¶
func DiscoverWithStates ¶ added in v0.1.5
func DiscoverWithStates(paths []string) ([]*Skill, []*SkillState)
DiscoverWithStates 发现给定路径下所有合法技能,并返回每个文件的发现状态。
func ToPromptXML ¶ added in v0.1.5
ToPromptXML 生成注入系统提示词的 <available_skills> XML。
仅包含元信息(name / description / location),刻意不含指令正文——正文由模型 按需读取,避免一次性塞满上下文。DisableModelInvocation 的技能会被排除。
Types ¶
type DiscoveryState ¶ added in v0.1.5
type DiscoveryState int
DiscoveryState 表示单个技能文件的发现结果。
const ( // StateNormal 表示技能解析并校验成功。 StateNormal DiscoveryState = iota // StateError 表示扫描 / 解析 / 校验失败。 StateError )
type Registry ¶
type Registry struct {
// contains filtered or unexported fields
}
Registry 持有一组已发现的技能,提供按名解析与提示词注入。
技能按名称唯一;同名后注册者覆盖先注册者(用户技能覆盖内置技能)。
Registry 支持在程序运行期热更新(Register / Unregister),因此内部用读写锁 保护:一次 Agent 运行读取技能元信息的同时,前端可以新增 / 修改 / 删除技能。
func NewRegistryWith ¶
NewRegistryWith 创建注册表并注册给定技能。
func (*Registry) PromptBlock ¶ added in v0.1.5
PromptBlock 把技能元信息(selected 为空表示全部)拼接为注入系统提示词的 markdown 块。
仅注入 name / description / location,不含指令正文;无匹配技能时返回空字符串。
func (*Registry) Unregister ¶ added in v0.1.5
Unregister 按名称移除技能;不存在时无操作。
type Skill ¶
type Skill struct {
Name string `yaml:"name" json:"name"`
Description string `yaml:"description" json:"description"`
UserInvocable bool `yaml:"user-invocable" json:"user_invocable"`
DisableModelInvocation bool `yaml:"disable-model-invocation" json:"disable_model_invocation"`
// 以下字段不参与 frontmatter 解析,由加载过程填充。
Instructions string `yaml:"-" json:"instructions,omitempty"` // 指令正文
Path string `yaml:"-" json:"path,omitempty"` // 技能目录
SkillFilePath string `yaml:"-" json:"skill_file_path,omitempty"` // SKILL.md 路径
}
Skill 表示一份解析后的 SKILL.md。
func Deduplicate ¶ added in v0.1.5
Deduplicate 按名称去重;同名时后出现的覆盖先出现的(用户技能覆盖内置技能)。
func ParseContent ¶ added in v0.1.5
ParseContent 从原始字节解析 SKILL.md。
func (*Skill) FormatInvocation ¶ added in v0.1.5
FormatInvocation 生成把技能正文加载到上下文时的 XML 块。
type SkillState ¶ added in v0.1.5
type SkillState struct {
Name string
Path string
State DiscoveryState
Err error
}
SkillState 描述单个技能文件的最新发现状态。
type Store ¶ added in v0.1.5
type Store struct {
// contains filtered or unexported fields
}
Store 把技能以 SKILL.md 的形式持久化到某个根目录(通常为 $BaseDir/.skills)。
磁盘是用户技能的唯一真实来源:运行期新增 / 修改 / 删除都会落盘,进程重启后 由 Discover 重新加载。这样既能保证「程序运行中也能改技能」,又不会因为进程 重启而丢失改动。内存中的 Registry 只是磁盘内容的一份可热更新的缓存。
func (*Store) Contains ¶ added in v0.1.5
Contains 报告 path 是否位于该 Store 的根目录之下。 用于限制只允许删除 / 修改存储在用户技能目录内的技能,避免误删内置或外部技能。