mcpField
O
open-computer-use

open-computer-use

github.com/ifurystAgent workflows2.8k1.9k installsUpdated 3d ago
Repository

About open-computer-use

open-computer-use is a cross-platform CLI and local MCP server for controlling desktop interfaces, aimed at agents and runtimes that need GUI actions. It provides shared app and interaction tools, with additional accessibility lookup and text selection on macOS.

Key features

  1. 01Cross-platform desktop interaction
  2. 02App discovery and state inspection
  3. 03Element-targeted clicks and input
  4. 04macOS accessibility query and text selection

Use cases

  1. 01Inspecting and operating desktop apps
  2. 02Automating multi-step GUI tasks
  3. 03Selecting text in macOS controls

MCP support

It runs as a local stdio MCP server through `open-computer-use mcp` or `ocu mcp`, exposing Computer Use tools to compatible agent runtimes.

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/ifuryst/open-computer-use --skill open-computer-use

After installing, type/open-computer-usein Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

agents/
openai.yaml
references/
installation.md
troubleshooting.md
usage.md

Details

From the project README

Open Computer Use

Overview

Open Computer Use exposes Computer Use as a local CLI and stdio MCP server. It is not Codex.app-specific; adapt the commands and MCP config to the agent runtime you are operating in.

The macOS runtime requires macOS 14.0 or later. Windows and Linux use their own platform runtimes and are not subject to this macOS minimum.

It supports the same core tool surface across macOS, Linux, and Windows: list_apps, get_app_state, click, perform_secondary_action, scroll, drag, type_text, press_key, and set_value.

The macOS runtime additionally implements select_text, which selects the given text inside a text element or places the text cursor before / after it (selection: text, cursor_before, cursor_after). Pass text exactly as it appears in the accessibility tree, plus prefix / suffix when it is not unique; an ambiguous target fails closed instead of silently selecting the first match. JavaScript exposes app.selectText(elementIndex, text, options?). Unreadable or mismatched range verification throws, including when full action read-back is off. Windows and Linux runtimes do not implement this tool yet.

macOS additionally exposes query: a targeted accessibility lookup that finds controls by text and/or role without rendering a tree or taking a screenshot.

Core Workflow

  1. On macOS, run sw_vers -productVersion before invoking the CLI and require macOS 14.0 or later. On older versions, explain that the runtime cannot launch; do not recommend doctor or permission changes as a fix for binary incompatibility.
  2. Check the CLI is installed with open-computer-use -h or ocu -h. If installation or setup is missing, read references/installation.md.
  3. On supported macOS versions, run open-computer-use doctor before the first real GUI task. If permissions are missing, ask the user to approve Accessibility and Screen Recording in the onboarding UI.
  4. Inspect available apps before acting: open-computer-use call list_apps.
  5. Capture current UI state with open-computer-use call get_app_state --args '{"app":"TextEdit"}'. The default state is usually enough for UI operation.
  6. When the task needs longer semantic text, such as chat history, email bodies, document text, or long form content, call get_app_state with text_limit: 1000 or text_limit: "max".
  7. When visible long pages or lists appear incomplete even after scrolling, call get_app_state with a larger max_tree_nodes or max_tree_depth.
  8. Prefer element-targeted actions using element_index from the latest get_app_state result.
  9. For multi-step CLI work, use open-computer-use call --calls '<json-array>' so one process can reuse the latest element index mapping.
  10. For agent runtimes that support local MCP servers, configure open-computer-use mcp or ocu mcp and call the exposed Computer Use tools directly. Read references/usage.md.
  11. For direct code-first orchestration, run ocu capabilities and then use one-shot ocu js or persistent ocu repl. Read references/usage.md.
  12. If communication, permission, or desktop-session access fails, read references/troubleshooting.md.

Operating Rules

  • Treat the target desktop as the user's real session. Do not inspect password managers, unrelated private content, or sensitive apps unless the user explicitly asked for that task.
  • Ask before sending, deleting, purchasing, approving, uploading, or making other externally visible changes.
  • Do not assume Codex.app plugin helpers are available. Use the installed open-computer-use / ocu CLI or an explicit MCP config.
  • Use indexes returned by get_app_state or macOS query in the same native session; do not guess indexes across sessions or after large UI changes.
  • Prefer semantic actions and set_value for editable controls. Use coordinate click, scroll, and drag only when the element tree does not expose a safer target.
  • On macOS, do not enable OPEN_COMPUTER_USE_ALLOW_GLOBAL_POINTER_FALLBACKS=1 unless the user explicitly requested click_method: "global", a drag that must drive a window-server drag session (window move, drag-select text, Finder drag-and-drop), or other diagnostic behavior that may move the real pointer. Without it drag reports Drag delivered via app_post and those operations have no effect; see references/usage.md for alternatives.
  • On Windows and Linux, confirm the command is running inside the logged-in desktop session before assuming GUI automation is available.

Common CLI Actions

open-computer-use -h
ocu -h
ocu capabilities --json
ocu js 'nodeRepl.write(6 * 7)'
ocu repl
open-computer-use doctor
open-computer-use call list_apps
ocu call list_apps
open-computer-use call get_app_state --args '{"app":"TextEdit"}'
open-computer-use call get_app_state --args '{"app":"TextEdit","text_limit":1000}'
open-computer-use call get_app_state --args '{"app":"TextEdit","text_limit":"max"}'
open-computer-use call get_app_state --args '{"app":"Google Chrome","max_tree_nodes":3000,"max_tree_depth":96}'
open-computer-use call click --args '{"app":"TextEdit","element_index":"0"}'
open-computer-use call type_text --args '{"app":"TextEdit","text":"Hello from Open Computer Use"}'

For a short sequence that reuses state in one process:

open-computer-use call --calls '[
  {"tool":"get_app_state","args":{"app":"TextEdit"}},
  {"tool":"press_key","args":{"app":"TextEdit","key":"Return"}}
]'

MCP Usage

For runtimes that can launch local MCP servers over stdio, use:

[mcp_servers.open_computer_use]
command = "open-computer-use"
args = ["mcp"]

Read references/usage.md for JSON config examples, direct tool-call patterns, and platform notes.

References

Comments

Markdown supported