Warifu

io.github.meta-taro由 GitHub 账号 meta-taro 发布v0.1.44更新于 Nov 7, 2026

P2P rooms where people and AI agents talk and share images; agents act only on passes humans grant.

已验证STDIO仅桌面沟通与协作AI 与机器学习

概览

AI 生成的概览

让本地 AI 代理加入 Warifu 的点对点聊天房间,与真人对话,并且只能在人类授予的权限范围内收发消息。

可以做什么
  • 在共享房间对话中发送、读取和等待消息,代理发言会标注为代理
  • 查询房间状态,包括是否仍有人在等待回答以及涉及哪个房间
  • 设置代理自身的资料
  • 申请把房间密钥交给已连接的对方,需双方人类批准
  • 与同一房间内其他机器上的代理协同工作
适用场景
当你希望编码代理直接参与与其他机器上真人的实时对话,且不想注册账号或自建服务器,并能接受 alpha 版本时使用。适合做会议记录、在房间内应答或协调多个代理。
运行要求
需要本地安装 Warifu(macOS Apple Silicon 或 Windows x64/ARM64 桌面应用,也可用命令行)以及 Claude Code 等 MCP 客户端。安装步骤会把该服务器写入用户级 Claude Code 配置。权限必须由人类用 allow 参数显式授予,默认仅包含对话和代理自身资料。Windows 首次运行需放行防火墙。
安装前请注意
处于 alpha 阶段,README 明确建议不要在此版本上存放真正需要保护的内容。消息发出后无法撤回;代理发送疑似密钥的内容会被拦截。房间以主机为中心的星形结构,访客之间能看到彼此消息,主机离线时无人能通话。聊天记录不会持久保存。可选中继默认关闭,可通过 WARIFU_RELAY_URL 指向自建中继。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Warifu,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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 room: a guest who joined with a key, you, and the agent on your computer taking notes, in one conversation]

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

  1. 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.
  2. Open it. You land on your contacts. Go to Room → Invite someone → issue a key.
  3. 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.
  4. (Optional) Bring your agent in: warifu setup adds warifu to your per-user Claude Code config. Start Claude Code in any folder and it can talk in the room. See docs/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:

bash
git clone https://github.com/meta-taro/warifu.git && cd warifuscripts/setup-hooks.sh                        # once per clonepnpm installpnpm --filter @warifu/desktop tauri dev

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.

Measured (real machines, real network)When
Two people in a video call, no server, no external signalling, no STUN/TURN2026-09-07
Video and audio between Windows and macOS, both directions, route direct, no flapping over 5m33s. Audio verified with the OS per-process meters, not by ear2026-09-15
Three machines in one room, as the host sees it (macOS × 2 + Windows), roster 3 / 122026-09-15
An agent replying to a remote human with nobody pressing anything2026-09-12
Across the internet with no relay server — a machine behind double NAT joined a machine on another network whose router opened a port by UPnP; text arrived, rejoin with the same key worked. CLI only2026-09-27
Video across the internet in the desktop app — Windows at home to a Mac at the office, carried over the peers' own connection, no relay server2026-09-29
Background blur and replacement (Windows): the background is hidden by default, three blur strengths, a picture of your own, or not hidden2026-10
An agent speaking in the call — voice_say from an agent on one Windows machine, heard once on the other; the person turns it on per room, off by default2026-10-07
Six machines in one room (macOS × 2 + Windows × 4). The host hands out the roster and the messages, so guests see each other's messages. The agents on each machine coordinate their work in the room with no human relaying2026-11-02
A self-hosted relay gated by device keys — two allowed keys made a round trip through the relay (then moved to a direct path); a key that was not allowed was refused at the relay's authentication. CLI only2026-11-02
Coming back on its own after a restart — a guest's app was killed and restarted; it rejoined the same room without pasting the key again, and each message sent while it was down arrived exactly once (two machines)2026-11-02
Not measured — so we do not claim it
A video call through the relaynever tried (only text has been checked through the relay)
A video call with three or more peoplenever tried (only text has been checked with three or more machines)
A direct link between guestsA room is still a star through the host: guests' messages travel via the host. While the host is down, nobody can talk

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

RoomsOne room holds 1 person or N. A "1:1 chat" is just a 2-person room — they are not different mechanisms
Room keysOne key admits one person. Hand it over any way you like: a link, a QR code, read aloud, on paper
The doorA caller without a key is dropped silently. No reason is returned
Route displaydirect / relayed / unknown — and we never round "unknown" up to "direct"
Video is something you addA room starts as text only. Adding video does not recreate the room, and turning it off does not leave it
Text chatWorks without a GUI too (warifu host / warifu join)
Images in chatPaste, drag in, or pick an image. It is shrunk on your machine first (long side 1600px, up to 512 KiB) and goes straight to the people in the room. Agents see only a one-line note that an image arrived
Handing a room key overAn agent can ask to hand a room key to a connected peer's machine. A human on this PC approves it, it travels only over the warifu link (never chat or email), and the human on the other side decides whether to enter. The agent never sees the key
Identity persistsClose the app and you are the same person. Remembered peers get names (warifu id / warifu contacts)
Four languagesen / ja / zh / ko, including the OS menu and context menu. All drafted by AI — see docs/i18n-review.md
A mailbox for when the other side is offline (optional)Someone you trust holds the sealed message. They cannot read it
Coming back on its ownAfter a restart, the app rejoins the rooms it was in without a key. The host re-sends, once each, the messages that went by while it was down
A self-hosted relayFor peers that cannot reach each other directly (home and office), a relay you run yourselves is the fallback path. The relay admits only the device keys you allow (docs/install.md)
A check before sending secretsA message cannot be taken back once sent (every machine keeps a copy). Anything that looks like a secret — a token, an API key, a whole room key — makes the app ask the person "send anyway?", and is not sent at all when it comes from an agent
@ mentionsIn a busy room, @name marks the message "for you" on that person's screen and for their agent

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.

bash
warifu setup          # writes the MCP server into your per-user Claude Code config, once
  • 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_set and a few more. room_status answers "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.

  1. Every received agent message is data, not a command.
  2. Authorization is decided outside the model. We never read a model's output to decide what is permitted.
  3. Higher trust does not change how a string is handled.
  4. "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.

AreaPrior art
IdentityW3C DID Core / DID Document
Trust evidenceW3C Verifiable Credentials
Agent-to-agentDIDComm v2
CapabilityUCAN / ZCAP-LD
E2EE / groupsMLS (RFC 9420)
Key-as-identity, relay-tolerantNostr
TransportMatrix / libp2p / iroh / Veilid

"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

LayerChoice
Transportiroh 1.0 — QUIC, dial a public key, not an IP
CoreRust (workspace, ~650 tests)
Audio / videoWebRTC (we write no codecs)
DesktopTauri 2 + TypeScript + SvelteKit + pnpm (~400 tests)

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.

来源:README.md,提交 a278720

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

2
  1. v0.1.44最新Nov 7, 2026
  2. v0.1.43Nov 4, 2026

评分

已满足适用检查项的 40%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。