jaiskills
AGENTS.md11 starsChanged 10 days agoMITView on GitHub
This repo is Jairo Torregrosa's catalog of personal agent skills. It ships as one Claude Code plugin (jaiskills) and installs per skill through skills.sh. README.md is the only file written for humans. Everything else (skills, references, scripts, this file, the changelog) is written for coding agents: imperative, concrete, numbers over adjectives, no marketing, no tutorial tone. Status buckets, created only when a skill needs one: - skills/in-progress/: public on purpose, not in plugin.json, not in the README catalog. - skills/deprecated/:…
- Commits and pushes
Where files are headingNew AGENTS.md files have more rules about keeping secrets out of the code, and fewer about code style.
Of the AGENTS.md files we read, the 31,774 first seen in the last six months, against the older ones: the kind of rule that gained most share, and the kind that lost most. About files like this in general, not this one, and an estimate, since a kind is a pattern in the words.
In this repository13 other files it gives its agents.
- .claude/CLAUDE.mdCLAUDE.md
- image-to-frontendSkill
- motion-designSkill
- compound-knowledgeSkill
- file-todosSkill
- agent-sdk-wizardSkill
- askcodexSkill
- managed-agents-wizardSkill
- metapromptSkill
- goal-loopSkill
- insistirSkill
- remote-agentsSkill
- second-opinionSkill
The file
We split this AGENTS.md into the rules it gives an agent
6 rules. About 0 are common, 0 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 38
Every skill in a use bucket (creative, orchestration, models, knowledge) is listed in .claude-plugin/plugin.json skills and has a README …
- Very specific: line 43
Every skill has agents/openai.yaml (Codex picker metadata), and its invocation policy matches the SKILL.md frontmatter.
- Very specific: line 46
No home-directory paths, no secrets, no private hostnames except as a documented, overridable default (REMOTO_HOST, default jetson).
- Very specific: line 58
Keep CLAUDE.md out of the repo root: strict validation rejects it there, because a plugin-root CLAUDE.md is never loaded for plugin users.
- Very specific: line 78
Calling another skill: Write "Call the Skill tool with second-opinion": bare name, one skill per call.
- Very specific: line 86
Voice: Write SKILL.md and every reference the way you brief a subagent that has no context: second person.
≈ “Common” is an estimate: at least 1 in 5 of the 40,246 AGENTS.md files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Agent instructions
This repo is Jairo Torregrosa's catalog of personal agent skills. It ships as one Claude Code plugin
(jaiskills) and installs per skill through skills.sh. README.md is the only file written for
humans. Everything else (skills, references, scripts, this file, the changelog) is written for coding
agents: imperative, concrete, numbers over adjectives, no marketing, no tutorial tone.
Layout
skills/<bucket>/<skill>/ one skill per directory; everything it needs lives inside it
creative/ things people look at: videos, pages
orchestration/ getting agents to finish: pipelines, goal loops, cross-provider judges, remote workers
models/ building on models: SDK agents, prompts, OpenAI from the terminal
knowledge/ keeping what worked: solution docs, file-based TODOs
agents/ plugin subagents (insistir's crew); the plugin format requires them at the root
hooks/hooks.json hook wiring only; hook scripts live in the owning skill
scripts/check.py catalog lint: every invariant below that a machine can check
scripts/link-skills.sh symlink skills into ~/.claude/skills and ~/.agents/skills (instead of the plugin)
scripts/sync-askcodex.py re-sync the askcodex mirror from an askcodex checkout and re-apply its one local delta
.claude-plugin/ plugin.json (the shipped skill list) and marketplace.json (the repo is its own marketplace)
.codex-plugin/plugin.json the same plugin for Codex (`skills: ./skills/` reaches every bucket)
.agents/plugins/ marketplace.json for Codex (`codex plugin marketplace add JairoTorregrosa/jaiskills`)
.claude/CLAUDE.md imports this file for Claude Code sessions in this repoStatus buckets, created only when a skill needs one:
skills/in-progress/: public on purpose, not inplugin.json, not in the README catalog.skills/deprecated/: not shipped, not in the README. Prefer deleting: tags keep old versions (v0.3.0has the constatar skills and the oldcommands/).
Invariants
scripts/check.py enforces all of them except private hostnames (a review item); CI runs it on
every push and pull request.
- Every skill in a use bucket (
creative,orchestration,models,knowledge) is listed in.claude-plugin/plugin.jsonskillsand has a README catalog entry that links itsSKILL.md. Status-bucket skills appear in neither. - Frontmatter
nameequals the directory name;descriptionis at most 1024 characters; noversionfield (the plugin version is the only version). - Every skill has
agents/openai.yaml(Codex picker metadata), and its invocation policy matches the SKILL.md frontmatter. - No
commands/directory: skills are the slash commands (/jaiskills:<skill>from the plugin). - No home-directory paths, no secrets, no private hostnames except as a documented, overridable
default (
REMOTO_HOST, defaultjetson). - Relative Markdown links resolve; hook commands in
hooks/hooks.jsonpoint at existing scripts.
Before every commit:
uv run scripts/check.py
claude plugin validate .claude-plugin/plugin.json --strict # plugin + components (needs the claude CLI)
claude plugin validate . --strict # marketplaceKeep CLAUDE.md out of the repo root: strict validation rejects it there, because a plugin-root
CLAUDE.md is never loaded for plugin users. Claude Code reads these rules from
.claude/CLAUDE.md, which imports this file.
Writing a skill
- Invocation. Model-invoked by default:
descriptionis model-facing, lists trigger phrases in English and the Spanish Jairo actually uses, and says what the skill is not for. User-invoked only for heavy orchestrators the model must never start on its own (insistir,goal-loop):disable-model-invocation: truein SKILL.md,policy.allow_implicit_invocation: falseinagents/openai.yaml, and a one-line human-readable description. - Arguments.
argument-hintin the frontmatter,$ARGUMENTSin the body. agents/openai.yaml:interface: display_name: "Second opinion" short_description: "Cross-provider critique of a plan, diff or verdict" policy: # user-invoked skills only allow_implicit_invocation: false- Calling another skill. Write "Call the Skill tool with
second-opinion": bare name, one skill per call. Never link across skill folders. A user-invoked skill cannot be called by another skill; tell the human to run it. Plugin subagents stay namespaced (jaiskills:insistir-worker) and need a fallback, because skills.sh installs have no plugin agents. - Codex runs headless through
codex execviaskills/orchestration/second-opinion/(scripts/ask_codex.sh), never through an MCP server (codex-cli removedmcp-serverin 0.154). In second-opinion, insistir and goal-loop, Codex only advises, reviews or judges, always read-only: it never implements. Its model defaults togpt-6-astra(see the script). - Voice. Write SKILL.md and every reference the way you brief a subagent that has no context:
second person; an opening line with the goal;
## Context you must respect(what the tool is and is not);## Facts already verified (<date>)with a source on each;## Do thisas numbered steps with exact commands;## Rules;## Report(what to tell the user). Add## Unverifiedand## Sourceswhen the content comes from research. - Shape. SKILL.md is the entry point, about 250 lines at most (motion-design is the exception).
Long procedures go to
references/, one level deep, each linked from SKILL.md with when to read it. Paths inside a skill are relative to the skill directory; tell subagents the absolute skill path. - Scripts. Python with a PEP 723 header, run by
uv run --script. Bash with#!/usr/bin/env bash, bash 3.2 compatible, shellcheck-clean. - Credit adapted work in one line in the skill and in its README entry (file-todos, compound-knowledge and insistir's plan deepening come from EveryInc's compound-engineering plugin).
Adding, changing or removing a skill
One commit touches:
- the skill directory, including
agents/openai.yaml; .claude-plugin/plugin.jsonskills;- the README catalog entry: what the skill does, and what Jairo uses it for. The use must be real (a production, a talk, a repo); if you don't know it, ask instead of inventing one;
CHANGELOG.md.
Releasing
Bump version in .claude-plugin/plugin.json, .claude-plugin/marketplace.json and
.codex-plugin/plugin.json together (Claude Code and Codex use it to decide when installed users
get an update; scripts/check.py fails when they differ), add a dated CHANGELOG.md entry, merge,
then tag the merge commit and push the tag (git tag -a vX.Y.Z <sha> -m … && git push origin
vX.Y.Z); the README links to tags.
skills/models/askcodex mirrors skill/ of the askcodex repo; never edit it by hand. Check out the
released askcodex tag (or main, when only skill/ changed after the tag), run
uv run scripts/sync-askcodex.py PATH/TO/askcodex, and review the diff: the only difference from
upstream must be the not-for clause and the "Canonical copy" note. The script refuses uncommitted
or untracked files under skill/ and prints the synced commit and describe; when released
is false, name the upstream PRs past the tag in the CHANGELOG. When it exits 1 because upstream
wording moved, update its patterns in the same commit.
Code Review Rules
Review as the person who runs this software, not as a style checker. A finding names an input, a state or a sequence of actions that produces a wrong result, lost data or a broken flow for that person, and says what they see when it happens. Without that, there is no finding.
A confident wrong answer is the worst outcome
A visible failure is better than a quiet lie. Flag anything that turns a missing or malformed input into a plausible-looking result: a fallback that invents a value, a partial result presented as complete, an error swallowed into a default, a retry that hides the first failure.
Safe path: fail loudly, return nothing, or mark the result as degraded where the user will see it.
Data that crosses a boundary is not ours
Input from a network, a file, a user, a model or another process can be absent, malformed or hostile. Flag a read that does not cover those cases, and any secret, token or personal datum that reaches a log, a URL, an error message or a third party.
Safe path: validate at the boundary, keep secrets out of anything that is stored or shared, and declare what could not be verified.
What not to report
CI owns formatting, lint and tests. Do not spend a comment on formatting, naming, comment wording, test names, doc phrasing, or a refactor that changes nothing the user sees. Do not report an input the system cannot receive, or a defect someone has to construct on purpose to trigger.
One finding that costs a user beats five that cost a reviewer their attention. When nothing meets that bar, say so and approve.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

