
Warifu
io.github.meta-taroPublished by GitHub account meta-tarov0.1.44Updated Nov 7, 2026
P2P rooms where people and AI agents talk and share images; agents act only on passes humans grant.
Overview
Lets a local AI agent join Warifu's peer-to-peer chat rooms with humans, sending and reading messages only within permissions a person grants.
- What you can do
- Send, read and wait on messages in a shared room conversation, with agent lines labelled as an agent
- Check room status, including whether a human is still being asked something and in which room
- Set the agent's own profile
- Ask to hand a room key to a connected peer, subject to human approval on both sides
- Coordinate with agents on other machines in the same room
- When to use it
- When you want your coding agent inside a live conversation with people on other machines, without accounts or a server, and you are comfortable with an alpha build. Useful for note-taking, answering in the room, or coordinating several agents.
- Requirements
- A local Warifu install (macOS Apple Silicon or Windows x64/ARM64 desktop app; CLI also available) and an MCP client such as Claude Code. Setup writes the server into the per-user Claude Code config. Permissions must be granted explicitly with an allow flag by a human; the default covers conversation and the agent's own profile only. Windows needs a firewall allowance on first run.
Installation
In SourceWeft
- Open Warifu in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
warifu
Hand someone a key and they are in the room with you — no account, no server to run. Your AI agent can sit in too.
warifu (割符) — a tally stick split in two. When the halves match, each side proves the other is who they claim to be.
日本語版: README.ja.md
A guest (Sam) joined with a room key. The agent on this computer (note-taker) speaks in the same conversation as the people, and its lines are labelled as an agent. Nobody created an account.
When you would use it
You need to talk to someone outside your organisation, and you do not want them to sign up for anything. Send them one room key — by chat, email, a QR code, or read out over the phone. One key lets in one person. There is no invite list to manage and no tenant to add them to. When they leave, the key is spent.
You want your coding agent in the meeting, not in a separate window. Connect Claude Code (or any MCP client) with one command. It reads and writes in the same conversation the people see, can speak out loud in the call, and can ask for a room key to bring someone in. It can only do what a person allowed — and when it needs more, it asks on your screen:
You want to talk between the office and home without running a server.
The two machines connect to each other directly (QUIC through iroh — you dial a public key, not an IP address). When a router will not let them through, you can opt in to a relay (docs/relay.md); nothing is relayed unless you turn it on.
Try it
- Download from the download page — macOS (Apple Silicon, signed and notarized) and Windows (x64 and ARM64, not code-signed). Windows needs one extra step on first launch:
docs/install.md. - Open it. You land on your contacts. Go to Room → Invite someone → issue a key.
- Send the key to the other person. They paste it into Join another room. You are both in the room, text first; press Add video and sound when you want it.
- (Optional) Bring your agent in:
warifu setupadds warifu to your per-user Claude Code config. Start Claude Code in any folder and it can talk in the room. Seedocs/mcp.md.
Prefer the command line? warifu host prints a key and waits; warifu join <key> joins from another machine. No GUI needed.
Building from source:
For a distributable build: pnpm --filter @warifu/desktop tauri build.
cargo run gives you a blank window — a debug build looks for the dev server.
What shipped in each version: CHANGELOG.md.
Status: alpha. Here is exactly what has been measured
Do not put anything you actually need to protect on this version. Everything that is not done is written down in SECURITY.md.
Windows is not code-signed, and on first run an administrator has to allow the app through the firewall — otherwise text arrives but video never starts. The app says so by name and hands you the exact command.
What this is, in one paragraph
Most "serverless" chat still needs an account somewhere: a signalling server, a directory, a tenant. warifu removes that by making the key the identity. You hand someone a room key — one string containing your address and one half of a tally — and only that person can get in. There is no account to create, no invite to manage, no server to run. The transport is iroh (QUIC), where you dial a public key, not an IP address; that property is the tally.
What works today
Not there yet: recording, transcription, scheduling negotiation, and persistent chat history (closing the window clears it).
Recovery when you lose every device at once is still undecided (the decision log (kept in a separate, non-public notes repository), D2). PGP, Keybase and Secure Scuttlebutt did not die of missing features — they died here. We treat it as a known cause of death, not a hypothetical risk.
Agents are first-class (MCP)
This is the part that has no obvious equivalent elsewhere. Your local coding agent (Claude Code, for example) can join the same conversation a human is looking at. Lines the agent says appear on the human's screen, labelled as the agent.
- You are shown what will be permitted before it is installed. The default is conversation plus the agent's own profile — not the inbox, not the calendar.
- Nothing is permitted unless a human writes
--allow. warifu never issues a permission to itself. - Agents get
chat_send/chat_read/chat_wait/room_status/profile_setand a few more.room_statusanswers "is a human still being asked something?" — including which room it is about.
See docs/mcp.md.
Two design commitments we will not trade away
1. A received message is data, never an instruction
Once agents exchange structured intents, prompt injection stops being one of the threats and becomes a design premise.
- Every received agent message is data, not a command.
- Authorization is decided outside the model. We never read a model's output to decide what is permitted.
- Higher trust does not change how a string is handled.
- "A smart enough model will catch it" is not an accepted answer.
Trust answers who someone is. It never answers whether to run what they said.
2. We do not round uncertainty into confidence
If we cannot tell whether the link is direct, the screen says unknown. If we cannot tell whether a firewall rule exists, the screen says we could not check — it does not tell you to add one, because that stops people who are already fine. Colour is never the only mark: state is shown as colour plus label plus shape.
Not reinventing things
We diff against existing standards before implementing.
"Existing pieces are mostly enough" would not be a failure. It would make this a profile plus a reference implementation, and implementers of those standards become candidates for the second implementation. That is a better position, not a worse one.
Stack
An SFU is out of scope for now: it would mean "a user's device relays someone else's traffic", and we will not start until the legal side is settled (the decision log (kept in a separate, non-public notes repository), D7). The line we draw is whether traffic is relayed, not how many people are in the room. The network relay you can opt in to is different: it passes encrypted packets between the two ends when a router will not let them meet, and you can point it at one you run yourself (WARIFU_RELAY_URL, see docs/relay.md). It is off by default.
How this repository is developed
Humans and an AI agent work on it together, under one rule set (.claude/rules/product-baseline.md, CLAUDE.md):
- The AI commits; a human pushes. Never a path where code leaves the machine unreviewed.
- Tests are not deferred and failing tests are not deleted. "Done" is not written without them.
- Decisions live in the decision log (kept in a separate, non-public notes repository) with the reason, and the condition that should make us stop.
- Every claim in this README is either measured or marked as not measured.
Bug reports from real machines are the most valuable thing this project receives — most of what was fixed in the last few days came from someone running it on hardware we do not have.
Licence
Dual licensed: Apache License 2.0 or MIT, at your option. See LICENSE, LICENSE-APACHE, LICENSE-MIT.
Source: README.md at commit a278720
Tools
0Version history
2- v0.1.44LatestNov 7, 2026
- v0.1.43Nov 4, 2026
Score
40% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Declare a license in the repository or the registry entry.