Pob is an overlay. It sits on top of whatever application you point it at, perceives that application through the window that contains it, and operates it — pointer, keys, and everything in between. Applications with no API get one.

A macro is read line by line. Where a line needs a judgement rather than a number, it holds an instruction in :: delimiters, and that instruction is answered from what is on screen before the line runs. So a step can say the message box instead of guessing at a coordinate that moves the next time the window resizes.
▸// Reply to every unread message, then sign out.move(398, 915)click()if (:: a chat window is open ::) {loop (:: another unread message in the list ::, 10) {move(:: the x offset to the message box ::, 738)click()typeText(:: a short reply to the message on screen ::)keyPress("return")}}call("../sign-out.psl")
The instruction language is PSL, written by the same hand and usable on its own.
Pob speaks MCP, so Claude Code, Claude Desktop and Gemini CLI can see the screen and work the machine themselves. Ask for the thing you want done and let the client do it.
Record what you do once, then replay it. A recorded macro is an editable text file, so you can go back in and replace a brittle coordinate with an instruction.
Every running instance serves a remote control page. Open it on a phone on the same network to watch what Pob sees and drive it from the couch.
A desktop keyboard and trackpad that types into the machine Pob is running on — useful when the machine you are driving is a VM or across the room.