Luxe

Skills

Teach the agent a procedure it loads only when it needs it.

View as Markdown

A skill is a playbook in a SKILL.md file: how your team reviews a migration, cuts a release or writes a changelog entry. The agent sees each skill’s name and description, and loads the full text only when a task calls for it, so a long skill costs nothing until it is used.

Write a skill

One folder per skill, with a SKILL.md in it:

FolderFor
~/.agents/skills/<name>/Every project, and every agent that reads it
~/.config/luxe/skills/<name>/Every project (%APPDATA%\luxe\skills on Windows)
.agents/skills/<name>/This repository, committed with it
.luxe/skills/<name>/This project. Git sees it too, since .luxe/ keeps skills/ out of what it ignores.

.agents/skills/ is where Codex, OpenCode, Pi, GitHub Copilot and the npx skills installer put skills, so one installed for any of them works here too. Luxe reads a repository’s .agents/skills/ from the top of the repository down to the project. When two skills share a name, whatever its case, the one lower in the table wins, so a project’s skill replaces your own, and between nested .agents/skills/ folders the deeper one wins. A skill reached twice through a symbolic link counts once.

.luxe/skills/release-notes/SKILL.md
---
name: release-notes
description: >
  Writes the CHANGELOG entry for a user-visible change. Use when a change
  adds, removes or alters something a user would notice.
---

1. Read the diff and the issue it closes.
2. Add one line under `## Unreleased` in CHANGELOG.md, in the past tense,
   naming what changed for the user, not how.
3. Link the pull request at the end of the line.

Write the description for the moment the agent decides whether to load it: say when to use it, not what it contains. Without one, the agent sees only the name. name is optional and defaults to the folder’s, and the --- block has to start on the first line.

A skill folder can also hold reference files. A loaded skill tells the agent its folder, so a skill that says see references/schema.md gets read. A skill over 40,000 characters is cut off, with a note telling the agent to read the rest of the file.

Use a skill

The agent loads a skill when its description fits the task. To ask for one yourself, mention it: @, tab to Skills, and enter, as in split this into a stack with @[skill:gh-stack].

Project context lists the skills Luxe found: type skills on the start screen and open it. A SKILL.md placed directly in skills/, without its own folder, is skipped, and Luxe names it at startup. The list in the agent’s instructions is read with a session’s first message, and again when you resume one. The @ picker and the skill tool look again every time, so a skill added mid-session can be mentioned or loaded at once.

Install a skill

Skills written for other agents use the same format and work as they are. Installing one is copying its folder:

git clone --depth 1 https://github.com/github/gh-stack /tmp/gh-stack
mkdir -p ~/.config/luxe/skills
cp -r /tmp/gh-stack/skills/gh-stack ~/.config/luxe/skills/

Create skills/ first, as above. Without it, cp -r copies the skill’s contents to skills/ itself, one level too high.

A skill’s text reaches the model as instructions, so read a skill before installing it, as you would a script. The same goes for a repository you clone: its .agents/skills/ and .luxe/skills/ reach the model without --trust-project. Luxe removes comments and invisible characters from skill files, as it does from AGENTS.md, but without a notice.