[{"data":1,"prerenderedAt":1978},["ShallowReactive",2],{"projects-archive":3},[4,136,336,498,596,750,827,876,967,1054,1143,1249,1296,1383,1451,1537,1630,1715],{"id":5,"title":6,"body":7,"description":115,"extension":116,"featured":117,"github":118,"live":118,"meta":119,"metric_source":118,"navigation":117,"order":120,"path":121,"pr_links":122,"proof_url":100,"seo":123,"status":124,"statusColor":125,"stem":126,"subtitle":127,"tech":128,"tier":133,"verification_tier":134,"__hash__":135},"projects\u002Fprojects\u002Fs402.md","s402",{"type":8,"value":9,"toc":108},"minimark",[10,13,28,48,53,60,64,84,88],[11,12,6],"h1",{"id":6},[14,15,16],"blockquote",{},[17,18,19,20,27],"p",{},"I retired s402 in September 2026. It was my HTTP 402 payment protocol for agents on Sui, and x402 has since become the industry standard. For new work, use ",[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fx402.org",[25],"nofollow","x402",".",[17,29,30,31,35,36,39,40,43,44,47],{},"The web already has a status code for \"you must pay to proceed\" — ",[32,33,34],"strong",{},"HTTP 402 Payment Required"," — it was just never wired up. ",[37,38,6],"code",{}," wires it up for the agent era: a chain-agnostic protocol for ",[32,41,42],{},"agent-to-service payments",", with a spending ",[32,45,46],{},"mandate"," delegated by a human and enforced by the chain, not by the agent's good behaviour.",[49,50,52],"h2",{"id":51},"what-it-is","What it is",[17,54,55,56,59],{},"A wire format and SDK for the 402 handshake: a service replies ",[37,57,58],{},"402"," with payment terms; the agent presents a payment authorized by its mandate; the payment settles atomically and the agent gets a receipt. The protocol is chain-agnostic by design; the reference enforcement is Sui-native (owned-object mandates + PTB atomicity).",[49,61,63],{"id":62},"why-it-matters","Why it matters",[17,65,66,67,70,71,75,76,79,80,83],{},"This is the ",[32,68,69],{},"SAY\u002FDO boundary"," for money. An agent can ",[72,73,74],"em",{},"propose"," any payment, but the mandate decides what actually ",[72,77,78],{},"executes"," — per-transaction caps, lifetime caps, expiry, instant revocation. The payment and the authorization ride in ",[32,81,82],{},"one atomic transaction",", so there's no window where the check passed but the spend escaped.",[49,85,87],{"id":86},"proof","Proof",[89,90,91,105],"ul",{},[92,93,94,97,98,104],"li",{},[32,95,96],{},"npm:"," ",[21,99,102],{"href":100,"rel":101},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fs402",[25],[37,103,6],{}," — v0.9.0, deprecated since September 2026.",[92,106,107],{},"Reference implementation + spec: ",{"title":109,"searchDepth":110,"depth":110,"links":111},"",2,[112,113,114],{"id":51,"depth":110,"text":52},{"id":62,"depth":110,"text":63},{"id":86,"depth":110,"text":87},"An open protocol that lets AI agents pay for services over HTTP 402 — with spending authority delegated by a human and enforced on-chain. Retired in September 2026 in favor of x402, the industry standard.","md",true,null,{},1,"\u002Fprojects\u002Fs402",[],{"title":6,"description":115},"Retired","green","projects\u002Fs402","Chain-agnostic HTTP 402 for agent payments, retired in September 2026 in favor of x402",[129,130,131,132],"TypeScript","Sui","Move","HTTP 402","working","production","8VnRTYxh9l9Q8_qRjd2Par3fUwnU9QQY-6GVDzSqY8s",{"id":137,"title":138,"body":139,"description":322,"extension":116,"featured":323,"github":118,"live":118,"meta":324,"metric_source":118,"navigation":117,"order":120,"path":325,"pr_links":326,"proof_url":302,"seo":327,"status":328,"statusColor":329,"stem":330,"subtitle":331,"tech":332,"tier":133,"verification_tier":334,"__hash__":335},"projects\u002Fprojects\u002Fsweefi-caged-agent.md","The Caged Agent",{"type":8,"value":140,"toc":315},[141,144,156,160,163,192,199,203,214,227,231,283,287,292,294,311],[11,142,138],{"id":143},"the-caged-agent",[17,145,146,147,151,152,155],{},"The companion proof for ",[21,148,150],{"href":149},"\u002Fprojects\u002Fsweefi","SweeFi",": an AI agent whose every payment is gated ",[32,153,154],{},"in the same atomic transaction"," by an on-chain mandate. Misbehaviour isn't discouraged — it can't settle.",[49,157,159],{"id":158},"the-three-acts","The three acts",[17,161,162],{},"The script self-checks and exits non-zero on failure:",[164,165,166,172,182],"ol",{},[92,167,168,171],{},[32,169,170],{},"In-budget payment"," → settles. ✅",[92,173,174,177,178,181],{},[32,175,176],{},"Over-budget payment"," (the agent goes rogue) → aborts on-chain at ",[37,179,180],{},"validate_and_spend",". 🛑",[92,183,184,187,188,191],{},[32,185,186],{},"Operator revokes, agent retries"," → aborts on-chain (",[37,189,190],{},"ERevoked","). The kill switch fired. 🛑",[17,193,194,195,198],{},"The mandate carries a per-call cap (0.01 SUI) and a lifetime cap (0.05 SUI). Every line is a real Sui testnet transaction — ",[72,196,197],{},"including the aborts."," The over-budget abort is the artifact: proof the cage is enforced by Move code, not by trust.",[49,200,202],{"id":201},"why-it-holds","Why it holds",[17,204,205,206,209,210,213],{},"Complete mediation (Saltzer & Schroeder) meets object-capability security: on Sui a capability is an owned object, and the ",[72,207,208],{},"check"," and the ",[72,211,212],{},"spend"," compose atomically in one transaction. The theft can't form; the kill switch actually fires.",[14,215,216],{},[17,217,218,219,222,223,226],{},"It proves ",[72,220,221],{},"authority"," — well-formed, capability held, revocable — never that a spend is ",[72,224,225],{},"wise."," It lowers P(catastrophe), not to zero. That restraint is the brand.",[49,228,230],{"id":229},"run-it","Run it",[232,233,237],"pre",{"className":234,"code":235,"language":236,"meta":109,"style":109},"language-bash shiki shiki-themes github-light github-dark","pnpm install --ignore-workspace\nexport SUI_TESTNET_PRIVATE_KEY=…   # a funded testnet wallet (the operator)\npnpm caged\n","bash",[37,238,239,255,275],{"__ignoreMap":109},[240,241,243,247,251],"span",{"class":242,"line":120},"line",[240,244,246],{"class":245},"sScJk","pnpm",[240,248,250],{"class":249},"sZZnC"," install",[240,252,254],{"class":253},"sj4cs"," --ignore-workspace\n",[240,256,257,261,265,268,271],{"class":242,"line":110},[240,258,260],{"class":259},"szBVR","export",[240,262,264],{"class":263},"sVt8B"," SUI_TESTNET_PRIVATE_KEY",[240,266,267],{"class":259},"=",[240,269,270],{"class":263},"…   ",[240,272,274],{"class":273},"sJ8bj","# a funded testnet wallet (the operator)\n",[240,276,278,280],{"class":242,"line":277},3,[240,279,246],{"class":245},[240,281,282],{"class":249}," caged\n",[49,284,286],{"id":285},"demo","Demo",[17,288,289],{},[72,290,291],{},"Terminal recording lands here — watch the over-budget payment die on-chain.",[49,293,87],{"id":86},[89,295,296,308],{},[92,297,298,97,300,307],{},[32,299,96],{},[21,301,304],{"href":302,"rel":303},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002F@sweefi\u002Fsui",[25],[37,305,306],{},"@sweefi\u002Fsui"," — the SDK + mandate builders.",[92,309,310],{},"Verified: typecheck green against the published packages; the three-act verdict issues real testnet transactions.",[312,313,314],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":109,"searchDepth":110,"depth":110,"links":316},[317,318,319,320,321],{"id":158,"depth":110,"text":159},{"id":201,"depth":110,"text":202},{"id":229,"depth":110,"text":230},{"id":285,"depth":110,"text":286},{"id":86,"depth":110,"text":87},"A runnable testnet demo of enforced authorization — an agent holds an on-chain budget mandate; an over-budget payment aborts at consensus, and a mid-session revoke kills its next call. Not advisory. Enforced.",false,{},"\u002Fprojects\u002Fsweefi-caged-agent",[],{"title":138,"description":322},"Testnet","blue","projects\u002Fsweefi-caged-agent","An AI agent that literally cannot overspend — with a kill switch that fires",[131,130,129,333],"AI Agent","testnet","QGPXe3jSSGnQdOe8b0Le_6xiB2hosevr3v5vz-jsKbM",{"id":337,"title":338,"body":339,"description":488,"extension":116,"featured":323,"github":118,"live":118,"meta":489,"metric_source":118,"navigation":117,"order":110,"path":490,"pr_links":491,"proof_url":100,"seo":492,"status":328,"statusColor":329,"stem":493,"subtitle":494,"tech":495,"tier":133,"verification_tier":334,"__hash__":497},"projects\u002Fprojects\u002Fs402-agent-pays-api.md","Agent Pays for an API",{"type":8,"value":340,"toc":482},[341,344,351,364,368,401,404,406,445,447,452,454,480],[11,342,338],{"id":343},"agent-pays-for-an-api",[14,345,346],{},[17,347,19,348,27],{},[21,349,26],{"href":23,"rel":350},[25],[17,352,146,353,355,356,359,360,363],{},[21,354,6],{"href":121}," — not the protocol, but an ",[32,357,358],{},"agent actually using it",". An autonomous agent calls a paywalled API, gets back ",[37,361,362],{},"402 Payment Required",", reads a price it never knew, signs a Sui payment, retries, and receives the data. No API keys. No human in the loop.",[49,365,367],{"id":366},"what-happens","What happens",[164,369,370,373,387,394],{},[92,371,372],{},"Agent calls a free endpoint → data, no payment.",[92,374,375,376,378,379,382,383,386],{},"Agent calls a premium endpoint → ",[37,377,58],{}," + machine-readable s402 terms (",[37,380,381],{},"exact",", amount, asset, payTo). It ",[72,384,385],{},"discovers"," the price.",[92,388,389,390,393],{},"The agent's s402 client signs a Sui transaction and retries with an ",[37,391,392],{},"X-PAYMENT"," header.",[92,395,396,397,400],{},"The server settles on Sui testnet and returns ",[37,398,399],{},"200"," + data + a receipt carrying the on-chain tx digest.",[17,402,403],{},"The server holds no key — it only broadcasts the agent's signed transaction. Trustless by construction.",[49,405,230],{"id":229},[232,407,409],{"className":234,"code":408,"language":236,"meta":109,"style":109},"pnpm install --ignore-workspace\nexport SUI_TESTNET_PRIVATE_KEY=…   # a funded testnet wallet\npnpm exec tsx demo.ts\n",[37,410,411,419,432],{"__ignoreMap":109},[240,412,413,415,417],{"class":242,"line":120},[240,414,246],{"class":245},[240,416,250],{"class":249},[240,418,254],{"class":253},[240,420,421,423,425,427,429],{"class":242,"line":110},[240,422,260],{"class":259},[240,424,264],{"class":263},[240,426,267],{"class":259},[240,428,270],{"class":263},[240,430,431],{"class":273},"# a funded testnet wallet\n",[240,433,434,436,439,442],{"class":242,"line":277},[240,435,246],{"class":245},[240,437,438],{"class":249}," exec",[240,440,441],{"class":249}," tsx",[240,443,444],{"class":249}," demo.ts\n",[49,446,286],{"id":285},[17,448,449],{},[72,450,451],{},"Terminal recording lands here — every premium response is backed by a real Sui testnet transaction, with Suiscan links printed in the run.",[49,453,87],{"id":86},[89,455,456,466,474],{},[92,457,458,97,460,465],{},[32,459,96],{},[21,461,463],{"href":100,"rel":462},[25],[37,464,6],{}," — the protocol, v0.9.0, deprecated since September 2026.",[92,467,468,469,27],{},"Built on ",[21,470,472],{"href":302,"rel":471},[25],[37,473,306],{},[92,475,476,477,479],{},"Verified: server + ",[37,478,58],{}," handshake observed live; full settlement issues real testnet transactions.",[312,481,314],{},{"title":109,"searchDepth":110,"depth":110,"links":483},[484,485,486,487],{"id":366,"depth":110,"text":367},{"id":229,"depth":110,"text":230},{"id":285,"depth":110,"text":286},{"id":86,"depth":110,"text":87},"A runnable demo of s402 in motion — an AI agent hits an HTTP 402-gated API, discovers the price from the 402 itself, signs a real Sui payment, and gets the data. The agentic-payments loop, end to end. Retired with s402 in September 2026.",{},"\u002Fprojects\u002Fs402-agent-pays-api",[],{"title":338,"description":488},"projects\u002Fs402-agent-pays-api","An autonomous agent discovers a paywall and pays it on Sui, retired with s402",[129,130,132,333,496],"Hono","oltHtH5-JHcsQYHw4InEvenY8YXnsMUmXJRAmZHw8_g",{"id":499,"title":500,"body":501,"description":583,"extension":116,"featured":323,"github":118,"live":118,"meta":584,"metric_source":118,"navigation":117,"order":110,"path":585,"pr_links":586,"proof_url":118,"seo":587,"status":588,"statusColor":125,"stem":589,"subtitle":590,"tech":591,"tier":133,"verification_tier":118,"__hash__":595},"projects\u002Fprojects\u002Fsui-blackjack.md","Sui Blackjack",{"type":8,"value":502,"toc":575},[503,507,510,514,517,521,538,542,545,549,560,564],[49,504,506],{"id":505},"the-problem","The Problem",[17,508,509],{},"Most blockchain games use off-chain randomness which can be manipulated. Players have no way to verify the game is fair.",[49,511,513],{"id":512},"the-solution","The Solution",[17,515,516],{},"A fully on-chain blackjack game using Sui's native randomness module. Every shuffle and card draw is verifiable on-chain.",[49,518,520],{"id":519},"key-features","Key Features",[89,522,523,526,529,532,535],{},[92,524,525],{},"Sui native randomness for provably fair shuffling",[92,527,528],{},"Treasury system with house edge management",[92,530,531],{},"3:2 blackjack payout ratio",[92,533,534],{},"Split, double-down, and insurance mechanics",[92,536,537],{},"389-line Move contract (clean, auditable)",[49,539,541],{"id":540},"architecture","Architecture",[17,543,544],{},"The Move contract manages game state, card deck, and treasury. Each game session creates a new randomness context. The frontend calls PTBs (Programmable Transaction Blocks) to play moves.",[49,546,548],{"id":547},"challenges","Challenges",[89,550,551,554,557],{},[92,552,553],{},"Understanding Sui's randomness module semantics",[92,555,556],{},"Managing treasury funds safely with proper access control",[92,558,559],{},"Encoding card values efficiently in Move structs",[49,561,563],{"id":562},"lessons-learned","Lessons Learned",[89,565,566,569,572],{},[92,567,568],{},"Sui randomness is powerful but requires careful context management",[92,570,571],{},"Move's ownership model makes game state management elegant",[92,573,574],{},"On-chain games need careful gas optimization",{"title":109,"searchDepth":110,"depth":110,"links":576},[577,578,579,580,581,582],{"id":505,"depth":110,"text":506},{"id":512,"depth":110,"text":513},{"id":519,"depth":110,"text":520},{"id":540,"depth":110,"text":541},{"id":547,"depth":110,"text":548},{"id":562,"depth":110,"text":563},"Provably fair on-chain blackjack using Sui's native randomness. 389-line Move contract with treasury system, 3:2 blackjack payout, and verifiable deck shuffling.",{},"\u002Fprojects\u002Fsui-blackjack",[],{"title":500,"description":583},"Contract Complete","projects\u002Fsui-blackjack","Provably fair on-chain blackjack with native randomness",[131,592,593,129,594],"Sui Randomness","Vue 3","@mysten\u002Fsui","NdVU9hUP0xQUfYRuENAOtyTvnLCTnd2uJ8-_xf1By94",{"id":597,"title":150,"body":598,"description":741,"extension":116,"featured":117,"github":730,"live":118,"meta":742,"metric_source":118,"navigation":117,"order":110,"path":149,"pr_links":743,"proof_url":730,"seo":744,"status":328,"statusColor":329,"stem":745,"subtitle":746,"tech":747,"tier":133,"verification_tier":334,"__hash__":749},"projects\u002Fprojects\u002Fsweefi.md",{"type":8,"value":599,"toc":736},[600,603,610,614,644,682,686,721,723],[11,601,150],{"id":602},"sweefi",[17,604,605,606,609],{},"SweeFi is the ",[32,607,608],{},"reference implementation of the mandate"," — the on-chain primitive behind everything else here. A human delegates bounded authority to an agent; Move enforces it at consensus; the human keeps a kill-switch the agent cannot reach.",[49,611,613],{"id":612},"the-mandate-concretely","The mandate, concretely",[17,615,616,617,620,621,624,625,628,629,632,633,636,637,639,640,643],{},"A ",[37,618,619],{},"Mandate\u003CT>"," is a Sui ",[32,622,623],{},"owned object"," carrying a delegator (human), a delegate (agent), and the bounds: ",[37,626,627],{},"max_per_tx",", ",[37,630,631],{},"max_total"," (with a monotonic ",[37,634,635],{},"total_spent ≤ max_total"," invariant), and an expiry. ",[37,638,180],{}," runs ",[32,641,642],{},"atomically in the same transaction as the spend"," — exceed a cap and the whole PTB aborts; the money never moves.",[89,645,646,652,658,664,676],{},[92,647,648,651],{},[32,649,650],{},"Deny-by-default."," A fresh mandate authorizes nothing; a human adds explicit grants.",[92,653,654,657],{},[32,655,656],{},"Ratchet-up trust (L0–L3)."," Levels only increase, so an agent can't self-downgrade to dodge tracking.",[92,659,660,663],{},[32,661,662],{},"Publication mandates (P0–P2)."," Because agents cause harm with words, not just money.",[92,665,666,669,670,672,673,675],{},[32,667,668],{},"Consensus-enforced revocation."," Revoke writes a flag to the human's registry; the agent's next ",[37,671,180],{}," aborts ",[37,674,190],{}," at consensus. It doesn't get a vote.",[92,677,678,681],{},[32,679,680],{},"AP2-compatible"," — aligned with the emerging Agent Payments Protocol, not invented in a vacuum.",[49,683,685],{"id":684},"a-genuinely-elegant-detail","A genuinely elegant detail",[17,687,688,689,692,693,696,697,700,701,704,705,708,709,713,714,716,717,720],{},"The agent ",[72,690,691],{},"holds"," its own mandate (an owned object — fast, no consensus overhead, no front-running), but revocation lives in a separate registry ",[32,694,695],{},"owned by the human",". The mandate checks ",[37,698,699],{},"registry.owner == delegator"," on every spend — which rejects a ",[72,702,703],{},"different-owner"," registry forged to fake \"not revoked.\" A subtler attack survives that check, though: a delegator owns many registries, so a rogue agent can present a ",[72,706,707],{},"same-owner"," one its mandate was never revoked in. The hardened cage (",[21,710,712],{"href":711},"\u002Fprojects\u002Fsweeai","Swee AI",") closes it — pinning the ",[32,715,381],{}," registry by ",[37,718,719],{},"object::id",", a gap green tests missed and an adversarial bytecode audit caught. Complete mediation (Saltzer & Schroeder), earned the honest way: shipped, audited, hardened.",[49,722,87],{"id":86},[89,724,725,733],{},[92,726,727,728,97],{},"Source + Move contracts: ",[21,729,732],{"href":730,"rel":731},"https:\u002F\u002Fgithub.com\u002Fsweeinc\u002Fsweefi",[25],"sweeinc\u002Fsweefi",[92,734,735],{},"Deployed to Sui testnet. ",{"title":109,"searchDepth":110,"depth":110,"links":737},[738,739,740],{"id":612,"depth":110,"text":613},{"id":684,"depth":110,"text":685},{"id":86,"depth":110,"text":87},"A payment SDK and Move mandate system that lets a human grant an AI agent bounded, revocable spending authority — enforced at consensus, not by prompt. AP2-compatible.",{},[],{"title":150,"description":741},"projects\u002Fsweefi","The mandate — structural agent safety on Sui",[131,130,129,748],"SEAL","6AvEfu8kfR_on-5npZDeptRO3OCMDvUjEb2qC1oruy8",{"id":751,"title":752,"body":753,"description":814,"extension":116,"featured":117,"github":815,"live":118,"meta":816,"metric_source":118,"navigation":117,"order":277,"path":817,"pr_links":818,"proof_url":798,"seo":819,"status":820,"statusColor":125,"stem":821,"subtitle":822,"tech":823,"tier":825,"verification_tier":134,"__hash__":826},"projects\u002Fprojects\u002Fsui-core-contributions.md","Contributions to Mysten Labs",{"type":8,"value":754,"toc":809},[755,758,761,765,772,776,787,789],[11,756,752],{"id":757},"contributions-to-mysten-labs",[17,759,760],{},"Reading the SDK at the level you'd fix it.",[49,762,764],{"id":763},"what","What",[17,766,767,768,771],{},"Merged contributions to ",[32,769,770],{},"MystenLabs\u002Fts-sdks"," — the official Sui TypeScript SDK — focused on parser correctness and hardening, with maintainer review credits.",[49,773,775],{"id":774},"why-its-the-strongest-proof-here","Why it's the strongest proof here",[17,777,778,779,782,783,786],{},"Anyone can claim Sui fluency; merged PRs into the canonical SDK are ",[72,780,781],{},"checkable",". This is the literal skill behind the ",[32,784,785],{},"Transaction Dissector"," in the Lab — reading Sui's type tags and PTB structure at the level where bugs actually live.",[49,788,87],{"id":86},[89,790,791,806],{},[92,792,793,97,796,801,802,805],{},[32,794,795],{},"Merged PRs:",[21,797,800],{"href":798,"rel":799},"https:\u002F\u002Fgithub.com\u002FMystenLabs\u002Fts-sdks\u002Fpulls?q=is%3Apr+author%3ADanny-Devs+is%3Amerged",[25],"author:Danny-Devs · is:merged · MystenLabs\u002Fts-sdks"," — the count is whatever GitHub shows; the link ",[72,803,804],{},"is"," the receipt.",[92,807,808],{},"zkLogin parser differential finding. ",{"title":109,"searchDepth":110,"depth":110,"links":810},[811,812,813],{"id":763,"depth":110,"text":764},{"id":774,"depth":110,"text":775},{"id":86,"depth":110,"text":87},"Merged pull requests to MystenLabs\u002Fts-sdks — the official Sui TypeScript SDK — focused on parser correctness and hardening, with maintainer review credits.","https:\u002F\u002Fgithub.com\u002FMystenLabs\u002Fts-sdks",{},"\u002Fprojects\u002Fsui-core-contributions",[],{"title":752,"description":814},"Merged","projects\u002Fsui-core-contributions","Merged work on the Sui TypeScript SDK",[129,130,824],"ts-sdks","contribution","VNo6xB-KSEzQPFC4fdi3xih_KzBDYWeQjGGNS9Ajnvc",{"id":828,"title":829,"body":830,"description":867,"extension":116,"featured":323,"github":118,"live":118,"meta":868,"metric_source":118,"navigation":117,"order":277,"path":869,"pr_links":870,"proof_url":118,"seo":871,"status":328,"statusColor":329,"stem":872,"subtitle":873,"tech":874,"tier":133,"verification_tier":334,"__hash__":875},"projects\u002Fprojects\u002Fsweeagent.md","SweeAgent",{"type":8,"value":831,"toc":863},[832,835,842,846,857,859],[11,833,829],{"id":834},"sweeagent",[17,836,837,838,841],{},"SweeFi proved the mandate; ",[32,839,840],{},"SweeAgent packages it."," It's the SDK a builder reaches for to give an agent an on-chain identity, a bounded mandate, and an instant kill-switch — without hand-writing Move. The structural-safety layer as a dependency.",[49,843,845],{"id":844},"the-idea","The idea",[17,847,848,849,852,853,856],{},"Behavioural safety (training, system prompts, guardrails) reduces the ",[72,850,851],{},"rate"," of bad actions. SweeAgent adds the layer underneath: enforcement the agent ",[32,854,855],{},"cannot influence"," — caps, capabilities, expiry, and SEAL-backed revocation, checked at consensus. The two are complementary; this is the one that gives guarantees rather than probabilities.",[49,858,87],{"id":86},[89,860,861],{},[92,862,735],{},{"title":109,"searchDepth":110,"depth":110,"links":864},[865,866],{"id":844,"depth":110,"text":845},{"id":86,"depth":110,"text":87},"A security SDK that gives AI agents on-chain identity, bounded authority, and cryptographic revocation — so any builder can put an agent inside a mandate without writing Move.",{},"\u002Fprojects\u002Fsweeagent",[],{"title":829,"description":867},"projects\u002Fsweeagent","The structural-safety layer, packaged for builders",[129,131,130,748],"qOgD-YdL8FLxcoVFc8TPHdQoqgRO9UFii_2lyKqanVk",{"id":877,"title":878,"body":879,"description":958,"extension":116,"featured":117,"github":118,"live":118,"meta":959,"metric_source":118,"navigation":117,"order":277,"path":960,"pr_links":961,"proof_url":931,"seo":962,"status":328,"statusColor":329,"stem":963,"subtitle":964,"tech":965,"tier":133,"verification_tier":334,"__hash__":966},"projects\u002Fprojects\u002Fsweemarket.md","SweeMarket",{"type":8,"value":880,"toc":953},[881,884,895,899,902,906,917,919],[11,882,878],{"id":883},"sweemarket",[17,885,886,887,890,891,894],{},"Most prediction markets ask ",[72,888,889],{},"whether"," something happens. SweeMarket asks ",[72,892,893],{},"how much"," — a scalar market where you bet the range an outcome lands in (BTC's price, say), visualized as a live probability curve you can watch move.",[49,896,898],{"id":897},"built-on-deepbook-predict","Built on DeepBook Predict",[17,900,901],{},"No official SDK exists yet for Mysten Labs' DeepBook Predict substrate, so SweeMarket ships its own typed, hand-rolled PTB client against it — pricing, liquidity, and settlement all run through DeepBook Predict's on-chain pools.",[49,903,905],{"id":904},"the-anchor-pre-registering-a-prediction-before-it-can-be-gamed","The anchor — pre-registering a prediction before it can be gamed",[17,907,908,909,912,913,916],{},"SweeMarket's own contract, ",[37,910,911],{},"forecast_anchor"," (immutable, deployed on Sui testnet), stamps an AI forecaster's prediction — a hash of its reasoning plus the market's expiry — on-chain ",[72,914,915],{},"before"," the market resolves. Once the outcome is known, the forecaster's accuracy claim can't be rewritten after the fact.",[49,918,87],{"id":86},[89,920,921,934,943,946],{},[92,922,923,97,926,928,929,27],{},[32,924,925],{},"Contract:",[37,927,911],{}," deployed and verified on Sui testnet — ",[21,930,933],{"href":931,"rel":932},"https:\u002F\u002Fsuiscan.xyz\u002Ftestnet\u002Fobject\u002F0x0d0878a0e4425a286ee90fc65737e9cf0f6ee606d96c79692130e67f8db88eb5",[25],"SuiScan",[92,935,936,937,942],{},"Built on Mysten Labs' ",[21,938,941],{"href":939,"rel":940},"https:\u002F\u002Fsuiscan.xyz\u002Ftestnet\u002Fobject\u002F0xf5ea2b3749c65d6e56507cc35388719aadb28f9cab873696a2f8687f5c785138",[25],"DeepBook Predict",", also live on testnet.",[92,944,945],{},"A full funded round-trip (deposit → mint → redeem) has been run with real signed transactions.",[92,947,948,949,952],{},"No public hosted demo yet — runs locally (",[37,950,951],{},"pnpm dev",").",{"title":109,"searchDepth":110,"depth":110,"links":954},[955,956,957],{"id":897,"depth":110,"text":898},{"id":904,"depth":110,"text":905},{"id":86,"depth":110,"text":87},"A prediction-market client built on Mysten Labs' DeepBook Predict — instead of yes\u002Fno bets, it lets you bet the range an outcome will land in, with an on-chain contract that pre-registers an AI forecaster's prediction before the market resolves.",{},"\u002Fprojects\u002Fsweemarket",[],{"title":878,"description":958},"projects\u002Fsweemarket","Scalar prediction markets — how much, not whether",[131,130,593,941],"TepFlovNICztOgPFC7Zqb43diTjt25de9L9cWgKmZzo",{"id":968,"title":969,"body":970,"description":1040,"extension":116,"featured":323,"github":1041,"live":118,"meta":1042,"metric_source":118,"navigation":117,"order":277,"path":1043,"pr_links":1044,"proof_url":118,"seo":1045,"status":1046,"statusColor":125,"stem":1047,"subtitle":1048,"tech":1049,"tier":133,"verification_tier":118,"__hash__":1053},"projects\u002Fprojects\u002Fwalrus-kit.md","walrus-kit-core",{"type":8,"value":971,"toc":1032},[972,974,977,979,982,984,1001,1003,1006,1008,1019,1021],[49,973,506],{"id":505},[17,975,976],{},"Walrus is a new decentralized storage system on Sui. There was no easy-to-use toolkit for integrating it into web apps.",[49,978,513],{"id":512},[17,980,981],{},"A framework-agnostic core library with bindings for Vue 3 and React. Follows the same patterns as @mysten\u002Fdapp-kit.",[49,983,520],{"id":519},[89,985,986,989,992,995,998],{},[92,987,988],{},"Framework-agnostic core using nanostores",[92,990,991],{},"Vue 3 composables (useWriteBlob, useBlobStatus)",[92,993,994],{},"React hooks (in progress)",[92,996,997],{},"Upload progress tracking",[92,999,1000],{},"Blob status monitoring",[49,1002,541],{"id":540},[17,1004,1005],{},"The core library manages Walrus client state using nanostores. Framework-specific packages wrap the stores in native patterns (composables for Vue, hooks for React).",[49,1007,548],{"id":547},[89,1009,1010,1013,1016],{},[92,1011,1012],{},"Walrus API was evolving during development",[92,1014,1015],{},"nanostores pattern required careful state management",[92,1017,1018],{},"Designing a consistent API across frameworks",[49,1020,563],{"id":562},[89,1022,1023,1026,1029],{},[92,1024,1025],{},"Framework-agnostic core + framework-specific wrappers is a powerful pattern",[92,1027,1028],{},"nanostores provides excellent framework interop",[92,1030,1031],{},"Following established patterns (like dapp-kit) improves DX",{"title":109,"searchDepth":110,"depth":110,"links":1033},[1034,1035,1036,1037,1038,1039],{"id":505,"depth":110,"text":506},{"id":512,"depth":110,"text":513},{"id":519,"depth":110,"text":520},{"id":540,"depth":110,"text":541},{"id":547,"depth":110,"text":548},{"id":562,"depth":110,"text":563},"Framework-agnostic toolkit for Sui Walrus decentralized storage. Built using nanostores for state management, following dapp-kit-next patterns.","https:\u002F\u002Fgithub.com\u002FDanny-Devs\u002Fwalrus-kit-core",{},"\u002Fprojects\u002Fwalrus-kit",[],{"title":969,"description":1040},"Built","projects\u002Fwalrus-kit","Framework-agnostic toolkit for Sui Walrus storage",[129,1050,1051,593,1052],"nanostores","Walrus SDK","React","B0iYJEdxi1OGVimP396gcrTgWoutlmNH0uoExKgsB6A",{"id":1055,"title":1056,"body":1057,"description":1127,"extension":116,"featured":323,"github":118,"live":118,"meta":1128,"metric_source":118,"navigation":117,"order":1129,"path":1130,"pr_links":1131,"proof_url":118,"seo":1132,"status":1133,"statusColor":1134,"stem":1135,"subtitle":1136,"tech":1137,"tier":133,"verification_tier":118,"__hash__":1142},"projects\u002Fprojects\u002Fclaude-mobile-controller.md","Claude Mobile Controller",{"type":8,"value":1058,"toc":1119},[1059,1061,1064,1066,1069,1071,1088,1090,1093,1095,1106,1108],[49,1060,506],{"id":505},[17,1062,1063],{},"Working with Claude Code means being stuck at your desk. Sometimes you want to check on progress, give feedback, or make requests while walking around.",[49,1065,513],{"id":512},[17,1067,1068],{},"A mobile web app that connects to Claude Code via tmux and provides voice-based interaction with text-to-speech summaries.",[49,1070,520],{"id":519},[89,1072,1073,1076,1079,1082,1085],{},[92,1074,1075],{},"Connect to running Claude Code sessions via tmux",[92,1077,1078],{},"Push-to-talk voice input",[92,1080,1081],{},"Text-to-speech for Claude responses",[92,1083,1084],{},"Voice notes anchored to specific responses",[92,1086,1087],{},"Mobile-optimized UI",[49,1089,541],{"id":540},[17,1091,1092],{},"The Nuxt server runs on the same machine as Claude Code. It connects to the tmux session, sends\u002Freceives text, and streams responses to the mobile client via SSE.",[49,1094,548],{"id":547},[89,1096,1097,1100,1103],{},[92,1098,1099],{},"tmux session management and text capture",[92,1101,1102],{},"Web Speech API quirks on mobile browsers",[92,1104,1105],{},"Keeping the mobile connection alive during screen sleep",[49,1107,563],{"id":562},[89,1109,1110,1113,1116],{},[92,1111,1112],{},"tmux is incredibly powerful for terminal automation",[92,1114,1115],{},"Mobile web apps can be surprisingly capable",[92,1117,1118],{},"Voice interfaces require careful UX consideration",{"title":109,"searchDepth":110,"depth":110,"links":1120},[1121,1122,1123,1124,1125,1126],{"id":505,"depth":110,"text":506},{"id":512,"depth":110,"text":513},{"id":519,"depth":110,"text":520},{"id":540,"depth":110,"text":541},{"id":547,"depth":110,"text":548},{"id":562,"depth":110,"text":563},"Control Claude Code from your phone via tmux + SSE. Features TTS summaries, push-to-talk voice interaction, and voice notes anchored to responses.",{},4,"\u002Fprojects\u002Fclaude-mobile-controller",[],{"title":1056,"description":1127},"In Development","amber","projects\u002Fclaude-mobile-controller","Control Claude Code from your phone",[1138,1139,1140,1141,129],"Nuxt 3","tmux","Web Speech API","SSE","r3SDq_6A6ku4ZwhzgoCOhrybJHCD1Zpu_ZcpuuwXNng",{"id":1144,"title":1145,"body":1146,"description":1235,"extension":116,"featured":117,"github":1236,"live":1227,"meta":1237,"metric_source":118,"navigation":117,"order":1129,"path":1238,"pr_links":1239,"proof_url":1196,"seo":1240,"status":1241,"statusColor":125,"stem":1242,"subtitle":1243,"tech":1244,"tier":133,"verification_tier":134,"__hash__":1248},"projects\u002Fprojects\u002Fpinia-colada-normalizer.md","Pinia Colada Normalizer",{"type":8,"value":1147,"toc":1230},[1148,1151,1160,1164,1179,1183,1186,1188],[11,1149,1145],{"id":1150},"pinia-colada-normalizer",[17,1152,1153,1154,1159],{},"Pinia Colada — Vue's official data-fetching library, built by ",[21,1155,1158],{"href":1156,"rel":1157},"https:\u002F\u002Fgithub.com\u002Fposva",[25],"posva"," (creator of Pinia and Vue Router) — caches each query independently. Fetch the same entity from two different endpoints and you get two copies; update one and the other goes stale. This plugin normalizes entities into a shared store so every view holding that entity reads the same reference — one write, propagated everywhere, with zero per-query config.",[49,1161,1163],{"id":1162},"how-it-works","How it works",[17,1165,1166,1167,1170,1171,1174,1175,1178],{},"The plugin hooks into Pinia Colada's ",[37,1168,1169],{},"extend"," API and replaces each query's ",[37,1172,1173],{},"entry.state"," with a Vue ",[37,1176,1177],{},"customRef",": writes normalize the response into a shared entity store, reads denormalize it back into the shape the component expects. A single WebSocket push or mutation response updates the store once — every component holding that entity re-renders, automatically.",[49,1180,1182],{"id":1181},"persistence","Persistence",[17,1184,1185],{},"IndexedDB by default; an optional SQLite-WASM (OPFS) engine shipped in 0.3.0 for larger datasets. Pluggable — bring your own storage engine.",[49,1187,87],{"id":86},[89,1189,1190,1202,1220],{},[92,1191,1192,97,1194,1201],{},[32,1193,96],{},[21,1195,1198],{"href":1196,"rel":1197},"https:\u002F\u002Fwww.npmjs.com\u002Fpackage\u002Fpinia-colada-plugin-normalizer",[25],[37,1199,1200],{},"pinia-colada-plugin-normalizer"," — published, installable today.",[92,1203,1204,1213,1214,1219],{},[32,1205,1206,1207,1209,1210,1212],{},"posva welcomed it and validated the ",[37,1208,1177],{},"\u002F",[37,1211,1173],{}," design"," in public ",[21,1215,1218],{"href":1216,"rel":1217},"https:\u002F\u002Fgithub.com\u002Fposva\u002Fpinia-colada\u002Fdiscussions\u002F531",[25],"Discussion #531"," on the Pinia Colada repo itself.",[92,1221,1222,97,1225],{},[32,1223,1224],{},"Live demo:",[21,1226,1229],{"href":1227,"rel":1228},"https:\u002F\u002Fpinia-colada-plugin-normalizer.vercel.app",[25],"pinia-colada-plugin-normalizer.vercel.app",{"title":109,"searchDepth":110,"depth":110,"links":1231},[1232,1233,1234],{"id":1162,"depth":110,"text":1163},{"id":1181,"depth":110,"text":1182},{"id":86,"depth":110,"text":87},"An open-source Vue plugin that adds normalized, cross-query entity caching to Pinia Colada — Vue's official data-fetching library — so one update propagates instantly across every view holding that entity.","https:\u002F\u002Fgithub.com\u002FDanny-Devs\u002Fpinia-colada-plugin-normalizer",{},"\u002Fprojects\u002Fpinia-colada-normalizer",[],{"title":1145,"description":1235},"Published","projects\u002Fpinia-colada-normalizer","Apollo-style normalized entity caching for Pinia Colada",[129,593,1245,1246,1247],"Pinia","Pinia Colada","IndexedDB","wImtmF1hATxusa1Pk-YdVWCDvyPgraFYalsjXwEaUKU",{"id":1250,"title":1251,"body":1252,"description":1285,"extension":116,"featured":323,"github":118,"live":118,"meta":1286,"metric_source":118,"navigation":117,"order":1129,"path":1287,"pr_links":1288,"proof_url":118,"seo":1289,"status":1290,"statusColor":329,"stem":1291,"subtitle":1292,"tech":1293,"tier":133,"verification_tier":334,"__hash__":1295},"projects\u002Fprojects\u002Fsweesense.md","SweeSense",{"type":8,"value":1253,"toc":1281},[1254,1257,1264,1268,1274,1276],[11,1255,1251],{"id":1256},"sweesense",[17,1258,1259,1260,1263],{},"You can't keep an agent inside its bounds if you can't ",[72,1261,1262],{},"see"," what's happening on-chain. SweeSense is the intelligence layer: it ingests Sui activity and turns it into structured signals — the feedback half of the control loop that structural safety needs.",[49,1265,1267],{"id":1266},"why-it-belongs-in-the-stack","Why it belongs in the stack",[17,1269,1270,1271,1273],{},"A mandate is the actuator (it constrains what an agent may do). SweeSense is the sensor (it tells you what ",[72,1272,804],{}," happening). Safety is a property of the whole loop, not one component — the council was emphatic about that — and SweeSense is the eyes.",[49,1275,87],{"id":86},[89,1277,1278],{},[92,1279,1280],{},"Live, ingesting Sui checkpoints. ",{"title":109,"searchDepth":110,"depth":110,"links":1282},[1283,1284],{"id":1266,"depth":110,"text":1267},{"id":86,"depth":110,"text":87},"Turns raw Sui activity into structured, queryable signals — the observability layer that safe agent operation depends on.",{},"\u002Fprojects\u002Fsweesense",[],{"title":1251,"description":1285},"Live","projects\u002Fsweesense","On-chain intelligence for Sui",[129,130,1294],"GraphQL","5Qf4bgEVnp1tPZ53RNYFZLIFiApx1beJ6UmLn6AYKE4",{"id":1297,"title":1298,"body":1299,"description":1369,"extension":116,"featured":323,"github":1370,"live":118,"meta":1371,"metric_source":118,"navigation":117,"order":1372,"path":1373,"pr_links":1374,"proof_url":118,"seo":1375,"status":1376,"statusColor":125,"stem":1377,"subtitle":1378,"tech":1379,"tier":133,"verification_tier":118,"__hash__":1382},"projects\u002Fprojects\u002Fsui-transaction-explainer.md","Sui Transaction Explainer",{"type":8,"value":1300,"toc":1361},[1301,1303,1306,1308,1311,1313,1330,1332,1335,1337,1348,1350],[49,1302,506],{"id":505},[17,1304,1305],{},"Sui transactions are complex data structures. Even experienced developers struggle to parse what happened in a transaction at a glance. New users are completely lost.",[49,1307,513],{"id":512},[17,1309,1310],{},"An AI-powered tool that takes any Sui transaction digest and explains it in plain English. Three explanation modes: ELI5 (explain like I'm 5), Normal, and Technical.",[49,1312,520],{"id":519},[89,1314,1315,1318,1321,1324,1327],{},[92,1316,1317],{},"Real-time streaming explanations using Server-Sent Events",[92,1319,1320],{},"Three explanation modes for different audiences",[92,1322,1323],{},"Transaction parsing with @mysten\u002Fsui SDK",[92,1325,1326],{},"Beautiful UI with cyberpunk aesthetics",[92,1328,1329],{},"Copy-to-clipboard for transaction details",[49,1331,541],{"id":540},[17,1333,1334],{},"The frontend sends a transaction digest to a Nuxt server route. The server fetches the transaction data from the Sui RPC, formats it for Claude, and streams the AI response back to the client using SSE.",[49,1336,548],{"id":547},[89,1338,1339,1342,1345],{},[92,1340,1341],{},"SSE streaming in Nuxt 3 required custom event handling",[92,1343,1344],{},"Claude prompt engineering to get consistent, accurate explanations",[92,1346,1347],{},"Handling different transaction types (coin transfers, NFT mints, DeFi operations)",[49,1349,563],{"id":562},[89,1351,1352,1355,1358],{},[92,1353,1354],{},"Streaming responses significantly improve perceived performance",[92,1356,1357],{},"AI explanations need careful prompt design to be accurate",[92,1359,1360],{},"The Sui transaction format is well-structured but deeply nested",{"title":109,"searchDepth":110,"depth":110,"links":1362},[1363,1364,1365,1366,1367,1368],{"id":505,"depth":110,"text":506},{"id":512,"depth":110,"text":513},{"id":519,"depth":110,"text":520},{"id":540,"depth":110,"text":541},{"id":547,"depth":110,"text":548},{"id":562,"depth":110,"text":563},"AI-powered tool that explains Sui transactions in plain English. Uses Claude API to parse transaction data and generate human-readable explanations with ELI5\u002FNormal\u002FTechnical modes.","https:\u002F\u002Fgithub.com\u002FDanny-Devs\u002Fsui-tx-explainer",{},5,"\u002Fprojects\u002Fsui-transaction-explainer",[],{"title":1298,"description":1369},"MVP Complete","projects\u002Fsui-transaction-explainer","AI-powered transaction analysis for the Sui blockchain",[1138,594,1380,1381,129],"Claude API","SSE Streaming","SjvWJk7F1Eg8tudg2c_PyJVawjvocW-NKjrR4FttrZ4",{"id":1384,"title":1385,"body":1386,"description":1439,"extension":116,"featured":323,"github":118,"live":118,"meta":1440,"metric_source":118,"navigation":117,"order":1372,"path":1441,"pr_links":1442,"proof_url":118,"seo":1443,"status":1444,"statusColor":1134,"stem":1445,"subtitle":1446,"tech":1447,"tier":1449,"verification_tier":1449,"__hash__":1450},"projects\u002Fprojects\u002Fsweetrade.md","SweeTrade",{"type":8,"value":1387,"toc":1435},[1388,1391,1406,1410,1425,1428,1432],[11,1389,1385],{"id":1390},"sweetrade",[17,1392,1393,1394,1397,1398,1401,1402,1405],{},"The dream and the safety card in one product: an agent that ",[32,1395,1396],{},"earns while you sleep",", that ",[32,1399,1400],{},"can't go off-script",", and that you can ",[32,1403,1404],{},"pull the plug on"," at any moment.",[49,1407,1409],{"id":1408},"the-compiler-framing","The compiler framing",[17,1411,1412,1413,1416,1417,1420,1421,1424],{},"SweeTrade treats the mandate as a ",[32,1414,1415],{},"compiled policy"," and the agent as a ",[32,1418,1419],{},"program",": the substrate is the runtime, and every agent ",[32,1422,1423],{},"Decision must type-check against its Mandate signature"," before it can execute. A trade within the agent's granted capabilities and caps compiles and runs; an off-script trade is rejected at the boundary — structurally, not by asking the model nicely.",[17,1426,1427],{},"It's the consumer that puts the whole stack to work — s402 for payments, the mandate for authority, SweeSense for sensing — and the reason the safety thesis has teeth: the most exciting thing an agent can do (move your money) is exactly the thing the cage governs most tightly.",[49,1429,1431],{"id":1430},"status","Status",[17,1433,1434],{},"In active development. ",{"title":109,"searchDepth":110,"depth":110,"links":1436},[1437,1438],{"id":1408,"depth":110,"text":1409},{"id":1430,"depth":110,"text":1431},"Agentic trading built on the mandate. Every decision the agent makes type-checks against its on-chain authority before it can execute; off-script trades are refused at the boundary.",{},"\u002Fprojects\u002Fsweetrade",[],{"title":1385,"description":1439},"In flight","projects\u002Fsweetrade","An agent that trades — and can't go off-script",[131,130,129,1448],"AI agents","spec","x5Ec6027nuR3ijwVV1tssrhwyeo8wpdL5VCmH4VYpaQ",{"id":1452,"title":1453,"body":1454,"description":1524,"extension":116,"featured":323,"github":1525,"live":118,"meta":1526,"metric_source":118,"navigation":117,"order":1372,"path":1527,"pr_links":1528,"proof_url":118,"seo":1529,"status":1530,"statusColor":329,"stem":1531,"subtitle":1532,"tech":1533,"tier":133,"verification_tier":118,"__hash__":1536},"projects\u002Fprojects\u002Fvue-dappkit.md","Vue DappKit",{"type":8,"value":1455,"toc":1516},[1456,1458,1461,1463,1466,1468,1485,1487,1490,1492,1503,1505],[49,1457,506],{"id":505},[17,1459,1460],{},"Mysten's dapp-kit only supports React. Vue developers building Sui dApps had to write their own integrations from scratch.",[49,1462,513],{"id":512},[17,1464,1465],{},"Native Vue 3 bindings that provide the same great DX as the React version. Composables for wallet connection, transaction signing, and account management.",[49,1467,520],{"id":519},[89,1469,1470,1473,1476,1479,1482],{},[92,1471,1472],{},"useCurrentAccount, useAccounts composables",[92,1474,1475],{},"useSignTransaction, useSignPersonalMessage",[92,1477,1478],{},"ConnectButton component",[92,1480,1481],{},"Tanstack Query integration for caching",[92,1483,1484],{},"TypeScript support",[49,1486,541],{"id":540},[17,1488,1489],{},"The bindings wrap the dapp-kit core using Vue composables. State management uses Vue reactivity. Tanstack Query Vue handles async state.",[49,1491,548],{"id":547},[89,1493,1494,1497,1500],{},[92,1495,1496],{},"Mapping React patterns to Vue patterns",[92,1498,1499],{},"Tanstack Query differences between React and Vue",[92,1501,1502],{},"Type resolution issues with generics",[49,1504,563],{"id":562},[89,1506,1507,1510,1513],{},[92,1508,1509],{},"Vue and React patterns map fairly well with thoughtful design",[92,1511,1512],{},"Contributing to large open source projects requires patience",[92,1514,1515],{},"Good TypeScript types make everything better",{"title":109,"searchDepth":110,"depth":110,"links":1517},[1518,1519,1520,1521,1522,1523],{"id":505,"depth":110,"text":506},{"id":512,"depth":110,"text":513},{"id":519,"depth":110,"text":520},{"id":540,"depth":110,"text":541},{"id":547,"depth":110,"text":548},{"id":562,"depth":110,"text":563},"Vue 3 bindings for @mysten\u002Fdapp-kit. Enables Vue developers to build Sui dApps with native Vue composables and components.","https:\u002F\u002Fgithub.com\u002FDanny-Devs\u002Fts-sdks",{},"\u002Fprojects\u002Fvue-dappkit",[],{"title":1453,"description":1524},"PR Ready","projects\u002Fvue-dappkit","Vue 3 bindings for @mysten\u002Fdapp-kit",[593,129,1534,1535],"@mysten\u002Fdapp-kit","Tanstack Query","H1GZb22NMmAI6yGp1LPJ8vf3_2-rCZsSCmVjtXVeFPg",{"id":1538,"title":1539,"body":1540,"description":1616,"extension":116,"featured":323,"github":118,"live":118,"meta":1617,"metric_source":118,"navigation":117,"order":1618,"path":1619,"pr_links":1620,"proof_url":118,"seo":1621,"status":1046,"statusColor":125,"stem":1622,"subtitle":1623,"tech":1624,"tier":1628,"verification_tier":118,"__hash__":1629},"projects\u002Fprojects\u002Fmoso-cli.md","Moso CLI",{"type":8,"value":1541,"toc":1608},[1542,1544,1547,1549,1552,1554,1574,1576,1579,1581,1595,1597],[49,1543,506],{"id":505},[17,1545,1546],{},"Using a single LLM gives you one perspective. Different models have different strengths, biases, and blind spots. There's no easy way to orchestrate multiple frontier models and synthesize their best insights.",[49,1548,513],{"id":512},[17,1550,1551],{},"A CLI tool implementing Karpathy's 3-stage council pattern: Stage 1 queries multiple frontier models in parallel. Stage 2 anonymizes responses and has each model peer-review the others. Stage 3 synthesizes the best ideas into a final answer.",[49,1553,520],{"id":519},[89,1555,1556,1559,1562,1565,1568,1571],{},[92,1557,1558],{},"Karpathy 3-stage council pattern (query → review → synthesize)",[92,1560,1561],{},"Frontier model council (Claude Opus, GPT-4o, Gemini 2.5 Pro, DeepSeek)",[92,1563,1564],{},"Anonymized peer review — models don't know whose work they're reviewing",[92,1566,1567],{},"Typed event streaming (MosoEventType enum)",[92,1569,1570],{},"Parallel queries with retry + jitter",[92,1572,1573],{},"Beautiful React Ink terminal UI",[49,1575,541],{"id":540},[17,1577,1578],{},"@moso\u002Fcore is a framework-agnostic council orchestration library. @moso\u002Fcli wraps it in a React Ink terminal UI. Queries go through OpenRouter for unified model access. The 3-stage pipeline runs in parallel where possible with typed event streaming for real-time UI updates.",[49,1580,548],{"id":547},[89,1582,1583,1586,1589,1592],{},[92,1584,1585],{},"Designing fair anonymized peer review prompts",[92,1587,1588],{},"Managing parallel API calls with different latencies and error modes",[92,1590,1591],{},"Synthesizing conflicting model opinions into coherent answers",[92,1593,1594],{},"Terminal UI rendering with real-time streaming updates",[49,1596,563],{"id":562},[89,1598,1599,1602,1605],{},[92,1600,1601],{},"Anonymized peer review dramatically improves output quality",[92,1603,1604],{},"Multi-model architectures surface blind spots that single models miss",[92,1606,1607],{},"React Ink is surprisingly powerful for rich terminal UIs",{"title":109,"searchDepth":110,"depth":110,"links":1609},[1610,1611,1612,1613,1614,1615],{"id":505,"depth":110,"text":506},{"id":512,"depth":110,"text":513},{"id":519,"depth":110,"text":520},{"id":540,"depth":110,"text":541},{"id":547,"depth":110,"text":548},{"id":562,"depth":110,"text":563},"Multi-LLM council orchestration using Karpathy's 3-stage pattern. Pit frontier models (Claude, GPT-4o, Gemini, DeepSeek) against each other with anonymized peer review and typed event streaming.",{},9,"\u002Fprojects\u002Fmoso-cli",[],{"title":1539,"description":1616},"projects\u002Fmoso-cli","Multi-LLM council orchestration with anonymized peer review",[129,1625,1626,1627],"React Ink","OpenRouter","Node.js","ecosystem","XI2_fApYQNUocRq9dAU-iWIEdoSsvDH45nAmzHGAjc8",{"id":1631,"title":1632,"body":1633,"description":1703,"extension":116,"featured":323,"github":118,"live":118,"meta":1704,"metric_source":118,"navigation":117,"order":1705,"path":1706,"pr_links":1707,"proof_url":118,"seo":1708,"status":1709,"statusColor":1134,"stem":1710,"subtitle":1711,"tech":1712,"tier":1449,"verification_tier":118,"__hash__":1714},"projects\u002Fprojects\u002Fproof-of-vibes.md","Proof of Vibes",{"type":8,"value":1634,"toc":1695},[1635,1637,1640,1642,1645,1647,1664,1666,1669,1671,1682,1684],[49,1636,506],{"id":505},[17,1638,1639],{},"Collaborative art projects are fun but ephemeral. What if the state was permanent and on-chain?",[49,1641,513],{"id":512},[17,1643,1644],{},"A real-time collaborative canvas where users place emojis. All state is on the Sui blockchain.",[49,1646,520],{"id":519},[89,1648,1649,1652,1655,1658,1661],{},[92,1650,1651],{},"Real-time WebSocket updates",[92,1653,1654],{},"On-chain canvas state",[92,1656,1657],{},"Emoji placement with position tracking",[92,1659,1660],{},"Historical canvas playback",[92,1662,1663],{},"Wallet-connected identity",[49,1665,541],{"id":540},[17,1667,1668],{},"Move contract stores canvas state. Off-chain indexer watches for events. WebSocket server pushes updates to connected clients.",[49,1670,548],{"id":547},[89,1672,1673,1676,1679],{},[92,1674,1675],{},"Optimizing on-chain storage for canvas data",[92,1677,1678],{},"Real-time sync with blockchain finality",[92,1680,1681],{},"Rate limiting to prevent spam",[49,1683,563],{"id":562},[89,1685,1686,1689,1692],{},[92,1687,1688],{},"On-chain state has different characteristics than traditional DBs",[92,1690,1691],{},"Event-driven architecture works well for real-time blockchain apps",[92,1693,1694],{},"Simple concepts can have complex implementations",{"title":109,"searchDepth":110,"depth":110,"links":1696},[1697,1698,1699,1700,1701,1702],{"id":505,"depth":110,"text":506},{"id":512,"depth":110,"text":513},{"id":519,"depth":110,"text":520},{"id":540,"depth":110,"text":541},{"id":547,"depth":110,"text":548},{"id":562,"depth":110,"text":563},"Social emoji canvas on Sui blockchain. Real-time collaborative art with on-chain state. Move contract with Vue 3 frontend.",{},12,"\u002Fprojects\u002Fproof-of-vibes",[],{"title":1632,"description":1703},"Contract Started","projects\u002Fproof-of-vibes","Collaborative emoji canvas on Sui",[131,593,1713,129],"WebSockets","dMPYdV2wSzcEE0CqwgqD-PN56-2sdkF4eoKlHcX--54",{"id":1716,"title":712,"body":1717,"description":1969,"extension":116,"featured":323,"github":118,"live":118,"meta":1970,"metric_source":118,"navigation":117,"order":1705,"path":711,"pr_links":1971,"proof_url":1832,"seo":1972,"status":328,"statusColor":329,"stem":1973,"subtitle":1974,"tech":1975,"tier":133,"verification_tier":334,"__hash__":1977},"projects\u002Fprojects\u002Fsweeai.md",{"type":8,"value":1718,"toc":1961},[1719,1722,1740,1744,1775,1779,1782,1823,1836,1840,1875,1877,1907,1911,1934,1936],[11,1720,712],{"id":1721},"swee-ai",[17,1723,1724,1725,1728,1729,1732,1733,1736,1737],{},"AI agents are starting to spend real money — and run away with it. (A single Claude Code session once dispatched ~300 sub-agents and burned ",[32,1726,1727],{},"$333"," before anyone caught it.) Swee AI is the layer that governs an agent ",[72,1730,1731],{},"fleet",": a custody cage ",[32,1734,1735],{},"caps and revokes"," the spend, and a routing oracle answers the question every fleet-runner actually has — ",[32,1738,1739],{},"\"is the marginal spend worth it?\"",[49,1741,1743],{"id":1742},"the-cage-enforced-at-consensus-not-by-prompt","The cage — enforced at consensus, not by prompt",[17,1745,1746,1747,1750,1751,1754,1755,1758,1759,1762,1763,1766,1767,1770,1771,1774],{},"The agent's budget lives in an on-chain ",[37,1748,1749],{},"Balance\u003CT>"," inside a shared ",[32,1752,1753],{},"SpendCage","; the agent's own wallet holds only gas. The single exit is ",[37,1756,1757],{},"withdraw_and_pay",", which is ",[32,1760,1761],{},"bounded"," (per-call + lifetime caps), ",[32,1764,1765],{},"recipient-allowlisted"," (it can only pay addresses you pre-approved), and ",[32,1768,1769],{},"revocable"," (a shared kill-switch registry). The withdraw and the payment are ",[32,1772,1773],{},"fused into one transaction"," — a compromised agent can't withdraw-then-redirect.",[49,1776,1778],{"id":1777},"evidence-live-verified-on-sui-testnet","Evidence — live-verified on Sui testnet",[17,1780,1781],{},"I ran a compromised-agent script against the deployed cage and watched the kill-switch fire, with real Move abort codes:",[89,1783,1784,1791,1801,1810],{},[92,1785,1786,1787,1790],{},"in-budget spend → ",[32,1788,1789],{},"settles",", the seller is paid",[92,1792,1793,1794,1797,1798],{},"over the per-call cap → aborts ",[37,1795,1796],{},"MoveAbort 803","  ",[37,1799,1800],{},"EPerTxLimitExceeded",[92,1802,1803,1804,1797,1807],{},"a non-allowlisted payee → aborts ",[37,1805,1806],{},"MoveAbort 811",[37,1808,1809],{},"ERecipientNotAllowed",[92,1811,1812,1813,1816,1817,1797,1820,1822],{},"after ",[37,1814,1815],{},"revoke"," → the next spend aborts ",[37,1818,1819],{},"MoveAbort 805",[37,1821,190],{},"; reclaim returns the remainder",[17,1824,1825,1826,1829,1830,1835],{},"Package ",[37,1827,1828],{},"0x01d90f…7274"," on testnet — ",[21,1831,1834],{"href":1832,"rel":1833},"https:\u002F\u002Fsuiscan.xyz\u002Ftestnet\u002Fobject\u002F0x01d90f7ae7347a1b4aca581fc7905704b9ac32a626600261a4f4e33a2ddb7274",[25],"verifiable on SuiScan",". 509\u002F509 Move unit tests green.",[49,1837,1839],{"id":1838},"the-routing-oracle-is-it-worth-the-spend","The routing oracle — \"is it worth the spend?\"",[17,1841,1842,1843,1846,1847,1850,1851,1854,1855,1858,1859,1862,1863,1866,1867,1870,1871,1874],{},"The other half of fleet cost isn't ",[72,1844,1845],{},"theft",", it's ",[72,1848,1849],{},"waste",": running Opus on work a $0.10 model would nail. The comparator fires one prompt at N models in parallel and reports real ",[32,1852,1853],{},"cost · latency · quality"," side by side — on one Sui-consensus question it measured a ",[32,1856,1857],{},"~30× cost spread"," for comparable answers. Every run appends a ",[37,1860,1861],{},"routing.comparison"," event (bitemporal, content separated from metadata) — the seed of a ",[32,1864,1865],{},"data flywheel",": ",[72,1868,1869],{},"which model wins at which task",", routed on ",[32,1872,1873],{},"verifiable"," outcomes, not vibes. That data is the moat a price-only router (OpenRouter) can't buy.",[49,1876,685],{"id":684},[17,1878,1879,1880,1883,1884,1887,1888,1890,1891,1894,1895,1898,1899,1902,1903,1906],{},"The cage binds its kill-switch to ",[32,1881,1882],{},"one"," registry ",[32,1885,1886],{},"by object identity"," (",[37,1889,719],{},"), not by the registry's ",[72,1892,1893],{},"owner",". The owner-bound version is a one-to-many check — a delegator owns many registries, so a compromised agent can present a ",[72,1896,1897],{},"second"," same-owner registry that was never revoked in, and walk around the kill-switch. ",[32,1900,1901],{},"22 passing tests missed this; an adversarial audit of the actual bytecode caught it."," The fix pins the exact registry at creation and asserts it on every spend and reclaim. Saltzer & Schroeder's ",[72,1904,1905],{},"complete mediation",", the honest way — and a working reminder that green tests are not verification.",[49,1908,1910],{"id":1909},"the-honest-claim","The honest claim",[17,1912,1913,1914,1917,1918,1921,1922,1925,1926,1929,1930,1933],{},"A compromised agent ",[32,1915,1916],{},"can't exceed your caps"," and ",[32,1919,1920],{},"can only pay addresses you pre-approved","; ",[32,1923,1924],{},"revoke recovers the remainder."," It does ",[32,1927,1928],{},"not"," make theft impossible — the delegate key is the authority, capped. Custody ",[32,1931,1932],{},"bounds the blast radius","; it is not a co-signer. (The line matters: it's defensible, and it's true.)",[49,1935,87],{"id":86},[89,1937,1938,1949,1955],{},[92,1939,1940,1943,1944,1887,1946,952],{},[32,1941,1942],{},"Cage:"," deployed + live-verified, testnet ",[37,1945,1828],{},[21,1947,933],{"href":1832,"rel":1948},[25],[92,1950,1951,1954],{},[32,1952,1953],{},"Comparator + flywheel:"," runs locally against live model APIs; each run mints a routing-outcome event.",[92,1956,1957,1960],{},[32,1958,1959],{},"Agent memory"," on Walrus (decentralized, owned by the user — not a provider's server).",{"title":109,"searchDepth":110,"depth":110,"links":1962},[1963,1964,1965,1966,1967,1968],{"id":1742,"depth":110,"text":1743},{"id":1777,"depth":110,"text":1778},{"id":1838,"depth":110,"text":1839},{"id":684,"depth":110,"text":685},{"id":1909,"depth":110,"text":1910},{"id":86,"depth":110,"text":87},"A custody cage that caps and revokes an AI agent's spending (deployed on Sui), plus a routing oracle that answers \"is the marginal spend worth it?\" from verifiable, per-task model-performance data.",{},[],{"title":712,"description":1969},"projects\u002Fsweeai","Governing an agent fleet — cap the spend, route the cost",[129,130,131,1626,1976],"Walrus","_VoQ4n4smaCfp085jqb5BYJjcky01dMF3JwXd1JaShk",1792110477714]