Files
oh-my-pi/packages/coding-agent/src/capability/skill.ts
T
can1357 1ea87b26bc feat(coding-agent): added hidden skill flag for system prompt filtering
- Added optional `hide` metadata to skill capabilities so `SKILL.md` frontmatter intent is preserved when skills are loaded.
- Filtered system prompt skill rendering to exclude `hide: true` skills from the `<skills>` listing while keeping them loadable.
2026-05-14 04:38:14 +02:00

57 lines
1.5 KiB
TypeScript

/**
* Skills Capability
*
* Skills provide specialized knowledge or workflows that extend agent capabilities.
*/
import { defineCapability } from ".";
import type { SourceMeta } from "./types";
/**
* Parsed frontmatter from a skill file.
*/
export interface SkillFrontmatter {
name?: string;
description?: string;
globs?: string[];
alwaysApply?: boolean;
/**
* When `true`, the skill is loaded and accessible via `skill://<name>` (and
* `/skill:<name>` slash commands), but is omitted from the rendered system
* prompt's skill listing. Use for skills the user opts into explicitly
* rather than ones the model should auto-discover.
*/
hide?: boolean;
[key: string]: unknown;
}
/**
* A skill that provides specialized knowledge or workflows.
*/
export interface Skill {
/** Skill name (unique key, derived from filename or frontmatter) */
name: string;
/** Absolute path to skill file */
path: string;
/** Skill content (markdown) */
content: string;
/** Parsed frontmatter */
frontmatter?: SkillFrontmatter;
/** Source level */
level: "user" | "project";
/** Source metadata */
_source: SourceMeta;
}
export const skillCapability = defineCapability<Skill>({
id: "skills",
displayName: "Skills",
description: "Specialized knowledge and workflow files that extend agent capabilities",
key: skill => skill.name,
toExtensionId: skill => `skill:${skill.name}`,
validate: skill => {
if (!skill.name) return "Missing skill name";
if (!skill.path) return "Missing skill path";
return undefined;
},
});