Teach HeyDeer your codebase
Skills
A skill holds a reusable procedure, such as how to verify a route’s access control, in the open Agent Skills format. A repository check names the skills it needs, and HeyDeer follows them while it performs that check.
Add a skill
- Create a folder in
.agents/skills/. The folder name is the skill’s name, such asapi-auth. - Add a
SKILL.mdto the folder. As the Agent Skills format requires, it starts with frontmatter that repeats thenameand gives adescriptionof when to use the skill. - Write the procedure below the frontmatter.
- List the skill under
skillsin each check that needs it.
.agents/skills/api-auth/SKILL.md
---
name: api-auth
description: How route handlers authenticate and authorize requests.
Use when checking a route's access control.
---
# Checking a route's access control
1. Find the handler in src/routes/ and the middleware its router
applies.
2. requireAuth() from src/auth/middleware.ts must run before the
handler reads the request.
3. Routes under /admin also need requireRole('admin').
4. A handler that takes an :orgId parameter calls
assertMember(user, orgId) before its first query.
Routes listed in src/routes/public.ts are public by design.- Skill names use lowercase letters, digits, and single hyphens, up to 64 characters.
- Each skill is a folder with a SKILL.md. HeyDeer loads the whole folder the way the Agent Skills format describes, including files that SKILL.md refers to.
- HeyDeer reads skills from the pull request, so a pull request can add or change the skills its own review uses. See What a pull request can change.
List skills in a check
Add the skill names under skills in the check’s frontmatter, as one name or a list:
.agents/checks/route-auth.md
---
files: "src/routes/**"
skills: [api-auth]
---
Every new or changed route handler checks authentication and
authorization before it reads the request.- Skills are guidance. If a listed skill is missing, HeyDeer still performs the check from its instructions.
- A matching check that lists an invalid skill name is invalid. HeyDeer skips that check, reports it under Review notes, and continues the review.
Already using .claude/skills?
Add a symlink so the same skills are also in .agents/skills. You don’t need to move them:
mkdir -p .agents
ln -s ../.claude/skills .agents/skills
git add .agents/skills