from syin import Screen
screen = Screen.of("Meridian Claims")
x, y = screen.locate("Export") # (1086, 168) — 12 ms, 0 tokens
screen.locate("Void claim").verb # 'destructive'
# A miss is a refusal, never a nearby guess.
screen.locate("Prnit")
Abstained: no candidate above 0.62 (best 0.31, 'Pended')
page = syin.attach("Meridian Claims")
page.click("Export")
page.fill("Member ID", "A9930-2214")
page.expect("Status", "Ready")
# Destructive controls need saying out loud.
page.click("Void claim", confirm=True)
{
"mcpServers": {
"syin": {
"command": "syin-mcp",
"args": ["--app", "Meridian Claims", "--budget", "60"]
}
}
}
# An MCP server for an application that never shipped one.
$ syin map --app "Meridian Claims"
tier 3 — derived from pixels 3,115 ms
31 elements, 28 with a readable label
semantics: qwen3:4b (2.6 GB) vision: gemma3:4b (3.3 GB)
stamped · map 7f31c4 · state 9e02
$ syin locate "Export" --app "Meridian Claims"
(1086, 168) match 0.97 verb benign tier 1 12 ms
Everything runs on the machine the application is running on. No frame leaves it, which is usually the only reason these applications can be automated at all.