CATLX — OCR & Screen Understanding
This skill owns reading the screen as structured data: converting screen regions to text and then to a
structured ScreenModel of the interactive surface that downstream automation uses. This is a distinct,
tier-scaled capability within the Desktop Control Engine.
Canonical detail: ../knowledge/references/screen-understanding.md and
../knowledge/references/desktop-control.md §5.5. Example output: ../examples (see
../examples/screen-model.json). Load on demand.
Purpose
Produce machine-readable structure from pixels so the Workflow Engine and DCE can click, type, and verify
actions WITHOUT hardcoded coordinates, and can work with legacy apps that lack accessibility trees.
When to activate
- User asks how CATLX reads/understands the screen, or about OCR and screen models.
- Automating a legacy app (no UIAutomation tree).
- Verifying a UI action by reading screen state.
What this skill handles
- Tier-scaled OCR backends (from CapabilityMap
ocr_backend):
- T0: Tesseract 5.x (
eng+osd) on CPU.
- T1: Tesseract + result cache (avoid re-OCR of static regions).
- T2+: EasyOCR / PaddleOCR with GPU for near-instant full-screen extraction.
- Screen Understanding post-processing — from raw detected text: UI element classification (buttons,
input fields, labels, links, text blocks), spatial relationship extraction, and element state detection
(enabled/disabled, checked/unchecked, focused).
ScreenModel — a structured JSON of the screen's interactive surface: element type, bounding box,
label/accessibility name, state, and spatial relationships. Example in ../examples/screen-model.json.
- Per-display + global merge — ScreenModels are computed per display by default and merged into a
global ScreenModel on request (multi-monitor).
Requirements / constraints
- Environment routing picks the OCR execution context:
LOCAL_PROCESS (small regions), LOCAL_SUBPROCESS
(T1+ CPU OCR), LOCAL_CONTAINER (T2+ GPU EasyOCR/PaddleOCR).
- R5: screen read is gated by the permission router (global toggle + per-app exclusions).
- The
ScreenModel is the contract the Workflow Engine consumes; do not bypass it with raw coordinates.
Canonical knowledge it reads
../knowledge/references/screen-understanding.md · ../knowledge/references/desktop-control.md ·
../knowledge/references/hardware-adaptation.md · ../knowledge/references/security.md.
Delegation
- Which OCR backend per tier → delegate to
catlx-hardware-adaptation
(skill({ name: "catlx-hardware-adaptation" })).
- Where OCR executes + fallback → delegate to
catlx-capability-routing
(skill({ name: "catlx-capability-routing" })).
- Acting on the ScreenModel (click/type) → delegate to
catlx-desktop-control
(skill({ name: "catlx-desktop-control" })).
- Permission for screen capture → delegate to
catlx-security
(skill({ name: "catlx-security" })).
- GPU container (T2+ EasyOCR) → delegate to
catlx-docker (skill({ name: "catlx-docker" })).
Edge cases & warnings
- Static regions: use the result cache on T1 to avoid wasteful re-OCR.
- Dynamic content / animation: re-OCR the affected region; never trust stale ScreenModel state.
- Full-screen capture cost: prefer targeted regions; use GPU/container on T2+ for full-screen.
- Per-app exclusions: respect the permission router's screen-read exclusions (e.g. password managers).
- Security risk of reading sensitive screen content — audit and gate.
Component lifecycle policy (reuse → install → adapt → create)
NEVER create a new component as the default. Before building/creating anything (a sub-skill, dependency,
reference, workflow, helper, adapter, or template), check, in order:
- Reuse an existing local component (resolve aliases/equivalent capabilities first) — reuse, don't rebuild.
- Use an already-registered component from the registry.
- Install a suitable existing, trusted, supported component → validate → register → connect to the graph → use.
- Adapt an existing compatible component via a small persistent adapter/wrapper instead of re-creating it.
- Create only as last resort — then make it permanent immediately: stable id, canonical location, register,
add to the capability index + dependency graph, add provenance, use, and allow future reuse.
- Never reorganise/recreate already-generated components (no
Skill X 2 / new / temp variants); extend the
existing one. Never create a second competing knowledge source; connect back to the canonical knowledge/ layer.
Promote any reusable artifact out of /tmp/scratch into the permanent ecosystem.
Full policy: ../knowledge/rules/component-lifecycle.md.
Source / provenance
- Source: PART V §5.5 (OCR — Screen Understanding) as a tier-scaled, post-processed capability; echoed in
the component tree (PART XVII §17.1: OCR Engine, Screen Understanding Layer).
- Inferred/adapted: Windows OCR (Tesseract/EasyOCR/PaddleOCR run on Windows); the ScreenModel structure is
a faithful representation of the source's elements/state/spatial requirements.
1---2name: catlx-screen-understanding3description: CATLX — OCR & Screen Understanding4---56# CATLX — OCR & Screen Understanding78This skill owns **reading the screen as structured data**: converting screen regions to text and then to a9structured `ScreenModel` of the interactive surface that downstream automation uses. This is a distinct,10tier-scaled capability within the Desktop Control Engine.1112> Canonical detail: `../knowledge/references/screen-understanding.md` and13> `../knowledge/references/desktop-control.md` §5.5. Example output: `../examples` (see14> `../examples/screen-model.json`). Load on demand.1516---1718## Purpose1920Produce machine-readable structure from pixels so the Workflow Engine and DCE can click, type, and verify21actions WITHOUT hardcoded coordinates, and can work with legacy apps that lack accessibility trees.2223## When to activate2425- User asks how CATLX reads/understands the screen, or about OCR and screen models.26- Automating a legacy app (no UIAutomation tree).27- Verifying a UI action by reading screen state.2829## What this skill handles30311. **Tier-scaled OCR backends** (from CapabilityMap `ocr_backend`):32 - T0: Tesseract 5.x (`eng+osd`) on CPU.33 - T1: Tesseract + result cache (avoid re-OCR of static regions).34 - T2+: EasyOCR / PaddleOCR with GPU for near-instant full-screen extraction.352. **Screen Understanding post-processing** — from raw detected text: UI element classification (buttons,36 input fields, labels, links, text blocks), spatial relationship extraction, and element state detection37 (enabled/disabled, checked/unchecked, focused).383. **`ScreenModel`** — a structured JSON of the screen's interactive surface: element type, bounding box,39 label/accessibility name, state, and spatial relationships. Example in `../examples/screen-model.json`.404. **Per-display + global merge** — ScreenModels are computed per display by default and merged into a41 global ScreenModel on request (multi-monitor).4243## Requirements / constraints4445- Environment routing picks the OCR execution context: `LOCAL_PROCESS` (small regions), `LOCAL_SUBPROCESS`46 (T1+ CPU OCR), `LOCAL_CONTAINER` (T2+ GPU EasyOCR/PaddleOCR).47- **R5:** screen read is gated by the permission router (global toggle + per-app exclusions).48- The `ScreenModel` is the contract the Workflow Engine consumes; do not bypass it with raw coordinates.4950## Canonical knowledge it reads5152`../knowledge/references/screen-understanding.md` · `../knowledge/references/desktop-control.md` ·53`../knowledge/references/hardware-adaptation.md` · `../knowledge/references/security.md`.5455## Delegation5657- **Which OCR backend per tier** → delegate to `catlx-hardware-adaptation`58 (`skill({ name: "catlx-hardware-adaptation" })`).59- **Where OCR executes + fallback** → delegate to `catlx-capability-routing`60 (`skill({ name: "catlx-capability-routing" })`).61- **Acting on the ScreenModel (click/type)** → delegate to `catlx-desktop-control`62 (`skill({ name: "catlx-desktop-control" })`).63- **Permission for screen capture** → delegate to `catlx-security`64 (`skill({ name: "catlx-security" })`).65- **GPU container (T2+ EasyOCR)** → delegate to `catlx-docker` (`skill({ name: "catlx-docker" })`).6667## Edge cases & warnings6869- **Static regions:** use the result cache on T1 to avoid wasteful re-OCR.70- **Dynamic content / animation:** re-OCR the affected region; never trust stale ScreenModel state.71- **Full-screen capture cost:** prefer targeted regions; use GPU/container on T2+ for full-screen.72- **Per-app exclusions:** respect the permission router's screen-read exclusions (e.g. password managers).73- Security risk of reading sensitive screen content — audit and gate.7475## Component lifecycle policy (reuse → install → adapt → create)7677**NEVER create a new component as the default.** Before building/creating anything (a sub-skill, dependency,78reference, workflow, helper, adapter, or template), check, in order:791. **Reuse** an existing local component (resolve aliases/equivalent capabilities first) — reuse, don't rebuild.802. **Use** an already-registered component from the registry.813. **Install** a suitable existing, trusted, supported component → validate → register → connect to the graph → use.824. **Adapt** an existing compatible component via a small persistent adapter/wrapper instead of re-creating it.835. **Create only as last resort** — then make it permanent immediately: stable id, canonical location, register,84 add to the capability index + dependency graph, add provenance, use, and allow future reuse.856. Never reorganise/recreate already-generated components (no `Skill X 2` / `new` / `temp` variants); extend the86 existing one. Never create a second competing knowledge source; connect back to the canonical `knowledge/` layer.87 Promote any reusable artifact out of `/tmp`/scratch into the permanent ecosystem.8889> Full policy: `../knowledge/rules/component-lifecycle.md`.9091## Source / provenance9293- **Source:** PART V §5.5 (OCR — Screen Understanding) as a tier-scaled, post-processed capability; echoed in94 the component tree (PART XVII §17.1: OCR Engine, Screen Understanding Layer).95- **Inferred/adapted:** Windows OCR (Tesseract/EasyOCR/PaddleOCR run on Windows); the ScreenModel structure is96 a faithful representation of the source's elements/state/spatial requirements.