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.
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:
Importing a Claude Code or Cursor skill
Skills are opt-in: Drift loads only the skills you explicitly added, and it reads them from.drift/skills/ only. A .claude/skills/ directory is not scanned — your Claude Code skills are mostly not robotics, and Drift will not silently distill and upload them.
Importing one is a one-liner. /skill add copies it into .drift/skills/, where Drift will read it:
Project context files behave differently from skills.
CLAUDE.md, AGENTS.md, and DRIFT.md are all read automatically — see Project Context. It’s only SKILL.md files that must live under .drift/skills/.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.