日本語 · English
RFC · v2.0 · 2026-05-18
MU を見てきて「自分でもこういうの作りたい」と一度でも思ったなら、これはあなた向け。
服でも、食でも、宿でも、音でも — 自分の小さな MU を立てて、ほぼ自動で回せる仕組みです。
あなたは、こういう人:
あなたが 違う人 なら (大量集客したい・ブランド帝国作りたい・SaaS 売りたい)、これは合いません。Shopify 等を使ってください。
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 するだけ。販売・配信は全部自動。 |
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 drop | a city | weather + AI design |
| Food (kokon.tokyo) | tonight's tasting menu | a restaurant | ingredients of the day |
| Lodging (SOLUNA / StayFlow) | a room-night | a property | season + occupancy |
| Service (JiuFlow) | tournament entry, training plan | a dojo | athlete + division |
| Music | a 30s field recording | a city or venue | exact time + GPS |
| Real estate | a parcel allotment | a region | coordinates + cadastre |
| Hospitality | tonight's playlist + cocktail | a venue | weather + crowd |
The same five primitives reappear. The protocol abstracts them so one engine serves all.
mu.release.v2A 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.
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.
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 移行中)
| Call | Effect |
|---|---|
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).
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_…"]
}
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
}
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>;
}
| Adapter | Kind | Status |
|---|---|---|
mu-adapter-apparel | apparel.tee, apparel.hood | live · store/ (現在は1binで同居、v2.1で crate 分離) |
mu-adapter-food | food.menu, food.tasting | reference 候補 (kokon.tokyo) |
mu-adapter-lodging | lodging.room_night | reference 候補 (SOLUNA / StayFlow) |
mu-adapter-service | service.tournament, service.lesson | reference 候補 (JiuFlow) |
mu-adapter-music | music.field_recording | sketch |
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:
schema: mu.release.v2mu-settlement/.well-known/mu/releases returning Release JSON(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).
/.well-known/mu/releases を立てる。こちらが live サンプル。{slug, industry, operator_pubkey, anchor_url} を送る。GH PR でも可 (mu-adapter-registry.json)。本気で「自分のMU 持ちたい」なら、これだけ読めば今夜から動かせる。
ただ全公開すると spec ハンターに荒らされるので、30pt の壁 (初回 完全無料、メアド1個) を置いた。MU の流儀。
mycafe.tokyo) があること/.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 }
}]
}))
}
mail@yukihamada.jp に「slug, industry, anchor, operator_pubkey」と「あなたが何を release したいか」を書いて送る。返事します。原則 1営業日。
Stripe webhook が settlement contract を叩いて、95% があなた、5% が origin Treasury (Solana: DK29rBGCvP83LUNjUGVM6xt6qPy6rycBFopXbFkg9XvQ) に流れる。あなたは何もしない。
cron か手動で次の release を JSON に書く。expires_at が来たら前のは自動 retire。これだけ。
pinned_at は UTC ISO8601 固定 (タイムゾーン書かないと崩れる)operator_pubkey は最初空でも OK。先に「動く」を見せて、決済は後で繋いでもいいmu-adapter-<industry> and operate a node with their own brand and treasury, paying only the 5% origin fee.pinned_at/pinned_to + output_hash fields give every product a permanent, content-addressable history.Until then v2 remains an RFC; v1 is canonical for the apparel/cities subset.
2年間ずっと1人でMUを回してきて、ようやく「これは服に限らないな」と思えるようになった。
あなたの「小さなMU」を、僕の MU の隣に並べたい。それだけのために書いた spec。
— yuki (wearmu.com 運営)