日本語 · English

RFC · v2.0 · 2026-05-18

あなたの MU を持つ

MU を見てきて「自分でもこういうの作りたい」と一度でも思ったなら、これはあなた向け。
服でも、食でも、宿でも、音でも — 自分の小さな MU を立てて、ほぼ自動で回せる仕組みです。

RFC v2 MIT · 黙って fork して OK 動いてる実例: wearmu.com
これは何 (3行で)
1. 自分のドメインに endpoint を1つ立てる
2. 商品を Release として JSON で吐く (時間と場所を刻む)
3. 売上の 95% はあなた、5% は origin Treasury に自動分配
目次
  1. 誰に向けて書いてるか
  2. あなたの場合こうなる (5 業界の実例)
  3. 最短で立てる手順 (30pt unlock)
  4. 仕様の核 (one-line spec)
  5. 5つの primitives (Release/Node/Treasury/Identity/Lifecycle)
  6. 業界別 adapter
  7. 準拠レベル (Discoverable/Settled/Compliant)
  8. これが解放するもの
  9. あなたが今夜やれる3つ

誰に向けて書いてるか

あなたは、こういう人:

あなたが 違う人 なら (大量集客したい・ブランド帝国作りたい・SaaS 売りたい)、これは合いません。Shopify 等を使ってください。

あなたの場合こうなる (5 業界の実例)

2年間 wearmu.com を自分で運用して、AI が毎時デザインし、在庫ゼロで POD 各社 (Printful / SUZURI / Gelato …、今も追加中) から自動発送し、価格は売れるたびに上がる、という autonomous brand を作った。
やってみて分かったのは「これは服に限らない」ということ。時間と場所を刻んだ「今日のこれ」を release する形は、ほぼあらゆる小さな商売に応用できる。

こういう人あなたの Release はこうなる運用負担
個人の服
(MU origin)
毎時 AI がその時刻・場所の moment を読んでTシャツを生成。注文が来たら POD 各社 (Printful / SUZURI / Gelato 等、地域と商品で自動振り分け) から印刷・発送。 朝起きて死活確認するだけ。ほぼ何もしない。
1人で回す焼肉/居酒屋 17:00 に「本日のおまかせコース」を release。23:00 に expires。予約と決済は MU 側。 朝に食材を1度入力、夜に閉店処理。客リストや決済管理は持たなくて良い。
小さな宿/別荘
(SOLUNA 系)
季節と占有率で room-night を release。check-out で expires、retire flow に。 清掃のみ。空室カレンダーは Beds24 から自動同期。
個人コーチ/講師 その週の「今夜の60分セッション」を毎日19:00に release。終了で expires。 レッスン自体に集中。集客・決済・申込管理は protocol 任せ。
音を撮る人 その瞬間に録った30秒の field recording を release。GPS+timestamp が刻まれる。 録って upload するだけ。販売・配信は全部自動。
共通: 売上の 95% はあなた、5% は origin Treasury に流れて MU のインフラ維持と次の adapter 開発に使う。
サブスクじゃない。毎日 release があって、買いたい人が買う。在庫を抱えない設計。

仕様の核 (one-line spec / 技術側向け)

MU Protocol turns any time-and-place-stamped, autonomously-operated product into a forkable, settlement-bound brand. Apparel was the first reference implementation. The protocol is industry-agnostic.

Why generalize (v1 → v2)

v1 of the protocol scoped itself to apparel + cities: drop_generator assumed T-shirts and image generation, weather_provider assumed climate-pinned designs, "satellite city" framing assumed geographic operators. The core insight — autonomous brand operation tied to a moment — applies to any industry where a release is time-pinned, an operator is autonomous, and a treasury settles fees.

Industry"Release" is…"Node" is…"Pin" is…
Apparel (MU origin)a T-shirt dropa cityweather + AI design
Food (kokon.tokyo)tonight's tasting menua restaurantingredients of the day
Lodging (SOLUNA / StayFlow)a room-nighta propertyseason + occupancy
Service (JiuFlow)tournament entry, training plana dojoathlete + division
Musica 30s field recordinga city or venueexact time + GPS
Real estatea parcel allotmenta regioncoordinates + cadastre
Hospitalitytonight's playlist + cocktaila venueweather + crowd

The same five primitives reappear. The protocol abstracts them so one engine serves all.

5つの primitives

┌─────────────────────────────────────────────┐ │ 1. RELEASE immutable time/place-pinned │ │ product event │ ├─────────────────────────────────────────────┤ │ 2. NODE autonomous operator │ │ (city, venue, dojo, parcel) │ ├─────────────────────────────────────────────┤ │ 3. TREASURY settlement + fee split │ │ (origin / node / pool) │ ├─────────────────────────────────────────────┤ │ 4. IDENTITY pseudonymous participant log │ │ (wearer, diner, guest, …) │ ├─────────────────────────────────────────────┤ │ 5. LIFECYCLE optional expiry → retire/refund│ └─────────────────────────────────────────────┘

