Imported from onehorizonai/skills (
AGENTS.md). Install upstream withnpx skills add onehorizonai/skills. Copyright stays with the author.
Agent Guide
This repo contains one plugin. skills/ is the source of truth for skill instructions. App-specific manifests live at the repo root and are generated from plugin.json. Do not edit generated files directly.
Structure
skills/
{skill-name}/
SKILL.md
agents/openai.yaml
assets/
assets/ # Shared plugin assets
hooks/ # Shared hook scripts
scripts/
build-manifests.mjs # Regenerates app-specific manifests
validate.mjs # Validates manifests and skill metadata
validate-links.mjs # Validates local refs and external URLs
plugin.json # Canonical plugin manifest
.mcp.json # Shared MCP server config
copilot-hooks.json # Shared hook manifest
.cursor-plugin/plugin.json # Generated Cursor manifest
.codex-plugin/plugin.json # Generated Codex manifest
.claude-plugin/marketplace.json # Claude marketplace
.agents/plugins/marketplace.json # Local Codex marketplace
.github/plugin/marketplace.json # GitHub/Copilot marketplace
Working with skills
Each skill lives at skills/{skill-name}/SKILL.md with frontmatter and agent instructions.
SKILL.md format
---
name: {skill-name} # Matches the folder name; no plugin prefix
description: {One sentence with trigger phrases like "prep my standup" or "list blockers".}
---
# Skill title
What this skill does, when to use it, and which nearby skill owns adjacent work.
## Instructions
Step-by-step instructions for the agent to follow when this skill is invoked.
Rules
namemust match the folder name exactly; do not add a plugin namespace prefix- The slash command is built automatically:
/{plugin-name}:{skill-name} - Keep
SKILL.mdshort because the full file loads into context on every invocation descriptioncontrols when the agent picks up the skill; write it with concrete trigger phrases- Edit skills in
skills/only - Don't edit generated app manifests unless you're also updating
scripts/build-manifests.mjs
Rebuild manifests
After editing plugin.json or marketplace metadata logic:
node ./scripts/build-manifests.mjs
This regenerates .cursor-plugin/plugin.json, .codex-plugin/plugin.json, and marketplace files from the root manifest.
Validate
node ./scripts/validate.mjs # Manifest consistency, skill metadata, required files
node ./scripts/validate-links.mjs # Local refs and user-facing URLs
Adding a skill
- Create
skills/{skill-name}/ - Add
SKILL.md - Add
agents/openai.yaml - Add
assets/logo.svg - Run
node ./scripts/validate.mjs - Run
node ./scripts/validate-links.mjsif you added references or URLs
Plugin manifest fields
{
"name": "plugin-name",
"description": "One sentence shown in the plugin manager.",
"version": "1.0.0",
"author": { "name": "Author Name" },
"homepage": "https://example.com",
"repository": "https://github.com/onehorizonai/skills",
"license": "MIT",
"skills": "./skills/",
"mcpServers": "./.mcp.json",
"hooks": "./copilot-hooks.json"
}
name sets the skill namespace. A skill in folder my-skill inside plugin my-plugin becomes /my-plugin:my-skill. plugin.json is canonical, so keep generated manifests aligned with it.