Your AI, everywhere you already message
You have a capable assistant with real skills and memory. But you must go to it, it forgets between sessions, and it only reacts when you open it.
LetsGo Gateway inverts all three — starting with where the agent lives.
The gateway registers 18 adapters — 5 built-in plus 13 entry-point plugins. Of those, 16 are real messaging platforms; canvas and webchat are web surfaces.
"Everywhere you already are" is countable, not aspirational.
Michael J. Jabbour authored all 65 commits (across two email identities). The active build was a 16-day sprint, with one later conformance fix.
A real project — now, how does one agent reach every channel?
The router keys a session per sender+channel and spawns the same Amplifier bundle each time — so it's literally the same agent, same skills, wherever you reach it.
Same agent means it can also carry the same memory.
Memories persist in a shared SQLite + FTS5 store. On each prompt:submit, a <memory-context> block is injected within a 2000-token budget.
Same agent, durable memory — now let it act on its own.
A CronScheduler fires the HeartbeatEngine on a configurable schedule. Heartbeat sessions are full Amplifier sessions — all hooks and tools load — and responses route to channels.
An everywhere agent that also acts first — is that safe?
"The AI can only reach someone who first reached out and was approved" is enforced in code in daemon.py send_to_channel() — with internal heartbeat agents the only exception — behind three independent defense layers.
That rule is what makes omnipresent + self-acting safe, not terrifying.
Meet people where they already are, remember across sessions, and let the AI act first — but only ever toward people who reached you first and were approved.
One agent, every channel: reach inverted, safety kept.
Feature status: Active
michaeljabbour/amplifier-bundle-letsgo (verified at /tmp/letsgo-src; remote matches required repo). Every metric re-derived from command output.cat gateway/letsgo_gateway/channels/registry.py + ls -d channels/*/ | wc -l → 5 built-in + 13 plugin = 18 adapters; ls -d channels/*/ | grep -vE 'canvas|webchat' | wc -l → 16 messaging.grep -n 'def send' gateway/letsgo_gateway/daemon.py + sed -n '414,449p' daemon.py → enforced in send_to_channel().sed -n '/### Defense in Depth/,/Each layer is independent/p' README.md → 3 independent layers.sed -n '13,55p' gateway/letsgo_gateway/router.py → route_key {channel}:{sender_id}, one bundle per session.grep -n 'memory-context|inject|max_injection_tokens|prompt:submit' modules/hooks-memory-inject/.../__init__.py → 2000-token injection.cat context/heartbeat/heartbeat-awareness.md → CronScheduler fires HeartbeatEngine, full Amplifier sessions.git rev-list --count HEAD (65) · git shortlog -sne HEAD (1 author) · git log --format='%ad' --date=short | sort | uniq -c (16-day window).ls -d modules/hooks-*/ | wc -l (9) + ls -d modules/tool-*/ | wc -l (6) = 15.Gaps / caveats: The Amplifier bridge currently shells out to the amplifier CLI (subprocess, not a native in-process API). "Same memory" is accurate at the persistence layer; a single live conversation across different channels is not claimed. README prose ("13 platforms", "14 modules", "22 skills") lags the filesystem, which is treated as ground truth. Data as of this repo state; one Jul 9 2026 fix falls outside the 16-day active window.
Primary contributor: Michael J. Jabbour (all 65 commits, two email identities, same person).