AMP v0.2.0 - AppMesh Protocol

AppMesh

Desktop automation through application mesh networking — the modern successor to ARexx. Every app becomes a scriptable service.

The ARexx Principle

On the Amiga, every serious app had an ARexx port. AppMesh brings that to modern Linux.

Amiga / ARexxAMP
ADDRESS 'APP' 'CMD'appmesh port clipboard get
ARexx port nameDNS address: clipboard.appmesh.cachyos.amp
rx script.rexxamp run script.amp.php
REXX (universal glue)PHP 8.5+ (universal glue)
Single machine IPCMulti-node mesh (WireGuard + DNS)

What Exists Today

Working code, not a roadmap.

5
Rust Ports
56
MCP Tools
10
Plugins
2
Plasmoids
3
Mesh Nodes

Rust Core

  • libappmesh_core.so — 8 C ABI symbols
  • AppMeshPort trait (ARexx-style)
  • Ports: input, clipboard, notify, screenshot, windows

PHP MCP Server

  • 10 plugins, 56 tools for Claude Code
  • D-Bus, OSC, TTS, CDP, MIDI, WebSocket, KConfig
  • AppMeshFFI — PHP FFI bridge (~0.05ms)

QML + Plasmoids

  • AppMeshBridge singleton (dlopen)
  • Mesh Send + Mesh Log widgets
  • Inter-plasmoid pub/sub via signals

CLI + Web

  • appmesh type|key|port|ports
  • HTMX + SSE web UI at localhost:8420
  • Real-time D-Bus signal streaming

DNS-Native Addressing

[port].[app].[node].amp — maps directly to DNS hierarchy.

clipboard.appmesh.cachyos.amp → clipboard port, local node
dns.netserva.mko.amp → DNS service on staging
compose.laramail.mmc.amp → compose on production
inbox.stalwart.mko.amp → mail on staging

The Stack

PHP is to AMP what REXX was to the Amiga.

// screenshot-and-notify.amp.php
$mesh = AppMeshFFI::instance();

$shot = $mesh->portExecute('screenshot', 'take');
$path = $shot['ok']['path'];

$mesh->portExecute('clipboard', 'set', ['text' => $path]);
$mesh->portExecute('notify', 'send', [
    'title' => 'Screenshot saved',
    'body'  => $path,
]);

Transport Layers

Callers address ports, not transports.

ChannelPathLatency
PHP FFIPHP → libappmesh_core.so → KDE~0.05ms
D-Bussubprocess → dbus-daemon → apps~1ms
Unix socketPHP ↔ Rust daemon (streaming)~0.1ms est.
WebSocket/WGBrowser → Reverb → PHP → Rust~2ms est.