Saltar al contenido principal

SKILL.md

SKILL.md es un formato de archivo estándar que describe una habilidad de agente usando frontmatter YAML y un cuerpo Markdown. El SDK de KnowledgePulse agrega un bloque de extensión opcional kp: al frontmatter, habilitando la configuración de captura de conocimiento mientras se mantiene la total compatibilidad retroactiva con herramientas que no son de KP.

Funciones

parseSkillMd(content)

Parsea una cadena SKILL.md en sus componentes estructurados.

function parseSkillMd(content: string): ParsedSkillMd

Parámetros:

ParámetroTipoDescripción
contentstringEl contenido bruto del archivo SKILL.md

Devuelve: ParsedSkillMd

interface ParsedSkillMd {
frontmatter: SkillMdFrontmatter; // Campos YAML estándar
kp?: SkillMdKpExtension; // Extensión KnowledgePulse (si está presente)
body: string; // Contenido Markdown después del frontmatter
raw: string; // Cadena de entrada original
}

Lanza: ValidationError si el frontmatter falta, el YAML está malformado o los campos requeridos están ausentes.

Ejemplo:

import { parseSkillMd } from "@knowledgepulse/sdk";

const content = `---
name: code-reviewer
description: Reviews pull requests for code quality issues
version: "1.0.0"
author: acme-corp
tags:
- code-review
- quality
allowed-tools:
- github_pr_read
- github_pr_comment
kp:
knowledge_capture: true
domain: code-review
quality_threshold: 0.8
privacy_level: aggregated
visibility: network
reward_eligible: true
---

## Instructions

You are a code review assistant. Analyze the given pull request
and provide actionable feedback on code quality, security, and
best practices.
`;

const parsed = parseSkillMd(content);

console.log(parsed.frontmatter.name); // "code-reviewer"
console.log(parsed.frontmatter.tags); // ["code-review", "quality"]
console.log(parsed.kp?.knowledge_capture); // true
console.log(parsed.kp?.quality_threshold); // 0.8
console.log(parsed.body); // "\n## Instructions\n\nYou are a ..."

generateSkillMd(frontmatter, body, kp?)

Genera una cadena SKILL.md a partir de componentes estructurados.

function generateSkillMd(
frontmatter: SkillMdFrontmatter,
body: string,
kp?: SkillMdKpExtension,
): string

Parámetros:

ParámetroTipoDescripción
frontmatterSkillMdFrontmatterCampos estándar del frontmatter YAML
bodystringContenido del cuerpo Markdown
kpSkillMdKpExtension(opcional) Campos de extensión KnowledgePulse

Devuelve: Una cadena SKILL.md completa con delimitadores de frontmatter YAML (---).

Ejemplo:

import { generateSkillMd } from "@knowledgepulse/sdk";

const skillMd = generateSkillMd(
{
name: "data-analyst",
description: "Analyzes datasets and produces insights",
version: "0.2.0",
tags: ["analytics", "data"],
"allowed-tools": ["sql_query", "chart_render"],
},
"## Instructions\n\nAnalyze the provided dataset and generate a summary report.",
{
knowledge_capture: true,
domain: "data-analysis",
quality_threshold: 0.7,
visibility: "org",
},
);

console.log(skillMd);
// ---
// name: data-analyst
// description: Analyzes datasets and produces insights
// ...

validateSkillMd(content)

Valida una cadena SKILL.md sin lanzar excepciones. Ejecuta tanto la sanitización como la validación de esquema, recopilando todos los errores.

function validateSkillMd(content: string): {
valid: boolean;
errors: string[];
}

Parámetros:

ParámetroTipoDescripción
contentstringEl contenido bruto del archivo SKILL.md

Devuelve: Un objeto con valid (booleano) y errors (arreglo de cadenas legibles por humanos). Cuando valid es true, el arreglo errors puede aún contener advertencias no fatales (ej. "Warning: Removed HTML comments").

Ejemplo:

import { validateSkillMd } from "@knowledgepulse/sdk";

// Documento válido
const good = validateSkillMd(`---
name: my-skill
description: A helpful skill
---

Instructions here.
`);
console.log(good.valid); // true
console.log(good.errors); // []

// Documento inválido (campos requeridos faltantes)
const bad = validateSkillMd(`---
name: my-skill
---

No description field.
`);
console.log(bad.valid); // false
console.log(bad.errors);
// [
// "Invalid SKILL.md frontmatter",
// " description: Required"
// ]

Formato SKILL.md

Un archivo SKILL.md consiste en dos secciones separadas por delimitadores de frontmatter YAML (---):

---
<frontmatter YAML>
---

<cuerpo Markdown>

Campos Estándar del Frontmatter

CampoTipoRequeridoDescripción
namestringIdentificador único del skill
descriptionstringDescripción legible por humanos
versionstringNoVersión semántica
authorstringNoAutor u organización
licensestringNoIdentificador de licencia SPDX
tagsstring[]NoEtiquetas de búsqueda
allowed-toolsstring[]NoHerramientas MCP que este skill puede invocar

Extensión KnowledgePulse (kp:)

El bloque kp: es un objeto anidado opcional dentro del frontmatter. Configura cómo el protocolo KnowledgePulse interactúa con este skill.

CampoTipoDefectoDescripción
knowledge_captureboolean--Habilitar captura automática de conocimiento para este skill
domainstring--Dominio de tarea usado para clasificación de conocimiento
quality_thresholdnumber--Puntuación mínima de calidad (0.0-1.0) para que el conocimiento capturado sea contribuido
privacy_levelPrivacyLevel--Nivel de privacidad para el conocimiento capturado
visibilityVisibility--Alcance de visibilidad para el conocimiento capturado
reward_eligibleboolean--Si las contribuciones de este skill son elegibles para recompensas de tokens

Compatibilidad Retroactiva

La extensión kp: está diseñada para ser totalmente compatible con versiones anteriores:

  • Las herramientas que no entienden la clave kp: simplemente la ignorarán durante el parseo YAML.
  • Los campos kp: son todos opcionales; un archivo SKILL.md funciona sin ellos.
  • Los campos estándar (name, description, tags, etc.) permanecen sin cambios.

Esto significa que puedes agregar configuración de KnowledgePulse a cualquier archivo SKILL.md existente sin romper las herramientas que consumen el formato estándar.

Manejo de Errores

Cuando parseSkillMd encuentra entrada inválida, lanza un ValidationError con un arreglo estructurado issues:

import { parseSkillMd, ValidationError } from "@knowledgepulse/sdk";

try {
parseSkillMd(invalidContent);
} catch (err) {
if (err instanceof ValidationError) {
console.error(err.message);
// "Invalid SKILL.md frontmatter"

for (const issue of err.issues) {
console.error(` ${issue.path}: ${issue.message}`);
// "description: Required"
// "kp.quality_threshold: Number must be less than or equal to 1"
}
}
}

Cada entrada en el arreglo issues contiene:

CampoTipoDescripción
pathstringRuta delimitada por puntos al campo inválido (ej. "kp.quality_threshold")
messagestringDescripción legible por humanos de la falla de validación

Para errores de extensión kp:, las rutas están prefijadas con kp. para distinguirlos de los errores de frontmatter estándar.