diff --git a/AGENTS.md b/AGENTS.md
index a1485df..601620b 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -2,7 +2,7 @@
 
 ## Project Structure & Module Organization
 
-This is a Bash CLI project. The active runtime is the root `devloop` executable. `install.sh` links it into a local bin directory, `tests/devloop_test.sh` covers the shell runtime, `skills/spec/SKILL.md` is the spec-generation prompt asset, and `templates/spec.md` is the starter spec. Generated runtime output belongs under `.codex/` in target repositories and should not be committed here.
+This is a Bash CLI project. The active runtime is the root `devloop` executable. `install.sh` links it into a local bin directory, `tests/devloop_test.sh` covers the shell runtime, `skills/devloop-spec/SKILL.md` is the spec-generation prompt asset, `skills/devloop-review/SKILL.md` is the review prompt asset, and `templates/spec.md` is the starter spec. Generated runtime output belongs under `.codex/` in target repositories and should not be committed here.
 
 ## Build, Test, and Development Commands
 
diff --git a/devloop b/devloop
index 1866fca..d2e94df 100755
--- a/devloop
+++ b/devloop
@@ -1081,7 +1081,7 @@ review_prompt() {
   local criteria priors review_skill strict_rule
   criteria="$(criteria_block "$criteria_file")"
   priors="$(list_reviews "$slug" "$pass" "$max")"
-  review_skill="$(cat "$ROOT_DIR/skills/review/SKILL.md")"
+  review_skill="$(cat "$ROOT_DIR/skills/devloop-review/SKILL.md")"
   strict_rule=""
   if [ "$strict" = true ]; then
     strict_rule="
@@ -1635,7 +1635,7 @@ spec_command() {
     esac
   done
 
-  local skill="$ROOT_DIR/skills/spec/SKILL.md"
+  local skill="$ROOT_DIR/skills/devloop-spec/SKILL.md"
   case "$action" in
     print-skill) cat "$skill"; return ;;
     skill-path) printf '%s\n' "$skill"; return ;;
diff --git a/skills/review/SKILL.md b/skills/devloop-review/SKILL.md
similarity index 94%
rename from skills/review/SKILL.md
rename to skills/devloop-review/SKILL.md
index 95bb312..7a80241 100644
--- a/skills/review/SKILL.md
+++ b/skills/devloop-review/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: devloop-review
-description: Review devloop implementation passes with separate spec and engineering gates.
+description: Use this skill when reviewing a devloop implementation pass against a spec, track, diff, prior reviews, acceptance criteria, or engineering quality gates. Decide ACCEPT, REJECT, or UNCLEAR with concrete evidence and fix instructions.
 ---
 
 # Devloop Review
diff --git a/skills/spec/SKILL.md b/skills/devloop-spec/SKILL.md
similarity index 93%
rename from skills/spec/SKILL.md
rename to skills/devloop-spec/SKILL.md
index 17a4dc5..8b11a58 100644
--- a/skills/spec/SKILL.md
+++ b/skills/devloop-spec/SKILL.md
@@ -1,6 +1,6 @@
 ---
 name: devloop-spec
-description: Interview from a cold start or distill existing material into one devloop-compatible implementation spec. Use when the user wants a concrete spec for devloop, whether they provide notes, a file, a URL, research, conversation context, or only a rough idea.
+description: Use this skill when the user wants a devloop-ready implementation spec from a rough idea, notes, file, URL, issue, research, or conversation context. Interview from a cold start when source material is too thin; otherwise distill the provided material into one concrete spec.
 ---
 
 # Devloop Spec
diff --git a/tests/devloop_test.sh b/tests/devloop_test.sh
index e7af398..72947c5 100755
--- a/tests/devloop_test.sh
+++ b/tests/devloop_test.sh
@@ -39,10 +39,21 @@ contains "$help" "--create-pr" "help"
 ok "help output"
 
 skill_path="$("$ROOT/devloop" spec --skill-path)"
-[[ "$skill_path" == "$ROOT/skills/spec/SKILL.md" ]] || fail "unexpected skill path: $skill_path"
+[[ "$skill_path" == "$ROOT/skills/devloop-spec/SKILL.md" ]] || fail "unexpected skill path: $skill_path"
 contains "$("$ROOT/devloop" spec --print-skill)" "name: devloop-spec" "spec skill"
 ok "spec skill path"
 
+for skill in "$ROOT"/skills/*/SKILL.md; do
+  name="$(sed -n 's/^name: *//p' "$skill" | head -n 1)"
+  description="$(sed -n 's/^description: *//p' "$skill" | head -n 1)"
+  dirname="$(basename "$(dirname "$skill")")"
+  [[ "$name" == "$dirname" ]] || fail "skill name mismatch: $skill declares $name"
+  [[ "$name" =~ ^[a-z0-9]+(-[a-z0-9]+)*$ ]] || fail "invalid skill name: $name"
+  [[ -n "$description" ]] || fail "missing skill description: $skill"
+  [[ "${#description}" -le 1024 ]] || fail "skill description too long: $skill"
+done
+ok "skill metadata"
+
 work=$(mktemp -d "${TMPDIR:-/tmp}/devloop-test.XXXXXX")
 trap 'rm -rf "$work"' EXIT
 
