Kubi Docs
Guides

Claude, OpenAI and Gemini

How each model's computer-use actions map to ours, and which coordinates to send.

Computer-use models describe actions in their own format. Ours covers all three, so an adapter only renames fields. The SDK ships one for each model.

Action mapping

Ours (type)ClaudeOpenAIGemini
click (button, count 1 to 3)left, right, middle, double, triple clickclick, double_clickclick, double, triple, middle, right click
movemouse_movemovemove
drag (path)left_click_dragdrag (path)drag_and_drop
scroll (dx, dy)scroll (direction, amount)scroll (scroll_x, scroll_y in px)scroll (direction, magnitude in px)
type (text, enter)typetypetype (press_enter)
key (keys, repeat, hold_ms)key, hold_keykeypresspress_key, hotkey
mouse_down, mouse_upleft_mouse_down, left_mouse_upnonemouse_down, mouse_up
key_down, key_upnonenonekey_down, key_up
wait (ms)wait (seconds)waitwait (seconds)
zoom (region)zoomnonenone
screenshotscreenshotscreenshottake_screenshot

Coordinates

  • Claude and OpenAI answer in pixels of the screenshot you sent. Pass its screenshot_id and you are done.
  • Gemini answers on a 0 to 999 grid. Send "space": [1000, 1000] with the action and we convert.

Screenshot size

Shots come back at 1280x720 by default. That costs about 1,200 image tokens per shot on Claude, OpenAI and Gemini, against about 2,700 at 1920x1080, and small text stays readable. Zoom into a region when text is too small.

Long waits

Claude's wait and hold_key can ask for up to 300 seconds. Our calls answer within 30, so the SDK adapter splits long waits into several calls.

Using an agent app instead of your own loop? Connect your agent gives it all of this through MCP with no adapter.