Operate desktop apps and isolated browsers on registered computers. Use for tasks needing an app interface, accessibility, screenshots or recording. Use Chromewhale for the user's signed-in Chrome.
95%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
Low
Low-risk findings worth noting
Choose the target first:
computer {action:"list"}, then request_access on the intended computer. Follow the returned missing-permission/install hint and via owner; bundled builds already include a helper. A stale helper needs a user restart. Bind the named app with open_application {activate:false}; keep the user's foreground and pointer free.page_* tools for the user's open tabs and signed-in accounts. Do not drive their browser window with desktop clicks or attach to their profile.browser {action:"start"} for a clean, session-owned browser. It never attaches to the user's profile. For a disposable desktop, computer {action:"spawn", id, transport:"docker"} creates a temporary task-owned computer; spawning needs the host's existing authorization.Prefer the host's files, shell and app connectors when no UI is needed. Never drive a terminal window to run commands. On macOS, app scripting may be more precise; read its restrictions in the operating details before using app_script.
list_apps finds targets. If a named app is absent, try open_application once with the user's exact spelling, then report the result; do not guess names. Pass computer explicitly when switching machines. Read each receipt's computer identity.get_app_state for text, controls, element indices and state_id. Use query, role, limit or find_elements to narrow. Repeat the same view with since:state_id (or "latest") for changed rows; resync_required:true supplies a new full baseline. removed_indices left that view. Missing labels are unknown; do not guess them. Re-observe shallow/loading trees.set_value, or focus then type/key. On Linux, keys go to the active window and are refused while a menu is open; observe before typing, and send key escape to close a menu. Newlines and press_enter send Return. wait_for handles UI transitions. Re-observe after stale targets or a timeout; never replay an action whose receipt says action_sent:true.space:"screen". Pass its raster_id in every raster coordinate target and as the parent of zoom; use the zoom's new ID for child-image points. OCR targets already carry it. raster_stale means observe again; never drop the ID to retry. A pin detects capture replacement, not a changed UI. Never calculate from a file path, omitted image, stale raster or invented state. Text-only models may use macOS OCR, not infer graphical meaning.verified:false, inspect the requested screenshot before relying on it.run_actions groups 1–8 {tool,arguments} steps (args is an alias). find:{query,role,app_ref?,window_id?} observes a unique target immediately before a step; ambiguity or staleness stops input. wait_for timeout stops later steps. observe:true adds compact final state; an object supplies its arguments. Inspect completed_steps, action_sent, outcome_unknown: failure never authorizes replaying earlier input.
activate:true without a second foreground approval; an explicit foreground denial still blocks it. Record consent allow only after the person authorizes that app or override in this conversation. A denied permission is final: explain the missing grant and stop. Never operate the helper's controls or approve the host's own authorization.consent_needs_user; never manufacture approval or an attestation.control_paused, control_stopped, user_busy, cancellation and stop_computer_control mean stop acting. Do not switch tools, sessions, transports, environment variables or helpers to bypass them. A disconnected installed helper must not fall back to direct input. A contested-input receipt is not verified success.confirmation_required, record the returned single-use token only after that approval, then repeat only the identical call. Never bypass it with coordinates, keys or a script.Read these packaged resources with this server's resources/read (in Codewhale: list_mcp_resources, then read_mcp_resource). Do not read mutable plugin paths to bypass reviewed snapshots.
skill://codewhale-cu/references/operating-details.md: platform routing, app scripting, browser, keyboard and recording details. Read before raw pointer/foreground input, app scripts, or recording.skill://codewhale-cu/references/quick-reference.md: schemas and short recipes.skill://codewhale-cu/references/refusal-codes.md: recovery for an actual refusal; never retry a denial unchanged.skill://codewhale-cu/recording/SKILL.md: capture workflow and platform limits.Hmbown/Codewhale
ff466b2
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.