This repository (OpenHands/extensions) is the public extensions registry for OpenHands.
It contains shareable skills and plugins that can be loaded by OpenHands (CLI/GUI/Cloud) and by client code using the Software Agent SDK.
-
skills/— a catalog of skills, one directory per skill.skills/<skill-name>/SKILL.md— the skill definition (AgentSkills-style progressive disclosure)skills/<skill-name>/README.md— optional extra docs/examples for humans
-
plugins/— a catalog of plugins with executable code components.plugins/<plugin-name>/SKILL.md— the plugin definitionplugins/<plugin-name>/hooks/— lifecycle hooks (optional)plugins/<plugin-name>/scripts/— utility scripts (optional)
There is no application code here; the primary artifacts are Markdown skill definitions and plugin configurations, which can contain scripts/, hooks/ sub-directories.
OpenHands can load skills from a project directory (repo-level) and from user-level locations. This repository is the global/public registry referenced by the docs.
OpenHands supports two complementary mechanisms:
-
Always-on context (repository rules)
- Loaded at conversation start.
- Prefer a root
AGENTS.md(and optionally model-specific variants likeCLAUDE.md/GEMINI.md).
-
AgentSkills (progressive disclosure), with an OpenHands extension for keyword triggers
- Each skill lives in its own directory with a
SKILL.mdentry point. - The agent is shown a catalog (name/description/location) and decides when to open/read the full content.
- OpenHands extension: the
SKILL.mdmay include optionaltriggers:frontmatter to enable keyword-based activation.
- Each skill lives in its own directory with a
This registry primarily provides (2). Client repositories typically add (1) for repo-specific, always-on instructions.
SDK consumers typically load skills either:
- as always-loaded context (e.g.,
AGENTS.md), and/or - as trigger-loaded keyword skills, and/or
- as progressive-disclosure AgentSkills by discovering
SKILL.mdfiles under a directory.
See: https://docs.openhands.dev/sdk/guides/skill
OpenHands uses an extended AgentSkills standard:
- Compatible with the AgentSkills specification (https://agentskills.io/specification)
- Extended with optional
triggers:frontmatter for keyword-based activation
When editing or adding skills in this repo, follow these rules (and add new skills to marketplaces/openhands-extensions.json):
-
One skill per directory
- Create
skills/<skill-name>/SKILL.md. - Keep the directory name stable; it is used as the skill identifier/location.
- Create
-
SKILL.md should be progressive disclosure
- Put a concise summary/description first.
- Include only the information needed for an agent to decide whether to open/read the skill.
- If the skill needs large references, keep them in the same directory (e.g.,
references/) and point to them.
-
Be specific and operational
- Prefer checklists, steps, and concrete examples.
- Avoid vague guidance like “be careful” without actionable criteria.
-
Avoid repo-local assumptions
- Skills here are public and reusable.
- Don’t reference private paths, secrets, or company-specific URLs.
-
Do not include secrets or sensitive data
- Never commit API keys, tokens, credentials, private endpoints, or internal customer data.
-
Prefer minimal, composable skills
- Keep a skill focused on a single domain/task.
- If it grows large, split it into multiple skills.
-
Compatibility notes
- The legacy
.openhands/microagents/location may still exist in user repos, but this registry uses the current skills layout.
- The legacy
- Keep formatting consistent across skills.
- If you change a skill’s behavior or scope, update its
README.md(if present) accordingly. - If you change top-level documentation, ensure links still resolve.
- For Python test runs, prefer
uv sync --group testfollowed byuv run pytest -q; the full suite depends onopenhands-sdk, which is not available in the base environment. - Agent-driven plugins (for example
plugins/pr-reviewandplugins/release-notes) useuv run --with openhands-sdk --with openhands-tools ...and require anLLM_API_KEYin addition toGITHUB_TOKEN. - For OpenHands Cloud API guidance, use
skills/openhands-api. It is the canonical OpenHands Cloud API skill and documents the supported V1 API. plugins/release-notesnow has a standalone validator atplugins/release-notes/scripts/validate_release_notes.py; it rebuilds the deterministic tag-range context, fails if a change bullet omits explicit PR/commit refs or matching author handles, and enforces full PR/author coverage by appending a compact### 🔎 Small Fixes/Internal Changesappendix grouped by author when the agent omits lower-signal items. New contributor detection ingenerate_release_notes.pyshould use merged PR history for human authors (excluding bots) rather than commit-author lookup.
- The test suite expects every directory under
skills/to be listed in a marketplace. If you add a new skill (or rebase onto a main branch that added skills), update the appropriate marketplace file or CI will fail withSkills missing from marketplace: [...]. scripts/sync_extensions.pykeeps generated artifacts in sync: Claude Code command files, README catalog section, coverage checks, and vendor symlinks. Runpython scripts/sync_extensions.py --check(or just push — CI runs it) to verify everything is consistent. Run without--checkto auto-fix.- The sync script uses PyYAML to parse SKILL.md frontmatter. If you add a skill with a slash trigger (e.g.,
triggers: ["/mycommand"]), the script auto-generatescommands/mycommand.md.
- The
code-reviewandcodereview-roastedskills have been merged into a singlecode-reviewskill. The/codereview-roastedtrigger is kept as an alias for backward compatibility. Thereview-styleaction input is deprecated and ignored. plugins/pr-reviewsupports an optionalrequire-evidenceaction input that tells the reviewer to require end-to-end proof in the PR description that the code works; test output alone is not sufficient evidence.- The corresponding
REQUIRE_EVIDENCEenv flag is consumed byplugins/pr-review/scripts/agent_script.pyand injected into the review prompt viaplugins/pr-review/scripts/prompt.py. plugins/pr-reviewexposes anenable-uv-cacheinput (default'false') that togglessetup-uv's GitHub Actions cache. Default stays off because a prompt-injected reviewer could poison a shared cache that higher-privilege workflows later consume; opt in only on single-tenant self-hosted runners. The README's "Caching and Security" section documents the threat model and recommends a host-level uv cache volume as the preferred alternative for self-hosted setups.- GitHub review suggestions that only delete lines can look empty in
PullRequestReviewComment.body; the rendered content is available viabodyText/bodyHTML, so review-context formatting should fall back there before treating a suggestion as empty. - Prompt coverage for this behavior lives in
tests/test_pr_review_prompt.py.
- Prefer the official OpenHands docs on skills: https://docs.openhands.dev/overview/skills
- Prefer the SDK skill guide: https://docs.openhands.dev/sdk/guides/skill