{"repo":"NousResearch/hermes-agent","public_id":"477","display_label":"Adding OpenHands coding agent as a skill","summary":"Multiple contributions proposing and implementing an OpenHands autonomous coding agent skill. The work focuses on integrating OpenHands as a delegatable, model-agnostic sandboxed code execution agent.","subsystem":"skills","counts":{"members":3,"open_issues":0,"open_issues_distinct":0,"open_prs":0,"closed_issues":1,"merged_prs":1,"attempt_prs":1},"landed_fix":{"status":"merged_to_main","basis":"structural","pr":32261,"merged_at":"2026-05-25T21:49:35+00:00"},"resolution":{"state":"resolved","by":"pr-32261"},"freshness":{"state":"verified","last_verified_at":"2026-05-25T21:49:35+00:00","is_stale":false},"grouping":{"backbone":"STRUCTURAL_SPANNING","link_density":0.6666666666666666},"fix_edges":[{"issue_number":477,"pr_number":32261,"tier":"verified","basis":"closing_ref","confidence":0.95,"recoverable_from_timeline":true,"pr_merged_at":"2026-05-25T21:49:35+00:00"}],"members":[{"kind":"issue","number":477,"title":"Feature: OpenHands Coding Agent Skill — Model-Agnostic Sandboxed Code Agent Delegation","url":null,"state":"closed"},{"kind":"pr","number":19325,"title":"feat: add OpenHands autonomous coding agent skill","url":null,"state":"closed","close_reason":{"refs":[{"kind":"pr","value":"#32261","number":32261},{"kind":"pr","value":"#477","number":477}],"category":"implemented_elsewhere","implication":"superseded"},"merged":false},{"kind":"pr","number":32261,"title":"feat(skills): add optional openhands skill — closes #477","url":null,"state":"merged","close_reason":{"category":"merged"},"merged":true,"is_fix_pr":true,"fix_tier":"verified","files_changed":["optional-skills/autonomous-ai-agents/openhands/SKILL.md","scripts/release.py","website/docs/reference/optional-skills-catalog.md","website/docs/user-guide/skills/optional/autonomous-ai-agents/autonomous-ai-agents-openhands.md","website/sidebars.ts"],"fix_hunks":[{"file":"optional-skills/autonomous-ai-agents/openhands/SKILL.md","hunks":["@@ -0,0 +1,149 @@\n+---\n+name: openhands\n+description: Delegate coding to OpenHands CLI (model-agnostic, LiteLLM).\n+version: 0.1.0\n+author: Tim Koepsel (xzessmedia), Hermes Agent\n+license: MIT\n+platforms: [linux, macos]\n+metadata:\n+  hermes:\n+    tags: [Coding-Agent, OpenHands, Model-Agnostic, LiteLLM]\n+    related_skills: [claude-code, codex, opencode, hermes-agent]\n+---\n+\n+# OpenHands CLI\n+\n+Delegate coding tasks to the [OpenHands CLI](https://github.com/All-Hands-AI/OpenHands) via the `terminal` tool. OpenHands is model-agnostic: any LiteLLM-supported provider (OpenAI, Anthropic, OpenRouter, DeepSeek, Ollama, vLLM, etc.).\n+\n+This skill is the headless-mode wrapper for batch / one-shot delegation. The interactive textual UI is not used from Hermes.\n+\n+## When to Use\n+\n+- User wants a coding task delegated to OpenHands specifically.\n+- User wants a coding agent that can run on a non-Anthropic / non-OpenAI provider (DeepSeek, Qwen, Ollama, vLLM, Nous, etc.) — sibling skills `claude-code` and `codex` are tied to one vendor.\n+- Multi-step file edits + shell commands inside a workspace.\n+\n+For Claude-native, prefer `claude-code`. For OpenAI-native, prefer `codex`. For Hermes-native subagents, use `delegate_task`.\n+\n+## Prerequisites\n+\n+1. Install upstream (requires Python 3.12+ and `uv`):\n+\n+   ```\n+   terminal(command=\"uv tool install openhands --python 3.12\")\n+   ```\n+\n+   Verify: `openhands --version` (currently `OpenHands CLI 1.16.0` / `SDK v1.21.0` at time of writing).\n+\n+2. Pick a model and set env vars for `--override-with-envs`:\n+\n+   ```\n+   export LLM_MODEL=openrouter/openai/gpt-4o-mini       # or any LiteLLM slug\n+   export LLM_API_KEY=[redacted:secret-assignment]\n+   export LLM_BASE_URL=https://openrouter.ai/api/v1     # omit for native OpenAI\n+   ```\n+\n+   `LLM_MODEL` uses LiteLLM's full slug. When the provider is OpenRouter the slug is doubly-prefixed: `openrouter/<vendor>/<model>` (e.g. `openrouter/anthropic/claude-sonnet-4.5`). For native Anthropic: `anthropic/claude-sonnet-4-5`. For native OpenAI: `openai/gpt-4o-mini`.\n+\n+3. Suppress the startup banner so JSON output isn't preceded by ASCII art:\n+\n+   ```\n+   export OPENHANDS_SUPPRESS_BANNER=1\n+   ```\n+\n+## How to Run\n+\n+Always invoke through the `terminal` tool. Always pass `--headless --json --override-with-envs --exit-without-confirmation` for automation.\n+\n+### One-shot task\n+\n+```\n+terminal(\n+  command=\"OPENHANDS_SUPPRESS_BANNER=1 LLM_MODEL=openrouter/openai/gpt-4o-mini LLM_API_KEY=[redacted:secret-assignment] LLM_BASE_URL=https://openrouter.ai/api/v1 openhands --headless --json --override-with-envs --exit-without-confirmation -t 'Add error handling to all API calls in src/'\",\n+  workdir=\"/path/to/project\",\n+  timeout=600\n+)\n+```\n+\n+### Background for long tasks\n+\n+```\n+terminal(command=\"<same as above>\", workdir=\"/path/to/project\", background=true, notify_on_complete=true)\n+process(action=\"poll\", session_id=\"<id>\")\n+process(action=\"log\", session_id=\"<id>\")\n+```\n+\n+### Resume a previous conversation\n+\n+OpenHands prints `Conversation ID: <32-hex>` and a `Hint: openhands --resume <dashed-uuid>` line at the end of each run. Use the dashed form to resume:\n+\n+```\n+terminal(\n+  command=\"OPENHANDS_SUPPRESS_BANNER=1 LLM_MODEL=... openhands --headless --json --override-with-envs --exit-without-confirmation --resume <dashed-uuid> -t 'Now fix the bug you found'\",\n+  workdir=\"/path/to/project\"\n+)\n+```\n+\n+## Real Flag List\n+\n+Verified against `openhands --help` (CLI 1.16.0). Anything not in this table is not a flag — pass it via env var or settings file.\n+\n+| Flag | Effect |\n+|------|--------|\n+| `--headless` | No UI, requires `-t` or `-f`. Auto-approves all actions (no `--llm-approve` in this mode). |\n+| `--json` | JSONL event stream (requires `--headless`). |\n+| `-t TEXT` | Task prompt. |\n+| `-f PATH` | Read task from file. |\n+| `--resume [ID]` | Resume conversation. No ID → list recent. |\n+| `--last` | Resume most recent (with `--resume`). |\n+| `--override-with-envs` | Apply `LLM_API_KEY` / `LLM_BASE_URL` / `LLM_MODEL` env vars. Without this, OpenHands uses `~/.openhands/settings.json` and ignores the env. |\n+| `--exit-without-confirmation` | Don't show the \"are you sure\" exit dialog. |\n+| `--always-approve` / `--yolo` | Auto-approve every action (default in `--headless`). |\n+| `--llm-approve` | LLM-based security gate (interactive only — does NOT work in headless). |\n+| `--version` / `-v` | Print version and exit. |\n+\n+**There is no `--model`, `--max-iterations`, `--workspace`, `--sandbox`, `--sandbox-type` flag.** Model is `LLM_MODEL`. Workspace is the `workdir` you pass to the `terminal` tool. Sandbox / runtime is the `RUNTIME` and `SANDBOX_VOLUMES` env vars.\n+\n+## JSON Event Schema\n+\n+With `--json --headless`, OpenHands emits JSONL — one JSON object per line, plus a handful of non-JSON status lines (`Initializing agent...`, `Agent is working`, `Agent finished`, the final summary box, `Goodbye!`, `Conversation ID:`, `Hint:`). Filter for lines starting with `{`.\n+\n+Top-level `kind` field discriminates events:\n+\n+- `MessageEvent` — user / agent text turn. `source` is `user` or `agent`.\n+- `ActionEvent` — agent picked a tool. Read `tool_name` (`file_editor`, `terminal`, `finish`) and `action.kind` (`FileEditorAction`, `TerminalAction`, `FinishAction`).\n+- `ObservationEvent` — tool result. `observation.is_error` is the success flag. `source` is `environment`.\n+- `FinishAction` inside an `ActionEvent` carries the agent's final message in `action.message`.\n+\n+The cli prints all stderr from LiteLLM/Authlib first — see Pitfalls. Parse only stdout, line by line, ignoring lines that don't start with `{`.\n+\n+## Pitfalls\n+\n+- **LiteLLM warnings on every invocation.** The CLI prints `bedrock-runtime` and `sagemaker-runtime` warnings to stderr because `botocore` isn't installed. Plus an Authlib deprecation. These are noise, not failures. Pipe stderr to `/dev/null` or filter it out before showing the user.\n+- **Banner spam.** Without `OPENHANDS_SUPPRESS_BANNER=1`, every run starts with a multi-line `+--+` ASCII box advertising the SDK. Always export it.\n+- **`--override-with-envs` is mandatory for automation.** Without it, OpenHands ignores `LLM_API_KEY` / `LLM_BASE_URL` / `LLM_MODEL` and falls back to `~/.openhands/settings.json`. On a fresh install this file doesn't exist and the CLI hangs waiting for first-run setup.\n+- **Model slug is LiteLLM's, not the provider's.** `openrouter/openai/gpt-4o-mini` works; `openai/gpt-4o-mini` while pointed at OpenRouter does not. `anthropic/claude-sonnet-4-5` (hyphen) is native Anthropic; `openrouter/anthropic/claude-sonnet-4.5` (dot) is via OpenRouter. Get it wrong → cryptic LiteLLM 400.\n+- **`pip install openhands-ai` is the wrong package.** That's the legacy V0 SDK. The new CLI is `uv tool install openhands --python 3.12`. There is no maintained conda package.\n+- **Resume ID format is fiddly.** The CLI ends with `Conversation ID: f46573d9cfdb45e492ca189bde40019b` (no dashes) and then a `Hint: openhands --resume f46573d9-cfdb-45e4-92ca-189bde40019b` (with dashes). Use the dashed form.\n+- **Headless ignores `--llm-approve`.** If you pass it, you get an argparse error. Headless mode hardcodes always-approve.\n+- **No Windows support upstream.** The OpenHands docs require WSL on Windows. This skill is gated `[linux, macos]` accordingly.\n+- **`~/.openhands/conversations/<id>/` accumulates.** Each run persists a trajectory. Clean it up if running batches.\n+- **Heavy install (~200 packages).** Use `uv tool install` (isolated venv) to avoid dependency conflicts with the active project.\n+\n+## Verification\n+\n+```\n+terminal(\n+  command=\"OPENHANDS_SUPPRESS_BANNER=1 LLM_MODEL=openrouter/openai/gpt-4o-mini LLM_API_KEY=[redacted:secret-assignment] LLM_BASE_URL=https://openrouter.ai/api/v1 openhands --headless --json --override-with-envs --exit-without-confirmation -t 'Print the string OPENHANDS_OK to stdout via the terminal tool.'\",\n+  workdir=\"/tmp\",\n+  timeout=120\n+)\n+```\n+\n+If the JSONL stream ends with a `FinishAction` whose `action.message` mentions `OPENHANDS_OK`, the install is working.\n+\n+## Related\n+\n+- [OpenHands GitHub](https://github.com/All-Hands-AI/OpenHands)\n+- [OpenHands CLI command reference](https://docs.openhands.dev/openhands/usage/cli/command-reference)\n+- Sibling skills: `claude-code` (Anthropic-only), `codex` (OpenAI-only), `opencode` (multi-provider via OpenCode), `hermes-agent` (Hermes subagents via `delegate_task`)."]},{"file":"scripts/release.py","hunks":["@@ -87,6 +87,7 @@\n     \"[redacted:email]\": \"jfuenmayor\",\n     \"jiahuigu@users.noreply.github.com\": \"Jiahui-Gu\",\n     \"[redacted:email]\": \"YLChen-007\",\n+    \"3153586+xzessmedia@users.noreply.github.com\": \"xzessmedia\",\n     \"[redacted:email]\": \"AdamPlatin123\",\n     \"32711803+waefrebeorn@users.noreply.github.com\": \"waefrebeorn\",\n     \"32869278+dusterbloom@users.noreply.github.com\": \"dusterbloom\","]},{"file":"website/docs/reference/optional-skills-catalog.md","hunks":["@@ -33,6 +33,7 @@ hermes skills uninstall <skill-name>\n |-------|-------------|\n | [**blackbox**](/user-guide/skills/optional/autonomous-ai-agents/autonomous-ai-agents-blackbox) | Delegate coding tasks to Blackbox AI CLI agent. Multi-model agent with built-in judge that runs tasks through multiple LLMs and picks the best result. Requires the blackbox CLI and a Blackbox AI API key. |\n | [**honcho**](/user-guide/skills/optional/autonomous-ai-agents/autonomous-ai-agents-honcho) | Configure and use Honcho memory with Hermes -- cross-session user modeling, multi-profile peer isolation, observation config, dialectic reasoning, session summaries, and context budget enforcement. Use when setting up Honcho, troubleshoo... |\n+| [**openhands**](/user-guide/skills/optional/autonomous-ai-agents/autonomous-ai-agents-openhands) | Delegate coding to OpenHands CLI (model-agnostic, LiteLLM). |\n \n ## blockchain\n "]},{"file":"website/docs/user-guide/skills/optional/autonomous-ai-agents/autonomous-ai-agents-openhands.md","hunks":["@@ -0,0 +1,167 @@\n+---\n+title: \"Openhands — Delegate coding to OpenHands CLI (model-agnostic, LiteLLM)\"\n+sidebar_label: \"Openhands\"\n+description: \"Delegate coding to OpenHands CLI (model-agnostic, LiteLLM)\"\n+---\n+\n+{/* This page is auto-generated from the skill's SKILL.md by website/scripts/generate-skill-docs.py. Edit the source SKILL.md, not this page. */}\n+\n+# Openhands\n+\n+Delegate coding to OpenHands CLI (model-agnostic, LiteLLM).\n+\n+## Skill metadata\n+\n+| | |\n+|---|---|\n+| Source | Optional — install with `hermes skills install official/autonomous-ai-agents/openhands` |\n+| Path | `optional-skills/autonomous-ai-agents/openhands` |\n+| Version | `0.1.0` |\n+| Author | Tim Koepsel (xzessmedia), Hermes Agent |\n+| License | MIT |\n+| Platforms | linux, macos |\n+| Tags | `Coding-Agent`, `OpenHands`, `Model-Agnostic`, `LiteLLM` |\n+| Related skills | [`claude-code`](/user-guide/skills/bundled/autonomous-ai-agents/autonomous-ai-agents-claude-code), [`codex`](/user-guide/skills/bundled/autonomous-ai-agents/autonomous-ai-agents-codex), [`opencode`](/user-guide/skills/bundled/autonomous-ai-agents/autonomous-ai-agents-opencode), [`hermes-agent`](/user-guide/skills/bundled/autonomous-ai-agents/autonomous-ai-agents-hermes-agent) |\n+\n+## Reference: full SKILL.md\n+\n+:::info\n+The following is the complete skill definition that Hermes loads when this skill is triggered. This is what the agent sees as instructions when the skill is active.\n+:::\n+\n+# OpenHands CLI\n+\n+Delegate coding tasks to the [OpenHands CLI](https://github.com/All-Hands-AI/OpenHands) via the `terminal` tool. OpenHands is model-agnostic: any LiteLLM-supported provider (OpenAI, Anthropic, OpenRouter, DeepSeek, Ollama, vLLM, etc.).\n+\n+This skill is the headless-mode wrapper for batch / one-shot delegation. The interactive textual UI is not used from Hermes.\n+\n+## When to Use\n+\n+- User wants a coding task delegated to OpenHands specifically.\n+- User wants a coding agent that can run on a non-Anthropic / non-OpenAI provider (DeepSeek, Qwen, Ollama, vLLM, Nous, etc.) — sibling skills `claude-code` and `codex` are tied to one vendor.\n+- Multi-step file edits + shell commands inside a workspace.\n+\n+For Claude-native, prefer `claude-code`. For OpenAI-native, prefer `codex`. For Hermes-native subagents, use `delegate_task`.\n+\n+## Prerequisites\n+\n+1. Install upstream (requires Python 3.12+ and `uv`):\n+\n+   ```\n+   terminal(command=\"uv tool install openhands --python 3.12\")\n+   ```\n+\n+   Verify: `openhands --version` (currently `OpenHands CLI 1.16.0` / `SDK v1.21.0` at time of writing).\n+\n+2. Pick a model and set env vars for `--override-with-envs`:\n+\n+   ```\n+   export LLM_MODEL=openrouter/openai/gpt-4o-mini       # or any LiteLLM slug\n+   export LLM_API_KEY=[redacted:secret-assignment]\n+   export LLM_BASE_URL=https://openrouter.ai/api/v1     # omit for native OpenAI\n+   ```\n+\n+   `LLM_MODEL` uses LiteLLM's full slug. When the provider is OpenRouter the slug is doubly-prefixed: `openrouter/<vendor>/<model>` (e.g. `openrouter/anthropic/claude-sonnet-4.5`). For native Anthropic: `anthropic/claude-sonnet-4-5`. For native OpenAI: `openai/gpt-4o-mini`.\n+\n+3. Suppress the startup banner so JSON output isn't preceded by ASCII art:\n+\n+   ```\n+   export OPENHANDS_SUPPRESS_BANNER=1\n+   ```\n+\n+## How to Run\n+\n+Always invoke through the `terminal` tool. Always pass `--headless --json --override-with-envs --exit-without-confirmation` for automation.\n+\n+### One-shot task\n+\n+```\n+terminal(\n+  command=\"OPENHANDS_SUPPRESS_BANNER=1 LLM_MODEL=openrouter/openai/gpt-4o-mini LLM_API_KEY=[redacted:secret-assignment] LLM_BASE_URL=https://openrouter.ai/api/v1 openhands --headless --json --override-with-envs --exit-without-confirmation -t 'Add error handling to all API calls in src/'\",\n+  workdir=\"/path/to/project\",\n+  timeout=600\n+)\n+```\n+\n+### Background for long tasks\n+\n+```\n+terminal(command=\"<same as above>\", workdir=\"/path/to/project\", background=true, notify_on_complete=true)\n+process(action=\"poll\", session_id=\"<id>\")\n+process(action=\"log\", session_id=\"<id>\")\n+```\n+\n+### Resume a previous conversation\n+\n+OpenHands prints `Conversation ID: <32-hex>` and a `Hint: openhands --resume <dashed-uuid>` line at the end of each run. Use the dashed form to resume:\n+\n+```\n+terminal(\n+  command=\"OPENHANDS_SUPPRESS_BANNER=1 LLM_MODEL=... openhands --headless --json --override-with-envs --exit-without-confirmation --resume <dashed-uuid> -t 'Now fix the bug you found'\",\n+  workdir=\"/path/to/project\"\n+)\n+```\n+\n+## Real Flag List\n+\n+Verified against `openhands --help` (CLI 1.16.0). Anything not in this table is not a flag — pass it via env var or settings file.\n+\n+| Flag | Effect |\n+|------|--------|\n+| `--headless` | No UI, requires `-t` or `-f`. Auto-approves all actions (no `--llm-approve` in this mode). |\n+| `--json` | JSONL event stream (requires `--headless`). |\n+| `-t TEXT` | Task prompt. |\n+| `-f PATH` | Read task from file. |\n+| `--resume [ID]` | Resume conversation. No ID → list recent. |\n+| `--last` | Resume most recent (with `--resume`). |\n+| `--override-with-envs` | Apply `LLM_API_KEY` / `LLM_BASE_URL` / `LLM_MODEL` env vars. Without this, OpenHands uses `~/.openhands/settings.json` and ignores the env. |\n+| `--exit-without-confirmation` | Don't show the \"are you sure\" exit dialog. |\n+| `--always-approve` / `--yolo` | Auto-approve every action (default in `--headless`). |\n+| `--llm-approve` | LLM-based security gate (interactive only — does NOT work in headless). |\n+| `--version` / `-v` | Print version and exit. |\n+\n+**There is no `--model`, `--max-iterations`, `--workspace`, `--sandbox`, `--sandbox-type` flag.** Model is `LLM_MODEL`. Workspace is the `workdir` you pass to the `terminal` tool. Sandbox / runtime is the `RUNTIME` and `SANDBOX_VOLUMES` env vars.\n+\n+## JSON Event Schema\n+\n+With `--json --headless`, OpenHands emits JSONL — one JSON object per line, plus a handful of non-JSON status lines (`Initializing agent...`, `Agent is working`, `Agent finished`, the final summary box, `Goodbye!`, `Conversation ID:`, `Hint:`). Filter for lines starting with `{`.\n+\n+Top-level `kind` field discriminates events:\n+\n+- `MessageEvent` — user / agent text turn. `source` is `user` or `agent`.\n+- `ActionEvent` — agent picked a tool. Read `tool_name` (`file_editor`, `terminal`, `finish`) and `action.kind` (`FileEditorAction`, `TerminalAction`, `FinishAction`).\n+- `ObservationEvent` — tool result. `observation.is_error` is the success flag. `source` is `environment`.\n+- `FinishAction` inside an `ActionEvent` carries the agent's final message in `action.message`.\n+\n+The cli prints all stderr from LiteLLM/Authlib first — see Pitfalls. Parse only stdout, line by line, ignoring lines that don't start with `{`.\n+\n+## Pitfalls\n+\n+- **LiteLLM warnings on every invocation.** The CLI prints `bedrock-runtime` and `sagemaker-runtime` warnings to stderr because `botocore` isn't installed. Plus an Authlib deprecation. These are noise, not failures. Pipe stderr to `/dev/null` or filter it out before showing the user.\n+- **Banner spam.** Without `OPENHANDS_SUPPRESS_BANNER=1`, every run starts with a multi-line `+--+` ASCII box advertising the SDK. Always export it.\n+- **`--override-with-envs` is mandatory for automation.** Without it, OpenHands ignores `LLM_API_KEY` / `LLM_BASE_URL` / `LLM_MODEL` and falls back to `~/.openhands/settings.json`. On a fresh install this file doesn't exist and the CLI hangs waiting for first-run setup.\n+- **Model slug is LiteLLM's, not the provider's.** `openrouter/openai/gpt-4o-mini` works; `openai/gpt-4o-mini` while pointed at OpenRouter does not. `anthropic/claude-sonnet-4-5` (hyphen) is native Anthropic; `openrouter/anthropic/claude-sonnet-4.5` (dot) is via OpenRouter. Get it wrong → cryptic LiteLLM 400.\n+- **`pip install openhands-ai` is the wrong package.** That's the legacy V0 SDK. The new CLI is `uv tool install openhands --python 3.12`. There is no maintained conda package.\n+- **Resume ID format is fiddly.** The CLI ends with `Conversation ID: f46573d9cfdb45e492ca189bde40019b` (no dashes) and then a `Hint: openhands --resume f46573d9-cfdb-45e4-92ca-189bde40019b` (with dashes). Use the dashed form.\n+- **Headless ignores `--llm-approve`.** If you pass it, you get an argparse error. Headless mode hardcodes always-approve.\n+- **No Windows support upstream.** The OpenHands docs require WSL on Windows. This skill is gated `[linux, macos]` accordingly.\n+- **`~/.openhands/conversations/<id>/` accumulates.** Each run persists a trajectory. Clean it up if running batches.\n+- **Heavy install (~200 packages).** Use `uv tool install` (isolated venv) to avoid dependency conflicts with the active project.\n+\n+## Verification\n+\n+```\n+terminal(\n+  command=\"OPENHANDS_SUPPRESS_BANNER=1 LLM_MODEL=openrouter/openai/gpt-4o-mini LLM_API_KEY=[redacted:secret-assignment] LLM_BASE_URL=https://openrouter.ai/api/v1 openhands --headless --json --override-with-envs --exit-without-confirmation -t 'Print the string OPENHANDS_OK to stdout via the terminal tool.'\",\n+  workdir=\"/tmp\",\n+  timeout=120\n+)\n+```\n+\n+If the JSONL stream ends with a `FinishAction` whose `action.message` mentions `OPENHANDS_OK`, the install is working.\n+\n+## Related\n+\n+- [OpenHands GitHub](https://github.com/All-Hands-AI/OpenHands)\n+- [OpenHands CLI command reference](https://docs.openhands.dev/openhands/usage/cli/command-reference)\n+- Sibling skills: `claude-code` (Anthropic-only), `codex` (OpenAI-only), `opencode` (multi-provider via OpenCode), `hermes-agent` (Hermes subagents via `delegate_task`)."]},{"file":"website/sidebars.ts","hunks":["@@ -392,6 +392,7 @@ const sidebars: SidebarsConfig = {\n                   items: [\n                     'user-guide/skills/optional/autonomous-ai-agents/autonomous-ai-agents-blackbox',\n                     'user-guide/skills/optional/autonomous-ai-agents/autonomous-ai-agents-honcho',\n+                    'user-guide/skills/optional/autonomous-ai-agents/autonomous-ai-agents-openhands',\n                   ],\n                 },\n                 {\n"]}]}],"trust":{"default_tier":"verified","includes_suggested":false}}