DRIFT.md is “what is true about this project”, skills are “how do we do specific things around here”.
Adding a skill
The fastest way:~/.drift/skills/<name>/SKILL.md and registers it as a user-global skill — active in every workspace on this machine.
To install it as a project-scoped skill instead (lives inside your repo, ships when you commit it):
<repoRoot>/.drift/skills/<name>/SKILL.md so anyone who clones the repo picks it up automatically.
Or in plain English at the prompt:
A loose
skills.md in your workspace root is not picked up. The convention is one directory per skill, with the file literally named SKILL.md inside it (e.g. <repo>/.drift/skills/ekf-tuning/SKILL.md). /skill add <path> does the directory-and-rename housekeeping for you.What goes in a SKILL.md
A skill has a short YAML front-matter block plus the actual procedure as markdown:
applies_to is a list of categories — Drift will load the skill for prompts that match). The body is plain markdown; write it the way you’d explain it to a new hire.
Listing and removing
Sharing skills across the team
Two patterns work well:Pattern 1: skills in the project repo
Commit.drift/skills/ under your project repo. Anyone who clones the project gets your skills automatically:
/skill add <path> --repo installs into exactly this layout. If your team already keeps skills in .claude/skills/ (Claude Code convention), Drift reads those too — see the compat note below.
This is the right pattern for project-specific procedures.
Pattern 2: skills in a dedicated team repo
Keep a separateteam-skills repo. Each developer runs:
Claude Code compat
If you already use Claude Code or Cursor and keep skills in.claude/skills/<name>/SKILL.md, Drift reads those too. Both .drift/skills/ (the Drift-native location) and .claude/skills/ (the Claude Code convention) are scanned in user-global (~/.{drift,claude}/skills/) and project (<repoRoot>/.{drift,claude}/skills/) scopes. You don’t have to migrate; the agent will pick up whichever you have. /skill add always copies into .drift/skills/ so the install path is unambiguous.
Examples of skills worth writing
Things our users have written skills for:- EKF / UKF tuning — process noise, observation models, fallback ladders
- Launch-file conventions — how to structure
main.launch.pyvsbringup.launch.py - URDF practices — inertia formulas, collision-geometry rules, joint-naming convention
- MJCF conventions — chassis-z spawn rules, wheel friction/condim defaults, integrator picks
- Build / colcon discipline — packages-up-to flags, symlink-install rule, what’s vendored
- Gazebo plugin authoring — how your team writes a sensor plugin
- Topic-naming conventions — prefix rules, namespacing, what’s published where
- Hardware bring-up — how a new robot is brought online for the first time
Don’t put in a skill
- Code. Skills are procedures, not source. The agent already reads your code.
- One-off fixes. A note on something that happened once doesn’t belong in a skill — it’s noise.
- Things that change weekly. Skills should be relatively stable. For volatile state, just say it in the prompt.
- Secrets. Plain markdown file; treat accordingly.
Combining skills with project context
DRIFT.md and skills work together:
DRIFT.mdsays “our cmd_vel topic is/warehouse_bot/cmd_vel”.- A skill says “to debug a wheel that doesn’t turn, check: 1. topic connection, 2. controller chain, 3. PID gains, 4. URDF axis alignment”.
DRIFT.md is facts. Skills are procedures. The agent gets both, in the right contexts, automatically.
Next steps
Project Context
The companion file format — facts about your project.
Commands Reference
Full
/skill subcommand reference.