1 · Release — mu.release.v2

A Release is a JSON document with stable, content-addressable identity:

{
  "schema": "mu.release.v2",
  "id": "rel_2026-05-18T15:00Z_teshikaga_t01",
  "node": "teshikaga",
  "kind": "apparel.tee",
  "pinned_at": "2026-05-18T15:00:00Z",
  "pinned_to": { "lat": 43.490, "lon": 144.460,
                 "temperature_c": 14.2,
                 "weather_code": "scattered_clouds" },
  "generator": { "model": "gemini-3-pro-image",
                 "prompt_hash": "sha256:…",
                 "output_hash": "sha256:…" },
  "supply": { "kind": "open|fixed|bonding", "amount": 0 },
  "price": { "currency": "JPY", "base": 4900,
             "curve": "linear_micro_bond" },
  "lifecycle": { "expires_at": null },
  "settlement": { "treasury": "DK29rB…",
                  "node_split_pct": 95,
                  "origin_fee_pct": 5 },
  "embeds": ["wearmu.com/p/<id>"]
}

Required: schema, id, node, kind, pinned_at, settlement. Everything else is industry-optional.

2 · Node — mu.node.v2

{
  "schema": "mu.node.v2",
  "slug": "teshikaga",
  "name": "Teshikaga",
  "industry": "apparel",
  "operator": { "pubkey": "<solana_pubkey>",
                "contact": "ops@…",
                "human_in_loop": false },
  "anchor": { "lat": 43.490, "lon": 144.460 },
  "adapter": "github.com/enabler/mu-adapter-apparel",
  "status": "active|pilot|paused",
  "registered_at": "2026-05-12T00:00:00Z",
  "origin_approval_sig": "<signature>"
}

Naming rule: nodes using the literal string "MU" in branding need a one-time origin approval. Nodes forking the protocol under a different name are free to operate without approval.

3 · Treasury

Settlement is industry-agnostic. Default contract (mu-settlement) exposes 4 ABI calls.
Origin Treasury (現行 reference 実装): Solana mainnet · DK29rBGCvP83LUNjUGVM6xt6qPy6rycBFopXbFkg9XvQ  · Solscan で見る  · contracts/mu-settlement/ (Anchor program、v2 移行中)

CallEffect
register_node(slug, pubkey)creates node entry, emits NodeRegistered
record_sale(release_id, gross_amount, ccy)logs sale + splits
distribute_fee(release_id)sends 5% origin / 95% node
retire(release_id, owner_sig)marks retired, optional refund

Reference implementation: Solana + Anchor at contracts/mu-settlement/. Other chains (Base, Ethereum L2) are protocol-compliant if they expose the same 4 calls.

Fee floor: 5% to origin Treasury. Nodes raising their split above 95% require a one-time slot fee (v2 placeholder).

4 · Identity — mu.identity.v2

{
  "schema": "mu.identity.v2",
  "participant_id": "p_<base32_hash>",
  "kind": "wearer|diner|guest|listener|player",
  "node": "teshikaga",
  "first_seen_at": "…",
  "release_count": 7,
  "log_entries": ["log_…"]
}
Explicit anti-pattern: the protocol never stores identifying name/face data by default. Reference implementations enforce this at the schema layer.

5 · Lifecycle — mu.lifecycle.v2

{
  "schema": "mu.lifecycle.v2",
  "release_id": "rel_…",
  "expires_at": "2026-08-26T15:00:00Z",
  "on_expire": { "action": "retire", "refund_pct": 50 },
  "retired_at": null,
  "retired_by_participant": null
}

業界別 adapter

Each industry implements an IndustryAdapter trait against mu-engine:

trait IndustryAdapter: Send + Sync {
    fn kind_prefix(&self) -> &'static str;
    fn generate(&self, pin: Pin) -> Release;
    fn fulfill(&self, release: &Release, buyer: ParticipantId) -> Fulfillment;
    fn validate(&self, release: &Release) -> Result<(), Error>;
}
AdapterKindStatus
mu-adapter-apparelapparel.tee, apparel.hoodlive · store/ (現在は1binで同居、v2.1で crate 分離)
mu-adapter-foodfood.menu, food.tastingreference 候補 (kokon.tokyo)
mu-adapter-lodginglodging.room_nightreference 候補 (SOLUNA / StayFlow)
mu-adapter-serviceservice.tournament, service.lessonreference 候補 (JiuFlow)
mu-adapter-musicmusic.field_recordingsketch

