Skip to main content
Glama

learn

Probes unlabeled Android controls one at a time, records the observed screen effect, and annotates later UI descriptions so agents stop guessing; destructive or financial controls are refused.

Instructions

Teach the agent what an app's unnamed controls DO, by probing and remembering. Many apps expose no label for their buttons (measured: 56.7% of tappable controls carry no text/description/id, and some apps report no clickable flag at all), so the only honest way to learn them is to act and observe. This taps one unknown control at a time, diffs the screen before/after, and persists the observed effect (opened a screen / dialog appeared / list scrolled / no visible change) under the current app+activity. Destructive and financial controls (delete, pay, logout, uninstall, password fields) are refused and recorded as refused, never pressed. Results appear as learned_effect on later ui_describe calls, so the agent stops guessing. budget = how many controls to probe this call (1-5).

Input Schema

NameRequiredDescriptionDefault
budgetNo
settle_msNo
allow_restoreNo

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv2.0.0

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations supplied, the description carries the full burden and does well on safety: destructive/financial controls are refused and recorded as refused, never pressed, and each probe taps only one control with a before/after diff. It still omits important behavior — whether this requires an accessibility service or root, what happens to screen state after a probe that navigates (only the parameter name allow_restore hints at restoration), and failure/partial-budget behavior.

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?

Structure is front-loaded: what it does, why it is necessary, then the mechanics, then the safety refusal, then the payoff. The measurement parenthetical (56.7%) supports the rationale rather than padding, though the sentence chain is long enough that the key refusal rule is buried mid-paragraph.

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 high-risk UI-mutating prober, the description covers the probing loop, persistence key, refusal policy, and budget, and an output schema exists so return shape needs no explanation. The remaining gap is the two unexplained parameters, especially the restore behavior, which an agent needs to invoke it safely.

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

Parameters2/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, and it only explains one of three parameters: budget, correctly, with the 1-5 range that the schema's bare default of 2 does not convey. settle_ms and allow_restore are never mentioned, and allow_restore in particular looks safety-relevant for a tool that navigates and mutates UI state.

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 opening sentence names a specific verb and resource — tap unknown/unnamed controls, diff the screen, and persist the observed effect under app+activity. It also implicitly separates itself from direct-action siblings like tap_element or act by scoping to controls with no label or clickable flag, and states where results surface (learned_effect on ui_describe).

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?

It gives a clear triggering condition (apps whose tappable controls carry no text/description/id, or report no clickable flag) and a budget of 1-5 probes per call, which tells the agent the expected scope of use. It never explicitly names an alternative tool for labeled elements or says when not to call it, leaving that routing to inference.

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