Agent skill

Vue Route Breadcrumbs

by chamilo in chamilo/chamilo-lms

Gives a route in Chamilo's Vue app its breadcrumb entirely from router meta fields, without editing the Breadcrumb component or naming pages.

GPL-3.0Auto-check passedFrontend & Design

Install Vue Route Breadcrumbs

skills CLI
$ npx skills add chamilo/chamilo-lms --skill vue-breadcrumb -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install chamilo/chamilo-lms vue-breadcrumb --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/chamilo/chamilo-lms.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/vue-breadcrumb .claude/skills/vue-breadcrumb && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
vue-breadcrumb
GitHub stars
1k
Token cost
~2k tokens
SKILL.md length
813 words
Files
1
Skills in repo
5
Repo updated
First seen
Licence
GPL-3.0

At a glance

Gives a route in Chamilo's Vue app its breadcrumb entirely from router meta fields, without editing the Breadcrumb component or naming pages.

  • Works in 3 steps: Ask for a breadcrumb → Declare the label → Register every key
  • Adding a route to the Vue router files and needing its breadcrumb trail
  • SKILL.md covers The three steps that always…, The two extra declarations, Do not do these and Verify, plus 1 more section
  • Calls yarn, python3 and npx

What it does

The breadcrumb component in this project knows no page by name; it reads four `meta` declarations in the router: `showBreadcrumb`, `breadcrumb`, `breadcrumbParents` and `breadcrumbResource`. The skill forbids editing `Breadcrumb.vue` to give a page its trail. Step one is setting `showBreadcrumb: true` on the parent route, or a function of the route when the trail only sometimes applies. Step two is setting `meta.breadcrumb` on the parent and every leaf.

The breadcrumb value is a translation key, not text. An empty string omits that crumb, which suits list pages whose tool crumb already names them, while a missing property triggers a development console warning and shows the raw route name. The label can be a function returning a key, and may return an empty string only on routes that declare `breadcrumbParents`. Step three registers any new key by hand in the en_US locale JSON and the two translation files, since the update command only propagates existing keys, and mass regeneration of locale files should not be committed. The legacy PHP breadcrumb is out of scope.

When your agent uses it

  • Adding a route to the Vue router files and needing its breadcrumb trail
  • Migrating a legacy PHP page to Vue with a matching breadcrumb
  • Fixing a wrong or missing breadcrumb, or the console warning about a missing meta.breadcrumb

Example prompts

  • “Add a breadcrumb to the new checklist route in the Vue router.”
  • “The agenda page shows the raw route name in its breadcrumb; fix it from the router file.”
  • “I migrated the gradebook page to Vue; wire up its breadcrumb parents.”

Requirements

  • A Chamilo checkout with the Vue router files under assets/vue/router

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Ask for a breadcrumb
  2. Declare the label
  3. Register every key

What it can do on your machine

Read from SKILL.md and the folder at commit c3b9c05. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • yarn
    • python3
    • npx
    • php

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use yarn and npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Vue Route Breadcrumbs loads about 2k tokens when it runs. Until then it costs about 211 tokens; SKILL.md has 813 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~211
When it runs · the whole SKILL.md, loaded when a task matches
~2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from chamilo/chamilo-lms at commit c3b9c05, republished under its GPL-3.0 licence (© chamilo). 813 words, ~2,020 tokens.

