Writing a skill or team for the library
How Murage's built-in skill library and team library are laid out, the manifest and package formats, and how to propose a new skill or team.
Murage ships two libraries in its repository: a skill library of more than 2,000 skills, and a team library of ready-made team packages. Both are read from disk, so the app works fully offline. This page is for adding to them through a pull request.
To write a skill or team just for yourself or your staff, you don't need any of this: see Writing your own skills and Team packages.
The skill library
Library skills live in skills-library/, one folder per skill:
skills-library/
weekly-client-report/
SKILL.md
manifest.json
SKILL.md
The same format as any Murage skill: YAML frontmatter between --- lines, then Markdown instructions. Library skills use these frontmatter fields:
--- name: weekly-client-report description: | Writes the Friday client status report from this week's notes and tasks. Use when asked for a client update, weekly report or status email. Do NOT use for invoices or internal team updates. license: Apache-2.0 metadata: author: your-name version: "1.0.0" tags: "reporting clients writing" category: "operations" subcategory: "client-services" difficulty: "beginner" ---
name must be lowercase letters and numbers with single hyphens, up to 64 characters, and match the folder name. The description (up to 1,024 characters) is what a bot sees in its skill index, so say what the skill does, when to use it and when not to.
manifest.json
Each library skill also has a manifest the app reads when it loads the library:
{
"id": "weekly-client-report",
"name": "Weekly Client Report",
"version": "1.0.0",
"description": "Writes the Friday client status report...",
"defaultEnabled": false,
"triggerTerms": ["reporting", "clients", "writing"],
"requiredCapabilities": []
}
The loader is strict. It refuses a manifest when:
idisn't a valid id or doesn't match the folder name;nameordescriptionis missing;versionisn't three numbers, such as1.0.0;defaultEnabledisn't a true or false value;triggerTermsis empty;requiredCapabilitiesisn't a list.
An optional attachedTo field only accepts workspace-chief, for skills meant for the Chief of Staff.
Skill Guard and the library
Library skills are scanned by Skill Guard like any other. The recorded results are in skills-library/scan-verdicts.json. A new library skill should come back clean. If it's flagged, rewrite the flagged lines rather than asking for an exception: people see the verdict before they switch a skill on.
What makes a good library skill
- One job, done well, in a page or two.
- Numbered steps and a clear definition of done.
- No secrets, no network calls to outside sites, no instructions to skip approvals or ignore rules.
- Written for any business, not one company's internal names.
The team library
Team packages live in library/packages/, one murage.package file per team (JSON, or Markdown for some imported teams). Single-bot profiles live in library/assistants/. The format is described field by field in Team packages.
Library package conventions:
idis a lowercase slug;releaseis a three-number version.authornames who wrote it;licenseisApache-2.0for library packages.- Every bot's
skillsshould name skills that exist inskills-library/. The catalog counts only skills the library actually ships, so the number a card shows is the number that installs. routinesmust haveenabledAfterInstall: false.requirements.appsshould list every connected app the team really needs, each with a reason, so people know before they import.
The catalog
The team library the app shows is built from a local catalog, library/catalog.json, generated from the package files, the assistant profiles and the skill library. After adding or changing a package:
pnpm catalog:build # regenerate library/catalog.json pnpm catalog:check # confirm it matches (also part of pnpm test)
Commit the regenerated catalog with your change.
Proposing your addition
- Open an issue describing the skill or team and who it's for.
- Add the files, run
pnpm catalog:buildif you changed a team, thenpnpm typecheckandpnpm test. - Open a pull request with one skill or one team per PR.
See Contributing for the ground rules and the CLA.