Skip to content

A skill is one directory under the layer's skills section holding SKILL.md, discovered by the source class `skill` the shell tool and the Rust executable both read, so that adding the file is the whole registration and the catalogue, the command, doctor, MCP and the site all derive from it

A skill is .ai/repo/skills/<id>/SKILL.md: YAML front matter satisfying share/schemas/majordomus/skill/skill.v1.schema.json over a Markdown body that is the procedure, with optional examples/*.md beside it. Nothing registers it. The source class skill in .ai/repo/knowledge/sources.yaml says which tracked files are skills, and that one declaration is what the shell tool, the Rust executable and the site generator all read. Adding the directory and tracking it makes the skill exist for majordomus skills list, for doctor, for the website and for MCP; removing it makes it vanish from all of them.

declared statusdeclared status: guaranteed Declared deterministic and blocking, implemented, and naming the behavioural test that is to prove it. Whether a recorded run supports it is the evidence verdict, shown beside it.

recorded evidencerecorded evidence: not run Declared guaranteed, and not supported by a recorded run: the test is named, and no passing run of the current inputs is recorded. how evidence is recorded

share/kinds.yaml declares the kind, share/schemas/majordomus/skill/skill.v1.schema.json its contract, and the source classes skill and skill_example in .ai/repo/knowledge/sources.yaml which files carry it. Nothing else names a skill. lib/skills.sh derives one catalogue from that discovery for `skills list|show|check`, the doctrine validator and scripts/generate-site-data; the Rust index serves the same files as majordomus://skill/<id> resources, through majordomus_list and majordomus_get, with no code that knows the kind. The case adds, breaks, renames and removes a skill and watches every surface follow.

What it means

A skill is .ai/repo/skills/<id>/SKILL.md: YAML front matter satisfying share/schemas/majordomus/skill/skill.v1.schema.json over a Markdown body that is the procedure, with optional examples/*.md beside it. Nothing registers it. The source class skill in .ai/repo/knowledge/sources.yaml says which tracked files are skills, and that one declaration is what the shell tool, the Rust executable and the site generator all read. Adding the directory and tracking it makes the skill exist for majordomus skills list, for doctor, for the website and for MCP; removing it makes it vanish from all of them.

How it works

share/kinds.yaml declares the kind skill (Markdown, front matter required, identity id, schema skill), and the schema carries x-majordomus-allow: skill, so majordomus generate allow writes the allow-list the shell validator reads. lib/skills.sh derives one catalogue from mj_knowledge_discover — the rows of the skill and skill_example classes, in index order — and everything else is a projection of that catalogue: skills list|show|check, the doctrine validator mj_validate_skills, and the skills.json and site/content/skills/ that scripts/generate-site-data writes. The Rust executable indexes the same files through the same class and serves each as majordomus://skill/<id>, listable with majordomus_list by kind and readable with majordomus_get and resources/read, with no code that knows the kind exists.

How to see it

mkdir -p .ai/repo/skills/release-notes && $EDITOR .ai/repo/skills/release-notes/SKILL.md
git add .ai/repo/skills/release-notes
majordomus skills list                                  # release-notes  active  v1  ...
majordomus skills check                                 # OK skill 1 skill(s) ...
apps/majordomus-cli/target/debug/majordomus mcp --inspect | grep skill/   # resource majordomus://skill/release-notes
scripts/generate-site-data && ls site/content/skills/   # release-notes.md
git rm -r .ai/repo/skills/release-notes && majordomus skills list          # gone everywhere

What it does not cover

An untracked file is not a skill: discovery reads the git index, never the working tree, so a skill exists once it is added. Which skill a task should load is not decided here; the generated instructions tell a worker to load only the skills the task is about.

Why it exists

The source material of this tool kept a catalogue of five hundred and forty-six agents of which one was registered with anything that ran. A skill that has to be named in a second place to exist is a skill that will exist in one place and not the other; a skill that exists because its file does cannot drift from its own inventory.

Detail rendered from docs/claims/skill-catalogue.md.

From the statement to the proof

  1. 1 · the public statement

    A skill is one directory under the layer's skills section holding SKILL.md, discovered by the source class `skill` the shell tool and the Rust executable both read, so that adding the file is the whole registration and the catalogue, the command, doctor, MCP and the site all derive from it

    Made on Skills, Layer.

  2. 2 · the canonical claim

    skill-cataloguedeclared status: guaranteed in docs/CLAIMS.yaml

    Defined in read it on this site · docs/SCHEMAS.md

  3. 3 · the implementation

    lib/skills.sh · majordomus skills

  4. 4 · the test and the scenarios

    Test: test/cases/95_skills.sh

    Executed in Follow a procedure the repository defines, and add another one.

  5. 5 · the recorded runs

    recorded evidence: not run how evidence is recorded

Verify it yourself

The test runs in a disposable temporary repository and asserts the behaviour, not a string in the source.

from a clone of the repository
bash test/run.sh 95_skills

Where this claim is used

responsibilities it covers

Related claims same implementation

Searches the titles and descriptions of every page this site publishes.