* feat: restore author-auth0-skill contributor skill Reverts the revert in #178 — re-adds the .claude/skills/author-auth0-skill/SKILL.md contributor skill and the AGENTS.md reference that points contributors to it. * feat: add metadata.internal to author-auth0-skill Marks the contributor skill as internal so it is hidden from normal discovery and only visible when INSTALL_INTERNAL_SKILLS=1 is set.
7.6 KiB
AGENTS.md
Guidance for AI coding agents working in this repository.
What this repo is
An Agent Skill that teaches coding assistants how to implement Auth0
authentication that follows Auth0's documented SDK usage and passes this
repo's routing and behavioral evals. It ships as a single Claude Code / Cursor / Copilot
plugin (auth0) containing one consolidated skill at
plugins/auth0/skills/auth0/: a router SKILL.md over a pool of on-demand
reference files, some of which are grouped into hub+leaf directories. The
deliverable is the skill itself.
Repository layout
plugins/auth0/skills/auth0/
├── SKILL.md # Required: the router (only file allowed in skill root)
├── references/ # On-demand docs, each reachable from SKILL.md. Every
│ # reference is a directory — framework-<name>/,
│ # feature-<name>/, tooling-<name>/, pattern-<name>/
│ # (kebab-case) — with an index.md that is either the
│ # whole reference (index-only) or a hub + document-
│ # section leaves (leaf group).
├── scripts/ # Optional: executable helpers
└── assets/ # Optional: static resources (templates, data)
evals/ # Repo-root eval harness (NOT inside the skill dir):
├── routing-cases.json # deterministic routing cases (scripts/check_routing_evals.py)
├── activation/ # activation evals — does the SKILL.md `description` fire on the
│ # right prompts and stay quiet on the wrong ones? The only layer
│ # that tests frontmatter; run it after any description edit.
└── behavioral/ # behavioral evals — run-evals.mjs drives a live agent via the
# claude CLI + execa. Kept out of the skill dir on purpose so
# this dev-only harness isn't in per-skill security-scan scope.
Key top-level docs:
CONTRIBUTING.md— authoritative rules for adding or editing Auth0 guidance: reference structure, router wiring, naming, and the validation gate. Read this before changing the skill. Frontmatter requirements are below.PLUGIN.md— plugin/marketplace architecture.README.md— user-facing install and skill catalog.docs/architecture.md— why one skill, and how the router resolves a request to reference files.docs/openai-plugin.md— OpenAI/Codex plugin packaging, pre-submission testing, and public submission.
Before you change a skill
- Read
CONTRIBUTING.md. The conventions there are enforced and not optional. - Match the patterns of the existing reference files rather than inventing new
structure. The naming convention (
framework-<name>,feature-<name>,tooling-<name>,pattern-<name>) and the router-in-SKILL.mdlayout exist on purpose — keep them consistent. Navigation is a depth-3 tree: every reference must be reachable fromSKILL.md; an index-onlyindex.mdor a group leaf must not link to any other.md; the only allowed second hop is a leaf-group hubindex.mddispatching to leaves in its own directory. Enforced byscripts/check_router_reachability.py. See CONTRIBUTING.md → "Adding a reference" before splitting a large one (>1000 lines) into a leaf group. - For the step-by-step authoring procedure (which router tables to edit, in
what order, and how to validate), use the
author-auth0-skillskill in Claude Code. It walks through adding a framework, feature, tooling, or pattern reference so the change passes CI the first time.
Required SKILL.md frontmatter
These fields are enforced by the linter — a skill missing any of them fails CI:
name,descriptionlicense(useApache-2.0to match the repositoryLICENSEunless a specific package requires otherwise)metadata.authorinName <email>formatmetadata.openclaw.emojiandmetadata.openclaw.homepage
The requires, os, and install fields under metadata.openclaw are
ClawHub metadata used when a skill is installed via
npx clawhub install. If a skill's workflow invokes auth0 CLI commands,
declare requires.bins: [auth0] (and the matching install block) so ClawHub
can prompt the user to install the CLI. The frontmatter of
plugins/auth0/skills/auth0/SKILL.md is a working example of all three fields.
Validating your changes
This repo uses skillsaw for validation;
the same check runs in CI (.github/workflows/skillsaw.yml) and must pass
before merge. Run it locally first:
uvx skillsaw --strict
Rules live in .skillsaw.yaml and
.skillsaw/rules.py.
Conventions for agents
- When you add a skill, also document it in the plugin
README.md(plugins/auth0/README.md); the linter enforces this. - Keep documentation single-sourced.
CONTRIBUTING.mdis the source of truth for contribution rules — link to it instead of restating its details.
Writing skill descriptions
The description field is the only signal an agent uses to decide whether to
load a skill. A poor description means the skill never triggers (or triggers
when it shouldn't). Follow the
agentskills.io guide
and these rules when writing or reviewing a description:
Do:
- Start with imperative phrasing:
Use when...orUse this skill when... - Describe user intent (what they're trying to achieve), not skill mechanics
- Call out indirect trigger cases:
even if the user doesn't mention "Auth0" explicitly - Cover the full scope — framework name, SDK, and related concepts
- Stay under 1024 characters (hard limit enforced by the spec)
Don't:
- Open with
This skill...orHandles...or a noun phrase - List keywords or comma-separated trigger words (
Triggers on: login, token, JWT) - Use
Also handles:patterns - Write a description that only triggers when the user names the skill directly
Before/after example:
# Bad — describes mechanics, passive phrasing, keyword dump
description: >
Auth0 Express.js integration. Handles login, logout, token validation.
Triggers on: express, node, jwt, auth0-express.
# Good — user intent, imperative, scope hints
description: >
Use when adding Auth0 authentication to an Express.js app — login/logout
flows, session management, and protecting API routes with JWT validation.
Use even if the user says "add auth to my Node API" without mentioning Auth0.
When in doubt, ask: "Would an agent reading only this description know exactly when to reach for this skill — and when not to?"
Don't answer that from intuition — measure it. After editing a
description, run the activation evals, which score the old and new wording
over the same matrix of prompts and report exactly which cases regressed:
cd evals/activation && npm install
node run-activation-evals.mjs # compares git:HEAD against your working tree
node run-activation-evals.mjs --real --only <flagged-ids> # confirm on the real activation path
This is the only eval layer that reads frontmatter — check_routing_evals.py
and evals/behavioral/ both stay green no matter how badly a description is
broken. See evals/activation/README.md, and add
cases there when you add a trigger the matrix doesn't cover.