Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

[Feature]: support disable-model-invocation in SKILL.md frontmatter

Abierto
#555 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
78/100
Tipo de issue
Nueva funcionalidad
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
typescript

Línea de trabajo

Start with parseSkillFrontmatter() in packages/local-runtime/src/skills/builtin.ts, then trace filterInjectableRegistrySkills() in registry-family.ts and its catalog and by-name callers in registry-operations.ts. Add the new frontmatter behavior while preserving the separate listed: false behavior. Done means the acceptance criteria pass for catalog visibility, skill(name) loading, and absent or false values; update the skills documentation.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Summary

disable-model-invocation is supported by Claude Code and pi, and Codex ships an equivalent under a different name (policy.allow_implicit_invocation in agents/openai.yaml). mcode currently has no way to express "hide this skill from the model, but keep /name working" — listed: false removes the skill from both the prompt catalog and the skill tool's lookup path.

Current behavior

packages/local-runtime/src/skills/builtin.ts parses only four frontmatter fields:

function parseSkillFrontmatter(content: string): {
  name?: string;
  description?: string;
  listed?: boolean;
  requires_beta?: string;
}

Both the prompt catalog and the by-name read path go through the same filter, filterInjectableRegistrySkills() in packages/local-runtime/src/skills/registry-family.ts:

export function filterInjectableRegistrySkills(entries, options) {
  return filterSkillsVisibleToAgent(entries, options)
    .filter((entry) => entry.frontmatter.listed !== false)
    // ...ambiguity / allowedSkillNames / betaFlags / injectableBuiltinSkillNames
}
  • renderLocalSkillsCatalog() (registry-operations.ts:236) calls it to build <available_skills>.
  • readRegistrySkillByName() (registry-operations.ts:285) calls it to resolve skill(name).

So listed: false hides the skill from the model and makes the tool fail with Local skill not found: <name> (packages/agent-tools/src/desktop/local-skill.ts). requiresBeta behaves the same way: it gates loading, not just rendering.

The nearest thing to a render-only switch is injectableBuiltinSkillNames, but because it lives in the same filter, a skill left out of that allowlist is also unloadable by name — and it only applies to rootKind builtin/agent, so external skills are unaffected.

Why this matters

Harness Field Location
Claude Code disable-model-invocation: true SKILL.md frontmatter
pi disable-model-invocation: true SKILL.md frontmatter
Codex policy.allow_implicit_invocation: false agents/openai.yaml
mcode — —

A skill shared across harnesses silently changes semantics: manual-only in Claude Code / pi, auto-triggered in mcode. Since mcode ignores unknown frontmatter keys without warning, a single SKILL.md cannot behave correctly everywhere.

Codex has the same gap in its own docs: the bundled skill-creator skill documents disable-model-invocation: true in SKILL.md, but codex-rs/skills/src/parser.rs only reads name, description and metadata.short-description — so the documented field has no effect there either. Both projects would benefit from the same small change.

Suggested implementation

pi already separates the two paths — it filters only at prompt-render time and leaves the load path untouched (third_party/pi-mono/packages/coding-agent/src/core/skills.ts, vendored here):

// Skills with disableModelInvocation=true are excluded from the prompt
const visibleSkills = skills.filter((s) => !s.disableModelInvocation);

The equivalent for mcode would be:

  1. Add disable_model_invocation?: boolean to parseSkillFrontmatter() and to the registry entry type in packages/local-runtime/src/skills/builtin.ts.
  2. Split the listed check out of filterInjectableRegistrySkills() so the catalog renderer can use a variant that keeps disable_model_invocation skills out of <available_skills> while readRegistrySkillByName() continues to resolve them.
  3. Document the field in the skills docs.

listed: false should keep its current meaning (hidden from both paths, including manual invocation) — the new field would be additive.

Acceptance criteria

  • A skill with disable-model-invocation: true does not appear in <available_skills>.
  • skill(name) still loads that skill and returns its content.
  • listed: false still hides the skill from both paths.
  • disable-model-invocation: false (or absent) behaves exactly as today.

Environment

  • mcode 0.7.1 (@minimax-ai/code)
  • Files inspected: packages/local-runtime/src/skills/{builtin.ts,registry-family.ts,registry-operations.ts}, packages/agent-tools/src/desktop/local-skill.ts
Lenguaje dominante
TypeScript
Estrellas
2.1k
Forks
271
Merge medio
14 h 23 min
PR fusionados (30 d)
35

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de MiniMax-AI/minimax-code

Todos los issues de MiniMax-AI/minimax-code

Issues similares

Más issues de TypeScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.