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