Geo Fundamentals
wasp-lang/wasp
Generative Engine Optimization for AI search engines (ChatGPT, Claude, Perplexity).
This skill should be used to "verify OpenHands features", "test the Canvas UI like a user", "drive Agent Canvas", "check a UI change in the real app", "create or update the feature map", "run the…
$ npx skills add OpenHands/OpenHands --skill verify-openhands -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install OpenHands/OpenHands verify-openhands --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/OpenHands/OpenHands.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/verify-openhands .claude/skills/verify-openhands && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "verify-openhands" agent skill from https://github.com/OpenHands/OpenHands/tree/main/.agents/skills/verify-openhands into .claude/skills/verify-openhands/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-openhands", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/OpenHands/OpenHands/tree/main/.agents/skills/verify-openhandsType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add OpenHands/OpenHands --skill verify-openhands -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install OpenHands/OpenHands verify-openhands --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenHands/OpenHands.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/verify-openhands .agents/skills/verify-openhands && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "verify-openhands" agent skill from https://github.com/OpenHands/OpenHands/tree/main/.agents/skills/verify-openhands into .agents/skills/verify-openhands/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-openhands", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add OpenHands/OpenHands --skill verify-openhands -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install OpenHands/OpenHands verify-openhands --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenHands/OpenHands.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/verify-openhands .cursor/skills/verify-openhands && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "verify-openhands" agent skill from https://github.com/OpenHands/OpenHands/tree/main/.agents/skills/verify-openhands into .cursor/skills/verify-openhands/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-openhands", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/OpenHands/OpenHands.git --path .agents/skills/verify-openhands--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add OpenHands/OpenHands --skill verify-openhands -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install OpenHands/OpenHands verify-openhands --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenHands/OpenHands.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/verify-openhands .gemini/skills/verify-openhands && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "verify-openhands" agent skill from https://github.com/OpenHands/OpenHands/tree/main/.agents/skills/verify-openhands into .gemini/skills/verify-openhands/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-openhands", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install OpenHands/OpenHands verify-openhandsInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add OpenHands/OpenHands --skill verify-openhands -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/OpenHands/OpenHands.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/verify-openhands .github/skills/verify-openhands && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "verify-openhands" agent skill from https://github.com/OpenHands/OpenHands/tree/main/.agents/skills/verify-openhands into .github/skills/verify-openhands/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-openhands", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add OpenHands/OpenHands --skill verify-openhands -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install OpenHands/OpenHands verify-openhands --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenHands/OpenHands.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/verify-openhands .opencode/skills/verify-openhands && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "verify-openhands" agent skill from https://github.com/OpenHands/OpenHands/tree/main/.agents/skills/verify-openhands into .opencode/skills/verify-openhands/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-openhands", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
verify-openhandsThis skill should be used to "verify OpenHands features", "test the Canvas UI like a user", "drive Agent Canvas", "check a UI change in the real app", "create or update the feature map", "run the…
Verify Openhands is an agent skill from OpenHands/OpenHands. This skill should be used to "verify OpenHands features", "test the Canvas UI like a user", "drive Agent Canvas", "check a UI change in the real app", "create or update the feature map", "run the daily pass" or "run the weekly feature audit". Ships control-openhands (launch, doctor, browser, LLM profiles, conversations, evidence, map tooling, cleanup) and the maintained map of every user-facing feature.
Its SKILL.md is about 2.9k tokens, which your agent loads only when the skill is triggered. The skill folder holds 51 other files, including scripts and reference files (for example `references/adaptation.md`, `references/daily.md` and `references/feature-map/F01-first-run-and-sign-in.md`).
It works with OpenAI. The repository describes itself as: 🙌 OpenHands: AI-Driven Development. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 7ea83ba. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/, which the agent can run.
Shell commands in SKILL.md call:
npmnodeFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
DEEPSEEK_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Verify Openhands loads about 2.9k tokens when it runs, and up to ~252k if it reads all its reference files. Until then it costs about 106 tokens; SKILL.md has 1,440 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from OpenHands/OpenHands at commit 7ea83ba, republished under its MIT licence (© OpenHands). 1,440 words, ~2,949 tokens.
.claude/skills/verify-openhands/SKILL.md (or your agent's skills folder). This skill also uses 49 other files; get the full folder from GitHub.Prove what a user sees, not that a route rendered or CI passed. Three parts work together:
control-openhands (scripts/) is the lever. It launches this
checkout as an isolated real stack (Agent Server, automation, static frontend,
ingress), keeps one browser alive between commands, and turns every user step
into a command you can rerun.control-openhands recipes, observable results and gotchas.Neither this skill nor the map authorizes external writes, paid models beyond the budget you were given, or product fixes the user did not ask for.
Put it on PATH and read its help before anything else:
export PATH="$PWD/.agents/skills/verify-openhands/scripts:$PATH"
control-openhands --help # then: control-openhands <command> --helpRequirements: Node >=24 (the launcher's engine), npm dependencies installed
(npm ci --ignore-scripts), uv/uvx, and a Chromium Playwright can launch
(set CONTROL_OPENHANDS_BROWSER=/path/to/chrome when the pinned browser is not
installed; launch then reports the running stack and browser start picks it
up). Every command prints one JSON object; exit 0 ok, 1 action failed, 2 usage,
3 environment.
If a user path cannot be driven with the CLI, that is a harness gap: extend
scripts/control-openhands.mjs (keep it executable, document the verb in
--help and below), prove the new verb live, then write the recipe. Never work
around a gap with an untracked one-off script the next agent cannot rerun.
Other agents on the machine may be running the same script: edit a copy, run
node --check and the tests on it, then move it into place in one step.
export OH_VERIFY_RUN=$(control-openhands launch --new --print-run) # builds if needed; isolated run
control-openhands doctor # read-only; must be ok before driving
control-openhands llm preset deepseek # deepseek-flash (active) + deepseek-pro; key from $DEEPSEEK_API_KEY or --api-key-file
control-openhands onboard --skip # consent + onboarding (walk it instead when F01 is under test)
control-openhands browser goto /settings/secrets
control-openhands browser testids # discover handles on the current page
control-openhands browser click 'testid=add-secret-button'
control-openhands browser screenshot --feature F14.create --name form
control-openhands evidence add --feature F14.create --result pass --entry "Settings > Secrets > Add" \
--expected "add form" --actual "add form" --artifact evidence/F14.create/form.png
control-openhands stop # stops only this run; evidence stays--run DIR (anywhere on the line), else $OH_VERIFY_RUN, else the only live
run. With several live runs they refuse to guess, so export OH_VERIFY_RUN in
every shell command when other agents share the machine: an agent that drives
someone else's run corrupts both evidence ledgers. For the same reason never
pkill -f or killall by pattern; control-openhands stop ends only your run.launch --new, export their own OH_VERIFY_RUN, and never touch
another agent's run.bin/agent-canvas.mjs from this checkout with a private
HOME, state, session key and free port block, so it never touches a user's
~/.openhands or another run. launch --new starts a second independent run
(for a baseline, or to drive two backends); --public exercises the API-key
login screen (control-openhands login). It still binds to 127.0.0.1; it only
stops injecting the session key into the page. --sdk-version, --sdk-ref or
--sdk-path (and the --automation-* equivalents) choose other backends;
record them. Version variables exported in your shell are not forwarded.
The block includes the VS Code editor port (ports.vscode) only when the
checkout's launcher sets VS Code up (the port is reserved even if the
agent-server has no editor binary and nothing listens there). Where that is opt-in (#17660), --vscode
turns it on; where the editor is bundled (before #17660, or since #18048), it
is always included and --vscode changes nothing.browser reload or goto /, retry once.control-openhands browser .... Selectors are
testid=, role=button[name="Save"], label=, text=, chained with >>.
Use browser testids and browser snapshot to find handles; prefer scoped
test IDs and accessible names over CSS. Failures return a hint and a
screenshot path; read the screenshot before retrying. A click returns the URL
from before any client-side navigation: use click ... --expect-url '<regex>'
(or browser wait-url) after every navigating click, because many routes
redirect (/settings → /settings/agents, /customize → /mcp).llm, fixture and api ... --write exist to set up
preconditions (a configured profile, a git repo, a dummy secret). They never
count as proof that the UI path works; the map says which steps are UI proof.
Never intercept routes or add mock LLM responses to make a live check pass.onboard, llm preset|set, conversation start --prompt ... --wait
(add --workspace qa-repo to run it in a fixture git-repo),
conversation events <id>, workspace open.browser reset (fresh browser profile: first run again), service stop automation|agent-server (backend-down UI), restart (same state after a
backend restart: persistence and reconnection) and restart --rotate-key
(stale session key). restart keeps the browser on its page. While a service
is stopped, a reload replaces the page with the backend-unavailable screen, so
drive backend-down states on the page that was already loaded. browser network, browser toasts and browser media observe requests by origin,
toasts and sound without changing anything. Check --help before calling a
state unreachable: most "can't be driven" claims predate a verb.<run>/evidence/<feature-id>/ and the append-only
ledger <run>/evidence/ledger.jsonl. Nothing is overwritten: a repeated
screenshot name is saved as <name>-2.png, so cite the path the command
prints; evidence report renders the table from
the report contract, fail and blocked rows first with
their --note (a blocked row names its missing prerequisite there), and
--baseline <yesterday's run> lists what changed since that ledger. Keys, logs, browser profile and
downloads stay in <run>/private/. Evidence is not automatically public:
review every image before publishing it. The CLI masks password fields in
snapshot, value and testids; a screenshot of a visible key field is
still a leak.control-openhands stop (add --purge-private to delete keys
and state once you have checked the evidence). It only signals the process
group it launched and verifies the ports closed. Delete run-owned fixtures
through the UI when deletion is the path under test.Features that start a real agent with automation or debugging skills (for example "Debug with OpenHands") can act on other fixtures by name: stop those conversations when their recipe is done.
Use deepseek-flash for everything that needs a model; switch to deepseek-pro
only for checks that need a second profile or a stronger model. Keep prompts
small and confined to the run workspace. Without a key, run every credential-free
recipe and record model-dependent ones as blocked with the missing
prerequisite; never substitute a mock and call it a pass.
control-openhands map affected --base <ref>
(or --paths with the PR's file list) maps the changed paths to the
families whose Source: lines own them, and separates shared code to widen,
src/ paths no family owns (a map gap) and non-user-facing paths. Drive every entry point those features list at
desktop and phone viewports, and report with
the report contract.map check, map coverage, map testids), the changed
families since the Maintenance baseline line of the map index
(control-openhands map baseline; map affected starts there by default),
a smoke row per family, and a date-derived rotation that gives every family
a full live pass once a week. A pass that finished its changed families
proposes TARGET as the next baseline with map baseline --set "$TARGET"
in its PR; compare ledgers with evidence report --baseline when
yesterday's is at hand.control-openhands map coverage measures what is still unmapped.OpenHands/software-agent-sdk, scheduling/dispatch in OpenHands/automation).
Never rewrite an expected result to bless broken behavior.See references/adaptation.md for where these ideas come from and what was deliberately left out.
© OpenHands, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 49 other files (scripts, references) in .agents/skills/verify-openhands of OpenHands/OpenHands.
Open the folder on GitHubat commit 7ea83ba
Verify Openhands next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Verify Openhands this skillOpenHands/OpenHands | 90k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Geo Fundamentalswasp-lang/wasp | 19k | 8 repos | ~861 | Automated safety check: Pass | MIT | |
| AI SDKvercel-labs/ai-facts | 168 | 21 repos | ~1.2k | Automated safety check: Pass | None | |
| AI Image Generation and Editingzhayujie/CowAgent | 47k | — | ~1.3k | Automated safety check: Pass | MIT | |
| SEO GeoReScienceLab/opc-skills | 1.8k | 4 repos | ~2.1k | Automated safety check: Pass | Apache-2.0 | |
| Get API Docs with chubandrewyng/context-hub | 14k | 2 repos | ~775 | Automated safety check: Pass | MIT |
wasp-lang/wasp
Generative Engine Optimization for AI search engines (ChatGPT, Claude, Perplexity).
vercel-labs/ai-facts
Answer questions about the AI SDK and help build AI-powered features.
zhayujie/CowAgent
Generates or edits images from text prompts through a Python script that picks an image backend based on which API keys are configured.
ReScienceLab/opc-skills
SEO & GEO (Generative Engine Optimization) for websites. An agent skill from ReScienceLab/opc-skills.
andrewyng/context-hub
Fetches current documentation for third-party APIs and SDKs with the chub CLI before the agent writes code against them, instead of relying on remembered API shapes.
topoteretes/cognee
Runs the Cognee AI memory platform in Docker, from a one-file prebuilt image to a full compose stack with UI, MCP server, Postgres and Neo4j.
OpenHands/OpenHands
For a non-trivial pull request, write a self-contained HTML design doc under the temporary .pr/ directory and link a visibility-appropriate preview in the PR description, so maintainers grasp the…
OpenHands/OpenHands
This skill should be used when the user asks to "change the desktop app", "package Electron", "build a universal macOS app", "bundle Node or uv", "fix Electron startup", or changes electron/…
OpenHands/OpenHands
This skill should be used when the user asks to "add an E2E test", "run live E2E", "run mock-LLM tests", "debug Playwright CI", "test the Docker image", or changes tests/e2e, Playwright configs, E2E…
OpenHands/OpenHands
This skill should be used when the user asks to "add an API call", "change a backend", "update settings persistence", "change conversation events", "fix backend auth", "add Agent Server support", or…
OpenHands/OpenHands
This skill should be used when the user asks to "add UI copy", "add a translation", "optimize the frontend bundle", "change onboarding", "change conversation UI", "add a query key", "change MSW…
OpenHands/OpenHands
This skill should be used when the user asks to "change the dev stack", "add a runtime service", "change the launcher", "update Docker", "bump Agent Server", "change ingress routing", or changes…
Works with
This skill should be used to "verify OpenHands features", "test the Canvas UI like a user", "drive Agent Canvas", "check a UI change in the real app", "create or update the feature map", "run the…. Verify Openhands is an agent skill from OpenHands/OpenHands. This skill should be used to "verify OpenHands features", "test the Canvas UI like a user", "drive Agent Canvas", "check a UI change in the real app", "create or update the feature map", "run the daily pass" or "run the weekly feature audit".
Run `npx skills add OpenHands/OpenHands --skill verify-openhands -a claude-code`. Or copy the skill folder (.agents/skills/verify-openhands in OpenHands/OpenHands) into .claude/skills/verify-openhands in your project. Claude Code loads it when a task matches its description.
Run `npx skills add OpenHands/OpenHands --skill verify-openhands -a codex`. Or copy the skill folder (.agents/skills/verify-openhands in OpenHands/OpenHands) into .agents/skills/verify-openhands in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add OpenHands/OpenHands --skill verify-openhands -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/verify-openhands, .gemini/skills/verify-openhands, .github/skills/verify-openhands and .opencode/skills/verify-openhands in your project.
Going by SKILL.md and its folder, Verify Openhands needs the command-line tools its instructions call (npm and node) and credentials named DEEPSEEK_API_KEY. Our summary lists: A credential in DEEPSEEK_API_KEY.
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Verify Openhands is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.9k tokens (SKILL.md is roughly 12k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 249k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Verify Openhands: Geo Fundamentals (wasp-lang/wasp, 19k stars), AI SDK (vercel-labs/ai-facts, 168 stars), AI Image Generation and Editing (zhayujie/CowAgent, 47k stars) and SEO Geo (ReScienceLab/opc-skills, 1.8k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
OpenHands (a GitHub organization) maintains it in OpenHands/OpenHands, which has 90,141 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 7, 2026.
Source: OpenHands/OpenHands on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.