teksilo-automation
GUI-free runtime-introspection & automation toolkit for Teksilo apps.
A Teksilo app exposes a rich semantic surface — the AccessKit
accessibility tree — plus an AT-action dispatch path, both of which are
queryable and drivable in-process, without the OS accessibility
layer. This crate turns that latent capability into a small set of
serde DTOs plus one core function, [execute], that an MCP server (or
any other harness) marshals operations to.
execute(tree: &mut WidgetTree, ops: &mut dyn WindowOps,
op: &AutomationOp, settle: &SettleSpec) -> AutomationReply
The wire protocol is serde DTOs, never closures or !Send handles
([dto]). WidgetTree is !Send, so it
lives on exactly one thread; async / socket layers marshal Send DTOs
to it. Two operations need context [execute] doesn't hold —
list_windows (the window manager) and screenshot (a GPU / platform
window) — and return [dto::codes::HOST_REQUIRED]; the headless server
and the live bridge serve those themselves.
This crate has no GUI, render, platform, or async dependency. It mirrors
teksilo-data's "core-only peer" design so a CI harness, a headless
test, or the live in-app bridge can all share it.
Modules
- [
dto] — the serde wire protocol. - [
executor] — [execute] and the settle model. - [
recording_ops] — a non-panickingWindowOpsfor the headless server. - [
mcp_schema] — the canonical tool catalog. - [
wire] — the live-bridge framing, token handshake and endpoint discovery, shared verbatim by the in-app bridge and the MCP client.