Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions sdk/getting-started.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -82,12 +82,17 @@ export LLM_API_KEY=your-api-key-here
<AccordionGroup>
<Accordion title="Option 1: Install via PyPI" icon="box">
```bash
pip install openhands-sdk # Core SDK (openhands.sdk)
pip install openhands-tools # Built-in tools (openhands.tools)
# Optional: required for sandboxed workspaces in Docker or remote servers
pip install openhands-workspace # Workspace backends (openhands.workspace)
pip install openhands-agent-server # Remote agent server (openhands.agent_server)
# Core SDK + built-in tools — install together so their versions stay aligned
pip install -U openhands-sdk openhands-tools

# Optional: sandboxed workspaces in Docker or remote servers.
# List every package in one command so they all resolve to the same version.
pip install -U openhands-sdk openhands-tools openhands-workspace openhands-agent-server
```

<Warning>
`openhands-sdk` and `openhands-tools` are a matched set: they are built, tested, and released together at the same version number, and `openhands-tools` imports `openhands-sdk` internals directly. Always install and upgrade them in a **single** `pip` command so their versions match. Installing them separately can leave a newer `openhands-tools` against an older `openhands-sdk` (for example, when a previously installed copy is not upgraded), which fails at import with errors like `ModuleNotFoundError: No module named 'openhands.sdk.utils.path'`. To pin a specific release, use the same version for both, e.g. `pip install "openhands-sdk==1.22.1" "openhands-tools==1.22.1"`.
</Warning>
</Accordion>

<Accordion title="Option 2: Install from Source" icon="code">
Expand Down
Loading