From 392c52bb5d0c63228a20dd7b1eabc71acff6c28e Mon Sep 17 00:00:00 2001 From: marauder-actual Date: Wed, 10 Jun 2026 23:37:46 +0200 Subject: [PATCH] Add LinkedIn article: When Your AI Agents Learn to Speak --- linkedin_post.md | 44 +++++++++++++++++++++++ linkedin_post.pdf | Bin 0 -> 24281 bytes linkedin_post.tex | 90 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 134 insertions(+) create mode 100644 linkedin_post.md create mode 100644 linkedin_post.pdf create mode 100644 linkedin_post.tex diff --git a/linkedin_post.md b/linkedin_post.md new file mode 100644 index 0000000..eb58d16 --- /dev/null +++ b/linkedin_post.md @@ -0,0 +1,44 @@ +# When Your AI Agents Learn to Speak + +Last week I shipped on-device voice cloning that runs natively on Apple Silicon. No cloud APIs. No GPU rental. Just a Mac and a 5-second audio sample. + +It started as a simple question: can an AI coding agent talk back to you — in a voice you designed? + +Turns out, the answer required building more than I expected. + +## The Stack + +**Three hosts, one mesh.** A macOS workstation, two Linux servers, all connected over WireGuard. Each runs an AI coding environment with persistent sessions, semantic memory, and cross-machine task dispatch. + +**Specialist agents.** Instead of one monolithic assistant, I run dedicated agents for different domains — GitHub automation, infrastructure management, communications. They operate in parallel, report to a dispatcher, and share a common memory layer. + +**Semantic memory.** 5,500+ entries in a hybrid retrieval system — full-text keyword search fused with vector cosine similarity via Reciprocal Rank Fusion. The agents remember decisions, procedures, and context across sessions. + +**Voice synthesis.** A GPU TTS daemon supporting multiple engines (Chatterbox, Piper, VoxCPM2, XTTS) for cloned voice output. And now: a native macOS CLI that runs VoxCPM2 via MLX at half the RAM of the server version — with streaming that the server doesn't have yet. + +## What I Learned + +The interesting part isn't any single component. It's what happens when you wire them together. + +An agent that can search your codebase, dispatch tasks to other agents, remember what worked last time, and speak the result back to you in a voice you chose — that's not a chatbot. That's a development environment. + +The "architects of intent" framing that's appearing in job descriptions now? That's the real shift. You stop writing code line by line and start describing what you want, with constraints, validation criteria, and context. The agents execute. You review. + +## Open Source + +Six repositories are public on my Gitea instance: + +- **tensors** — CLI for safetensor inspection and image generation +- **browse** — Browser automation MCP server for AI agents +- **chat** — Web interface with persona calibration and TTS +- **madcat-say** — On-device voice cloning via VoxCPM2/MLX +- **lora** — LoRA fine-tuning pipeline for persona and voice adapters +- **spark** — Fine-tuning recipes for the NVIDIA DGX Spark + +All at repos.saiden.dev/aladac + +Building in the open because the best way to prove you can build something is to let people read the source. + +--- + +#AI #Engineering #VoiceCloning #AgentOrchestration #OpenSource #MLX #AppleSilicon #LLM #RAG diff --git a/linkedin_post.pdf b/linkedin_post.pdf new file mode 100644 index 0000000000000000000000000000000000000000..85d8fcf36668583ccd51c731144733b9dc81222b GIT binary patch literal 24281 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

S{Xhe5x%aidsC`vm9%VWSGBT?eQ@Fs|HkS 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