Hacktoberfest 2026 : les issues que les mainteneurs ont marquées pour octobre, ouvertes et accessibles aux débutants. Parcourir les issues Hacktoberfest

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

Ouverte
#555 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Les mainteneurs répondent en général sous 1 jour

Personne n'a encore pris cette issue.

Évaluation

Difficulté
3/5
Temps estimé
1-2 jours
Accessibilité débutants
78/100
Type d'issue
Fonctionnalité
Clarté
Clairement spécifiée
Activité
Active
Stack technique
typescript

Piste de recherche

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.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Description

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
Langage dominant
TypeScript
Étoiles
2.1k
Forks
271
Merge moyen
12 h 15 min
PR mergées (30 j)
41

Préparer son environnement

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Autres issues de MiniMax-AI/minimax-code

Toutes les issues de MiniMax-AI/minimax-code

Issues similaires

Plus d'issues TypeScript

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.