Skip to main content
Glama

tool_skyshot

Read any window's UI as a compact text tree instead of a screenshot, naming elements that hit-testing misses. Each call returns only changed lines, so repeat checks cost about 100 characters.

Instructions

Read a window's UI as a compact TEXT tree instead of a screenshot — far cheaper than an image, and it names elements a hit-test cannot reach (e.g. an input inside a Chromium page, which element_at_point reports only as the enclosing 'document'). Each line is '{index} {indent}{role} {name}{Value: ...}{(state)}'. Every shot after the first is a DIFF against the previous one: unchanged lines are omitted, '' marks a changed line, '+' an added one, and removed indices are summarised as ranges. So a second call is usually a few lines, not the whole tree — an unchanged window costs about 100 characters. INDEXES ARE POSITIONAL: each shot numbers the tree it just walked, so a number is only valid against the shot that printed it. '' and '+' lines carry THIS shot's index and may be acted on; unchanged lines carry no index, so reaching one needs disable_diff=true for a full render. An index read from an older shot is not a durable handle — re-check it with a fresh shot before acting if the window may have changed. The result includes shot_key (the window the diff baseline belongs to — the baseline lives server-side and outlives your session, so this is how you confirm it was taken against the window you meant). Pass include_offscreen=true to include elements that are scrolled out or hidden. NOTE: this reads element VALUES, so the text can contain whatever is on screen in that window. Read-only — no input injection, no focus change; safe to call while the user works.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
hwndNo
titleNo
max_depthNo
max_nodesNo
disable_diffNo
include_valuesNo
include_offscreenNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.3.1

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the behavioral burden, and it does so exceptionally. It explains the diff behavior between shots, the exact line format, positional index caveats, the server-side shot_key baseline, offscreen inclusion, and that values may contain arbitrary on-screen text. It also explicitly declares the tool is read-only with no input injection or focus change, which is critical behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but densely packed with necessary operational details. The core purpose is front-loaded, followed by output format, diff semantics, index validity, and safety. A few details could be tightened, but the length is justified by the tool's complexity and the absence of annotation support.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with no annotations, the description covers nearly everything an agent needs: output format, diff semantics, positional index pitfalls, shot_key behavior, offscreen handling, and read-only safety. It is slightly incomplete on how to target the window via hwnd or title and does not clarify max_depth or max_nodes, but the overall picture is very strong.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It does explain disable_diff, include_offscreen, and indirectly include_values through the note about reading element values. However, it does not explain hwnd, title, max_depth, or max_nodes, although their names and defaults are somewhat self-evident. This is partial compensation, not full, so a 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action and resource: 'Read a window's UI as a compact TEXT tree instead of a screenshot'. It differentiates from siblings by explicitly contrasting with image capture and hit-testing, and explains a unique benefit (naming elements a hit-test cannot reach). This leaves no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to prefer this tool: when a cheaper alternative to a screenshot is needed and when hit-testing cannot identify nested elements like inputs inside a Chromium page. It also notes the tool is read-only and safe while the user works. It does not explicitly state when not to use it or name alternative sibling tools, but the context is strong enough for an agent to select it appropriately.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.