OpenHands / the product, behavior by behavior openhands-features
The feature map,
for humans.
What a user can do in Agent Canvas, how to take that path, and what should happen next. Each family has its own page: readable scripts, literal commands, expected observations, and real screenshots.
- families
- 27
- behaviors
- 743
- recipes & checks
- 722
Choose a family
No families match. Try another word or a behavior ID.
Starting work
First run, onboarding and sign-in
What a user sees before the normal app shell.
openhands-features F02App shell, sidebar and command menu
Every page inside the root layout shares one shell.
openhands-features F03Home and starting work
Home is the "What do you want to work on?" screen at `/` and `/conversations`.
openhands-features F04Conversation list and folders
The expanded sidebar always shows the user's conversations under a **Conversations** header.
openhands-featuresConversation & workspace
Composer, slash commands and plan mode
The composer is the input box at the bottom of the home page and of every conversation.
openhands-features F06Agent activity: messages, events and lifecycle
Inside a conversation the user watches the agent work: their own messages appear at once (optimistically), the agent's replies render as markdown, tool calls are grouped into collapsible "N actions completed" blocks whose cards show commands, outputs, diffs and task lists, and a live chip says what the agent is doing right now.
openhands-features F07Conversation page, header and management menu
The conversation page (`/conversations/<id>`) shows the chat pane: a header with the runtime status dot, the editable title, the "..." management menu and the Git actions, Overview and panel toggles, then the message history and the composer.
openhands-features F08Workspace drawer: files and changes
Next to the chat, a conversation has a right-hand drawer with tabs.
openhands-features F27Workspace tools: terminal, browser, planner, tasks and usage
The conversation's right-hand drawer holds the agent's workspace tools: a read-only Terminal that mirrors the agent's shell commands, a Browser tab that shows the agent browser tool's last screenshot, a Planner that renders `.agents_tmp/PLAN.md` (or starts a planning helper), a Task List that mirrors the agent's `task_tracker`, and a Usage tab with the context meter, a manual "Compact context" action and token/cost totals.
openhands-featuresSettings & configuration
Settings shell and navigation
Settings is one shell around eight pages (Agent, LLM, Model Router, Condenser, Agent Context, Verification, Application, Secrets).
openhands-features F10LLM profiles
An LLM profile is a named model configuration: provider and model (or a custom model and base URL), an API key or a ChatGPT subscription, an optional provider-connection link, and every advanced LLM option.
openhands-features F11Provider connections
A provider connection is a named, shared credential (provider, API key, optional base URL) that many LLM profiles link to instead of carrying their own key.
openhands-features F12Model router (meta-LLM profiles)
A model router (the UI also calls it a "meta-profile") names a classifier LLM profile, a prompt template and a model table.
openhands-features F13Agent profiles
Settings → Agent is a library of named agent profiles.
openhands-features F14Secrets
Secrets are named values the agent can use during conversations.
openhands-features F15Condenser, agent context and verification settings
Three settings pages are generated from the Agent Server's settings schemas: **Condenser** (summarize long chats), **Agent Context** (persistent agent memory) and **Verification** (confirmation mode, security analyzer and the critic).
openhands-features F16Application settings
Settings → Application holds the user's app-wide preferences: UI language, colour theme, anonymous usage data, sound notifications, the sidebar Getting Started checklist, which LLM profile writes conversation titles, an optional voice-input transcription endpoint, and the git identity used for commits.
openhands-featuresCustomization
Customize hub and MCP servers
Customize groups MCP Servers, Skills, Plugins and Apps behind one sidebar entry.
openhands-features F18Skills catalog
The Skills page (Customize → Skills, `/skills`) lists every skill the backend can load: the built-in catalog bundled with the frontend plus personal and project skills reported by the Agent Server.
openhands-features F19Plugins and plugin launch
Plugins bundle skills, commands and files that the agent loads into a conversation.
openhands-features F20Canvas apps
Canvas apps (Canvas Extensions) are trusted browser modules installed on the active local Agent Server.
openhands-featuresAutomations
Automations dashboard and actions
The Automate dashboard (`/automations`) is where a user sees every automation at a glance and acts on one without opening it.
openhands-features F22Creating automations: templates, setup and import
A user adds an automation in three ways.
openhands-features F23Automation detail, runs and editing
The detail page (`/automations/<id>`) shows one automation: a **Back to Automations** link, a header with the name, an **Active**/**Inactive** badge, **Run now**, an on/off switch and a kebab (Export, Tarball, Edit, Turn on/off, Delete); a **Why this is paused** banner when it was turned off; the Prompt (or, for a script automation, the Script bundle); Configuration (repositories, trigger, schedule or event source/type/filter, LLM profile); a **Plugins** card when it has plugins; an Activity card (Created, Last run); and the **Activity Log** of runs with status, summary, cost, a logs dialog, a link to each run's conversation and JSON/CSV export.
openhands-features F24Automation Git Sync
Git Sync keeps an organization's automation definitions in a git repository.
openhands-featuresBackends & runtimes
Before you start
The CLI drives an installed OpenHands checkout. It launches an isolated real stack, keeps a browser open between actions, and records evidence. Run it from the checkout directory with Node 24 or later, installed npm dependencies, uv/uvx, and a supported Chromium browser. The skill has the complete setup and run contract.
export PATH="$PWD/.agents/skills/verify-openhands/scripts:$PATH"
export OH_VERIFY_RUN=$(control-openhands launch --new --print-run)
control-openhands doctor
control-openhands onboard --skip
# For model-backed recipes, with your configured DeepSeek key:
control-openhands llm preset deepseek
# When finished:
control-openhands stop
Walk onboarding instead of skipping it when F01 is the subject. Start no-LLM checks before configuring a model. Keep OH_VERIFY_RUN set so every command addresses your own run. Desktop is 1440 × 1000; phone is 390 × 844.
Fixtures, API writes and LLM presets arrange preconditions. The user path is proved through the real UI. After saving or deleting, observe again: reload, reopen, or make a read-only API check. Record each actual result with evidence add: pass, fail, blocked, or not-run.
Use deepseek-flash for small model checks and keep prompts confined to the run workspace. Add Do not run any tools when the check only needs a reply. Cloud, enterprise, microphones, Docker and desktop recipes require the environment named in their preconditions.
How to read the scripts
Each recipe keeps the maintained map’s order and exact code. Numbered rows separate actions and checks; prose explains the expected result. Short forms and placeholders remain as documented. A known failure or blocked prerequisite stays visible.
Selected recipes have fresh screenshots captured with control-openhands browser screenshot from this pinned checkout. Each caption states its scope, and the capture commands are available below it. A screenshot demonstrates the pictured state; API persistence, downloads, sound and timing still need their stated observations. Mapped behaviors are an inventory, not a fresh all-pass ledger.
This category mirrors a dated source revision. The earlier presentation and issue list retain their original dates and counts. Download the category inventory and provenance.
Coverage boundaries from the maintained map
Everything else a user can reach is mapped. These are left out on purpose:
src/components/features/context-menu: a shared menu primitive, not a feature of its own. Its behavior is checked through the menus that use it (F04, F07, F21, F27).- OpenHands Cloud behavior (Cloud login and device flow, organizations, sharing, task URLs, sandbox pause): needs a Cloud account. The recipes are written up to that point and recorded as
blocked(for exampleF07.cloud-onlyand the Cloud rows of F25). - Suspended Cloud workspaces (
src/components/features/backends/cloud-organization-boundary.tsx, #17988): Mapped prerequisites/local absence:F25.cloud-org-suspendedrecords the expected alert and the prerequisite; a local backend can check only that the Cloud suspension surface is absent. Positive paths not live-mapped: the selected Cloud organization must receive a genuine scoped HTTP 403 withdetail: "Organization is suspended"ordetail: "User membership is suspended"; recovery also needs another accessible workspace. Desktop/phone alerts, workspace switching and request/backend/organization isolation remain blocked until those genuine states are available. An unrelated 403 is not that prerequisite. - Enterprise Super Admin setup guide (
src/components/features/setup-guide, #17969): Mapped prerequisites/local absence:F02.super-admin-setup-guiderecords its prerequisites and the local check for no guide or/api/admin/setup-staterequest. Positive paths not live-mapped: an authenticated enterprise Cloud backend must have a selected organization whose/mepermissions includemanage_super_admins, plus a genuine/api/admin/setup-stateresponse with a non-nullguide_org_id,guide_dismissed: false, and at least one unfinished required guide step. A local backend cannot establish those prerequisites. Progress, step destinations, collapse/reopen, server-driven guide removal, progress persistence and desktop/phone layouts remain blocked until an entitled account can drive them; source inspection is not runtime proof. - Setup-guide continuation and Canvas tours (#18138,
src/components/features/setup-guide/,src/components/features/manifest/manifest-setup-dialog.tsx,src/hooks/mutation/use-add-mcp-server.ts) are not live-mapped. They shareF02.super-admin-setup-guide's genuine Cloud account and setup-state prerequisites above, with the next required step set tofirst-automationoradd-integration. Verification additionally needs a successful direct automation creation or MCP-server addition and a subsequent server response confirming that step complete; assisted setup and out-of-order or unconfirmed completion have different control flow. The next Canvas step/tour, Cloud-host same-tab invitation handoff withorgandsetup_tour, standalone/Electron Start fallback, and tour entry viasetup_tourremain blocked across desktop/phone and those deployment boundaries. The invitation handoff also needs an accessible enterprise invitation page for the guide organization. No positive recipe is accepted from source or mocked enterprise responses. - Locked-to-Cloud deployments:
scripts/static-server.mjs --lock-to-cloudexists, butbin/agent-canvas.mjsdoes not forward it, socontrol-openhands launchcannot start that mode. - Page-local load errors (for example the LLM profiles or apps list failing while the rest of the backend works) need fault injection; stopping a service with
service stopreplaces the whole app with the backend-unavailable screen instead. The pages' empty and error copy is mapped where reachable. - Real microphone dictation, native file dialogs outside the browser, and Electron window chrome beyond what F26 drives.
The approach adapts Lauren Tan’s (@poteto) pstack verification-skill generators. Read the adaptation and attribution.