[Feature]: support disable-model-invocation in SKILL.md frontmatter
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
- Área
- backend, developer-experience
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 resolveskill(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:
- Add
disable_model_invocation?: booleantoparseSkillFrontmatter()and to the registry entry type inpackages/local-runtime/src/skills/builtin.ts. - Split the
listedcheck out offilterInjectableRegistrySkills()so the catalog renderer can use a variant that keepsdisable_model_invocationskills out of<available_skills>whilereadRegistrySkillByName()continues to resolve them. - 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: truedoes not appear in<available_skills>. skill(name)still loads that skill and returns its content.listed: falsestill 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
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de MiniMax-AI/minimax-code
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
MiniMax-AI/minimax-code#556 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
MiniMax-AI/minimax-code#507 ·
Los mantenedores suelen responder en 1 día
-
bug needs-triage tui
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
MiniMax-AI/minimax-code#481 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug cli documentation needs-triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
MiniMax-AI/minimax-code#299 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 54/100
MiniMax-AI/minimax-code#567 ·
Los mantenedores suelen responder en 1 día
Todos los issues de MiniMax-AI/minimax-code
Issues similares
-
bug ready-for-agent
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
PhyberApex/kuroshiro#1687 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
microsoft/monaco-editor#5563 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 86/100
awslabs/visual-asset-management-system#937 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100