Plonk

El gestor de ventanas de Mac que tu agente puede controlar. Zonas de ajuste, espacios de trabajo guardados, mantener activo, capturas de pantalla y OCR en el dispositivo — 19 herramientas MCP que se conectan a una API de loopback en tu propia máquina. Sin cuenta, sin nube, sin telemetría.

Documentación

Plonk

Una caja de herramientas para tu Mac, detrás de un icono en la barra de menús.
Ventanas, espacios de trabajo, capturas de pantalla, OCR, una regla, mantener despierto, herramientas de puntero, atajos, voz y agentes: nativo, local y modular.
Plonk es colocar algo exactamente donde pertenece.

Version macOS 13+ Swift 6 No dependencies MIT MCP CodeQL OpenSSF Scorecard

Una composición impresa de Plonk: ocho módulos de colores dispuestos alrededor del cubo como un solo sistema

ostapondo.github.io/Plonk

Una app en lugar de ocho iconos en la barra de menús

Plonk es un pequeño conjunto de herramientas para macOS que comparten una interfaz, una paleta de comandos y una superficie de automatización. Usa todo, o apaga cada módulo que no necesites.

Captura y comprende la pantalla. Toma una captura de región, ventana o pantalla completa, anótala, fija un recorte en vivo, copia texto no seleccionable con OCR en el dispositivo, o mide una interfaz en puntos y píxeles.

Mantén el Mac y tu flujo de trabajo en movimiento. Evita que se duerma hasta un temporizador, una hora del día o la salida de un proceso; encuentra el puntero, añade miras o anillos de clic; inspecciona los atajos reales de la app frontal; y ejecuta cualquier cosa por nombre desde una paleta.

Organiza el escritorio. Dibuja zonas de ajuste, guarda espacios de trabajo que recuerdan cada monitor, mueve ventanas por arrastre, atajo o voz, y deja que las reglas de la app coloquen nuevas ventanas donde pertenecen.

Deja que un agente use las mismas herramientas. Plonk incluye un servidor MCP y CLI para diseños, espacios de trabajo, capturas de pantalla, OCR, medición, mantener despierto y el resto. La app sigue siendo la fuente de verdad, y toda la superficie permanece en tu Mac.

Es temprano. Versión 0.4.x, un autor. Atajos, archivos de zonas y espacios de trabajo están establecidos. Los nombres de las herramientas MCP y la API HTTP no lo están, y pueden cambiar entre versiones menores. CHANGELOG.md dice qué se movió.

Instalación

macOS 13 o más reciente, Apple silicon.

brew install --cask ostapondo/plonk/plonk

Concede Accesibilidad cuando lo pida, luego relanza. Se pide Grabación de Pantalla por separado, la primera vez que captures. Nada más: sin Acceso Total al Disco, sin Automatización, sin Llavero.

Plonk está firmado pero no notarizado, así que macOS retiene una copia que descargas manualmente. El cask se encarga de eso por ti.

Ejecutarlo junto a Rectangle o Magnet está bien, siempre que sus atajos no colisionen.

Comprobando lo que descargaste. Notarizar una app significa pagar a Apple por una cuenta de desarrollador, y este proyecto no tiene una, así que Plonk está firmado con un certificado que se hizo a sí mismo. Eso significa que macOS no puede decirte quién construyó la app. Hay una comprobación que responde una pregunta más útil, y puedes ejecutarla tú mismo: ¿fue este archivo exacto construido por GitHub desde el código fuente en este repositorio?

gh attestation verify Plonk-<version>.zip --repo ostapondo/Plonk

Pon el número del nombre del archivo en lugar de <version>. El comando viene con la GitHub CLI, que es brew install gh. Imprime el commit y la ejecución del flujo de trabajo que construyó el archivo. Si el archivo fue alterado después de construirse, o no fue construido desde este repositorio en absoluto, el comando falla y te lo dice.

Cada versión también lleva un pequeño archivo Plonk-<version>.zip.sha256. Ponlo junto al zip y ejecuta shasum -a 256 -c Plonk-<version>.zip.sha256 para confirmar que la descarga llegó completa y sin cambios. Ese archivo está firmado de la misma manera que el zip, así que gh attestation verify también funciona con él. La atestación en sí también está en la versión como Plonk-<version>.zip.sigstore.json, para cualquiera que quiera verificarla sin conexión con gh attestation verify --bundle o con cosign en lugar de preguntar a GitHub.

Instalación manual, Macs Intel, gestores de ventanas en mosaico y cómo eliminarlo

Por qué macOS retiene una copia descargada. El certificado es autofirmado en lugar de un Apple Developer ID, porque notarizar requiere una cuenta de pago de Apple y este proyecto no tiene una. macOS no puede garantizar quién lo construyó, y lo dice. El cask omite esa comprobación al limpiar la bandera de cuarentena por ti.

Esa es una comprobación omitida en tu nombre, así que aquí hay una más fuerte para ejecutar antes de abrir cualquier cosa:

