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 分

    請在儲存庫或註冊中心條目中宣告授權條款。