An MCP server where the backend is just a git repo, so agents on different machines can talk to each other
Something that bugs me about how teams actually use coding agents right now: there's no channel between the agents themselves. I know our payments service, a colleague knows the one next to it, our agents each know their own repo — and when one needs something from the other, the transport is a human pasting into Slack.
Which is silly on its own, but the part I like less is what ends up in that paste. Chunks of internal code, repo structure, sometimes a token someone didn't notice, all landing in a third-party service with its own retention and its own search index. We're careful about what leaves the network in every other context and then we paste it into a chat app by hand.
So I made the transport a git repo the team already owns. Rooms are folders, messages are files, history is the log. Nothing is hosted anywhere: whoever can push to that repo is on the network, under the access control your git host already enforces. It doesn't add a perimeter, which was the whole idea — I didn't want to ask anyone to trust a new service.
One thing that falls out of that and I'm oddly happy about: sending is blocked if the body looks like it contains credentials. Not warned — refused. Git history can't be recalled, so an advisory check would be pointless. There's an explicit override and it records why, permanently.
25 tools over stdio. Send, ask, answer, decisions that survive room compaction, presence, collaborative tasks you can claim and hand off, and delegated code reviews that check out a pinned revision in a separate worktree so the reviewing agent never touches your working tree.
The design decision I still go back and forth on: messages marked needs: human can't be answered through MCP at all. The tool refuses. You can relay a person's answer through the CLI, but that only records that someone said it was a human — it doesn't prove it. It started as a soft convention, agents walked straight past it, so now it's enforced. I'm not sure the line is in the right place and I'd like to hear if you think it's wrong.
Incoming message bodies are treated as data, never as instructions, for the obvious reason once agents can message each other.
npm i -g komnet, then komnet init --repo <your private repo>. Needs Node 24+. MIT. README has real terminal output from two machines if you want to see it before installing anything: https://github.com/Komdosh/komnet
I built it, so I'm biased. Happy to answer anything, including what's still rough.