<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: danbitengo</title><link>https://news.ycombinator.com/user?id=danbitengo</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Mon, 31 Aug 2026 13:27:17 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=danbitengo" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[Static Evaluation of Model Switching in LLM Agents Scores the Wrong World]]></title><description><![CDATA[
<p>Article URL: <a href="https://arxiv.org/abs/2608.08239">https://arxiv.org/abs/2608.08239</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49504287">https://news.ycombinator.com/item?id=49504287</a></p>
<p>Points: 4</p>
<p># Comments: 0</p>
]]></description><pubDate>Mon, 31 Aug 2026 00:28:52 +0000</pubDate><link>https://arxiv.org/abs/2608.08239</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=49504287</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49504287</guid></item><item><title><![CDATA[The Art of the Fugue: Minimizing Interleaving in Collaborative Text Editing]]></title><description><![CDATA[
<p>Article URL: <a href="https://arxiv.org/abs/2305.00583">https://arxiv.org/abs/2305.00583</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49399355">https://news.ycombinator.com/item?id=49399355</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 22 Aug 2026 13:06:11 +0000</pubDate><link>https://arxiv.org/abs/2305.00583</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=49399355</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49399355</guid></item><item><title><![CDATA[Understanding operational 5G: a first measurement study (2020)]]></title><description><![CDATA[
<p>Article URL: <a href="https://blog.acolyer.org/2020/10/05/understanding-operational-5g/">https://blog.acolyer.org/2020/10/05/understanding-operational-5g/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49198365">https://news.ycombinator.com/item?id=49198365</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 06 Aug 2026 15:53:23 +0000</pubDate><link>https://blog.acolyer.org/2020/10/05/understanding-operational-5g/</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=49198365</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49198365</guid></item><item><title><![CDATA[Manta: Network Topology Adaptation for Self-Evolving Multi-Agent Systems]]></title><description><![CDATA[
<p>Article URL: <a href="https://arxiv.org/abs/2607.28527">https://arxiv.org/abs/2607.28527</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=49133707">https://news.ycombinator.com/item?id=49133707</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Sat, 01 Aug 2026 12:07:22 +0000</pubDate><link>https://arxiv.org/abs/2607.28527</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=49133707</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=49133707</guid></item><item><title><![CDATA[New comment by danbitengo in "Show HN: Oath – prove a human authorized each action before your AI agent acts"]]></title><description><![CDATA[
<p>AI agents are taking real actions — deleting files, sending emails, merging code. When something goes wrong, the question is always: did a human actually authorize that, and can you prove it?<p>Oath is an open protocol for cryptographically signed human intent. Before an agent acts, it checks for an attestation:<p>oath attest --action "database:delete_records:project_alpha" \<p><pre><code>        --context "cleanup approved"
</code></pre>
oath verify --action "database:delete_records:project_alpha"<p># → ATTESTED   proof: a1b2c3d4<p>If there's no attestation, the action is blocked. The interesting part: the absence of a signature is itself evidence. An agent can't claim it was authorized if there's no cryptographic proof that it was.<p>Security model: the private key never leaves your machine. The agent only calls verify, never attest. Attest is a human command. As secure as SSH key storage - same threat model, no central authority to compromise.<p>The repo has a working demo - an agent running 5 actions, 2 attested, 3 blocked — and a protocol spec at v1.0.0 (CC0, public domain). Anyone can implement the protocol in any language.<p>What's not there yet: multi-device sync and a Python package. Would appreciate feedback on the protocol design, especially the action class format (namespace:action:scope) and whether the signing model covers edge cases I haven't thought of.</p>
]]></description><pubDate>Tue, 03 Mar 2026 13:39:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=47232153</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=47232153</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47232153</guid></item><item><title><![CDATA[Show HN: Oath – prove a human authorized each action before your AI agent acts]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/oath-protocol/oath-protocol">https://github.com/oath-protocol/oath-protocol</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47232113">https://news.ycombinator.com/item?id=47232113</a></p>
<p>Points: 1</p>
<p># Comments: 2</p>
]]></description><pubDate>Tue, 03 Mar 2026 13:36:07 +0000</pubDate><link>https://github.com/oath-protocol/oath-protocol</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=47232113</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47232113</guid></item><item><title><![CDATA[New comment by danbitengo in "Show HN: SyncKit – Open two browser tabs and watch CRDTs sync in real-time"]]></title><description><![CDATA[
<p>Try it now: <a href="https://localwrite-demo.fly.dev" rel="nofollow">https://localwrite-demo.fly.dev</a><p>Open in two tabs, join a room, start typing. That's the pitch.<p>SyncKit is an offline-first sync engine. Rust core compiled to WASM, TypeScript SDK, works in any framework.<p>What's new since v0.1.0 (which some of you saw here 75 days ago):<p>- Live demo (LocalWrite) - collaborative editor you can try right now<p>- Rich text CRDTs (Fugue + Peritext) not just LWW anymore<p>- Live cursors and presence<p>- React/Vue/Svelte adapters<p>- Multi-language servers (TypeScript, Python, Go, C#)<p>- 2,100+ tests, formally verified with TLA+<p>The demo shows character-level sync, slash commands, a community Word Wall, and offline editing. Disconnect your network, keep typing, reconnect - it merges automatically.<p>Known limitations:<p>- SDK undo/redo not yet wired into the demo editor (browser native works)<p>- No E2E encryption yet<p>Security note on the demo: LocalWrite is a public collaborative space with no authentication. Rooms are accessible to anyone with the URL and so don't share sensitive or personal data. The server sees all content in plaintext. Rate limiting and input validation are in place, but there's no content moderation or identity verification. Treat it like a public whiteboard.<p>GitHub: <a href="https://github.com/Dancode-188/synckit" rel="nofollow">https://github.com/Dancode-188/synckit</a><p>npm: @synckit-js/sdk<p>Happy to answer questions about the CRDT implementation, architecture, or anything else.</p>
]]></description><pubDate>Tue, 10 Feb 2026 15:41:48 +0000</pubDate><link>https://news.ycombinator.com/item?id=46961290</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46961290</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46961290</guid></item><item><title><![CDATA[Show HN: SyncKit – Open two browser tabs and watch CRDTs sync in real-time]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/Dancode-188/synckit/releases/tag/v0.3.0">https://github.com/Dancode-188/synckit/releases/tag/v0.3.0</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46961250">https://news.ycombinator.com/item?id=46961250</a></p>
<p>Points: 4</p>
<p># Comments: 1</p>
]]></description><pubDate>Tue, 10 Feb 2026 15:40:22 +0000</pubDate><link>https://github.com/Dancode-188/synckit/releases/tag/v0.3.0</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46961250</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46961250</guid></item><item><title><![CDATA[New comment by danbitengo in "Show HN: SyncKit – TLA+ verified CRDT for local-first apps (zero unsafe Rust)"]]></title><description><![CDATA[
<p>Hey HN, I'm Daniel, creator of SyncKit.<p>I've been obsessed with the Ink & Switch "Local-First Software" vision for some time now—apps that work offline, feel instant, and give users control of their data. But every time I tried to build a local-first app, I hit the same wall: integration complexity.<p>The existing CRDT libraries (Yjs, Automerge) are incredible—they pioneered the algorithms that make local-first work. Kevin's optimization work on Yjs is masterful, and Automerge changed how I think about distributed systems.<p>But they're designed as modular primitives. You compose networking, storage, and conflict resolution yourself. That flexibility is powerful for complex systems, but it creates what I call the "Day 1 problem" for local-first: you spend 3 days wiring infrastructure before writing features.<p>I built SyncKit to solve this.<p>Different philosophy: Where Yjs gives you powerful primitives (build your own local-first stack), SyncKit gives you a pre-wired local-first database. Persistence, sync, presence—built-in, not plugins.<p>The technical approach:
- Rust core with zero unsafe blocks (you can grep the codebase)<p>- TLA+ verified (explored 6.5M states to prove correctness)<p>- 154KB bundle (everything compiled together)<p>- 1,081 tests, 80 chaos tests<p>Performance: Competitive within 1-2ms of Yjs for standard ops. The win is local-first DX - one package that handles offline, sync, and conflict resolution.<p>What's included:
- Rich text editing (Fugue algorithm for non-interleaving edits)<p>- Live cursors & presence<p>- Undo/redo (CRDT-native)<p>- IndexedDB persistence<p>- React/Vue/Svelte adapters<p>Built this in Nairobi, 9pm-3am. v0.1.0 got 601 stars in 3 weeks which honestly shocked me.<p>Try it live: <a href="https://synckit-demo.netlify.app" rel="nofollow">https://synckit-demo.netlify.app</a>
GitHub: <a href="https://github.com/Dancode-188/synckit" rel="nofollow">https://github.com/Dancode-188/synckit</a><p>Happy to answer questions about the TLA+ verification or the local-first architecture choices.</p>
]]></description><pubDate>Fri, 19 Dec 2025 15:25:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46326813</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46326813</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46326813</guid></item><item><title><![CDATA[Show HN: SyncKit – TLA+ verified CRDT for local-first apps (zero unsafe Rust)]]></title><description><![CDATA[
<p>Article URL: <a href="https://github.com/Dancode-188/synckit/releases/tag/v0.2.2">https://github.com/Dancode-188/synckit/releases/tag/v0.2.2</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46326786">https://news.ycombinator.com/item?id=46326786</a></p>
<p>Points: 2</p>
<p># Comments: 1</p>
]]></description><pubDate>Fri, 19 Dec 2025 15:20:58 +0000</pubDate><link>https://github.com/Dancode-188/synckit/releases/tag/v0.2.2</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46326786</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46326786</guid></item><item><title><![CDATA[New comment by danbitengo in "Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)"]]></title><description><![CDATA[
<p>That's a fair point. The description does assume some familiarity with local-first patterns. I'll think about how to make the "why you'd want this" clearer for people outside that space. I appreciate the honest feedback</p>
]]></description><pubDate>Fri, 28 Nov 2025 04:15:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=46075463</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46075463</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46075463</guid></item><item><title><![CDATA[New comment by danbitengo in "Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)"]]></title><description><![CDATA[
<p>That's actually a really cool idea! Notes are just documents, so the sync model would work well. Hadn't thought about Obsidian specifically but I like it.</p>
]]></description><pubDate>Fri, 28 Nov 2025 04:07:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=46075418</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46075418</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46075418</guid></item><item><title><![CDATA[New comment by danbitengo in "Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)"]]></title><description><![CDATA[
<p>For P2P multiplayer with Svelte/SolidJS, SyncKit might not be your best fit because:<p>- It's client-server (not P2P)<p>- No Svelte adapters yet (coming in v0.2.0)<p>- Multiplayer games usually need P2P for lower latency<p>Better options for your use case:<p>- Jazz (jazz.tools) - Purpose-built for P2P collaborative apps<p>- TinyBase - Perfect signal model for Svelte/Solid, but you'd add your own sync<p>- Yjs - Mature CRDT with good P2P support<p>- RxDB - Heavier but has everything (queries, reactive, plugins)<p>If you went client-server instead of P2P, SyncKit would work once v0.2.0 adds Svelte support.<p>What's your preference? P2P or client-server? That'll determine the best fit.</p>
]]></description><pubDate>Fri, 28 Nov 2025 03:50:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=46075345</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46075345</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46075345</guid></item><item><title><![CDATA[New comment by danbitengo in "Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)"]]></title><description><![CDATA[
<p>You've hit on the core limitation because SyncKit has the same issue. Document/key-value like Loro and Yjs. The relational model problem is fundamental to CRDTs. They guarantee conflict-free convergence because documents are independent, but that breaks with foreign keys and joins. Can't have arbitrary SQL queries and guaranteed convergence without coordination.<p>ElectricSQL and PowerSync solve it differently (full SQL but weaker offline guarantees). For SyncKit, document-based state is an architectural choice, not something v0.2.0 will change.<p>I'm curious to know how you're working around this with Loro. Are you building your own query layer or are you keeping everything denormalized?</p>
]]></description><pubDate>Thu, 27 Nov 2025 20:24:42 +0000</pubDate><link>https://news.ycombinator.com/item?id=46072945</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46072945</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46072945</guid></item><item><title><![CDATA[New comment by danbitengo in "Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)"]]></title><description><![CDATA[
<p>I appreciate the enthusiasm! And yeah, I'm planning to start blogging about the build process and some of the technical decisions probably after launch week settles down. I'll post about it on LinkedIn and in the GitHub Discussions when it's live. If you're following either, you'll see it!<p>Thanks for the interest!</p>
]]></description><pubDate>Thu, 27 Nov 2025 20:02:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=46072770</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46072770</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46072770</guid></item><item><title><![CDATA[New comment by danbitengo in "Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)"]]></title><description><![CDATA[
<p>See my response to skybrian above. You're both asking the same good question about the LWW messaging. Short version: system-level guarantees, not user-level concurrent edit preservation.</p>
]]></description><pubDate>Thu, 27 Nov 2025 19:52:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=46072688</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46072688</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46072688</guid></item><item><title><![CDATA[New comment by danbitengo in "Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)"]]></title><description><![CDATA[
<p>That's a great suggestion. The memory benchmark being buried is a fair point. I'll move it up top and create a proper benchmarks.md page. Thanks for the detailed feedback.</p>
]]></description><pubDate>Thu, 27 Nov 2025 19:47:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=46072640</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46072640</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46072640</guid></item><item><title><![CDATA[New comment by danbitengo in "Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)"]]></title><description><![CDATA[
<p>I haven't tried InstantDB yet, but it looks really interesting. Thanks for the pointer! Will definitely check it out.</p>
]]></description><pubDate>Thu, 27 Nov 2025 19:44:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=46072617</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46072617</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46072617</guid></item><item><title><![CDATA[New comment by danbitengo in "Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)"]]></title><description><![CDATA[
<p>You're right that this is confusing.<p>"Zero data loss" means system-level guarantees (no corruption from network failures, crashes, etc), not that concurrent edits to the same field are preserved. LWW definitely clobbers one of the edits.<p>What v0.1.0 does give you is field-level granularity (edits to different fields don't conflict) and guaranteed convergence (all devices reach the same state). But yeah, same field = last write wins.<p>The Rust core already has better CRDTs (Text, Counter, Set) that handle concurrent edits properly. They just need to exposed in the TypeScript SDK for v0.2.0.<p>I should clarify this in the docs. Thanks for pointing it out.</p>
]]></description><pubDate>Thu, 27 Nov 2025 19:29:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=46072468</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46072468</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46072468</guid></item><item><title><![CDATA[New comment by danbitengo in "Show HN: SyncKit – Offline-first sync engine (Rust/WASM and TypeScript)"]]></title><description><![CDATA[
<p>Thanks! For native Android, not directly yet because v0.1.0 is Rust → WASM → TypeScript (web/Node/Deno/Bun).<p>But since the core sync engine is pure Rust, native Android bindings are definitely possible. The main paths would be:<p>1. JNI bindings directly from Rust<p>2. Or using the existing WASM core with a JVM WASM runtime<p>Haven't prioritized this yet since v0.1.0 focused on web/JS ecosystem, but if there's demand for Android, I could explore it. Are you working on something that needs offline sync on Android?</p>
]]></description><pubDate>Thu, 27 Nov 2025 18:01:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46071661</link><dc:creator>danbitengo</dc:creator><comments>https://news.ycombinator.com/item?id=46071661</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46071661</guid></item></channel></rss>