Download SKILL.mdSave it as .claude/skills/vue-breadcrumb/SKILL.md (or your agent's skills folder).
name
vue-breadcrumb
description
Give a Vue SPA route its breadcrumb, entirely from the router file. The breadcrumb component reads four declarations in `meta` — `showBreadcrumb`, `breadcrumb`, `breadcrumbParents` and `breadcrumbResource` — and knows no page by name. Auto-invoke when: the user adds a route to any file in `assets/vue/router/`, creates a new Vue page or view that needs a URL, migrates a legacy PHP page to Vue, reports a wrong or missing breadcrumb, sees the console warning "[Breadcrumb] Route ... has no meta.breadcrumb", or mentions breadcrumb, crumb, trail, `meta.breadcrumb`, `breadcrumbParents` or `breadcrumbResource`. Do NOT invoke for: the legacy PHP breadcrumb (`window.breadcrumb`, injected by `public/main/`), for `/admin/settings/<namespace>` (its last crumb is read from the DOM), or for styling work on `Breadcrumb.vue` itself.

Breadcrumbs for a Vue route

Never edit assets/vue/components/Breadcrumb.vue to give a page its trail. The component holds no page name and no path. Everything a trail needs is declared in the route.

The three steps that always apply

1. Ask for a breadcrumb

Set showBreadcrumb: true in the meta of the parent route. Without it, App.vue does not mount the component and nothing you declare below has any effect.

A route that only sometimes has a trail declares a function instead. It receives the route:

js
// The personal agenda hangs from no course, so it has nothing to show.
showBreadcrumb: (route) => Number(route.query?.cid || 0) > 0,
2. Declare the label

Set meta.breadcrumb on the parent and on every leaf. The value is a translation key, never translated text.

js
export default {
  path: "/resources/checklist/:node/",
  meta: {
    requiresAuth: true,
    showBreadcrumb: true,
    tool: "checklist",
    breadcrumb: "Checklists",
  },
  name: "checklist",
  component: () => import("../components/layout/SimpleRouterViewLayout.vue"),
  redirect: { name: "ChecklistList" },
  children: [
    { name: "ChecklistList", path: "", meta: { breadcrumb: "" }, component: ... },
    { name: "ChecklistCreate", path: "create", meta: { breadcrumb: "Create" }, component: ... },
    { name: "ChecklistUpdate", path: "edit/:id", meta: { breadcrumb: "Edit" }, component: ... },
  ],
}

breadcrumb: "" means omit this crumb, and it is what a list page usually wants: the tool crumb already names that page. An absent property is a different thing — it triggers the development warning and shows the raw route name.

The label can also be a function returning a key, when it depends on the request:

js
breadcrumb: (route) => {
  const gid = Number(route.query?.gid || 0)
  const cid = Number(route.query?.cid || 0)

  return gid > 0 ? "Group agenda" : cid > 0 ? "Agenda" : "Personal agenda"
},

A function may also return "" to omit the crumb, but only on a route that declares breadcrumbParents: the tool and resource branches still compare the raw meta.breadcrumb property, so there a function is never empty. Declare it when the page's own name exists for some requests only. AdminStatistics in assets/vue/router/admin.js is the reference — its key comes from activeReportLabelKey (assets/vue/utils/statisticsReports.js), which names the report in route.query.report and returns "" when there is none.

3. Register every key

A key that is new to the platform goes by hand into three files:

  • assets/locales/en_US.json
  • translations/messages.pot
  • translations/messages.en_US.po

php bin/console chamilo:update_vue_translations does not create keys. It only propagates to the other locales the keys that en_US.json already holds. Never commit a mass regeneration of assets/locales/*.json; a single new line is fine.

Check first whether the key exists — most tool names already do:

bash
python3 -c "import json; d=json.load(open('assets/locales/en_US.json')); print('Checklists' in d)"

The two extra declarations

breadcrumbParents — a page that hangs from a list page

Give the leaf the fixed ancestors that always precede it. Each entry is { label, route }, where label is a translation key and route is a Vue Router location — prefer { name: ... } over a raw path.

js
meta: {
  breadcrumb: "Import checklists",
  breadcrumbParents: [
    { label: "Administration", route: { name: "AdminIndex" } },
    { label: "Checklists", route: { name: "ChecklistAdminList" } },
  ],
}

When several routes share the same ancestors, declare the lists once at the top of the file. assets/vue/router/admin.js is the reference, with adminCrumb, classesCrumbs, multiUrlCrumbs and accessUrlCrumbs; room.js and branch.js show the smaller shape.

A route with breadcrumbParents owns its whole trail and takes the first branch of buildBreadcrumb, so nothing else runs for it.

The ancestors are fixed, but the leaf's own crumb is not: an empty key drops it and leaves the ancestors standing. That is how a page hangs a report or filter name off a parent that links back to its own bare URL, and it is the only branch where a function may return "".

breadcrumbResource — a tool that opens a resource

Declare it on the parent, when the trail has to name the thing the user opened.

js
// One resource at a time: list -> resource -> sub-page.
breadcrumbResource: {
  trail: "self",
  listRoute: "AssignmentsList",
  detailRoute: "AssignmentDetail",
  detailParam: "id",
}

// A chain of folders, walked up the resource-node parents.
breadcrumbResource: {
  trail: "ancestors",
  listRoute: "DocumentsList",
  detailRoute: "DocumentsList",
}

This declaration also drives the fetch: loadResourceNodeIfNeeded loads the resource node only for a route whose tool declares it. Nothing else has to be wired.

Show full SKILL.md (311 more words)Show less

Do not do these

  • Do not add a rule to Breadcrumb.vue. If a trail seems to need one, the shape is probably already covered by one of the four declarations. Read the component's own builders first. A rule that names a page or a route never belongs there. Widening a contract the declarations already document is a different thing, and rare: do it only when a builder fails to honour a declaration the skill already describes.
  • Do not match route names by substring. A rule like route.name.includes("Page") puts a "Pages" crumb on every wiki page of every course.
  • Do not pass translated text as a label. The component calls t() on what you declare.
  • Do not expect a one-crumb trail to appear. The component gives the first crumb to the PrimeVue home slot, and the container is hidden while the rest is empty. A page whose trail reduces to its tool shows nothing.

Verify

bash
# Fails when a route renders a breadcrumb without declaring its label.
yarn check:breadcrumb-routes

npx eslint assets/vue/router/
yarn dev

Then open the page and read the browser console. [Breadcrumb] Route "X" has no meta.breadcrumb means a declaration is missing. The warning is stripped from the production bundle.

Cover it

tests/playwright/features/breadcrumb.feature holds the breadcrumb scenarios. Add yours there.

Assert on CSS selectors, never on crumb text: this platform runs in many languages and the test environment is not always English.

gherkin
Then I should see the ".app-breadcrumb a[href='/admin/urls']" element

An a[href] proves both that the ancestor is there and that it points at the right place. Two traps that cost real time:

  • The last crumb is a <span>, not a link. Asserting a[href] on the current page's own crumb never matches. Assert on an ancestor.
  • A tool with breadcrumbResource paints late. It waits for the resource-node fetch, well past Playwright's 15 s default. Use I wait up to 45 seconds for the element ... to appear.

Playwright needs BASE_URL=http://localhost inside the container, and the generated spec under tests/playwright/.features-gen/ is tracked, so run bddgen and commit it too.

© chamilo, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/vue-breadcrumb of chamilo/chamilo-lms.

Open the folder on GitHubat commit c3b9c05

Compare with similar skills

Vue Route Breadcrumbs next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Vue Route Breadcrumbs compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Vue Route Breadcrumbs this skillchamilo/chamilo-lms1k—~2kAutomated safety check: PassGPL-3.0
Tailwindcss Developmentanonaddy/anonaddy4.9k10 repos~865Automated safety check: PassMIT
GSAP in Vue, Nuxt and Sveltegreensock/gsap-skills16k4 repos~2.6kAutomated safety check: PassMIT
Vuetify Playgroundvuetifyjs/vuetify41k—~730Automated safety check: PassCustom licence
Buefy Vue UI Componentsbuefy/buefy9.5k—~8.2kAutomated safety check: PassMIT
Create Docsvictorgarciaesgi/nuxt-typed-router4132 repos~2.8kAutomated safety check: PassMIT

Similar skills

  • Tailwindcss Development

    anonaddy/anonaddy

    Always invoke when the user's message includes 'tailwind' in any form.

    4.9k GitHub starsUsed in 10 repos~865 tokens
    Frontend & DesignAuto-check passed
  • GSAP in Vue, Nuxt and Svelte

    greensock/gsap-skills

    Shows how to use GSAP in Vue, Nuxt, Svelte and other lifecycle-based frameworks: create after mount, scope selectors to the component, and revert on unmount.

    16k GitHub starsUsed in 4 repos~2.6k tokens
    Frontend & DesignAuto-check passed
  • Vuetify Playground

    vuetifyjs/vuetify

    Maintains the Vuetify repo's local Playground.vue so contributors get a realistic reproduction and a short demo they can paste into a pull request description.

    41k GitHub stars~730 tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Rules for writing Vue 3 templates with Buefy components on Bulma CSS: install options, prop conventions, b-field wrapping, tables, theming and dialogs.

    9.5k GitHub stars~8.2k tokensUpdated 29 days ago
    Frontend & DesignAuto-check passed
  • Create Docs

    victorgarciaesgi/nuxt-typed-router

    Create complete documentation sites for projects. An agent skill from victorgarciaesgi/nuxt-typed-router.

    413 GitHub starsUsed in 2 repos~2.8k tokens
    Frontend & DesignAuto-check passed
  • Kill AI Slop

    yetone/kill-ai-slop

    Find and remove AI slop — the generic, machine-default visual and copy tics of vibe-coded products — from a web project.

    1.3k GitHub stars~1.4k tokensUpdated 22 days ago
    Frontend & DesignAuto-check passed

More from chamilo/chamilo-lms

  • Chamilo Theme From Site

    chamilo/chamilo-lms

    Creates a Chamilo color theme with a logo from a website's branding or from a logo file's dominant colors, entirely through the Chamilo REST API.

    1k GitHub stars~5.1k tokensUpdated yesterday
    Auto-check passed
  • Chamilo Changelog Updater

    chamilo/chamilo-lms

    Adds commits for a new Chamilo release to the changelog page, classifying them into categories and skipping those already listed for that version.

    1k GitHub stars~4.2k tokensUpdated yesterday
    Auto-check passed
  • Chamilo Vue Base Components

    chamilo/chamilo-lms

    Swaps native form elements in Chamilo Vue files for Base components and checks that every Base, SectionHeader and Fieldset tag has its import.

    1k GitHub stars~7.6k tokensUpdated yesterday
    Auto-check: notes
  • Chamilo Feature Test Author

    chamilo/chamilo-lms

    Turns a plain-language Chamilo feature description into a Playwright and Gherkin test suite confirmed against the live app, not just the source code.

    1k GitHub stars~3.6k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Vue Route Breadcrumbs

What does Vue Route Breadcrumbs do?

Gives a route in Chamilo's Vue app its breadcrumb entirely from router meta fields, without editing the Breadcrumb component or naming pages. The breadcrumb component in this project knows no page by name; it reads four `meta` declarations in the router: `showBreadcrumb`, `breadcrumb`, `breadcrumbParents` and `breadcrumbResource`.vue` to give a page its trail.

When should I use Vue Route Breadcrumbs?

Vue Route Breadcrumbs fits situations like: adding a route to the Vue router files and needing its breadcrumb trail; migrating a legacy PHP page to Vue with a matching breadcrumb; fixing a wrong or missing breadcrumb, or the console warning about a missing meta.breadcrumb.

How do I install Vue Route Breadcrumbs in Claude Code?

Run `npx skills add chamilo/chamilo-lms --skill vue-breadcrumb -a claude-code`. Or copy the skill folder (.claude/skills/vue-breadcrumb in chamilo/chamilo-lms) into .claude/skills/vue-breadcrumb in your project. Claude Code loads it when a task matches its description.

How do I install Vue Route Breadcrumbs in Codex?

Run `npx skills add chamilo/chamilo-lms --skill vue-breadcrumb -a codex`. Or copy the skill folder (.claude/skills/vue-breadcrumb in chamilo/chamilo-lms) into .agents/skills/vue-breadcrumb in your project. Codex loads it when a task matches its description.

Can I use Vue Route Breadcrumbs in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add chamilo/chamilo-lms --skill vue-breadcrumb -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/vue-breadcrumb, .gemini/skills/vue-breadcrumb, .github/skills/vue-breadcrumb and .opencode/skills/vue-breadcrumb in your project.

What does Vue Route Breadcrumbs need to run?

Going by SKILL.md and its folder, Vue Route Breadcrumbs needs the command-line tools its instructions call (yarn, python3, npx and php). Our summary lists: A Chamilo checkout with the Vue router files under assets/vue/router.

Does Vue Route Breadcrumbs access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Vue Route Breadcrumbs safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Vue Route Breadcrumbs use?

Vue Route Breadcrumbs is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Vue Route Breadcrumbs use?

About 2k tokens (SKILL.md is roughly 8.1k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Vue Route Breadcrumbs?

Skills that share tags, products or a category with Vue Route Breadcrumbs: Tailwindcss Development (anonaddy/anonaddy, 4.9k stars), GSAP in Vue, Nuxt and Svelte (greensock/gsap-skills, 16k stars), Vuetify Playground (vuetifyjs/vuetify, 41k stars) and Buefy Vue UI Components (buefy/buefy, 9.5k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Vue Route Breadcrumbs?

chamilo (a GitHub organization) maintains it in chamilo/chamilo-lms, which has 1,008 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 6, 2026.

Source: chamilo/chamilo-lms on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.