How it works¶
The agent does not load the whole pack. It matches your request, opens one playbook, and loads the principles that apply.
- PromptYou name the place and the job.
- MatchThe skill description is the trigger.
- One file
jay-modepicks a row when several skills fit. - StopA person approves. The pipeline applies.
A skill is a folder¶
skills/<name>/SKILL.md has two fields the agent uses.
nameis the folder name.descriptionis the trigger. It says when to load the file, and the outcome.
AGENTS.md is the index. Each line names the skill and when to open that file.
Loaded means the agent reads that SKILL.md before it edits. A summary from memory is not loaded.
Two kinds of skill¶
PrincipleA
principle-* file is a short rule used across areas. Every request also loads principle-stop-at-approval.PlaybookEvery other file is one job: Use when, Steps, Safety checks, Rollback, and Done when.
jay-mode is the router. Take the first matching row. That row names the one skill to load.
What the agent may finish¶
The agent prepares the diff, the saved plan, or the ticket. It does not apply, merge, or grant itself access.
Where each tool reads¶
| Tool | What it reads |
|---|---|
| Cursor | The plugin manifest .cursor-plugin/plugin.json |
| GitHub Copilot | gh skill install, or a copy made by scripts/sync |
| Claude Code, Codex, and others | AGENTS.md plus .agents/skills or .claude/skills |
Names¶
terraform- azure- aws- pipelines- github- azuredevops- servicenow- k8s- gitops- policy- ops- principle-
jay-mode and setup-jstack have no prefix.
The same path, drawn¶
%%{init: {"theme": "neutral"}}%%
flowchart LR
prompt[Prompt] --> match[Description match]
match --> mode[jay-mode when several skills fit]
mode --> skill[One SKILL.md]
skill --> stop[Stop for a person]