Python SDK (openhands-sdk) vs Agent Server (openhands-agent-server) feature support · April 2, 2026
| Feature | Python SDK | Agent Server | Notes |
|---|---|---|---|
| LLM | |||
| LLM completion (chat) | ✔ | ◐ | Server uses LLM internally; no direct completion endpointExposed indirectly via conversations |
| Streaming responses | ✔ | ✔ | WebSocket streaming via /ws/events |
| Fallback strategies | ✔ | ✘ | Automatic model fallback on failure |
| Token usage tracking | ✔ | ◐ | Tracked internally; exposed via conversation metrics |
| Model/provider listing | ✔ | ✔ | /api/llm/providers, /models, /verified-models |
| Agent & Conversation | |||
| Agent creation & configuration | ✔ | ✔ | Agent passed in StartConversationRequest |
| Conversation lifecycle (start/pause/run/delete) | ✔ | ✔ | Full CRUD via /api/conversations |
| Conversation search & pagination | ✔ | ✔ | Search, count, batch-get endpoints |
| Title generation | ✔ | ✔ | POST /api/conversations/{id}/generate-title |
| Ask agent (one-shot) | ✔ | ✔ | POST /api/conversations/{id}/ask |
| ACP (Agent Communication Protocol) | ✔ | ✔ | Separate router: /api/acp/conversations |
| Sub-agents & delegation | ✔ | ✘ | SDK-only: register_agent, load_agents_from_dir |
| Critic / iterative refinement | ✔ | ✘ | SDK-only: CriticBase, APIBasedCritic, etc. |
| Stuck detector | ✔ | ◐ | Runs inside server conversations automatically |
| Condenser (context management) | ✔ | ✔ | POST /api/conversations/{id}/condense |
| Events | |||
| Event search & pagination | ✔ | ✔ | /api/events/search, count, batch-get |
| Send message / user actions | ✔ | ✔ | POST /api/events/message |
| Confirmation responses | ✔ | ✔ | POST /api/events/confirmation |
| Real-time WebSocket events | ✔ | ✔ | /ws/events/{id} with pub/sub |
| Event persistence & serialization | ✔ | ✔ | JSON event store on disk |
| Tools | |||
| Tool registry & resolution | ✔ | ✔ | GET /api/tools/ lists registered tools |
| Terminal (bash execution) | ✔ | ✔ | Dedicated /api/bash router + WebSocket |
| File editor | ✔ | ✔ | Default & Gemini-style variants registered |
| Browser (browser_use) | ✔ | ✔ | Chromium preloaded by tool_preload_service |
| Glob & Grep | ✔ | ✔ | Gemini preset tools |
| Task tracker | ✔ | ✔ | Registered in default & gemini presets |
| Planning file editor | ✔ | ✔ | Registered via planning preset |
| Delegate tool (sub-agents) | ✔ | ✘ | SDK-only delegation to sub-agents |
| Custom tool registration | ✔ | ✘ | SDK: @register_tool decorator for custom tools |
| MCP (Model Context Protocol) | |||
| MCP server integration | ✔ | ✔ | Via Agent.mcp_config; plugins also merge MCP config |
| MCP client (direct API) | ✔ | ✘ | SDK-only: MCPClient for programmatic MCP access |
| Files & Git | |||
| File upload/download | ✔ | ✔ | /api/file/upload, /download |
| Trajectory download | ✔ | ✔ | GET /api/file/trajectory |
| Git changes & diff | ✔ | ✔ | /api/git/changes, /diff |
| Cached git repo | ✔ | ✘ | SDK-only: CachedRepo for efficient git ops |
| Skills & Plugins | |||
| Skill loading (project/user/public) | ✔ | ✔ | POST /api/skills/ — loads from multiple sources |
| Skill sync (marketplace) | ✔ | ✔ | POST /api/skills/sync |
| Plugin system (install/uninstall/manage) | ✔ | ✘ | SDK-only: full plugin lifecycle management |
| Plugin marketplace | ✔ | ✘ | SDK-only: Marketplace, MarketplaceEntry |
| Hooks | |||
| Hook loading (project/user) | ✔ | ✔ | POST /api/hooks/ |
| Hook execution engine | ✔ | ◐ | Executor runs inside conversations; no direct API |
| Security | |||
| Confirmation policies | ✔ | ✔ | PUT /api/conversations/{id}/confirmation-policy |
| Security analyzer (LLM / GraySwan) | ✔ | ✔ | PUT /api/conversations/{id}/security-analyzer |
| Security risk assessment | ✔ | ◐ | Runs inline; not a standalone endpoint |
| Secret management | ✔ | ✔ | PUT /api/conversations/{id}/secrets |