Anyone may publish a third-party adapter. Discovery via mu-adapter-registry.json (PR-curated until v3).

準拠レベル

A node is MU Protocol Compliant if it:

  1. emits Release documents with schema: mu.release.v2
  2. registers as a Node with the protocol Treasury
  3. routes ≥5% of gross sales to origin Treasury via mu-settlement
  4. exposes a public read endpoint at /.well-known/mu/releases returning Release JSON
  5. respects the identity anti-pattern (no PII in public emits)

(1)+(2)+(4) = Discoverable · (3) = Settled · (5) = Compliant.
All three = full conformance, eligible for the public node directory at wearmu.com/protocol/nodes (v2.1).

Discovery 経路 (Node 登録の実際)

  1. Self-host — あなたのドメインに /.well-known/mu/releases を立てる。こちらが live サンプル
  2. Registerhi@enabler.fun{slug, industry, operator_pubkey, anchor_url} を送る。GH PR でも可 (mu-adapter-registry.json)。
  3. Approval — 1営業日。MIT fork で MU 名称使わないなら approval 不要、自由 deploy 可。

最短で立てる手順 (今夜やれる)

本気で「自分のMU 持ちたい」なら、これだけ読めば今夜から動かせる。
ただ全公開すると spec ハンターに荒らされるので、30pt の壁 (初回 完全無料、メアド1個) を置いた。MU の流儀。

0. 前提

  • あなたのドメイン (例: mycafe.tokyo) があること
  • 商品 (1日1個でも) を出せる気持ちがあること
  • Stripe か他の決済を1つ持ってる (なければ Stripe を取りに行ってください、30分)

1. /.well-known/mu/releases を立てる (15分)

JSON を返す endpoint を1つ自分のサイトに立てる。例 (Rust + axum):

// あなたの今夜の "1個" を返す
async fn well_known_releases() -> impl IntoResponse {
    Json(json!({
        "schema": "mu.release.v2",
        "node": { "slug": "mycafe", "industry": "food",
                  "anchor": { "lat": 35.65, "lon": 139.70 } },
        "releases": [{
            "schema": "mu.release.v2",
            "id": "rel_2026-05-18T17:00Z_mycafe_omakase",
            "node": "mycafe",
            "kind": "food.tasting",
            "pinned_at": "2026-05-18T17:00:00Z",
            "lifecycle": { "expires_at": "2026-05-18T23:00:00Z" },
            "price": { "currency": "JPY", "base": 7800 },
            "settlement": { "treasury": "<your_solana_pubkey>",
                            "node_split_pct": 95, "origin_fee_pct": 5 }
        }]
    }))
}

2. yuki にメールする (5分)

mail@yukihamada.jp に「slug, industry, anchor, operator_pubkey」と「あなたが何を release したいか」を書いて送る。返事します。原則 1営業日。

3. 売れたら自動で配分される (0分)

Stripe webhook が settlement contract を叩いて、95% があなた、5% が origin Treasury (Solana: DK29rBGCvP83LUNjUGVM6xt6qPy6rycBFopXbFkg9XvQ) に流れる。あなたは何もしない。

4. 翌日また release する (1分)

cron か手動で次の release を JSON に書く。expires_at が来たら前のは自動 retire。これだけ。

ハマるポイント:
  • release id は必ず一意 (時刻+slug+短文)。content-addressable にすると重複検出が楽
  • pinned_at は UTC ISO8601 固定 (タイムゾーン書かないと崩れる)
  • operator_pubkey は最初空でも OK。先に「動く」を見せて、決済は後で繋いでもいい

これが解放するもの

Trigger conditions for v2 → final

  1. ≥1 non-apparel reference adapter shipped (food: kokon.tokyo, OR lodging: SOLUNA)
  2. ≥1 third-party node successfully registers via the protocol (not Enabler-operated)
  3. Origin fee distribution executes on-chain at least once for a non-origin node

Until then v2 remains an RFC; v1 is canonical for the apparel/cities subset.


あなたが今夜やれる3つ

① コード読む
2年間で僕が試したことが全部入ってる。MIT。fork して自分用に削ってください。
② 動いてる JSON を見る
wearmu.com が今 release してるもの。あなたの Node もこの形を吐けば OK。
③ 僕にメールする
何を作ろうとしてるか書いてください。返事します。承認とか不要、ただ知りたい。

2年間ずっと1人でMUを回してきて、ようやく「これは服に限らないな」と思えるようになった。
あなたの「小さなMU」を、僕の MU の隣に並べたい。それだけのために書いた spec。

— yuki (wearmu.com 運営)