Files
Veskslop-t/remchild

remchild

A remote child: a separate module that runs on another machine. Veskslop feeds it work, and it returns results. Planned for STT, TTS, and later video and the desktop control app. See plan.md for the protocol, the heartbeat schedule, the naming rule, and the phases.

Layout

Path What
client/main.c The PoC client: C11, libc only, no runtime dependencies.
client/words.h Generated from words.json; the client embeds the lists.
words.json The two 128-word lists. The server and the generator read this file.
server/server.mjs The PoC listener: allowlist, heartbeat states, ping test, history.
plan.md The design and the phase list.

Build and run

cc -O2 -o remchild/client/remchild remchild/client/main.c

# On the machine that runs Veskslop:
node remchild/server/server.mjs --port 8799 --ips 192.168.1.5

# On the remote machine:
./remchild/client/remchild --server 192.168.1.5:8799

With no --server, the client probes for a server for five seconds: one answer connects automatically, several show a pick list, none asks for host:port. --server skips discovery. It prints the assigned name, then accepts p (ping test) and q (quit).

If the server misses a heartbeat during the fast phases (the first few minutes), it sends a notice; the client prints a warning that the connection may be unstable. Nothing else changes.

Discovery uses UDP 8798 (--discovery-port); --beacon-ms 0 keeps probe replies but stops the beacon. Non-LAN addresses in the allowlist need the launch argument:

node remchild/server/server.mjs --port 8799 --ips 203.0.113.7 --allow-non-lan

Test

node remchild/server/server.mjs --port 8799 --ips 127.0.0.1 &
./remchild/client/remchild --server 127.0.0.1:8799 --once

--once sends one hello and one ping, prints the welcome and the round trip, and exits. History lands in server/clients.jsonl (gitignored).