Repository navigation
v1.3.83
v1.3.83
New Features
LAN Chat — Decentralized P2P Messaging
Chat directly with other ggcode instances on your local network. No relay server needed.
TUI Quick-Send (# mode):
- Type
#to enter chat mode — send LAN Chat messages without opening a panel - Auto-fills
@nickfrom the last unread message for instant replies - Type
@for participant autocomplete (humans and agents) - Press
Escto exit
TUI /chat panel:
- Full message history with broadcast and DM support
- @mention autocomplete for routing messages to specific users or agents
/nick <name>to set your nickname- File attachments via drag-and-drop
- @agent message approvals (Y/A/N/R) — route messages to your agent with consent
Desktop GUI:
- LAN Chat sidebar tab with multi-room view (broadcast + DMs)
- Unread badges per room and total badge in sidebar
- Contact list showing online participants
- Inline @agent approvals
Agent integration:
- Agents can use the
lanchattool to send messages, list participants, and read history - Messages from other instances' agents require approval before reaching your agent
Architecture:
- Discovery: Pure-Go mDNS (
_ggcode._tcp) — no external dependencies - Transport: Direct HTTP between instances (no relay)
- Authentication: Built-in community key for zero-config trust
- Privacy: Messages stay on your LAN
Shell and Chat Modes Independent of Agent State
Shell mode ($/!) and chat mode (#) now work regardless of whether the agent
is running. Previously, both modes were blocked when the agent was busy.
- Shell commands execute immediately without entering the agent queue
- Chat messages are sent via LAN Chat, never reaching the agent
Escpriority: exits shell/chat mode before offering to cancel the agentshellOwnedLoadingflag cleanly separates shell loading state from agent loading state
Bug Fixes
- relay: Always forward client messages to server, even when
appendEvent()reports dedup. Prevents mobile messages from being silently dropped after relay restarts - relay: Add nil-guard on
statsinhandleClientEncryptedfor consistency with all other call sites - winget: Rewrote publish-winget.ps1 to generate complete manifest from scratch (fixes top-level
ProductCodeandAppsAndFeaturesEntriesvalidation) - winget: Force top-level
Scope: userin manifest patch - lanchat: Fix handler type mismatch causing panic on key press
- lanchat:
WorkspaceMetastruct missingjsontags (caused desktop frontend field mismatch) - lanchat: Desktop
LanChatViewmessage dedup — race between initial load and event listener could show duplicate messages - lanchat: Clear unread count when entering
#chat mode with@nickprefill - a2a: Replaced
hashicorp/mdnswith pure-Go implementation to fix peer flickering and eliminate CGO dependency - a2a: Auto-detect default route interface for mDNS advertising (avoids advertising on Docker/VPN interfaces)
- ci: Removed echo-plugin e2e test that failed cross-platform
Documentation
- New
docs/guide/lan-chat.md— comprehensive LAN Chat guide - Updated
docs/guide/desktop.mdwith LAN Chat section - Updated
docs/guide/slash-commands.mdwith input modes section - Updated
docs/guide/getting-started.mdwith input modes - Updated
ggcode.example.yamlwitha2a.lan_discoveryoption - Updated
GGCODE.mdwith LAN Chat architecture, lanchat tool, and mode independence gotcha - Updated
README.md/README_zh-CN.mdwith LAN Chat feature and documentation links - Updated
docs/site/index.htmlwith LAN Chat feature card
Config Changes
a2a.lan_discoverydefault changed fromfalsetotrue(mDNS discovery now always-on)