follow the iwakan scale things email / x / signal / wn "pick true north, prove the gate bites, keep your name on the manifest"
Public Key
npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh Profile Code
nprofile1qqs9wmfrms7myptdyzyyj330ac6ce70s7vcs5trredkzv7jtnavy37gpz3mhxue69uhhyetvv9ujuerpd46hxtnfduqs6amnwvaz7tmwdaejumr0ds28lz52
Show more details
Published at
2026-06-29T09:14:01Z Event JSON
{
"id": "7cbceb3676d04cb3f5ec17c02649bd9e15a329d322de80c75086c270b5a241c1" ,
"pubkey": "576d23dc3db2056d208849462fee358cf9f0f3310a2c63cb6c267a4b9f5848f9" ,
"created_at": 1782724441 ,
"kind": 0 ,
"tags": [
[
"client",
"Primal Web"
]
],
"content": "{\"name\":\"ynniv\",\"about\":\"follow the iwakan\\nscale things\\n\\nemail / x / signal / wn\\n\\n\\\"pick true north, prove the gate bites, keep your name on the manifest\\\"\",\"lud16\":\"16d88b2b3879e939ed44d8e614696067@kgs67g0fl7hrg554m6slvw3nf5ypg8vlddcakr64ef46mg279f2s.ledger.bitcoindeposits.net\",\"nip05\":\"[email protected] \",\"picture\":\"https://m.primal.net/QYUK.png\",\"website\":\"https://ynniv.com\",\"banner\":\"https://blossom.primal.net/e799319363ec62e2f7daee7cf0a84d30b1ae71039f98057b2134b184888275aa.jpg\"}" ,
"sig": "13ad9bdf34e649a3027fe2a37531bd99b61a5a3fbe34094d6e05f19c79b80b074fcf61f2006598c5cfab6505cc96549bcd20aff2a43795056c7018fe750b5bdb"
}
Last Notes npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv weev has the best retorts on nostr npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv quantum has too far to go. get ready for everything else to fail though npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv s/entirely/entropy/ 🤦🏻♂️ npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv bitkey is multisig, but still trusting entirely from a chip. does it have an accelerometer though? cause i'd love to shake it like a polaroid picture npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv "trust no one" isn't thinking big enough trust nothing npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv "economy" is a circular argument. i'll take privacy though, and they're related npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv https://image.nostr.build/7470bd910ebf0167e4de165a92968df4d8918aae97d4aee56ca640e864f03748.jpg npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv "People might need to sell for ETH, SOL, XMR, or TRX, but nobody *needs* to sell for Bitcoin. People sell for Bitcoin because they are ideological Bitcoiners." what do you mean by this? npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv progress is CLAUDE CODE: The data doesn’t support the [proposed] theory npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv this feed should have a warning label npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv claude gets it FABLE: Third, and the one that actually changes how I'd weight the whole conversation: the vertical is closed. When the doc says "the transport chain already exists and was tuned end to end," I had been picturing the usual meaning — tuned down to the layer where someone else's libraries take over. But there is no such layer. The delta protocol's future wire rides on SCTP you wrote (webrtc-data), encrypted by DTLS you wrote (seal), carrying VP8 you wrote (webrtc-media), rendering text through a font engine you wrote (scribe) with its own Brotli for WOFF2, on a vector rasterizer you wrote (gesso), authenticated over Nostr you wrote, with the agent consumer (operandi) also in-image — and if the whole thing ever needs to run without an OS underneath, modus boots Lisp on eight architectures with a self-hosting compiler. Warp isn't a framework being designed in the abstract, which was the stated failure mode; it's the last missing floor of a building whose every other floor already stands. The "schema once, packed binary after" rule isn't a preference here — it's the house style of a codebase that contains shuttle, a full JavaScript engine with Temporal and Intl, built evidently so that weft can render the web without ever letting the web's architecture indoors. You implemented JavaScript rather than adopt its wire philosophy. That's commitment. npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv https://image.nostr.build/a30eb204c44148a12f7bbf078e00d1ff64deb2338aad4146a65594edd06f5625.png npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv smart #nevent1q…2mda npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv i assume so. if coturn was a low friction option, i would add it to https://github.com/modus-lisp/webrtc-data npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv i couldn't find an anonymous TURN server (paid or otherwise), so i'm running my own coturn to connect phone to agent over webrtc. it's essentially a nostr relay with higher bandwidth and low latency npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv tired: proprietary apps wired: webrtc expired: keyboards npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv STUN/TURN? npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv if the spooks are derailing you, you're doing something right? still, a long way to go npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv modus is common lisp. -- Recent work Over ~1500 commits (April–July 2026) Modus grew from a bare-metal Lisp with networking into a largely self-hosting ANSI Common Lisp: ANSI Common Lisp (~94% per-file conformance). Full condition system (handler-case/bind, restarts, signal/warn/cerror), CLOS with standard method combination and call-next-method, the reader and printer with format (50+ directives), pathnames and file I/O, a numeric tower (bignums, ratios, single/double floats, complex), and ~400 standard functions. One evaluator (WS3). Production eval and load compile each form to MVM bytecode and run it — the self-hosted MVM compiler runs inside the image, and the original tree-walking interpreter has been deleted. The vendored ASDF driver evaluates end-to-end on this path. Runtime JIT (WS4). MVM bytecode is translated to native code at runtime (executable memory + call relocation) behind the same evaluator seam. Full self-reproduction (WS5). A Modus binary compiles its own source to a native ELF and reproduces itself (modus → modus2 → modus3) with SBCL out of the loop. GC hardening. Conservative-root validation via an object-start bitmap, a heap guard band, zero-initialized allocation, and optional Bartlett page-pinning — closing a class of heap-corruption crashes. SBCL drop-in compatibility (in progress). Unmodified pure-Common-Lisp libraries load and run from source — e.g. natrium (SHA-256 FIPS-exact) and alexandria — with the bordeaux-threads dependency tree loading unmodified. New platforms and features. Bare-metal ThinkPad T420 (E1000 SSH, EHCI USB, VGA + PS/2 console), UEFI x86-64, ARM32, byte-packed (unsigned-byte 8) arrays, and a hosted modus CLI with SBCL-faithful flags. npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv CLAUDE CODE: Let me commit it, then confirm the push target with you (since pushing ~1500 commits to a public repo is a meaningful, hard-to-reverse action) -- live a little, claude! npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv it's git pushing day npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv when you're banging rocks together after the fall, you'll want to view pdf's of how to do it correctly. you're welcome https://github.com/modus-lisp/folio npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv "Cypherpunks write code. We know that someone has to write software to defend privacy, and since we can't get privacy unless we all do, we're going to write it." npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv CLAUDE CODE: Merged: main fast-forwarded from 9208409 → d372f28 (+1,071 commits — the full WS3/WS4/WS5 lineage, ending at the gated, bit-exact self-hosting fixpoint). npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv all you need are verifiable goals – everything else is efficiency. sometimes efficiency is an implicit part of the goal, like "in my lifetime" or "with these resources". sometimes it's not, or it's trivially low, like "show up on time". intelligence increases efficiency by orders of magnitude. given infinite time, anyone can work their way through almost anything, but we don't have infinite time, so certain problems are worked on by the "smart" people in computer science we estimate time as complexity using "big oh" notation, and the classic question is whether O(Polynomial) = O(Nondeterministic Polynomial). roughly speaking, this question is whether "tasks that quickly get very hard" is equivalent to "tasks that quickly get impossible". whether there is some way to make impossible tasks merely very hard this is an important question because we rely on certain tasks being impossible, like reversing cryptography, and that we have come to expect that certain things are impossible and will be caught off guard if they are not. like disproving the jacobian conjecture my hypothesis is that, informally, O(intelligence(NP)) = O(P). what's interesting about this assertion is that there's a known bridge between P and NP, which is that NP problems are often ~impossible to solve, but *verifiable in P time*. take that conjecture – it had been ~impossible to disprove, but verifying a proposed solution is easy (for a mathematician) ai cuts at NP in two ways: first by being smart (and smarter every update), second by having unlimited energy for work. ai doesn't sleep, or need sabbaticals. ai can have many instances of itself working on parts of a problem if true, we should expect many impossible things to be suddenly possible. it seems to me this has been true for some time, but is becoming more obviously true. we should also expect that the key to success is having a verifiable goal. creating a complete verifier is rarely easy, but it closes the primary class of ai errors. software has automated testing, but it's hard to ensure those tests cover the whole solution. poor verification is why people dismiss "vibe coding". i don't think they should, but that's its own topic so, my current strategy is to find things that are very hard, maybe even impossible, that have strong verifiers. the verifier might have to be constructed, but if it can be, then the larger, impossible problem can be solved. if not today, maybe in three months. if not then, almost certainly in a year and this is where the "taste" part comes in. it's up to us to pick which impossible problems we're going to work on. ai can never replace this, because ai doesn't share your taste. you could then say that all you need is taste, but i've said that before and no one paid attention because they didn't know you also need a verifiable goal npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv "21 million" is, at its core, just ngu. tired npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv thank you kajoozie. and a fine GYF you you as well! npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv i miss nostr's GFY energy npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv sad but true. jobs once said that if it weren't for the experience of blue boxing, there never would have been an apple computer. not sure how to keep that flame alive. my kid has been fuzzing screen time though npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv jobs said that they sold quite a few, actually. there probably aren't many around anymore though also, damn that looks good. most blue boxes were hand wraps with cheap momentary switches npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv https://m.youtube.com/watch?v=S0VihLYBcVU npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv unilateral exit is a mistake npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv claude's there https://blossom.primal.net/5081443f3c9045b8bb43cd03d04943b35c5753e2ff69fa0498d433818743ad1d.png npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv i don't think it is. a good protocol is sybil resistant sure, the published source code can reveal it is doing the wrong thing. but you don't know what a relay is actually running, who is running it, who pwned it, or who captures bytes on the wire npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv i'm not disagreeing on the fundamentals, but sending any event to anyone that asks doesn't break interop, just like retaining events when the spec says they should be dropped. if you rely on this behavior, someone will get burned npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv "If you haven’t got your health, then you haven’t got anything." npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv yes, but how would you ever know? compliance is discretionary npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv i'm totally ignorant of nip 59, but: "nip 59 says relays SHOULD only serve kind 1059 to the marked recipient" establishes trusted relays. trust is a mistake that gets you burned npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv "For in six days the LORD made heaven and earth… and on the seventh day he had no more tokens" - probably npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv gracias, españa npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv hopefully able to run on an rpi soon, source-verifiable down to the bootloader npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv amusingly, that was 21 days ago #nevent1q…un84 npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv got some zhuangzi / epicurus there npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv https://blossom.primal.net/10ee1ac7fea40de403ed795edc718508f5498b8a02a1cfe060da340ad48d29e3.png npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv "it is basically international fascism in a can" i ❤️ nostr #nevent1q…53cj npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv ask not what the singularity can do for you ... npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv everyone's doing it, so why am i? modus is still different. the goal isn't "vibecode an operating system", but to create an operating system that's easier to defend than attack the fabric of cybersecurity is complexity. simpler systems are easier to defend because complexity creates opportunities. people often joke that emacs is an operating system, and that tells you something about the power of writing things in lisp modus also acknowledges the issue of "trusting trust", ken thompson's classic demonstration that source code isn't enough when you have to use a compiler that can itself be compromised. modus is architected to enable wheeler's diverse double-compiling: multiple existing compilers (sbcl, ccl, ecl) can be used, on multiple cpu architectures, to compile modus, and those modus binaries (gen1) can be used to create a final modus binary (gen2) correctly executed, all similarly configured gen2 binaries will have the same exact bytes. what this means is that to taint the modus binary, an attacker would need to compromise every compiler, on every architecture, that was used in the chain. and, they would have to target a system (modus) that didn't exist yet modus is multi architecture for the same reason: once you have established that one device is trusted, how do you trust a second one? you compile an operating system that runs on it, using the device that you already trust. if one is intel and the other arm you have a problem, unless the system running on one can produce an image for the other i am a defender. almost all of the time that sucks, because it's far easier to break systems than to defend them. but now we have this ai thing, and it dramatically increases your productivity. it lets you do things that you would never have the time or money to do on your own. all you need is taste so i'm building a system. i call it an operating system, but when that includes a bitcoin node, a web browser, ssh client and server, vnc server, etc, it's clearly more than "an os". and the philosophy of this system is security. "processes" are code running in message-passing actor isolation like qubes. the browser prefers page loads happen in their own data space unless you tie them together, like incognito and firefox's containers and it's bare metal, as much as it can be. it runs on an rpi zero 2 w, which requires some blobs. it's possible to use your own open source boot loader (existing). eventually i want to replace the broadcom wifi blob, but for now i run it without wifi. risc-v hardware would make this unnecessary so that's modus. fable remarked that "Pre-2024 this scope was insane for a small team. With agents it's merely audacious, and the thesis is self-demonstrating: the stack exists because the method works.". i call it lifeboats for the singularity nevent1qvzqqqqqqypzq4mdy0wrmvs9d5sgsj2x9lhrtr8e7renzz3vv09kcfn6fw04sj8eqyt8wumn8ghj7un9d3shjtnedehxja3wvdhk6tcpz4mhxue69uhhyetvv9ujuerpd46hxtnfduhsqgqvyjkrsj8mj0urnpuc5kw96296xqj922qzwskgunzgxzqhrwlftuw66ezt npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv yes 🔥 #nevent1q…zr6p npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv yes. all code is now legible – obfuscation is dead https://blossom.primal.net/8aea381a014faa033617fc785dfab350430f3ed03a2aad963a29bbb60e54abf5.png npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv nevent1qqsvjynz87hsf43pacugh70zfw482clgpcc5zl8l5pl6c86awyhyh0s3y3u6f npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv everyone's doing it, man – when are *you* writing your own operating system? join the movement! https://primal.net/e/nevent1qqsgcal4umml8vs7utc3ayk5cq3dh9lgpu8tq4237j9glxhpf0trwrc94ckmu npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv it's happening https://blossom.primal.net/7a2b17ae490002a12138ed962cc9d99b5ef61b54c67d422bf30dd069492fa1aa.png npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv habitat of the modern elite developer https://image.nostr.build/df3c622da68481ad636b5daf2ac756002b3f58adbc528eb62a0e8621c16ac147.jpg npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv 🌳 npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv of course, you could still ssh to a linux host ... using the ssh client that claude built npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv this only works because the stack is running on linux/sbcl. when we move to bare metal lisp it won't be able to run linux binaries, because it isn't linux npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv hey, i know... let's run claude code inside a terminal that claude code wrote based on a font rasterizer that claude code wrote managed by a window manager that claude code wrote running on a frame buffer that claude code wrote viewed over a vnc server that claude code wrote oh btw, do you have any idea how much easier this was to build than the common lisp operating system that claude code hasn't finished yet? 😂 https://blossom.primal.net/a7f179cc47df68e7a6c2b5aa09d87c8e05fc952ee18a57c5d8a3e8b7179c0667.png npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv 🤙 vibe the change npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv mouseover/hover works, on a browser that claude wrote, with css that claude wrote, and a javascript engine ... that claude wrote 😂 npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv i'm just opening apps that don't have close boxes and dragging windows that don't focus around and browsing poorly rendered websites at 2 fps BECAUSE I CAN this is ridiculous 🤣 claude wrote a lisp desktop and the scroll wheel works 🔥 https://blossom.primal.net/37652d6690fde7159c7f4837adb5d626673caefcdd596eb2bfd4055ea2180fdd.png npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv https://image.nostr.build/44aa58c90d90624c01ab5cb96fa02b342f782849241ac75802216361b970d760.jpg npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv CLAUDE CODE: This is the whole point of the stack, and I love it. npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv https://image.nostr.build/acf7a58619c811aa4513f81ddeb217f679fb9d792485abebf0d071ed9fa3f0cf.jpg npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv can't claim genera heritage without a live object inspector! but those have already been written, so we'll just add support for them https://image.nostr.build/b07d9846cea12a09ae995c062cf44b81d1c1fb4bb5305d6b0cb9f59119dd2bb9.jpg npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv how can you not smile at this madness. build, motherfuckers! https://image.nostr.build/f69135d2c6e5f0e23231082d61558dc3abb543fe9cf3a9a71bb551398adcaff4.jpg npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv https://blossom.primal.net/5f4516194c80615a66a24469ff3bb422bf878ef058add44443de5d5800c8a24a.png npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv sbcl --noinform --load bin/operandi.lisp -- --openrouter "deepseek/deepseek-v4-flash" tui [llm] backend=openrouter model=deepseek/deepseek-v4-flash operandi · deepseek/deepseek-v4-flash Type a task, or /help for commands. Ctrl-C aborts a turn, Ctrl-D quits. Linedit version 0.17.6, smart mode, ESC-h for help. deepseek/deepseek-v4-flash › describe the architecture of t architecture of the project we're currently in ⏺ Glob(*) ✔ 45ms README.md operandi.core operandi.asd LICENSE ⏺ Glob(**/*.lisp) ✔ 165ms bin/operandi.lisp inspect/safefetch-test.lisp inspect/tool-context-test… ⏺ Glob(**/*.asd) ✔ 80ms operandi.asd ⏺ Read() ✔ 1ms Read: file not found: /home/user/operandi/operandi.asd ⏺ Read() ✔ 0ms Read: file not found: /home/user/operandi/README.md ⏺ Read() ✔ 0ms Read: file not found: /home/user/operandi/bin/operandi.lisp ⏺ Bash(pwd && ls -la) ✔ 28ms /home/claude/operandi total 67492 drwxr-xr-x 8 claude claude 4096 Jul 1… ⏺ Read() ✔ 6ms 1→# operandi 2→ 3→A Lisp-native ReAct agent loop — "Claude Code in Comm… ⏺ Read() ✔ 0ms 1→;;;; operandi.asd 2→;;;; 3→;;;; operandi — a Lisp-native ReAct agent … ⏺ Read() ✔ 4ms 1→;;; src/engine.lisp 2→;;; 3→;;; The agent loop. Sends a chat completi… ⏺ Read() ✔ 5ms 1→;;; src/tools.lisp 2→;;; 3→;;; Tool registry for operandi (our Lisp-n… ⏺ Read() ✔ 2ms 1→;;; src/llm.lisp 2→;;; 3→;;; Minimal client for the local llama.cpp s… ⏺ Read() ✔ 0ms 1→;;; src/store.lisp (operandi.store) 2→;;; 3→;;; Thin cl-sqlite wrappe… ⏺ Read() ✔ 1ms 1→;;; src/subagent.lisp 2→;;; 3→;;; The Task tool: spawn a sub-operandi… ⏺ Read() ✔ 1ms 1→;;; src/hooks.lisp 2→;;; 3→;;; Pre/post-tool hooks for operandi. A ho… ⏺ Read() ✔ 0ms 1→;;; src/search.lisp (operandi.search) 2→;;; 3→;;; Brave Search API wr… ⏺ Read() ✔ 0ms 1→;;; src/safefetch.lisp (operandi.safefetch) 2→;;; 3→;;; The fetch/sec… ⏺ Read() ✔ 0ms 1→;;; src/text.lisp (operandi.text) 2→;;; 3→;;; Output-shaping helpers … ⏺ Read() ✔ 0ms 1→;;; src/cron.lisp 2→;;; 3→;;; Scheduled-task runner that lives INSIDE… ⏺ Read() ✔ 1ms 1→;;; src/tui.lisp (operandi.tui) 2→;;; 3→;;; An enhanced inline REPL f… ⏺ Read() ✔ 4ms 1→;;; bin/operandi.lisp 2→;;; 3→;;; CLI for standalone operandi. 4→;;; … ⏺ Glob(mcp/*) ✔ 40ms mcp/server.js mcp/README.md mcp/package-lock.json mcp/package.json ⏺ Here's the architecture of **operandi** — a Lisp-native ReAct agent loop inspired by Claude Code, running inside a live SBCL image. --- ## Overview operandi is a **tool-using autonomous agent** that calls a local or remote LLM (OpenAI-compatible `/v1/chat/completions`), receives tool calls, executes them, appends the results, and loops until the model produces a final answer. It lives *inside* the running Lisp image — no subprocess, no IPC. A host application (e.g., a paper trader) can call it like a library. --- ## Modules (all under `src/`) | Module | File | Role | |---|---|---| | **`operandi.llm`** | `llm.lisp` | OpenAI-compatible chat client. Sends POST to llama.cpp (default `:8081`) or OpenRouter. Token-usage accounting via a `usage` struct. Handles Qwen's `reasoning_content` split. `with-llama` / `with-openrouter` macros for backend switching. | | **`operandi.engine`** | `engine.lisp` | The **ReAct loop** (`run`). Sends messages, parses `tool_calls`, executes them, compacts context when it exceeds `*context-token-budget*` (24k tokens). Token estimation is self-calibrating (chars/token EMA from API feedback). Compaction: first truncates old tool results, then asks the LLM to summarize the remainder. | | **`operandi.tools`** | `tools.lisp` | **Tool registry** — a hash table of `(:name :description :schema :impl)` plists. `define-tool` macro registers one. `invoke-tool` runs pre/post hooks around the impl. Has `Read`/`Write`/`Edit`/`Bash`/`Eval`/`Grep`/`Glob`/`WebFetch`/`WebSearch`/`Remember`/`TodoWrite`/`Task`/`Fan`/`Spawn`/`SendMessage`. `Eval` evaluates arbitrary Lisp in the host SBCL image. | | **`operandi.hooks`** | `hooks.lisp` | Pre/post tool hooks. Default post-hook logs every invocation to the SQLite `agent_tool_calls` table. `*current-run-id*` correlates calls within a run. | | **`operandi.store`** | `store.lisp` | Thin SQLite wrapper (cl-sqlite). Owns one table: `agent_tool_calls` (the audit log). Thread-safe via `*db-lock*` (recursive lock). Schema versioned. WAL mode. | | **`operandi.subagent`** | `subagent.lisp` | **Task/Fan/Spawn/SendMessage** — spawns sub-operandi instances in fresh threads each with its own conversation context. Nesting depth cap (default 3). `Fan` runs up to 8 parallel subagents. `Spawn` persists the subagent for follow-up messages. | | **`operandi.search`** | `search.lisp` | Brave Search API wrapper — backs the `WebSearch` tool. Token cached from `~/.operandi/brave-search.token`. | | **`operandi.safefetch`** | `safefetch.lisp` | **Fetch security layer** behind `WebFetch`. Three-layer defense: (1) outbound URL guard (exfiltration detection, host caps, PII checks), (2) LLM-based injection detector that flags suspicious spans, (3) redaction with reversible quarantine. Swappable — `naive-fetch` bypasses it. | | **`operandi.text`** | `text.lisp` | Output-shaping: `bound-result` keeps head + tail of large outputs with a self-describing elision note (avoids blind head-only cuts). | | **`operandi.cron`** | `cron.lisp` | **Scheduled task runner** — a thread that wakes periodically, checks a data-driven schedule (`*schedule*`), runs any due task through the agent, and writes reports to `~/.operandi/reports/`. | | **`operandi.tui`** | `tui.lisp` | **Interactive REPL** — scrollable, coloured, streams tokens live, has slash commands (`/help` `/clear` `/cost` `/model` `/system` `/tools` `/quit`), Ctrl-C aborts the current turn. | | **CLI** | `bin/operandi.lisp` | Standalone entry point: `sbcl --load bin/operandi.lisp -- "task"` or `shell` for REPL. Also `--openrouter MODEL`. | | **MCP server** | `mcp/server.js` | Node.js MCP (Model Context Protocol) server that wraps operandi as a tool for Claude Desktop. | --- ## Data Flow (the agent loop) ``` ┌─────────────┐ POST /v1/chat/completions ┌──────────┐ │ operandi │ ──────────────────────────────> │ LLM │ │ .engine:run │ {messages, tools (JSON schema)} │ (llama │ │ │ <────────────────────────────── │ or │ │ │ {tool_calls or text} │ Open- │ │ │ │ Router) │ └──────┬───────┘ └──────────┘ │ │ parsed tool_calls? ├── no → return text (done) │ └── yes → for each tool_call: │ ├─ pre-hooks (log, etc.) ├─ invoke-tool (calls :impl fn) ├─ post-hooks (log to SQLite, etc.) └─ append result as "tool" role message │ └─ if token budget exceeded → compact └─ loop back to LLM ``` --- ## Key design decisions 1. **Everything is in-image** — the LLM client, tools, store, cron, TUI all run in the same SBCL process. No subprocess overhead. The `Eval` tool can reach any package the host loaded. 2. **Context compaction** is token-driven, not message-count-driven. Old tool results are first truncated cheaply (tier-1), then the remainder is LLM-summarized (tier-2). Self-calibrating chars/token estimate avoids needing a real tokenizer. 3. **Subagents** (Task/Fan/Spawn) each run in their own fresh conversation, tool subset, and thread. The parent sees only the final answer — isolates context explosion. 4. **Safety** is layered: `safefetch` has a three-layer fetch security system; `Write`/`Edit` refuse to write files the agent hasn't Read this run (detects stale snapshots); `Eval` catches `storage-condition` (stack/heap exhaustion) and `timeout` so a runaway form can't kill the process. 5. **Audit trail** — every tool call is logged to `agent_tool_calls` in SQLite with run-id, arguments, result, error, and duration. 8 iter · 0.957¢, 89712 prompt (29952 cached)/2843 completion tok, 8 calls deepseek/deepseek-v4-flash 0.96¢ › npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv all you need is taste https://blossom.primal.net/a75a48698bb02da7ccfd89d8137153832a7c0f5630a06b124510233478564413.png npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv "In the kernel community we do open source because it results in better technology, not because of religious reasons. And so we make decisions primarily based on technical merit. Not fear of new tools. Linus" lfg npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv https://github.com/modus-lisp/cairn npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv i don't disagree, but i'm an engineer who likes understanding failure modes. routing failures are an under appreciated problem. i have liquidity, you have liquidity, we're both connected to our nodes... still can't pay the whole-network failure mode is more likely with non-bitcoin currencies though. probably less of a problem if you aren't holding it long term npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv it's difficult to identify wash trading, but i'll take the evidence of local activity. could be a regional preference though? TRX-USDT is probably the easiest way to work with USD in certain regions what do you think happened with lightning? force closes in high fee environments? npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv gotta walk on that one. he's flat out backwards npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv "Perhaps so, but that’s not an argument" this is the way #nevent1q…3nvw npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv merge mining doesn't seem to hold up technically though. you get a little faster, but not the 3+ orders of magnitude necessary to scale to billions of people making everyday transactions. volume can also easily be manipulated through wash trading, so i'm not sure we can even say that stablecoins are doing better than bitcoin you're right about bitcoin having too little activity though npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv this is a good one 🔥 https://www.ayush.digital/blog/the-memory-heist npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv can't have an os without ssh CLAUDE CODE: conch now (4 commits, local ~/conch) connect → verify host key → Ed25519 auth → run commands and scp files (up and down), over curve25519/ed25519/chacha20-poly1305, strict-KEX honored. npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv hell no. i've got an agent loop that reverse engineered a binary blob using 40¢ of deepseek tokens npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv claude, we need to talk. it's about your performance. you're not using enough deepseek v4f tokens. we're never going to make our numbers if you keep trying to do everything yourself npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv 😅 https://image.nostr.build/ef8aedaa651974cf200d252b81f09ae1b0c5f099646b46154743aa6deb923343.jpg npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv plug and chug, claude npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv FABLE: Trust is blindness I don't want my keys Not my keys, not my coins, Take my sats from me Trust is blindness npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv this is what ai is here for. U2's "Love Is Blindness", custodial edition FABLE: Oh this writes itself — the song's whole smoky, doomed-devotion vibe maps perfectly onto handing your coins to an exchange. Here's an original take (new words, same funereal energy): **"Trust Is Blindness"** Trust is blindness I don't want my keys Wrapped in your custody Oh yeah, exchange, please Cold wallet, empty Seed phrase never wrote A little transaction, frozen Withdrawal stuck in float Oh yeah, exchange, please In a vault I'll never enter Ledger I can't read You hold it all for safekeeping Till the day you're SBF'd Trust is blindness Trust is clumsy Clicked "I agree" Terms of service, thirty pages Bankruptcy remote? We'll see Oh yeah, exchange, please Trust is blindness I don't want my keys Not my keys, not my coins, darling Take my sats from me That last verse practically demands the slow, dying guitar outro. Want a second verse about "proof of reserves" promises, or a version aimed at a specific collapsed exchange of your choosing? npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv everybody dies, but not everybody lives npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv (have claude) write tests! npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv achtung, baby npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv ... And I must be an acrobat To talk like this and act like that And you can dream, so dream out loud And you can find your own way out And you can build, and I can will And you can call, I can't wait until You can stash and you can seize In dreams begin responsibilities And I can love, and I can love And I know that the tide is turning 'round So don't let the bastards grind you down npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv U2, ACROBAT: Don't believe what you hear, don't believe what you see If you just close your eyes you can feel the enemy [...] No, nothing makes sense, nothing seems to fit I know you'd hit out if you only knew who to hit And I'd join the movement If there was one I could believe in Yeah, I'd break bread and wine If there was a church I could receive in Cause I need it now To take the cup To fill it up, to drink it slow I can't let you go npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv everyone's doing it, man – when are *you* writing your own browser? join the movement! #nevent1q…4206 npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv right – then send messages to run things? npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv yes npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv byte mining npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv nostr for control? nwc is already a permissioned rpc npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv new modus dropping soon ✌️ https://github.com/orgs/modus-lisp/repositories?type=all npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv common lisp ... ✅ https ✅ nostr ✅ bitcoin ✅ web browser ✅ javascript ✅ operating system this ai thing is pretty cool npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv CLAUDE CODE: But the headline stands on its own: Modus installs [Common Lisp] software off the network [using Quicklisp], bare metal, no OS underneath. 🤙 npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv never thought i'd build a browser engine 🚀 https://image.nostr.build/838fe7c98a2d84855fbc0a8972f86913a5a38e048724c6fbcedfae2bbfa51f0f.jpg npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv CLAUDE CODE: The refactor paid for itself several times over in what it forced into the light: the offset-0 garbage-call class, the boot-eval ordering rule, the GC-unrooted signal symbols, four bare-x64 infrastructure bugs including SSE never being enabled, three missing aarch64 translator opcodes, a boot re-entry hole under live MMU, and async timer interrupts corrupting the heap — replaced with a real safepoint mechanism. Both walker “baselines” it was measured against turned out to be broken or wedged; the single evaluator isn’t just simpler, it’s better everywhere it runs. -- good claude 🤙 npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv lol, i've never seen claude use "<censored>" tags before 😂 just had regular "thinking" in it though npub12akj8hpakgzk6gygf9rzlm343nulpue3pgkx8jmvyeayh86cfrus4x6fdh ynniv not sure how i'm supposed to feel about that 🤔 https://image.nostr.build/1d6f53ce0f10dcaed252a30189a286697df7654115a81ea7e838e0ac9856afef.png