kantord/librelingo/courses
- community
Checking that the SKILL.md file is still in the repository.
Install
npx vskill@latest install kantord/librelingo/coursesSKILL.md
LibreLingo Documentation on Skill
A Skill resides below a Module within the course structure. It's the lowest element in the course hierarchy. It contains a set of words and phrases to be taught to the user.
A skill is usually centered around a specific theme. This could be introducing a new grammar concept or just vocabulary to talk about a certain topic.
The words and phrases that make up a skill are taught to the user using automatically generated questions and tasks.
Confused? Ask people on GitHub Discussions.
Table of Contents:
- Tree structure
- `(skill_name).yaml`
- Data breakdown
- How skills are taught to the user
- Creating new skills
- Examples of editing a skill
- Tips for creating good skills
- `(skill_name).md`
Tree structure
A typical tree structure for skills under a module is as follows:
Here, animals.yaml, clothes.yaml, and food.yaml are skills. These skill files are kept inside a skills folder. The YAML files contain information about the skill (see below).
Skill yaml filenames should not have spaces and should be written in slug-form. The human-friendly Name in the yaml, however, can contain uppercase and spaces.
<a id="yaml"></a>
(skill_name).yaml
As an example, let's look into the courses/french-from-english/basics/skills/hello.yaml file, which looks like this:
Data breakdown
`Skill` has information about the skill.
Skill > Name: The human-friendly name of the skill.Skill > Id: The ID of the course. NOTE: This should be unchanged if you're translating or editing an existing course. Only if you're creating a new course should this have a unique UUID v4 string. Details for which you can find here.Skill > Thumbnails: A list of filenames of the thumbnails to be used on the course page to give an idea of the skill. A list of available files can be found on `apps/web/static/images/`. The names should be used without extension and without_tinyor_tinierparts, e.g.,banana2_tinier.jpgshould be written asbanana2.
`New words` has a list of new words that the lesson teaches.
Word: The word in the target language, i.e., the language the user is learning.Synonyms: A list of synonyms of the above word. (optional)Translation: Translation of the word in the source language, i.e., the language the user already knows.Also accepted: A list of alternative translations to the source language, which will _not_ be taught but will be accepted as correct translations of theWordfield if supplied by the user. Currently has no effect, but may be used by future challenge types. (optional)Images: A list of images for the word that is defined underWordorTranslationabove. The image names have to be without extension and without_tinyor_tinierparts.
`Phrases` has a list of sentences or phrases that the lesson teaches.
Phrase: The phrase in the target language.Alternative versions: A list of alternative versions of the phrase in the target language. These will _not_ be taught but will be accepted as correct translations of theTranslationfield if supplied by the user. (optional)Translation: Translation of the phrase to the source language.Alternative translations: A list of alternative translations to the source language, which will _not_ be taught but will be accepted as correct translations of thePhrasefield if supplied by the user. (optional)
`Mini-dictionary` has a list of terms and meanings the user can view as a sort of "hint" if they are stuck. Entries are accessed by mousing over terms in an exercise, which brings up a tooltip with the corresponding term(s) in the other language. An entry is required for every term used in a skill.
Note that all New words are automatically added to the Mini-dictionary, in both translation directions, using the Word and Translation fields (Synonyms and Also accepted are ignored).
Mini-dictionary entries do not only apply to this skill; the meanings will apply course-wide and be merged with the same term in other skills, if applicable. This means that entries can be omitted when they are already present in other skills.
Mini-dictionary entries can define a term that spans multiple words, for example, a phrase like "post office". For this to work, "post office" will need to be enclosed in curly braces -- {post office} -- wherever it appears in the skill. (Due to YAML, strings containing braces will need to be quoted.)
<destination language>: A list of terms in the destination language as key and meaning in the target audience's language.<target audience's language>: A list of terms in the target audience's language as key and meaning in the destination language.
`Two-way-dictionary` has a list of terms translating from the source language to the target language. This is a newer form of the Mini-dictionary in which we only need to write down pairs of words once, and they will be included in the dictionary in both directions. Unlike the Mini-dictionary, here each word has exactly one translation (so no list), but the same word can appear multiple times.
Is the same as:
The Two-way-dictionary also disregards any parentheses on the original side but includes them on the translation side:
Is the same as writing
How skills are taught to the user
As the course author, you have to specify the words and phrases you want to teach. LibreLingo will know how to present skills as a series of individual questions and tasks -- LibreLingo calls these "challenges." It is useful to understand what challenges will be generated.
For each vocabulary word (that is, each New words entry) in a skill, LibreLingo generates:
- A cards challenge -- multiple-choice translation from the source language to the target language, with a visual clue
- A short input challenge -- free-form translation from the source language to the target language
- A listening challenge -- transcription from target language audio to the target language text
For each phrase in a skill, LibreLingo generates:
- An options challenge -- multiple-choice translation from target language to source language
- Two chips challenges -- translation using provided words, one in each translation direction, unless the phrase is one word
- A listening challenge -- transcription from target language audio to the target language text
<a id="creating-new"></a>
Creating new skills
Creating new skills is a matter of creating their corresponding YAML file. That being said, there are a couple of things to keep in mind:
- Skill yaml file should be inside a module's
skillsdirectory. - Skills should have a unique
Id. Such identifiers can be generated using
- Before skills will actually show up in the web app, they need to be added to
<a id="example-edit"></a>
Examples of editing a skill
This is how you'd add a new alternative version to the phrase "La femme dit bonjour":
Keep in mind that when you add a new phrase or a new version or translation to a phrase, it's not automatically updating to the mini-dictionary. So you need to add any new words there:
Also, note that the new words from each phrase listed under the Phrases key need to be added for both the source and the target language in the Mini-dictionary. For example:
<a id="tips"></a>
Tips for creating good skills
- When it comes to teaching grammar, your main tool is to teach by example.
- Use words to teach nouns that can be demonstrated easily with pictures, such as "dog", "car", "tree", and "city".
- Do not try to teach verbs, adjectives, etc., using words. Instead, use them in phrases.
<a id="markdown"></a>
(skill_name).md
In order to create an introduction page for your skill, you need to create a Markdown file with the same name as your .yaml file but with the .md extension.
Place this .md file next to the .yaml file in your skills folder like so
You can use this Markdown file to create a short article about the skill the user is about to learn or practice. This can be useful for explaining grammatical concepts, gotchas, and learning tips about the specific skill.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationWarning, 75 of 100Marginal. 1 run. Evaluated 7 months ago.
Source
- SKILL.md in the repositoryCheckingdocs/courses/skill.md
Popularity
- Repository stars
- 2,606
- Repository forks
- 256
- 7-day trend score
- 39
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 19 Mar 2026, 7 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/kantord/librelingo/courses)