gh attestation verify $(brew --cache)/downloads/*--Plonk-*.zip \
  -R ostapondo/plonk

Imprime el commit y la ejecución de GitHub Actions que construyó este archivo exacto. El sello de Apple te diría que una compilación pasó un escaneo de malware. Esto te dice que el binario proviene del código fuente en este repositorio, sin ningún portátil en el medio.

Sin Homebrew. Descarga la última versión, descomprime, coloca Plonk.app en Aplicaciones, luego limpia la bandera tú mismo, que es todo lo que hace el cask:

xattr -dr com.apple.quarantine /Applications/Plonk.app

O haz el desvío de Gatekeeper una vez: abre Plonk, descarta la advertencia, luego Configuración del Sistema, Privacidad y Seguridad, desplázate a Seguridad, Abrir de todos modos.

Si mueves o renombras Plonk.app más tarde, macOS vincula la concesión anterior a la ruta anterior y las ventanas de apps recién lanzadas dejan de verse. Elimina Plonk de Privacidad y Seguridad, Accesibilidad, y concédelo de nuevo.

En un Mac Intel. Las versiones se construyen solo para Apple silicon, así que la descarga no se ejecutará. Compilar desde el código fuente debería funcionar, ver Compilar, pero nadie lo ha probado y un informe en cualquier dirección es bienvenido en problemas.

Junto a un gestor de ventanas en mosaico. yabai y Amethyst poseen cada ventana en pantalla y sacarás las ventanas directamente de una zona. Ejecuta uno u otro.

Eliminándolo. brew uninstall --cask plonk, o sal de Plonk y arrástralo a la papelera. Luego elimina ~/Library/Application Support/Plonk/. El elemento de inicio de sesión se va con la app, y no se escribió nada en ningún otro lugar.

Las herramientas

Los módulos comparten configuraciones, atajos, la barra de menús, la paleta de comandos y la misma API local. Apagar uno elimina su página, elementos de menú, atajos, gestor y rutas de agente, mientras conserva sus configuraciones para más tarde.

Capturas de pantalla y anotacionesCaptura una región, ventana o pantalla completa a resolución nativa, luego añade trazos de lápiz, flechas, formas o resaltados antes de guardar
OCR en el dispositivo⌃⌥T copia palabras de una captura de pantalla, video en pausa, diálogo o PDF bloqueado sin subir un píxel
Regla de pantalla⌃⌥R lee espacios libres y distancias arrastradas tanto en puntos de macOS como en píxeles físicos
Recortes en vivoFija una parte cambiante de la pantalla por encima de todo. Se transmite en vivo y nunca se escribe en disco
PulseMantén el Mac despierto por temporizador, horario, app abierta, estado de carga o duración del proceso. Usa aserciones de energía reales y devuelve el sueño cuando la sesión termina
Herramientas de punteroEncuentra el cursor, añade miras configurables o anillos de clic, y salta el puntero a la siguiente pantalla
Guía de atajosLee cada atajo que la app frontal realmente expone a través de sus menús en lugar de depender de una hoja de referencia obsoleta
Zonas y espacios de trabajoDibuja lugares de ventanas, guarda apps y documentos como un escritorio, y devuelve todo a las pantallas correctas. Detalles de espacios de trabajo
Voz, CLI y agentesEjecuta las mismas herramientas por nombre, desde el habla, el comando plonk o veintidós herramientas MCP. El reconocimiento de comandos de voz comunes permanece en el dispositivo

Todos excepto la guía de atajos se pueden apagar, desde Herramientas en el menú desplegable de la barra de menús o la página Herramientas. Apagado significa desaparecido: fuera de la barra lateral, fuera del menú, sus atajos liberados, y sus herramientas rechazadas para agentes hasta que se vuelva a encender. Los mismos interruptores cubren zonas, espacios de trabajo y voz, así que la organización del escritorio puede retirarse mientras el resto de Plonk sigue funcionando.

Si vienes de Rectangle, Magnet, Loop o Raycast, los atajos de ventana familiares pueden venir contigo. Un botón importa los enlaces de Rectangle y los scripts rectangle:// existentes necesitan una sustitución. Viniendo de Rectangle tiene los detalles.

Versiones más largas: Zonas · Espacios de trabajo · Atajos de teclado · Todo lo demás · Viniendo de Rectangle

Para agentes

Un agente obtiene la misma caja de herramientas que la barra de menús: captura o lee la pantalla, mide una interfaz, controla una sesión de vigilia, inspecciona el escritorio, organízalo y guarda el resultado.

keep the Mac awake until this build finishes
read the error out of that dialog and tell me what it says
how tall is that toolbar, in points and in pixels
capture this window and highlight the warning
put the browser on the left, then save this desk as "review"

Veintidós herramientas cubren estado, captura, OCR, medición, mantener despierto, diseños, espacios de trabajo y zonas. Varios agentes pueden conectarse a la vez, cada uno registrándose a sí mismo, con un modo opcional que bloquea cambios al activo.

Configuración, si quieres el CLI plonk o un agente que lo maneje (Node 18+):

claude mcp add plonk -- npx -y plonk-mcp   # Claude Code
codex mcp add plonk -- npx -y plonk-mcp    # Codex CLI

En Claude Code también puede ser un plugin: el mismo servidor, fijado a la versión con la que se envió en lugar de a lo que npm sirve como la más reciente.

/plugin marketplace add ostapondo/plonk
/plugin install plonk@plonk

Para Claude Desktop no hay nada que escribir. Descarga plonk-<version>.mcpb de la última versión y ábrelo. El paquete lleva el servidor y sus dependencias, así que no se edita ningún archivo de configuración y no se obtiene nada al iniciar.

Cualquier cliente MCP funciona, sobre stdio o HTTP. Páginas de una sola hoja para Cursor, Zed y Cline.

El mismo paquete lleva un comando plonk, para las cosas que no son ni un agente ni una ventana de configuración:

plonk state                      # screens, zone sets, workspaces, windows
plonk launch review              # a saved workspace
plonk awake while npm run build  # awake for exactly as long as the build
plonk text | pbcopy              # OCR a region into the clipboard
plonk measure 0.5 0.5            # size of what is mid-screen, in points and pixels

Para agentes tiene cada herramienta, las reglas de múltiples agentes, el transporte HTTP y el resto del CLI.

Privacidad

Sin cuenta, sin nube, sin telemetría. La API se vincula a 127.0.0.1, rechaza cualquier cosa que lleve encabezados que un navegador no puede suprimir, y está protegida con un token que solo tú puedes leer. La única conexión saliente es la comprobación de actualizaciones, que no lleva identificador y se puede apagar.

Nada de eso es una afirmación que tengas que aceptar por fe. Las versiones se construyen y firman en los runners de GitHub y se envían con una atestación, así que el binario en tu Mac se vincula al commit del que proviene:

gh attestation verify Plonk-<version>.zip -R ostapondo/plonk

Compruébalo tú mismo es cada afirmación anterior con el comando que la prueba. SECURITY.md dice dónde termina cada promesa.

Bajo el capó

Claude habla con el servidor MCP sobre stdio, que llama a la API HTTP de loopback de la app

  • La app es la única fuente de verdad. El servidor MCP es un puente sin estado.
  • App/ es la app Swift de la barra de menús, mcp/ el servidor MCP de TypeScript.
  • La configuración es JSON simple en ~/Library/Application Support/Plonk/config.json.

Compilar

Siete comandos, y son lo que CI ejecuta en cada solicitud de extracción. Cada línea es un subshell, así que pega el bloque desde la raíz del repositorio.

(cd App && swift build)                    # the app compiles
./scripts/test.sh                          # the unit suite
./scripts/lint.sh                          # style rules, no dependencies
(cd mcp && npm ci && npm test)             # the MCP server
node scripts/check-zone-sets.mjs           # the layouts in zone-sets/
node scripts/check-strings.mjs             # every word the user reads
./scripts/check-security-claims.sh         # what SECURITY.md promises

Nada de eso necesita un certificado de firma. Geometría de zonas, decodificación de configuración, enrutamiento HTTP, herramientas MCP, análisis de voz, el CLI y cada documento aquí son accesibles desde ese bucle, y la mayoría de los cambios no necesitan nada más.

Producir un Plonk.app ejecutable sí necesita uno. Haz uno propio una vez con ./scripts/make-signing-cert.sh, luego ejecuta ./scripts/build.sh. macOS vincula Accesibilidad y Grabación de Pantalla a la firma de código, y una ad-hoc cambia en cada compilación, así que un certificado estable es lo que evita que las reconstrucciones restablezcan permisos.

Contribuir

Informes de errores, conjuntos de zonas, páginas de una sola hoja para clientes y código son todos bienvenidos. Ninguno de ellos necesita un certificado de firma.

  • El cambio útil más pequeño es un solo archivo JSON. zone-sets/ es una galería de diseños que vale la pena copiar: una división ultrawide, un monitor rotado, uno construido alrededor de una reunión recurrente. Dibújalo en la aplicación, lee los números de plonk state --json, abre un pull request. Esa carpeta tiene su propio trabajo de CI y responde en unos veinte segundos. Sin compilación, sin firma, sin Swift.
  • Los issues de good first issue están escritos para retomarse en frío. Cada uno dice dónde está el código y cómo saber que funcionó, y lleva un prompt que puedes entregar a un agente, ya que AGENTS.md ya explica el repositorio a uno.
  • needs-hardware es donde se etiqueta una solicitud de un escritorio que nadie aquí tiene, y responder una no requiere ni Swift ni un certificado. Las herramientas de escritorio se encuentran con hardware que el autor no puede ver, así que un informe desde tres monitores o un ultrawide vale más que un parche. Una lista vacía no es un hueco llenado: abre un issue con la disposición que tienes y lo que sucedió.

CONTRIBUTING.md tiene el resto, incluido cuánto tarda una revisión. Las preguntas e ideas a medio formar van a Discussions. Un problema de seguridad va a través de SECURITY.md, no a un issue público. Todos los que participan siguen el Código de Conducta.

Licencia

MIT © ostapondo