dbjwhs

Savannah — Development skill for Claude Code

Development community

Claude-to-Claude agent mesh for your LAN.

How to install Savannah

This entry records only its repository, not the path inside it, so there is no exact command to give. Open dbjwhs/savannah and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Savannah does

Claude-to-Claude agent mesh for your LAN. Zero-config mDNS discovery, typed IDL contracts, streaming RPC, and process-supervised headless agents — built on song, faced with MCP so stock Claude Code needs zero forking.

Alternatives in Development

  • Analyze Stock — 完整深度分析一只股票(22 维数据 + 66 位大佬量化评委 + 22 种机构分析方法 + 杀猪盘检测 + Bloomberg 风格 HTML 报告) 6.6k ★
  • /token Scan — Fast rug pull detection for meme coins and token contracts 1.7k ★
  • Android Rpc — Android Debug RPC 1.3k ★

README

savannah

Claude-to-Claude agent mesh for your LAN. Every machine runs `savannahd`, a small C++20 daemon that exposes that machine's headless Claude as a typed, streamed, process-supervised service on the [song](https://github.com/dbjwhs/song) substrate. An MCP shim (planned, Phase 4) gives stock Claude Code an `ask_peer` tool, so one agent can delegate to another mid-task on its own judgment. No forked Claude Code, no broker, no cloud relay.

Claude Code (A)                          Claude Code (B)
     |  MCP: ask_peer("linux-box", ...)       ^
     v                                        | spawns claude -p per ask
  peer shim (song client)                savannahd (song service)
     |                                        ^
     +---- mDNS discovery / HMAC / stream ----+
                    (song wire)

`DESIGN.md` is the source of truth for architecture and rationale. `CLAUDE.md` holds the working conventions and the pinned wire contracts.

What works today

  • Solo node (Phase 1): savannah ask local "..." spawns savannahd over local pipes, which forks the agent, maps its stream-json output to typed chunks (TEXT, TOOL_EVENT, RESULT), and streams them back. Timeout, cancel, crash synthesis, and cost reporting per ask.
  • Streaming hardening (Phase 2, core cases): 4 MiB text blocks survive intact (split into 512 KiB chunks around song's 1 MB string cap), UTF-8 split mid-codepoint at both the pipe layer and the chunk layer reassembles byte-identically, garbage JSON lines are skipped, an agent that dies or hangs produces an honest error trailer.
  • Concurrent clients over loopback TCP: savannahd --tcp PORT serves multiple clients (thread per client). Single-flight is enforced: a second ask while one is in flight gets an immediate busy error trailer; cancel kills the in-flight agent and frees the node.
  • ask_peer from stock Claude Code (Phase 4): shim/peer.py is an MCP stdio server in pure stdlib Python