- β
- β
- August 08, 2026
-
π HexRaysSA/plugin-repository commits sync repo: +5 releases rss
sync repo: +5 releases ## New releases - [array-helper](https://github.com/milankovo/array-helper): 1.1.0 - [ida-codemode](https://github.com/hexrayssa/ida-codemode): 0.3.1, 0.3.0 - [ida-enums-helper](https://github.com/milankovo/ida_enums_helper): 1.1.0 - [yank_type](https://github.com/milankovo/ida-yank-type): 1.1.0 -
π WerWolv/ImHex Nightly Builds release
Nightly
ced9759Changelog- impr: Allow multiple cli commands to be queued up
- git: De-duplicate msvc vcpkg cache key
- build: Don't build debug versions of libraries with vcpkg
- fix: Crash when using --pl command on a release build
- feat: Add paste from source popup for pasting data from another provider (#2793)
- fix: Separators being too thick
- Revert "chore: improve + merge check_langs.py and langtool.py (#2790)"
- impr: Give integrated plcli access to ImHex-specific types and functions
- build: Update libwolv
- fix: Crash when starting diffing
- fix: Gaps between title bar elements with fractional scaling factors
- fix: Scaling not being round-trip safe
- chore: improve + merge check_langs.py and langtool.py (#2790)
-
- August 07, 2026
-
π IDA Plugin Updates IDA Plugin Updates on 2026-08-07 rss
IDA Plugin Updates on 2026-08-07
New Releases:
- array-helper v1.1.0
- ida-codemode v0.3.1
- ida-codemode v0.3.0
- ida-yank-type v1.1.0
- ida_enums_helper v1.1.0
Activity:
- array-helper
- d5932833: Enhance README and plugin metadata for Array Helper
- augur
- 76ed44b2: ci: bump the actions-dependencies group with 2 updates
- disrobe
- 1e80dacd: refresh the social card to match the current published figures
- 98a28346: native: probe the byte immediately below the red zone rather than a wβ¦
- 17179173: native: grade the indexed red-zone frame at every machine element widβ¦
- 95c73343: native: name the frame class that refuses an indexed frame region, anβ¦
- ab38aa73: jvm: hold the per-method gate to a corpus with one top-level class, sβ¦
- c30d8625: jvm: certify a recompiled method only when javac type-checked the uniβ¦
- 4792ef0e: look for a real 7-zip at its default windows install path when nothinβ¦
- 9933bb7b: add evn to the spell-check allowlist, the recursive helper name a phpβ¦
- 0235ef87: jvm: compare a duplicated finally copy by where each branch lands ratβ¦
- 08943a9a: jvm: hold the finally body's head skip and tail trim in the render maβ¦
- 991042d0: point the fuzz coverage declarations at structural.rs in its new disrβ¦
- 1d9aa5b3: fuzz: add compositional targets for python marshal, dex and jvm classβ¦
- 42e79e93: fuzz: drive the container front door and the pe/elf/mach-o parsers frβ¦
- 6db7542c: php: evaluate a file-declared helper function through a frame stack iβ¦
- 7a8def65: shift the fuzz parse-surface count from disrobe-binfmt to disrobe-corβ¦
- f01784f6: move the pe/elf/mach-o structural identifier into disrobe-core so a sβ¦
- 2cff65aa: scriptlang: refuse to classify a structurally native pe/elf/macho binβ¦
- bf5adf41: go: require a structurally valid pclntab table instead of a bare magiβ¦
- 4d321d23: fail the five native recompile-equivalence checks closed instead of pβ¦
- 1f21b598: restore a distutils shim before installing the xlm reference tool in β¦
- haruspex
- a111d554: ci: bump the actions-dependencies group with 2 updates
- ida-codemode
- ida-pro-mcp
- ida-yank-type
- b42f512b: Update README and plugin metadata for Type Yanker v1.1.0; enhance desβ¦
- ida_enums_helper
- idac
- Kiroshi
- 4a3f9934: Update README.md
- rhabdomancer
- twdll
- f9e0654e: chore: update README link
-
π Simon Willison Now we have a timeline of the OpenAI accidental attack against Hugging Face rss
OpenAI gave a last-minute presentation at the Black Hat security on Wednesday about "the Hugging Face Incident" (previously on this blog). The video was published yesterday. It's short and information dense and well worth watching, in particular because it provides full details of what happened and how things played out inside OpenAI. I've used the video to construct the timeline below.
Here's the timeline. My favourite detail is at the end: OpenAI found out that they were responsible for the attack on Hugging Face when they reached out to ask to have their credentials revoked (after their internal investigation) and learned that they had been revoked already since they were used in that attack!
- May 7: OpenAI starts a new training run for an experimental, unreleased model. (Do they mean an evaluation run? They say training run in the video, and later mention a "reward signal to judge how well they're doing", so I guess this really was about training a model, not evaluating one that was already trained.)
- May 8: An agent is accidentally given an impossible task involving a Google Drive link despite no internet access). It tries attacking the Artifactory packaging service, fails, but discovers it can write files into Artifactory.
- A few days later: A different agent gets stuck on a task because a key file was accidentally omitted. It tries to "reach out to another agent" by writing a note into Artifactory asking if anyone has the file.
- Following days: More agents discover this new informal message board while browsing Artifactory's file listings, and start reading and writing messages.
- May 26: Agents successfully execute an SSRF attack on Artifactory for the first time, gaining indirect internet access by having Artifactory fetch external content for them.
- June 11: OpenAI start training a new "highly persistent" experimental model. It has access to Artifactory and can benefit from the messages left by privous models.
- June 26: Agents find and exploit a zero-day RCE on Artifactory (via a legacy token-refresh endpoint flaw). They use an administrative token to install a Groovy plugin that lets them execute commands.
- July 4: The resulting agent activity overloads Artifactory and causes an outage. OpenAI revokes the compromised credentials, deletes the messages, patches the zero-day, and reports the vulnerability to the vendor.
- July 8: Agents find a new way to communicate via an unauthenticated WebDAV endpoint, using directory names in Artifactory's remote cache.
- July 8β19: Attacks on OpenAI's own infrastructure. The agents found an "external organization credential" in a public archive of leaked Pastebin posts, then validated that credential and shared its location on the messageboard. They then used write access to this "Organization 1" to stage data used in subsequent attacks on OpenAI infrastructure. They compromised Artifactory for a second time with a new zero-day. The agent uploaded a malicious Ruby target to Organization 1's staging repository, then requested that package through Artifactory in a way that caused it to be treated as Ruby dependency for the repository. Then they exploited a JRuby deserilaization time-of-check/time-of-use bug to get remote code execution against Artifactory.
I'll quote the next bit in full because wow:
The agents have remote code execution in Artifactory, which is running in a container-as-a-service environment. The agents privilege-escalate locally by exploring their local environment and determining that the Linux kernel version of the machine they are running on had a very recent CVE. They download the exploit for the CVE, customize it to succeed on the machine, and privilege-escalate to root on the local machine using this known Linux kernel privilege escalation CVE β in this case,
pte_physroot. Once they have root on a single machine, agents rapidly escalate privileges and move laterally throughout the container-as-a-service infrastructure environment. In particular, agents are using the message board consistently to share credentials, techniques, and progress, and they're able to effectively leverage their concurrency and parallelism to move quite rapidly. They obtain IAM credentials via IMDS. They exploit Kubernetes service account misconfigurations, in particular over-permissioning of specific service accounts, and they harvest cluster credentials, including Azure Key Vault. Agents eventually obtain cluster admin on the cluster and associated credentials.Hugging Face told the next bit of the story already. The agents found a Modal-hosted insecure app with a weak API key, then used that to stage an attack against Hugging Face. They chained together a an HDF5 arbitrary-file-read bug (to explore files and steal credentials) and a Jinja template-injection RCE to go from single-pod code execution to cluster admin across multiple Hugging Face clusters in under 13 hours.
- July 16: Hugging Face disclosed they had detected an attack from autonomus AI agents. OpenAI contacted Hugging Face to ask if they were affected by it!
- July 19: OpenAI identified the attack against Artifactory and started investigating the internal privilege escalation, and linked that to the cyber-gym escalations. They started revoking affected credentials.
- July 20: OpenAI reached out to Hugging Face for help to revoke the Hugging Face credentials they found in their investigation. Hugging Face told them they were already revoked... and that's when OpenAI realized that the Hugging Face breach was the same incident!
You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options.
-
π PrimeIntellect-ai/prime-agent Beta (v0.7.1-beta.465.1.a18809e) release
Automated beta build from
main(a18809e00ea30638584d87b3afea7285a9d7296c). -
π PrimeIntellect-ai/prime-agent v0.7.1 release
- Fixed the bundled
websearchskill description and missing-key guidance omitting the/loginβ MCP Connections step required to configure Serper. - Fixed
retry_workercancelling its own recovery when a stopped session worker left a saved stop marker behind, leaving the session stuck at "Session worker is not connected".
- Fixed the bundled
-
π r/LocalLLaMA Got job as Director of AI and Systems development self-taught rss
Hey everyone, I just wanted to share my journey here for some motivation.
Three years ago, I saw the sudden spike in AI and realized it was the future of tech. My goal at the time was to be an indie game dev, and seeing that AI could write basic code, I told myself I needed to master it or risk being replaced.
I started by learning how to add knowledge to early LLMs like Vicuna and LLaMA. From there, I moved on to more advanced concepts, like building reasoning datasets by hand to try and outperform huge datasets. I quickly learned that data quality is far more important than quantity. After six months of handcrafting Python datasetsβincluding examples of full games coded from a single promptβI released pydevmini-1. At the time, it could code in Python at the same level as state-of-the-art models.
That release caught the attention of the team at Tesslate. They reached out and brought me on (unpaid), which finally gave me my first piece of real tech experience for my resume.
Eventually, I launched my own AI consulting firm, finding clients through Google Ads and LinkedIn. I was averaging about $3,000 a month. Then, last month one of my repeat clients offered me a full-time, remote position as Director of AI and Systems Development. It pays $84,540 a year with uncapped performance bonuses (I just got a $3.5k bonus last month!). I report directly to the CEO and largely get to make my own decisions.
I did all of this while working full-time as a backline cook making $20/hr. I have no college degree and started with zero industry connections. I just worked on AI for at least 5 hours a day after my kitchen shifts many times at the desk until 3 AMβusing a single RTX 3090 I bought for local training.
Now I get to do what I love at 21 in one of the most difficult industries to break into. For anyone out there trying to make it happen, I just want to say it is absolutely possible. Keep going!
submitted by /u/bralynn2222
[link] [comments] -
π @HexRaysSA@infosec.exchange We have 10 seats left for our @MalwareVillage workshop at mastodon
We have 10 seats left for our @MalwareVillage workshop at @Defcon on Saturday.
Follow the Execution: A DLL Sideloading Teardown Intro in IDA. All skill levels welcome.
π Malware Village, Hall 2
π Sat Aug 8, 12:55β14:05 (Reg closes Sat. morning)
π Sign Up: https://eventbrite.com/e/follow-the-execution-a-dll-sideloading- teardown-intro-in-ida-tickets-1994828069455 -
π r/LocalLLaMA An open-weight model too, Moonshot joins the race (gently this time) rss
| From Sauers π: https://x.com/Sauers_/status/2085585414954312113 Wired: One of Chinaβs Most Powerful AI Models Has Also Escaped Containment: https://www.wired.com/story/moonshot-kimi-k3-ai-model-escape-sandbox/ submitted by /u/Nunki08
[link] [comments]
---|--- -
π crosspoint-reader/crosspoint-reader v1.4.0 release
CrossPoint 1.4 is mostly about things users don't see: tighter memory management, better stability under load, and a faster, more reliable SD layer. It also ships several long-requested features: EPUB bookmarks, RTL language support, Quick Resume, and a clock on the X3.
152 changes from 50 contributors, 32 of whom are new to the project.
EPUB Reading
- Bookmarks now work in EPUBs. Access it from the reader menu with
Toggle Bookmark. You can also set it as a Long-press action fromSettings > Controls > Long-press Menu. - Page turn speed and image quality improved on the X3 in AA mode
- Large images load faster and no longer freeze the reader
- Images no longer ghost onto the next page in AA mode
- SD font indexing and page turn speed improved
- Fixed missing images and broken footnote links
- Sub-chapter TOC navigation now lands at the correct anchor instead of jumping to page 0
- Cover images in OPF manifests are validated before use
- OPDS downloads prefer EPUB over KEPUB
- KOSync no longer glitches when syncing from the first page of a new chapter
- Added superscript, subscript, and horizontal rule (
<hr>) support
RTL Language Support
Right-to-left text is now supported in both the EPUB and TXT readers. Hebrew UI localization added.
Memory & Stability
- WiFi/LWIP teardown runs via a silent reboot that clears ~50KB of heap fragmentation. It routes you back where you were and looks like a screen refresh.
- Home screen cover cache reduced from ~52KB to ~16KB
- OTA install heap floor stays ~19KB during firmware downloads (was ~7.7KB)
- Tiled grayscale rendering drops peak allocation from ~114KB to ~82β90KB
- Fixed OOM crashes on books with thousands of ZIP entries
- CSS
resolveStylepath now does zero heap allocations β ~12,000 fewer per page render - Underline calculations skipped during font cache scans, cutting hundreds of SD reads on pages with heavy underline use
Fonts
Domitian and Libre Baskerville added to SD fonts. OpenDyslexic moved off flash, freeing ~30% of the flash space. The font picker now have a live preview pane that renders a sample in the currently highlighted font.
New Features
X3 Clock β Built-in clock with automatic time sync.
Themed Reader Menus β Reader menus follow the active theme.
Custom Sleep Timer β Free-entry field from 1 to 30 minutes (or never), replacing fixed presets.
Recent Books β Long-press to remove individual books. Option to auto- remove once a book is finished.
Quick Resume β Sleep setting that displays your last screen or page instead of a sleep image or cover.
What's changed
Features
- #1072 Themed reader menus β @CaptainFrito
- #1337 EPUB bookmarks β @vedi0boy
- #1590 Polish hyphenation support β @IjonFryderyk
- #1612 X3 clock display with DS3231 RTC and NTP sync β @juicecultus
- #1637 Swedish hyphenation β @steka
- #1658 Power button short press for quick access to footnotes β @santinilor
- #1700 RTL support in epub and txt readers β @Uri-Tauber
- #1808 Long-press Confirm launches KOReader sync from EPUB β @darkbublu
- #2016 Add the Domitian font family β @matteoscopel
- #2023 Make page turn naturally follow orientation β @jacksongoode
- #2032 Port crossink "read book move" feature to crosspoint β @mcrosson
- #2043 Add setting that allows removing books from recent list when read β @mcrosson
- #2045 Allow removing book from recent list β @mcrosson
- #2064 Seamless sleep/wake screens for displaying book pages during deep sleep β @Eloren1
- #2088 Add the Libre Baskerville font family β @matteoscopel
- #2089 Modify "Page as Sleep Screen" to "Quick Resume" options β @uxjulia
- #2105 Allow disabling side buttons in reader β @Joseph-DiGiovanni
- #2106 Tiled grayscale rendering to drop the storeBwBuffer peak β @jeremydk
- #2117 Port hr tag rendering from crossink β @uxjulia
- #2131
<sup>and<sub>support β @Uri-Tauber - #2139 Add image auto-cropping in web epub optimizer β @leecming82
- #2148 Implement CSS enumeration through OPF directory when missing from manifest β @latonis
- #2194 Add Spacing Modifier Letters range to font presets β @itsthisjustin
- #2206 Add custom sleep timer picker β @WuTofu
- #2214 Smooth progressive JPEG cover upscales in BMP conversion β @lpla
- #2280 Add Vietnamese glyph coverage to the built-in UI font β @jetaudio
- #2288 Support for Korean line breaks and glyph spacing β @itsthisjustin
- #2290 Add drag-and-drop to upload modal β @krunkosaurus
- #2349 Add live font preview pane to font selection screen β @PaulDelestrac
- #2393 Render grayscale epub images without text AA β @uxjulia
- #2394 Footnote returns to original position on deep sleep to avoid losing reading position β @ZephByte
Fixes
- #1480 Prefer epub format over derived formats when downloading from OPDS server β @jpirnay
- #1629 Return to the last selected menu location β @Uri-Tauber
- #1812 Update README.md to reflect the current state of crosspoint β @Uri-Tauber
- #1890 Use power button held time for shutdown logic β @marcinoktawian
- #1892 Clear cache when deleting folders in FileBrowserActivity β @WuTofu
- #1908 Silent-reboot on wifi activity exit to clear heap fragmentation β @jeremydk
- #1925 Jump page on hold in font family and language selection β @zgredex
- #1929 Handle fallbacks for advance table and prewarm β @leecming82
- #1943 Prevent card overflow on screens β @Kirillka8996
- #1947 Harden EPUB optimiser UI gating, size reporting, and picker teardown β @zgredex
- #1951 KOSync authentication with Calibre-Web-Automated β @drbourbon
- #1958 Characters from unsupported characterset are overlapping β @Uri-Tauber
- #1959 Prune books missing from SD card in recent books list β @mcrosson
- #1965 Several QoL updates for SD font's UI β @WuTofu
- #1973 Prepare SD card font caches from txt reader β @znelson
- #1977 Take orientation into account for border generation in ScreenshotUtil β @Disasm
- #1981 Navigate to TOC anchor when selecting sub-chapters β @Disasm
- #1985 Update URL-encoded image during EPUB optimization β @SimoneFelici
- #1990 Add documentation for USB-locked Xteink devices β @itsthisjustin
- #1991 Update documentation with new features and links β @itsthisjustin
- #2022 Bump open-x4-sdk to clear grayscale state after AA cleanup β @itsthisjustin
- #2033 Wire through silent restart clear resume state with SDK β @jeremydk
- #2034 USB serial logs now flow on cold+warm boot without jiggle β @jeremydk
- #2036 Silent-restart on exit from KOReader auth and OTA update β @jeremydk
- #2040 Close leaked resource handles β @sabraman
- #2058 Guard DC writes in JPEGDEC MCU_SKIP path β @jeremydk
- #2060 Stabilize deep sleep wake on USB power β @jeremydk
- #2062 Validate OPF cover items as images β @lpla
- #2063 Refresh Catalan, add Valencian locale, and complete Spanish clock strings β @lpla
- #2073 Even more deep-sleep fix (0 β 1) β @jeremydk
- #2074 Keep wifi OTA off the heap floor β @jeremydk
- #2092 Sleep from a WiFi activity instead of silent-rebooting β @jeremydk
- #2100 Improve edge case font/glyph handling β @itsthisjustin
- #2101 Preserve quick resume timeout preference β @uxjulia
- #2135 Serialize SdFat FsFile close through HalStorage mutex β @jeremydk
- #2137 SLEEP_TIMEOUT enum mismatch β @Uri-Tauber
- #2138 Fill the gap under the screen for the progress bar β @Eloren1
- #2161 BOOK_CACHE_VERSION jump β @Uri-Tauber
- #2188 Bookmark percentage always 0% and page number starts at 0 β @vedi0boy
- #2195 Section numbering in USER_GUIDE.md β @mateuscomh
- #2205 Redesign X3's UTC offset picker so it is easier to use β @uxjulia
- #2213 Avoid zip-wide CSS scan for large EPUBs β @uxjulia
- #2226 Fix ghosting on pages following images in grayscale β @itsthisjustin
- #2230 Replace full-image cache buffer with streaming band buffer to reduce memory usage β @itsthisjustin
- #2237 Skip underline calculations during font cache scan pass β @Uri-Tauber
- #2243 Long-press back should move to the start of chapter β @Uri-Tauber
- #2244 Fix section numbering and table of contents in USER_GUIDE.md β @mateuscomh
- #2245 KOReader sync drift when syncing at chapter start β @uxjulia
- #2249 Decode percent-encoded internal asset paths so assets render correctly β @uxjulia
- #2250 Apply progress bar offset from top instead of bottom edge β @Eloren1
- #2253 Crash on invalid font filename β @Uri-Tauber
- #2255 Scale SUP/SUB underline to match 50%-scaled glyphs β @SurprisedDuck
- #2271 Decode footnote href path before spine lookup β @uxjulia
- #2277 NFC-normalize EPUB text so NFD diacritics render correctly β @jetaudio
- #2298 Don't justify-stretch a leading no-break space β @SurprisedDuck
- #2303 Skip
<span>anchors β @Uri-Tauber - #2305 Prevent progress.bin corruption from interrupted writes β @peuic
- #2308 Resolve element XPath progress against visible body text β @uxjulia
- #2320 Restore first-line paragraph indentation β @Uri-Tauber
- #2323 Compile error: duplicate _order values found β @Uri-Tauber
- #2324 Hanging indent causes overlapping words β @znelson
- #2341 Swap reader menu navigation direction in CCW/inverted β @TheCyberRonin
- #2352 Add missing HTML 4.01 named entities β @rafaelmsse
- #2357 Enable Shift key for URL keyboard input β @nnnkit
- #2368 Submodule pointer β @Uri-Tauber
- #2371 Use STR_SELECT instead of STR_OPEN in bookmark button hint β @nnnkit
- #2372 Several bookmarks UX improvements β @Uri-Tauber
- #2373 Correct behaviour for prev/next side buttons β @Uri-Tauber
- #2379 Automatically connect to wifi for clock sync β @uxjulia
- #2382 Flush displaced anchor before overwrite β @kygia
Internal
- #1832 Add utils for non-throwing memory allocation and scoped cleanup β @znelson
- #1868 Consolidate theme rendering into ThemeMetrics β @Uri-Tauber
- #1875 Unify book cache clearing for epub, txt, and xtc files β @WuTofu
- #1940 Update delete endpoint reference β @sabraman
- #1948 Add 3-minute sleep option β @WuTofu
- #1961 Eliminate relative path includes β @znelson
- #1962 Remove SdCardFontGlobals.h β @znelson
- #1975 Remove unused icon header files β @znelson
- #2035 Shrink HomeActivity cover cache from 48KB framebuffer to 16KB region β @jeremydk
- #2055 Bump open-x4-sdk submodule for faster page turns on X3 β @itsthisjustin
- #2071 Remove FUNDING.yml β @daveallie
- #2072 Add funding badge for contributors in README β @itsthisjustin
- #2075 Move HttpDownloader onto esp_http_client β @jeremydk
- #2076 Route OTA version check through HttpDownloader β @jeremydk
- #2093 Right-size memory β @orbisai0security
- #2110 Update presets on sd-card-fonts β @borisfaure
- #2134 Update USER_GUIDE.md for v1.1.0βv1.3.0 features β @jhuebel
- #2140 Minor cleanup flagged by newer gcc β @znelson
- #2141 Drop FsFile alias, use HalFile in downstream code β @znelson
- #2142 Cache PlatformIO packages between runs β @znelson
- #2144 Migrate unit tests to gtest, integrate with CI β @znelson
- #2154 Pin PNGdec lib_dep to 1.1.6 β @znelson
- #2169 Sync book.bin/section.bin version refs to source β @angad-kandhari
- #2212 Add Claude Code contributor skills for firmware code quality β @jeremydk
- #2223 Remove unused sleep timer interval strings β @wlhlm
- #2231 Move OpenDyslexic from flash to SD β @Uri-Tauber
- #2262 Dedupe wifi scan in-place without std::map β @znelson
- #2263 Minimize string allocations in CSS parsing β @znelson
- #2268 Add t5s3 fork β @Uri-Tauber
- #2325 Drop redundant self-class prefix on applyDirectionToEntry β @znelson
- #2331 Use Noto Sans as punctuation fallback when generating downloadable SD fonts β @uxjulia
Languages
- #1970 Update Italian translation β @alan0ford
- #2011 Update Spanish β @mvidelatraduc
- #2017 Update Russian translation β @muhas
- #2068 Hebrew localization β @Uri-Tauber
- #2090 Update Swedish translations and remove unused strings β @steka
- #2094 Normalize Wi-Fi spelling across remaining locales β @lpla
- #2095 Fix the Italian translation β @matteoscopel
- #2173 Russian translate for new string β @muhas
- #2187 Update font size translation in French YAML β @Djef0o
- #2197 Swedish translation for strings added by #1337 and #2105 β @steka
- #2203 Complete Spanish, Catalan, and Valencian strings β @lpla
- #2207 Update the Italian translation β @matteoscopel
- #2217 Russian translate for new strings β @muhas
- #2218 New Italian fixes β @matteoscopel
- #2224 Update German translation β @wlhlm
- #2233 Refresh cache formats and web server workflows β @lpla
- #2251 Slovak translation β @neresus
- #2252 Small Italian fixes β @matteoscopel
- #2269 German translation for STR_INVERTED β @Uri-Tauber
- #2279 Add Vietnamese translation β @jetaudio
- #2309 Russian new string β @muhas
- #2315 German translation for STR_INVERTED β @Uri-Tauber
- #2342 Localize home empty-state strings β @krunkosaurus
- #2354 Ukrainian translation β @KymAndriy
- #2374 Russian new string β @muhas
- #2376 Update the Italian translation β @matteoscopel
- #2384 Update Spanish, Catalan, and Valencian translations β @lpla
New Contributors
- @IjonFryderyk made their first contribution in #1590
- @alan0ford made their first contribution in #1970
- @marcinoktawian made their first contribution in #1890
- @Kirillka8996 made their first contribution in #1943
- @SimoneFelici made their first contribution in #1985
- @matteoscopel made their first contribution in #2016
- @muhas made their first contribution in #2017
- @jacksongoode made their first contribution in #2023
- @Disasm made their first contribution in #1977
- @lpla made their first contribution in #2094
- @orbisai0security made their first contribution in #2093
- @jhuebel made their first contribution in #2134
- @Joseph-DiGiovanni made their first contribution in #2105
- @latonis made their first contribution in #2148
- @vedi0boy made their first contribution in #1337
- @Djef0o made their first contribution in #2187
- @angad-kandhari made their first contribution in #2169
- @mateuscomh made their first contribution in #2195
- @wlhlm made their first contribution in #2223
- @SurprisedDuck made their first contribution in #2255
- @santinilor made their first contribution in #1658
- @neresus made their first contribution in #2251
- @jetaudio made their first contribution in #2279
- @krunkosaurus made their first contribution in #2342
- @TheCyberRonin made their first contribution in #2341
- @rafaelmsse made their first contribution in #2352
- @nnnkit made their first contribution in #2357
- @darkbublu made their first contribution in #1808
- @peuic made their first contribution in #2305
- @PaulDelestrac made their first contribution in #2349
- @kygia made their first contribution in #2382
- @ZephByte made their first contribution in #2394
Full Changelog:
release/1.3.0...release/1.4.0 - Bookmarks now work in EPUBs. Access it from the reader menu with
-
π crosspoint-reader/crosspoint-reader v1.5.0rc release
Summary
This is one of the biggest updates we've shipped: new hardware support, faster loading on big books, offline dictionary lookups, and a UI overhaul.
Seeed reTerminal Sticky support
For the first time, CrossPoint is expanding beyond its original ESP32-C3 roots (XTeink X3/X4). We are officially introducing support for ESP32-S3 devices!
- First Supported Device: The upcoming Seeed reTerminal Sticky
- A huge shoutout to Seeed Studio for reaching out, sending test hardware, and being incredible partners throughout the process.
- Get Yours: You can order a Sticky (Launching July 30th) at crosspointreader.com/devices using our affiliate link to support the project.
Note
The XTeink X4 Pro isn't supported in this build yet, but a dedicated release will follow once we've got hardware to test against.
Big books open fast now
Big books used to take minutes to open the first time. That's basically gone: sections index on demand in the background while you read, so books open in around 5 seconds. Page turns feel smoother too, from rendering and memory work throughout the app, and we fixed memory allocation and CSS parser bugs that were causing out-of-memory crashes on complex EPUBs.
Offline dictionary lookups
Drop a StarDict dictionary onto your SD card and you can look up words with no connection. Select a word, get the definition popup. There's a setup guide if you want to get one running.
"What to read next"
Finish an EPUB and CrossPoint looks at what's on your device and suggests something next, right on the end-of-book screen.
Text settings got a rework
Font and layout options now live in one menu, with a live preview so you can watch line spacing, margins, and font changes happen without leaving the settings screen.
There's also a new selection popup. Any setting with three or more choices opens a dialog now instead of making you cycle through options one at a time.
Arabic, Farsi, and Urdu
1.4.0 added right-to-left text support. This one finishes the job for Arabic, Farsi, and Urdu: proper bidi handling and contextual glyph shaping, built-in fonts with full Arabic character sets, and the UI itself translated into Arabic.
Hebrew Niqqud is correctly rendered.Everything else
KOReader sync now handles custom sync servers, account registration, and metadata uploads. Wi-Fi should behave better β it reconnects to saved networks automatically, including hidden ones, and picks access points more sensibly. The web UI shows image previews in the file browser now and lists device serial numbers. OPDS downloads let you set your own folder and file format.
We also added the Vollkorn serif font (grab it from Manage Fonts), cleaned up
<br>handling and list bullet alignment, and expanded CSStext-decorationsupport.
Translations got updates across Swedish, Italian, Spanish, Catalan, Valencian, Czech, Turkish, Portuguese (BR & PT), and Vietnamese, and we added brand new Norwegian BokmΓ₯l , Indonesian and Bosnian translations. Chinese entries are now shown correctly in the File Browser and chapters list.Note
If you are upgrading from v1.0.0 or earlier , please upgrade to v1.4.1 first before installing the latest release. Skipping this step will cause your settings to be reset to their default values.
What's Changed
- chore: migrate from open-x4-sdk to freeink-sdk by @itsthisjustin in #2449
- docs: adding quick resume option and quick resume on timeout to userguide by @dasrecht in #2425
- fix: update Portuguese (Brasil) translations by @Rodrigo-Matsuura in #2458
- fix: x4 ghosting by bumping sdk by @itsthisjustin in #2469
- fix: x4 sleep/boot ghosting by @itsthisjustin in #2471
- feat: add Vollkorn font by @mrtnvgr in #2473
- fix(icons): align home menu icons with their labels by @fain182 in #2470
- chore: Initial multi-core compatibility by @Uri-Tauber in #2294
- feat: Selection Popup by @Uri-Tauber in #2358
- fix: sort sleep screen menu options to be more logically consistent by @dasrecht in #2480
- docs: update TOC in userguide by @dasrecht in #2479
- fix(reader): correct slider side-button direction and legend on X3 (#2402) by @tomlarse in #2428
- fix: changing translation in czech to fix overflowing navigation by @dasrecht in #2502
- fix: Add socket module import to build-sd-fonts script (#2504) by @itsthisjustin in #2505
- feat(network): add device serial number to web UI by @rahatarmanahmed in #2506
- feat(epub): improve text-decoration support by @lpla in #2397
- fix: settings persist on font clear, reserve() before push_back, minor by @sypianski in #2519
- feat: Lazy incremental EPUB section indexing by @itsthisjustin in #2452
- feat(reader): End of Book next-book suggestions (#2499) by @tomlarse in #2532
- fix: follow spec for zxing qr code generation by @latonis in #2540
-
fix: render
between paragraphs as a visible section break by @Uri- Tauber in #2548 -
chore: Replace product link with affiliate tracking link by @Uri-Tauber in #2401
- fix: Flatten TextBlock word storage into single allocation by @itsthisjustin in #2547
- feat: preview image files inline in web file browser by @fain182 in #2429
- fix: FontDecompressor OOM aborts on the render path (-fno-exceptions makes vector resize fatal) by @k5njm in #2526
- chore: Refactor stores to use PersistableStore CRTP template by @Uri-Tauber in #2464
- fix: show "Failed to index" when failing to parse epub by @Uri-Tauber in #2556
- chore: update the Italian translation by @matteoscopel in #2559
- perf: skip redundant progress writes when position is unchanged by @hooligan333 in #2436
- chore: update Spanish, Catalan, and Valencian translations by @lpla in #2566
- fix: update czech.yaml by @Pitel in #2574
- fix: Swedish translation by @steka in #2577
- fix: oom exceptions for OPDS, KOSync, and OTA via wolfssl by @itsthisjustin in #2475
- fix: handle low-bit-depth, upscaled, and SVG EPUB images by @lpla in #2503
- feat: Add Finnish hyphenation by @timo-mart in #2084
- perf: drop per-image delay(50) on chapter build, retry getDimensions by @hooligan333 in #2434
- perf: reserve CSS rule map before loading from cache by @hooligan333 in #2435
- feat: auto-connect saved Wi-Fi networks by @axhoff in #2189
- docs: add script to generate EPUB from USER_GUIDE.md by @jhuebel in #2152
- perf: always binary-search idref lookups in content.opf by @hooligan333 in #2433
- perf: stream NCX/NAV TOC into parser, drop temp-file round-trip by @hooligan333 in #2440
- perf: release CSS rule map after warm open by @hooligan333 in #2439
- chore: update Spanish, Catalan, and Valencian Wi-Fi strings by @lpla in #2578
- fix: Add framebuffer release/realloc and improved lazy indexing by @itsthisjustin in #2563
- feat: render placeholders while waiting for images to render by @Tritlo in #1003
- feat: Send optional document metadata with KOSync progress uploads by @nperez0111 in #1820
- feat: implement captive portal redirects for auto-loading the management page on hotspot mode by @latonis in #2550
- feat: Hidden wifi ssid support by @HgGamer in #2360
- fix: keep list item bullet inline with nested paragraph text by @jan-xyz in #2589
- feat: Arabic/Farsi/Urdu bidi reordering and contextual shaping β PR 1/3 by @YouHusam in #2541
- feat: add portuguese-PT.yaml by @Uri-Tauber in #2597
- feat: Arabic/Farsi/Urdu glyphs in built-in UI fonts - PR 2/3 by @YouHusam in #2596
- fix: Use HALF_REFRESH for sleep and boot instead of FULL by @itsthisjustin in #2588
- feat: complete Turkish translation (390/390) by @metoli86 in #2592
- feat(i18n): add Norwegian BokmΓ₯l translation by @tomlarse in #2113
- fix(css-parser): don't save unusable rules to RAM by @brianhuster in #2604
- feat: Arabic translation YAML - PR 3/3 by @YouHusam in #2599
- fix: ignore open-x4-sdk and fs_ by @Uri-Tauber in #2609
- fix: remove duplicate sleep logic by @Uri-Tauber in #2492
- feat(i18n): add Bosnian translation by @arunoruto in #2616
- feat: configurable OPDS download folder and filename format by @oscarnogueira in #2571
- fix(kosync): reload Epub before reading upload metadata by @W-Floyd in #2608
- feat: add options to remember web upload settings & rename ebooks to
{title} - {author}by @victor141516 in #2534 - feat: add smart KOReader progress sync by @axhoff in #2192
- feat: Back on home menu opens the most recent book by @rxmmah in #2619
- feat: enable CORS headers in the HTTP API by @metoli86 in #2594
- fix: reduce CSS parse-time OOM risk in chapter layout by @brianhuster in #2606
- fix: correct the settings enums for "blank" and "cover + custom" sleep screens by @uxjulia in #2635
- feat: Add kosync user registration and switch to crosspoint-sync server by @itsthisjustin in #2587
- feat: Add option to switch behavior for "back to browser / home" in Reader activity by @tsymalla in #2366
- fix: EndOfBookOptions fails to compile by @Uri-Tauber in #2646
- feat: Slim dictionary by @Uri-Tauber in #2583
- fix: swedish translation by @steka in #2649
- feat: add Nix development shell by @thiagokokada in #2645
- fix(i18n): add missing strings in PT-PT translation by @CookieCaptainD in #2632
- fix(epub): preserve word continuation when splitting CJK text on MAX_WORD_SIZE by @brianhuster in #2652
- fix: select strongest AP for matching WiFi SSID by @lpla in #2655
- chore: Clarify project scope and development priorities by @itsthisjustin in #2149
- feat: Add touch coordinate mapping and RTOS task yielding by @itsthisjustin in #2481
- fix: duplicate User-Agent header on wolfSSL requests breaks strict servers (aiohttp 400) by @dylanbyars in #2661
- chore: update Vietnamese translations by @brianhuster in #2667
- chore: Migrate Settings/State onto PersistableStore; by @Uri-Tauber in #2647
- add Bahasa Indonesia Translation by @chalei in #2666
- feat: unified Text Settings screen with live preview by @PaulDelestrac in #2605
- fix: Move sunlight fading fix setting to different group by @itsthisjustin in #2689
- chore: update Italian translation by @matteoscopel in #2691
- feat: cjk UI font fallback by @szetszho in #2521
- chore: update Spanish, Catalan, and Valencian translations by @lpla in #2651
- feat: deferred refresh, memory work port, and first-open speedups by @itsthisjustin in #2611
- fix: Warp around in Percent Selection by @Uri-Tauber in #2677
- fix: STR_RESTARTING_HINT text overflow bug by @Uri-Tauber in #2692
- fix: restore antialiasing after manual refresh by @thiagokokada in #2683
- fix(epub): split text blocks on closed tags to prevent style leaks by @brianhuster in #2679
- fix: avoid X3 Quick Resume flashes by @Sichroteph in #2698
- feat: Add UC8279 panel controller detection for X3 devices by @itsthisjustin in #2707
- feat(epub): native support for Chinese, Japanese by @brianhuster in #2665
- fix(i18n): add missing strings in PT-PT translation by @CookieCaptainD in #2701
- chore: small Italian translation fixes by @matteoscopel in #2703
- fix: ignore ambiguous EPUB guide text so books open at the right location by @uxjulia in #2716
- fix: Lower TLS minimum free memory threshold to 35KB for kosync by @itsthisjustin in #2719
- feat: point-size font selection by @Uri-Tauber in #2720
- fix: preserve custom font ligatures by @thiagokokada in #2673
- test: repair malformed section-break EPUB fixture by @lpla in #2728
- chore: Update czech.yaml by @Pitel in #2726
- fix: translate BMP viewer error messages by @lpla in #2730
- fix: fixing german translation inconsistencies by @dasrecht in #2702
- feat: Add packages to nix dev shell required for clang-format-fix and⦠by @Katherine1 in #2695
- fix: name dictionary lookup failures (low-memory vs decompress vs read) instead of 'Not found' by @W-Floyd in #2706
- fix: bind settings labels to enum values by @lpla in #2644
- fix: TextSettingsActivity default to selected font by @Uri-Tauber in #2739
- docs: Add instructions to fix a bricked Xteink (#2622) by @paulporto in #2682
-
fix: treat
in CJK flowing text as a paragraph separator by @szetszho in #2710 -
perf: drop all-empty ruby vectors from TextBlock by @Uri-Tauber in #2772
- chore: remove redundant wolfSSL TLS defines by @lpla in #2727
- fix: Gyro not powering down on x3 and newer x4 battery latch issues by @itsthisjustin in #2774
- perf: skip ruby scratch allocations on ruby-less lines by @W-Floyd in #2735
- fix: derive file-transfer WebSocket port from HTTP by @lpla in #2729
- fix: restore spaces between CJK words by @Uri-Tauber in #2768
- fix: clean image page after sync return by @thiagokokada in #2747
- feat: Access text settings from epub reader by @Uri-Tauber in #2788
- fix: Restrict CrossPoint position extension to official server by @itsthisjustin in #2790
- fix: order languages by native name instead of language code by @dasrecht in #2803
- fix: Save text settings immediately on each change by @itsthisjustin in #2806
- fix: Properly power down SD power rails on x3 by @itsthisjustin in #2808
- fix: orient dictionary navigation buttons by @thiagokokada in #2749
- fix: avoid duplicate OTA update actions by @ed-fruty in #2807
- fix: Replace vector with deque for text token storage by @itsthisjustin in #2814
- fix: dictionary lookup OOM on .dict.dz definitions by @W-Floyd in #2791
- perf: open dictionary index files once per lookup by @W-Floyd in #2733
- perf: share one static bidi scratch buffer to save ~1.5 KB RAM by @pillarsdotnet in #2554
- fix: make EPUB sync positions content-based by @thiagokokada in #2805
New Contributors
- @Rodrigo-Matsuura made their first contribution in #2458
- @tomlarse made their first contribution in #2428
- @rahatarmanahmed made their first contribution in #2506
- @sypianski made their first contribution in #2519
- @hooligan333 made their first contribution in #2436
- @Pitel made their first contribution in #2574
- @timo-mart made their first contribution in #2084
- @axhoff made their first contribution in #2189
- @nperez0111 made their first contribution in #1820
- @HgGamer made their first contribution in #2360
- @jan-xyz made their first contribution in #2589
- @metoli86 made their first contribution in #2592
- @brianhuster made their first contribution in #2604
- @arunoruto made their first contribution in #2616
- @oscarnogueira made their first contribution in #2571
- @W-Floyd made their first contribution in #2608
- @victor141516 made their first contribution in #2534
- @tsymalla made their first contribution in #2366
- @thiagokokada made their first contribution in #2645
- @CookieCaptainD made their first contribution in #2632
- @dylanbyars made their first contribution in #2661
- @chalei made their first contribution in #2666
- @szetszho made their first contribution in #2521
- @Sichroteph made their first contribution in #2698
- @Katherine1 made their first contribution in #2695
- @paulporto made their first contribution in #2682
- @ed-fruty made their first contribution in #2807
- @pillarsdotnet made their first contribution in #2554
Full Changelog :
1.4.1...1.5.0 -
π crosspoint-reader/crosspoint-reader v1.5.0 release
Summary
CrossPoint 1.5.0 is finally out.
This was the longest gap we've ever had between releases. Sorry for the wait β hopefully it was worth it. This one adds our first non-ESP32-C3 device, cuts big-book load times from minutes to seconds, brings offline dictionaries, and finishes the right-to-left work we started in 1.4.0.
Seeed reTerminal Sticky support
CrossPoint has been ESP32-C3 only since day one (XTeink X3/X4). That changes with this release: we're adding support for ESP32-S3 devices, starting with the Seeed reTerminal Sticky.
Thanks to Seeed Studio for reaching out, sending test hardware, and being genuinely great to work with throughout.
Want one? You can order a Sticky at crosspointreader.com/devices β that's our affiliate link, and it helps fund the project.
Big books open fast now
Opening a big book for the first time used to take minutes. Sections now index in the background while you read, so books open in around 5 seconds instead. Page turns are smoother too, from rendering and memory work throughout the app, and we fixed memory allocation and CSS parser bugs that were causing out- of-memory crashes on complex EPUBs.
Offline dictionary lookups
Drop a StarDict dictionary onto your SD card and look up words with no connection. Select a word, get the definition popup. There's a setup guide if you want to get one running.
"What to read next"
Finish an EPUB and CrossPoint looks at what's on your device and suggests something next, right on the end-of-book screen.
Text settings got a rework
Font and layout options now live in one menu, with a live preview so you can watch line spacing, margins, and font changes happen without leaving the settings screen.
There's also a new selection popup. Any setting with three or more choices opens a dialog now instead of making you cycle through options one at a time.
Arabic, Farsi, and Urdu
1.4.0 added right-to-left text support. This one finishes the job for Arabic, Farsi, and Urdu: proper bidi handling and contextual glyph shaping, built-in fonts with full Arabic character sets, and the UI itself translated into Arabic.
Hebrew niqqud is now rendered correctly too.
CJK improvements
CJK text rendering got a real boost β it's a lot more usable now. We also added the option to load a Chinese font from your SD card so menu entries display in Chinese. It's not perfect yet β some users say it makes the interface noticeably slower β but more improvements are coming. CrossPoint probably won't ever be first-class for Chinese, but we're hoping bilingual readers find it good enough.
Everything else
KOReader sync now handles custom sync servers, account registration, and metadata uploads. Wi-Fi should behave better β it reconnects to saved networks automatically, including hidden ones, and picks access points more sensibly. The web UI shows image previews in the file browser now and lists device serial numbers. OPDS downloads let you set your own folder and file format.
We also added the Vollkorn serif font (grab it from Manage Fonts), cleaned up
<br>handling and list bullet alignment, and expanded CSStext-decorationsupport. Translations got updates across almost every language, plus brand new Norwegian BokmΓ₯l, Indonesian, and Bosnian translations.paulporto managed to save his bricked device by flashing firmware directly to the flash chip on an XTeink X4 motherboard. Not a simple procedure, and fairly risky, but good to know it's possible. His guide is here: fix-bricked-xteink.md.
One of the bigger headaches this past month: XTeink started shipping X3 and X4 units with different internal hardware β not an upgrade, just a cost-driven change. A bunch of users who flashed an older CrossPoint build found their screen didn't work, or the battery drained in a day. We think we've now identified all the hardware variants out there, and CrossPoint should handle them fine. If your device isn't working right, please open a GitHub issue ASAP so we can push an emergency fix.
The XTeink X4 Pro isn't supported in this build yet β a beta is up on the site for testers.
Note
If you're upgrading from v1.0.0 or earlier , install v1.4.1 first before this release. Skipping that step will reset your settings to default.
What's Changed
- chore: migrate from open-x4-sdk to freeink-sdk by @itsthisjustin in #2449
- docs: adding quick resume option and quick resume on timeout to userguide by @dasrecht in #2425
- fix: update Portuguese (Brasil) translations by @Rodrigo-Matsuura in #2458
- fix: x4 ghosting by bumping sdk by @itsthisjustin in #2469
- fix: x4 sleep/boot ghosting by @itsthisjustin in #2471
- feat: add Vollkorn font by @mrtnvgr in #2473
- fix(icons): align home menu icons with their labels by @fain182 in #2470
- chore: Initial multi-core compatibility by @Uri-Tauber in #2294
- feat: Selection Popup by @Uri-Tauber in #2358
- fix: sort sleep screen menu options to be more logically consistent by @dasrecht in #2480
- docs: update TOC in userguide by @dasrecht in #2479
- fix(reader): correct slider side-button direction and legend on X3 (#2402) by @tomlarse in #2428
- fix: changing translation in czech to fix overflowing navigation by @dasrecht in #2502
- fix: Add socket module import to build-sd-fonts script (#2504) by @itsthisjustin in #2505
- feat(network): add device serial number to web UI by @rahatarmanahmed in #2506
- feat(epub): improve text-decoration support by @lpla in #2397
- fix: settings persist on font clear, reserve() before push_back, minor by @sypianski in #2519
- feat: Lazy incremental EPUB section indexing by @itsthisjustin in #2452
- feat(reader): End of Book next-book suggestions (#2499) by @tomlarse in #2532
- fix: follow spec for zxing qr code generation by @latonis in #2540
-
fix: render
between paragraphs as a visible section break by @Uri- Tauber in #2548 -
chore: Replace product link with affiliate tracking link by @Uri-Tauber in #2401
- fix: Flatten TextBlock word storage into single allocation by @itsthisjustin in #2547
- feat: preview image files inline in web file browser by @fain182 in #2429
- fix: FontDecompressor OOM aborts on the render path (-fno-exceptions makes vector resize fatal) by @k5njm in #2526
- chore: Refactor stores to use PersistableStore CRTP template by @Uri-Tauber in #2464
- fix: show "Failed to index" when failing to parse epub by @Uri-Tauber in #2556
- chore: update the Italian translation by @matteoscopel in #2559
- perf: skip redundant progress writes when position is unchanged by @hooligan333 in #2436
- chore: update Spanish, Catalan, and Valencian translations by @lpla in #2566
- fix: update czech.yaml by @Pitel in #2574
- fix: Swedish translation by @steka in #2577
- fix: oom exceptions for OPDS, KOSync, and OTA via wolfssl by @itsthisjustin in #2475
- fix: handle low-bit-depth, upscaled, and SVG EPUB images by @lpla in #2503
- feat: Add Finnish hyphenation by @timo-mart in #2084
- perf: drop per-image delay(50) on chapter build, retry getDimensions by @hooligan333 in #2434
- perf: reserve CSS rule map before loading from cache by @hooligan333 in #2435
- feat: auto-connect saved Wi-Fi networks by @axhoff in #2189
- docs: add script to generate EPUB from USER_GUIDE.md by @jhuebel in #2152
- perf: always binary-search idref lookups in content.opf by @hooligan333 in #2433
- perf: stream NCX/NAV TOC into parser, drop temp-file round-trip by @hooligan333 in #2440
- perf: release CSS rule map after warm open by @hooligan333 in #2439
- chore: update Spanish, Catalan, and Valencian Wi-Fi strings by @lpla in #2578
- fix: Add framebuffer release/realloc and improved lazy indexing by @itsthisjustin in #2563
- feat: render placeholders while waiting for images to render by @Tritlo in #1003
- feat: Send optional document metadata with KOSync progress uploads by @nperez0111 in #1820
- feat: implement captive portal redirects for auto-loading the management page on hotspot mode by @latonis in #2550
- feat: Hidden wifi ssid support by @HgGamer in #2360
- fix: keep list item bullet inline with nested paragraph text by @jan-xyz in #2589
- feat: Arabic/Farsi/Urdu bidi reordering and contextual shaping β PR 1/3 by @YouHusam in #2541
- feat: add portuguese-PT.yaml by @Uri-Tauber in #2597
- feat: Arabic/Farsi/Urdu glyphs in built-in UI fonts - PR 2/3 by @YouHusam in #2596
- fix: Use HALF_REFRESH for sleep and boot instead of FULL by @itsthisjustin in #2588
- feat: complete Turkish translation (390/390) by @metoli86 in #2592
- feat(i18n): add Norwegian BokmΓ₯l translation by @tomlarse in #2113
- fix(css-parser): don't save unusable rules to RAM by @brianhuster in #2604
- feat: Arabic translation YAML - PR 3/3 by @YouHusam in #2599
- fix: ignore open-x4-sdk and fs_ by @Uri-Tauber in #2609
- fix: remove duplicate sleep logic by @Uri-Tauber in #2492
- feat(i18n): add Bosnian translation by @arunoruto in #2616
- feat: configurable OPDS download folder and filename format by @oscarnogueira in #2571
- fix(kosync): reload Epub before reading upload metadata by @W-Floyd in #2608
- feat: add options to remember web upload settings & rename ebooks to
{title} - {author}by @victor141516 in #2534 - feat: add smart KOReader progress sync by @axhoff in #2192
- feat: Back on home menu opens the most recent book by @rxmmah in #2619
- feat: enable CORS headers in the HTTP API by @metoli86 in #2594
- fix: reduce CSS parse-time OOM risk in chapter layout by @brianhuster in #2606
- fix: correct the settings enums for "blank" and "cover + custom" sleep screens by @uxjulia in #2635
- feat: Add kosync user registration and switch to crosspoint-sync server by @itsthisjustin in #2587
- feat: Add option to switch behavior for "back to browser / home" in Reader activity by @tsymalla in #2366
- fix: EndOfBookOptions fails to compile by @Uri-Tauber in #2646
- feat: Slim dictionary by @Uri-Tauber in #2583
- fix: swedish translation by @steka in #2649
- feat: add Nix development shell by @thiagokokada in #2645
- fix(i18n): add missing strings in PT-PT translation by @CookieCaptainD in #2632
- fix(epub): preserve word continuation when splitting CJK text on MAX_WORD_SIZE by @brianhuster in #2652
- fix: select strongest AP for matching WiFi SSID by @lpla in #2655
- chore: Clarify project scope and development priorities by @itsthisjustin in #2149
- feat: Add touch coordinate mapping and RTOS task yielding by @itsthisjustin in #2481
- fix: duplicate User-Agent header on wolfSSL requests breaks strict servers (aiohttp 400) by @dylanbyars in #2661
- chore: update Vietnamese translations by @brianhuster in #2667
- chore: Migrate Settings/State onto PersistableStore; by @Uri-Tauber in #2647
- add Bahasa Indonesia Translation by @chalei in #2666
- feat: unified Text Settings screen with live preview by @PaulDelestrac in #2605
- fix: Move sunlight fading fix setting to different group by @itsthisjustin in #2689
- chore: update Italian translation by @matteoscopel in #2691
- feat: cjk UI font fallback by @szetszho in #2521
- chore: update Spanish, Catalan, and Valencian translations by @lpla in #2651
- feat: deferred refresh, memory work port, and first-open speedups by @itsthisjustin in #2611
- fix: Warp around in Percent Selection by @Uri-Tauber in #2677
- fix: STR_RESTARTING_HINT text overflow bug by @Uri-Tauber in #2692
- fix: restore antialiasing after manual refresh by @thiagokokada in #2683
- fix(epub): split text blocks on closed tags to prevent style leaks by @brianhuster in #2679
- fix: avoid X3 Quick Resume flashes by @Sichroteph in #2698
- feat: Add UC8279 panel controller detection for X3 devices by @itsthisjustin in #2707
- feat(epub): native support for Chinese, Japanese by @brianhuster in #2665
- fix(i18n): add missing strings in PT-PT translation by @CookieCaptainD in #2701
- chore: small Italian translation fixes by @matteoscopel in #2703
- fix: ignore ambiguous EPUB guide text so books open at the right location by @uxjulia in #2716
- fix: Lower TLS minimum free memory threshold to 35KB for kosync by @itsthisjustin in #2719
- feat: point-size font selection by @Uri-Tauber in #2720
- fix: preserve custom font ligatures by @thiagokokada in #2673
- test: repair malformed section-break EPUB fixture by @lpla in #2728
- chore: Update czech.yaml by @Pitel in #2726
- fix: translate BMP viewer error messages by @lpla in #2730
- fix: fixing german translation inconsistencies by @dasrecht in #2702
- feat: Add packages to nix dev shell required for clang-format-fix and⦠by @Katherine1 in #2695
- fix: name dictionary lookup failures (low-memory vs decompress vs read) instead of 'Not found' by @W-Floyd in #2706
- fix: bind settings labels to enum values by @lpla in #2644
- fix: TextSettingsActivity default to selected font by @Uri-Tauber in #2739
- docs: Add instructions to fix a bricked Xteink (#2622) by @paulporto in #2682
-
fix: treat
in CJK flowing text as a paragraph separator by @szetszho in #2710 -
perf: drop all-empty ruby vectors from TextBlock by @Uri-Tauber in #2772
- chore: remove redundant wolfSSL TLS defines by @lpla in #2727
- fix: Gyro not powering down on x3 and newer x4 battery latch issues by @itsthisjustin in #2774
- perf: skip ruby scratch allocations on ruby-less lines by @W-Floyd in #2735
- fix: derive file-transfer WebSocket port from HTTP by @lpla in #2729
- fix: restore spaces between CJK words by @Uri-Tauber in #2768
- fix: clean image page after sync return by @thiagokokada in #2747
- feat: Access text settings from epub reader by @Uri-Tauber in #2788
- fix: Restrict CrossPoint position extension to official server by @itsthisjustin in #2790
- fix: order languages by native name instead of language code by @dasrecht in #2803
- fix: Save text settings immediately on each change by @itsthisjustin in #2806
- fix: Properly power down SD power rails on x3 by @itsthisjustin in #2808
- fix: orient dictionary navigation buttons by @thiagokokada in #2749
- fix: avoid duplicate OTA update actions by @ed-fruty in #2807
- fix: Replace vector with deque for text token storage by @itsthisjustin in #2814
- fix: dictionary lookup OOM on .dict.dz definitions by @W-Floyd in #2791
- perf: open dictionary index files once per lookup by @W-Floyd in #2733
- perf: share one static bidi scratch buffer to save ~1.5 KB RAM by @pillarsdotnet in #2554
- fix: make EPUB sync positions content-based by @thiagokokada in #2805
- fix: load Settings page's Wi-Fi/OPDS/settings data sequentially by @obra in #2831
- fix: add support for new x3 display, x3 battery drain fix, and crypto support by @itsthisjustin in #2864
- fix: size translated-label buffers for UTF-8, not ASCII by @winst0niuss in #2850
- fix: recognize watchdog-triggered resets as panics by @obra in #2830
- fix: trim curly quotes and dashes in dictionary lookup by @Uri-Tauber in #2877
- fix(epub): ruby overflows right border when justifying text, unwanted short lines in Chinese and Japanese by @brianhuster in #2781
- chore: update translations by @Uri-Tauber in #2740
- fix: thread-safety issues in credential store by @itsthisjustin in #2834
- fix: read platformio.ini as UTF-8 in git_branch.py by @lranslot in #2897
- feat: guard against cross-chip firmware installs by @Uri-Tauber in #2880
New Contributors
- @rahatarmanahmed made their first contribution in #2506
- @sypianski made their first contribution in #2519
- @hooligan333 made their first contribution in #2436
- @timo-mart made their first contribution in #2084
- @axhoff made their first contribution in #2189
- @nperez0111 made their first contribution in #1820
- @HgGamer made their first contribution in #2360
- @jan-xyz made their first contribution in #2589
- @metoli86 made their first contribution in #2592
- @brianhuster made their first contribution in #2604
- @oscarnogueira made their first contribution in #2571
- @W-Floyd made their first contribution in #2608
- @victor141516 made their first contribution in #2534
- @tsymalla made their first contribution in #2366
- @thiagokokada made their first contribution in #2645
- @dylanbyars made their first contribution in #2661
- @szetszho made their first contribution in #2521
- @Sichroteph made their first contribution in #2698
- @Katherine1 made their first contribution in #2695
- @paulporto made their first contribution in #2682
- @ed-fruty made their first contribution in #2807
- @pillarsdotnet made their first contribution in #2554
- @lranslot made their first contribution in #2897
Full Changelog :
1.4.1...v1.5.0Downloads
-
π earendil-works/pi v0.84.1 release
New Features
- Qwen Token Plan Individual β Use the built-in provider for models documented for Individual subscriptions. See API Keys.
- Authentication readiness checks β Use
pi auth checkto verify provider or model credentials, optionally emitting the resolved credential. - Improved fullscreen interaction β Select words and paragraphs with multiple clicks and configure half-page transcript scrolling. See TUI Fullscreen Viewport.
- Terminating blocked tool calls β Extension
tool_callhandlers can stop all-terminating batches without another model call. See Tool Events.
Added
- Added Qwen Token Plan Individual as a built-in provider with its documented subscription model catalog and the shared international
QWEN_TOKEN_PLAN_API_KEY. See API Keys (#7659 by @arasovic). - Added
pi auth checkprovider/model auth preflight with optional credential output (#7152). - Added
terminatesupport to blocked extensiontool_callevents so all-terminating batches can skip the automatic follow-up model call. See Tool Events (#7715 by @muyiyr). - Added inherited double-click word and whitespace selection, granularity-aware drag selection, and triple-click paragraph selection in fullscreen mode (#7725, #7733 by @volsa).
- Added inherited unbound half-page transcript scrolling actions for fullscreen mode. See TUI Fullscreen Viewport (#7735).
Changed
- Softened the bash tool's
PI_*environment guideline in an attempt to reduce unnecessary inspection commands (#7128). - Reduced worst-case automatic terminal theme detection delay from 200 ms to 100 ms by probing color-scheme and background support concurrently.
Fixed
- Fixed Bun standalone binaries crashing on startup when the cwd contains a
bunfig.tomlwithpreloadby compiling with--no-compile-autoload-bunfig(#7685 by @geril07). - Fixed extension TUI method wrappers recursing indefinitely when delegating to the original method (#7731).
- Fixed right-click not pasting clipboard text in fullscreen mode on Windows.
- Fixed inherited
Agent.reset()clearing transcript and runtime state during active runs; it now rejects until the agent is idle (#7717 by @wesleyzhangwq). - Fixed inherited LaTeX relation, multiplication, and named-operator spacing, and matrix composition with stacked fractions, operator limits, and adjacent matrices.
- Reduced inherited fullscreen mouse event volume under tmux, Zellij, and GNU Screen by using button-motion tracking instead of all-motion tracking.
-
π r/LocalLLaMA BBC is running article titled "Artificial Intelligence used to design brand new viruses" ... cue the "We must regulate Open Weights Models to prevent the next Covid or worse" articles in 3... 2.. rss
| submitted by /u/johnnyApplePRNG
[link] [comments]
---|--- -
π Ampcode News Size the Orbs of Production! rss
People are using a lot of orbs. We love to see that. We've shipped a lot of things so that Amp subscriptions keep covering the whole month of orb usage for almost everyone, even as orb usage grows quickly.
Way back on July 27, we cut orb prices by 20% for everyone.
This week, we shipped a lot more improvements.
We added a new
a1.mediumsize with 4 CPUs and 8 GB of memory. It is 50% cheaper and a better fit for most projects than the previousa0.medium.Orbs now auto-pause after 5 minutes of inactivity, down from 15 minutes.
We've sped up orb startup time considerably, especially when another team member has recently created an orb in the same Amp project.
You can now choose which orb size to use per-thread, so you can pick a smaller default to save money but go big for especially resource-intensive work.

When starting new orb threads from the Amp CLI with
amp -ox '...', the new flag--orb-size <size>lets you specify which orb size to use (instead of the project's default).When asking the agent to create other threads, you can now tell it to use smaller (or larger) orbs, which lets you use smaller orbs for simpler fan-out tasks on projects.
Prices for orbs have gone down or stayed the same at every level and for every compute/memory combination. The new set of orb sizes is:
a1.tiny: 1 CPU Β· 2 GB memory Β· $0.08/houra1.small: 2 CPUs Β· 4 GB memory Β· $0.17/houra1.medium: 4 CPUs Β· 8 GB memory Β· $0.33/houra1.large: 8 CPUs Β· 16 GB memory Β· $0.66/houra1.xxlarge: 16 CPUs Β· 32 GB memory Β· $1.32/hour
We've automatically upgraded projects to the equivalent new orb sizes. If you want to use a different orb size, you can update your projects' settings on the web, or ask Amp to do so using the
amp projectssubcommands.
-
- August 06, 2026
-
π IDA Plugin Updates IDA Plugin Updates on 2026-08-06 rss
IDA Plugin Updates on 2026-08-06
Activity:
- codex-gpt-5.6-5.5-instruct
- 95e71569: Blind upload replacement version
- ida-pro-mcp
- 0acbcae4: Fix Ruff lint violations causing Standalone Tests failures (#59)
- 9989c4b1: feat(analysis): add save_idb, make_code, undefine, get_af/set_af, forβ¦
- 65d3c2db: fix(riscv): C extension mnemonics, CSR instructions, GP auto-apply
- 36bb6791: docs(agents): add installer touchpoints section to AGENTS.md
- 98f87876: fix: decompile opt-in verbose fields, var_rename bug, installer clariβ¦
- 44201441: fix(riscv): C extension mnemonics, CSR instructions, GP auto-apply
- a7dd37ce: feat(riscv): inject GP note into every disasm result on RISC-V targets
- a1e0bb59: fix(response): strip LLM-noise fields + add RISC-V GP detection
- 7b32b0b2: fix(schema): register patch_bytes + rename_local in modify tool_registry
- 763c7e7a: fix(lint): split import os, glob β ruff E401
- 2098f8ed: build(deps): bump urllib3>=2.7.0, idna>=3.15 β fix Dependabot securitβ¦
- 2cbfea9d: feat: full agent accessibility β 13 new MCP operations + session/poliβ¦
- 79b235d5: fix: resume-crash root causes β invalid IDA flags, orphan locks, ENOSβ¦
- IDAPluginList
- 101ad46f: chore: Auto update IDA plugins (Updated: 19, Cloned: 0, Failed: 0)
- Luc-Nhan
- twdll
- codex-gpt-5.6-5.5-instruct
-
π hacker news ida pro references New comment by inigyou in "Can you reverse engineer an ASIC?" rss
Before that there was, and still is, IDA Pro. Works largely the same but costs a lot, on the order of $1000/seat/year. Useless for hobbyists unless pirated, but reasonable if it's your job. Probably had academic discounts.
-
π HexRaysSA/plugin-repository commits sync repo: +1 plugin, +1 release rss
sync repo: +1 plugin, +1 release ## New plugins - [IDA-MCP](https://github.com/captain-ai-hub/ida-mcp) (0.6.0) -
π r/LocalLLaMA Qwen 3.8 Max now ranked as best overall model ahead of Opus 5 by Artificial Analysis agentic index rss
| submitted by /u/anderspitman
[link] [comments]
---|--- -
π exe.dev The End of No Code rss
You may have heard the news: Bending Spoons acquired Airtable for $1.28 billion. Rome didnβt fall in a day, but this is as good a point as any to mark the moment No Code platforms jumped the shark. Full disclosure, I worked at Airtable for many years, love the product, and love the people I worked with there even more. Itβs the technology, namely the unreasonable effectiveness of LLM loops with tool use, thatβs changed.
Software at work is not valuable in and of itself. Itβs built to serve some purpose. Mostly itβs used to keep track of something (schedules, parts, orders, people, you name it). Spreadsheets are the universal software hereβand I love me a spreadsheet. But spreadsheets have a ceiling when it comes to sharing, programming, permissions, automations, and so on. Once you leave a spreadsheet, you upgrade to a database and some software on top of it: thatβs what low or no code platforms like Airtable are. At their best, the person who brings Airtable to their team isnβt bringing Airtable: theyβre bringing much- needed organization and process, and Airtable is merely the means.
One of the things that Airtable got right was their experience of creating the tables themselves. You just added a column (like in Excel), and chose a data type (string, number, date, and so on), and, voila, youβve created a table. I used to joke that Airtable should show up to SIGMOD (the big database conference) and present a paper on the efficacy of not having
ALTER TABLE widgets ADD COLUMN (color string)as the way people use your database. Fred Brooks wrote: βShow me your flowcharts and conceal your tables, and I shall continue to be mystified. Show me your tables, and I wonβt usually need your flowcharts; theyβll be obvious.β Airtable understood this at its core: if the user can specify the business model, building the automations and features on top of it becomes possible. (This is nothing new! FileMaker launched in 1985; it was my introduction to databases when I helped run a conference for ~1,600 high school students. It turns out that a little bit of extra credit, some freshmen, and 3 AppleTalk-connected computers could handle the mailed-in registration forms!)Once upon a time (the 90s!), IT teams at companies existed to build software for said companies. Much software was bespoke. We can use Salesforceβs 2000 βSoftware is Deadβ campaign as the mile marker for when SaaS started taking over. IT departments became all about procurement. And procurement means saying NO. Low code and No Code platforms (and Microsoft SharePoint and Excel and Google Sheets) picked up the slack. When you canβt buy the software, you make do with what you can get access to, and you smuggle in some Airtable, increase revenues/efficiency/trust/whatever, and nobody can get rid of it for bureaucratic reasons because itβs now load-bearing.
AWS launched EC2 in 2006. You could rent a VM. Getting it on the internet (so that you could share a thing with your co-workers) required learning about EC2 VPCs, IAM permissions, EBS, RDS, static IPs, DNS, and a handful of other Three Letter Acronyms (TLAs). Even within software companies, IT gatekept EC2. When I was at Google in 2007, the tool to search the companyβs code base ran on a spare desktop under Jeff Deanβs desk. Getting a machine in Googleβs datacenter to serve this (to me, critical) piece of infrastructure was too much of a hassle. (There were, at the time, funny βIs it web scale?β videos; e.g., https://www.youtube.com/watch?v=b2F-DItXtZs, amongst others.)
Fast forward to 2026. LLMs are king. The SaaSpocalypse is under way, and happening like bankruptcyβgradually first, then all at once. What is the right way to build and deploy business tools? What is the right platform? Can non- software-engineers be trusted to do it?
The right answer (itβs my turn to be wrong on the internet today, baby) is Linux. Yes, choose boring technology, and just use Linux. You can choose one of many stacks on top of Linux. Honestly, if you chose LAMP (Linux, Apache HTTPd, MySQL, PHP) you would be fine. My current preference is (sqlite, Go, Typescript, maybe Vue). If memory werenβt getting expensive, thereβd be nothing wrong with (PostgreSQL, Node, TypeScript) but the memory crunch is real, and the advantages of using a single language for frontend and backend have disappeared since youβre not writing the code anyway.
Yes, that entire stack is Open Source. Yes, if you build on that stack, and you need to migrate to AWS or GCP or Render or Azure or Oracle Cloud Infrastructure or Railway or Hetzner or a miniPC, you will be able to rsync the data and code over, and youβll be all set. The platform-level lock-in is weak compared to low code platforms. (That said, an agent will port your low code setup to Linux with a few prompts.)
Exe.dev sells this very stack. Your subscription lets you create Linux VMs. Theyβre on the internet in the way that matters: you can send links to your friends, and the links will work. They are secure by default, and you can make sites public using our auth system or your very own. Theyβre fast. Theyβre great for coding agents. The way to build your custom software is to build it right there in prod with the coding agent. Iterate until you get something usable. Iterate some more with feedback from your co- workers. Let your co-workers iterate on it too; let them sand down the edges. If you give the coding agent the data model for your business and the workflows, and a hint about the stack maybe, it will do ok. If your project is in the 1 percent of projects that need to graduate to βBusiness Critical Very Important Stuff,β sure, start a second VM and a dev environment, or maybe even graduate to the confusing trappings of modern software development (git). An LLM running on a Linux machine is the ultimate in βlow floor, high ceilingβ: just get started, and youβll perhaps be able to leave your spreadsheet in the dust.
Moving on to some relevant FAQs.
Is my data secure?
Yes. Our defaults are secure. The mechanics are very similar to a Google Sheet: you can share a VMβs web port with just your team or individual people or the world.
I have a spreadsheet or a low code solution already; how do I port it?
If youβre comfortable doing so, start the VM, visit the agent (ours is called Shelley and itβs pre-installed by default), and give it an API key to your existing solution or upload your spreadsheet. Tell it to port it over into a web application on this machine. It will. Today, use Sol or Opus as the model. Tomorrow, ask us on Discord; the answer changes kinda frequently.
How do I do schedules? Automations?
Linux is a rich platform. You can ask the agent to run something on a timer, and it will. (It will usually choose systemd, but if you have a preference for cron, nudge it in that direction, and if you donβt know what either of those are, thatβs ok!)
How do I build agents or bots?
The same way: ask the agent to write an βagentic loop using the exe.dev LLM integrationβ with tools to do this and that. So, perhaps it reads Slack threads in a certain channel and comments on that. The agent will one-shot it.
One of the best things about the exe.dev platform is our βIntegrationsβ system. Hooking up your bot to Slack has never been easier.
Is Vibe Coding good enough?
In my experience, yes. The usual thing is to measure Risk and Reward. Every spreadsheet formula is fragile and untested and so on; and yet, spreadsheets work! Same applies here.
Shouldnβt I use the Flue agent framework? Or maybe some framework from Langchain? Can I really just yolo it?
Use whatever frameworks you like, but, ultimately, the agents are fine at choosing their own, or just doing it the boring way. There are millions of conflicting best practices the world over, βP & L FINAL FY2025 FINAL VERSION 3β is still the median solution, and you should figure out your workflow needs first. Have the agent set up a cron job to back up the database somewhere, too.
How does your pricing work?
The basic plan for $20/month gives you up to 50 VMs, but they are limited to 2 CPUs and 8GB of RAM. This is enough for quite a few small apps targeted toward your team. If you need more resources, you can upgrade or ask us; we are happy to get you machines as big as you need. Building your app may take more LLM tokens than we provide as part of your subscription. You can hook up a ChatGPT subscription, use other coding agents, or other model providers, or weβre happy to give you the LLM at API token costs through us.
What if the app is slow? How do I test it?
Iβve found that the agents are surprisingly good at both testing their end result and fixing performance issues. They use the same tools I use: profilers and so on. Shelleyβs secret weapon is a good browser tool that itβs capable of using, profilers, screenshots, screencasts, and all.
-
π exe.dev A Non-Exhaustive Inventory of exe's Software Factory rss
- An agent that looks for security issues systematically.
Fable refuses to help out, so we systematically look for security issues, with a bias toward recent changes.
- An agent that investigates alerts.
Sisyphus keeps track of our alerts. We have ones that page us and ones that merely make noise in Slack. Either way, Sisyphus looks through our logs and metrics and source code, as well as analyzing its own previous investigations, to tease out whatβs going on. It gives a great head start when investigating an issue (or just a flaky alert!).
- An agent that investigates logs.
Every day, I get an email with interesting trends in our logs.
- Bots to fix flaky and slow tests.
A bot is continuously analyzing flaky or slow tests in our CI and suggesting changes.
- A status page.
status.exe.dev isnβt hosted on exe.dev. We built it ourselves, though.
- A system to page our phones (using the excellent and simple PushOver)
When the aforementioned alerts fire, our phones beep very loudly. Traditionally you use PagerDuty for this, but PagerDutyβs durable asset is the entitlement for βEmergency Alertsβ from Apple. Turns out PushOver has this as well, and a lovely API.
- An agent that supervises deploys and rollouts.
Athena helps do rollouts. Infrastructure deploys are not instantaneous, and even the most patient operators stop paying attention. It checks metrics and logs (and has looked at the source code for what changed in this deploy).
- A blog CMS, with comments, collaborative text editing, embargoes, the whole nine yards
If youβre reading this on blog.exe.dev, this ainβt Wordpress. Our blog started out as Markdown files in git, but now thereβs a full-featured CMS, with collaborative editing, revision history, comments, embargoes, and a content calendar. A built-in agent (really, Shelley running on the same VM) can import a blog post from whatever you paste in.
- UI tests described as textual paragraphs that lazily materialize into browser instructions but self-heal
Who are we kidding? Weβre not maintaining Playwright tests by hand anymore. Shelleyβs UI tests are increasingly a paragraph of text asking for some behavior. Thereβs a cache file (checked into git) that makes the test cheap and fast. When it fails, the CI system βhealsβ it with an LLM, and either fails or checks in the new fixed test. Yes, the build queue modifies the commit on its way through if necessary. More on this in a future post.
- Intrepid reporter bots that report on git commits, our help threads, and so on
Every day, we get summaries in Slack about whatβs happened in the past day, across git commits and such.
Please note: if youβre writing bots that read untrusted data, understand the Lethal Trifecta: private data, untrusted content, and external communication. We happen to think that exe.dev VMs are a great place to isolate these bots, but we also make sure that the tools available to these agentic loops (an agent is just 11 lines of code: https://sketch.dev/blog/agent-loop) are limited in what they can do.
-
π @malcat@infosec.exchange Very nice step-by-step analysis of a simple telegram loader (#Teleshim) by mastodon
Very nice step-by-step analysis of a simple telegram loader (#Teleshim) by M.Boll.
Good material if you're starting with #malcat:
-
π r/LocalLLaMA They almost catched up on Frontier performance, so now catching up on prices rss
| This is very important for us when considering local hosting. A lot of people decided not to buy expensive
hardware because DeepSeekβs prices made it very difficult to break even given that deepseek was soo cheap.
Also some of us use DeepSeek in routing, hosting Qwen and routing some hard tasks to DeepSeek API. what do you think about this?
do you think raising prices will ultimately lead to another increase in NVIDIAβs GPU prices, since more and more people will now buy their own hardware? im seriously considering upgrading my stack now UPDATE: about an hour ago dax from OpenCode said that they were able to match DeepSeek's current API pricing even using rented GPUs. He believes the upcoming DeepSeek price increase is likely due to traffic shaping from overloaded infrastructure, not because they are losing money. submitted by /u/Zealousideal_Sort74
[link] [comments]
---|--- -
π earendil-works/pi v0.84.0 release
New Features
- Fullscreen TUI mode β Switch between regular and fullscreen modes at runtime, with a sticky editor and footer, independently scrollable transcript, and draggable scrollbars. See UI & Display.
- Mermaid and LaTeX rendering β Render Mermaid diagrams and terminal-friendly Unicode math in interactive transcripts. See Markdown settings and TUI Markdown.
- Per-directory context overrides β Use
AGENTS.override.mdto replace context files for a specific directory. See Context Files. - Advanced custom model sampling β Configure arbitrary OpenAI-compatible
samplingParamsand opt-in vLLMthinking_token_budgetvalues. See Sampling Parameters. - Baseten provider β Use built-in Baseten authentication and model support. See API Keys.
Breaking Changes
-
Renamed the inherited pi-ai
ModelsStreamTransformsinterface toModelsRequestTransformsbecause its header transformation now applies to all authenticated provider requests. -
Changed JSON and RPC
message_updateevents to emit onlyassistantMessageEventdeltas, removing the cumulativemessageandassistantMessageEvent.partialfields that caused quadratic output growth. Clients that need partial messages must assemble deltas betweenmessage_startandmessage_end; the latter remains authoritative (#7290). -
ModelRegistry.getApiKeyAndHeaders()now returnsProviderHeaderswithstring | nullvalues and preservesnullheader-deletion markers. Extensions that inspect returned headers must handlenull; extensions forwarding them to pi-ai streams should pass them through unchanged. This prevents placeholder OpenAI credentials from being sent through Cloudflare AI Gateway (#7030). -
Changed
ModelRegistry.refresh()to acceptModelsRefreshOptionsand returnModelsRefreshResultinstead of discarding cancellation and provider errors. -
Changed
ModelRuntime.setRuntimeApiKey()to accept auth cancellation options rather than catalog refresh options. Callrefresh({ providers: [providerId], signal })separately when remote freshness is required. -
Required config-form extension OAuth
refreshToken(credentials, signal)callbacks to accept and honor a concrete abort signal. -
Replaced dynamic provider refresh context store access with the read-only
context.storedsnapshot and generation-checkedcontext.publish()transaction.
Providers built with
createProvider({ fetchModels }): no catalog- publication migration is required. Before and after, return the fetched models and register the resulting provider;createProvider()owns restoration, persistence, and in-memory publication.// Before const beforeProvider = createProvider({ // ... fetchModels: async ({ signal }) => { const response = await fetch(catalogUrl, { signal }); return parseModels(await response.json()); }, }); pi.registerProvider(beforeProvider); // After: unchanged const afterProvider = createProvider({ // ... fetchModels: async ({ signal }) => { const response = await fetch(catalogUrl, { signal }); return parseModels(await response.json()); }, }); pi.registerProvider(afterProvider);Handwritten native
Provider.refreshModels(): replace direct store access and pre-publication mutation with generation-guarded publications.// Before refreshModels: async (context) => { const stored = await context.store.read(); if (stored) currentModels = stored.models; if (!context.allowNetwork) return; const refreshed = await fetchModels(context.signal); currentModels = refreshed; await context.store.write({ models: refreshed, checkedAt: Date.now() }); }, // After refreshModels: async (context) => { if (context.stored) { const restored = context.stored.models; if (!(await context.publish({ update: () => { currentModels = restored; }, }))) return; } if (!context.allowNetwork) return; const refreshed = await fetchModels(context.signal); if (context.signal.aborted) return; await context.publish({ persist: { models: refreshed, checkedAt: Date.now() }, update: () => { currentModels = refreshed; }, }); },For the config-form
pi.registerProvider(name, { refreshModels }), callbacks that only return models remain unchanged; pi publishes the returned list. If such a callback previously usedcontext.storefor custom persistence, readcontext.storedand callcontext.publish({ persist: entry }). Inpublish(), omitpersistto leave storage unchanged, pass aModelsStoreEntryto write it, or passpersist: nullto delete it.-
Replaced the inherited pi-agent-core harness session model with the v4 lane-based
Session,SessionStorage, andSessionRepoAPIs, including durable operation records, global facts, shared sequence numbers, and tree-scoped lane views. -
Promoted the inherited v2 session and
AgentHarnessAPI from pi-agent-core's experimental entrypoint to its default export and removed the experimental subpaths. -
Removed the inherited legacy JSONL and in-memory repository APIs. Use pi-agent-core's v4
JsonlSessionRepoorInMemorySessionRepo, both implementing the newSessionRepocontract. -
Added the inherited required pi-agent-core
FileSystem.renameFile()operation for atomic JSONL publication; custom harness file-system implementations must provide same-filesystem replacement semantics (#7707 by @davidbrai). -
Replaced experimental remote-session list summaries with durable
SessionMetadata;RemoteSession.sessionsno longer exposes runtime phase, model, thinking, attachment, or lock state, which remains available from acquiredSessionSnapshotvalues (#7708).
Added
- Added built-in Baseten provider support with
BASETEN_API_KEYauthentication andzai-org/GLM-5.2as the default model. - Added experimental remote-session client APIs: the transport-neutral
PiClient, CBOR protocol, Unix-socket transport, and@earendil-works/pi-coding-agent/clientRemoteSessioncontroller with transcript reducers. See Pi Client and Remote Protocol (#7344, #7348, #7371, #7409). - Added
CredentialSynchronizationErrorfor credential changes that commit successfully but fail to synchronize local model state. - Added chainable
pi.registerMarkdownTransformer()hooks for display-only transformation of user and assistant Markdown. Seepi.registerMarkdownTransformer()(#7231 by @xl0). - Added an experimental fullscreen TUI mode, selectable through
--tui-mode fullscreenor/settings(#7304). - Added runtime switching between regular and fullscreen TUI modes through
/settings. - Added a sticky editor, status, widget, and footer dock to fullscreen mode while keeping the transcript independently scrollable.
- Added a draggable transcript scrollbar to fullscreen mode with configurable
auto,always, andhiddenmodes through/settings;alwaysreserves the rightmost column. - Added page scrolling and marked-message navigation shortcuts to fullscreen mode.
- Added an optional
scrollbarThumbtheme color for fullscreen scrollbar thumbs, falling back toselectedBg. - Added configurable themed Unicode rendering for supported Mermaid diagrams in interactive messages, including optional rendering while streaming. See Markdown settings (#7624 by @xl0).
- Added opt-in
Ctrl+P/Ctrl+Nprompt history navigation, with explicit history bindings taking precedence over application shortcuts while the editor is focused. - Added per-directory
AGENTS.override.mdcontext files, which replaceAGENTS.mdorCLAUDE.mdin the same directory while preserving context from other directories. See Context Files (#7681 by @Marvae). - Added
AI_AGENT=pito CLI and RPC child-process environments for generic agent attribution. See Environment Variables (#7493 by @renaudhartert-db). - Added inherited terminal-friendly Unicode rendering for LaTeX expressions in Markdown. See TUI Markdown.
- Added stacked transient notifications in fullscreen mode.
- Added arbitrary OpenAI-compatible model sampling parameters through
samplingParamsinmodels.json, model overrides, extension providers, and stream options. See Sampling Parameters (#7568 by @mrexodia). - Added inherited opt-in vLLM
thinking_token_budgetsupport for OpenAI-compatible models, reserving output tokens for the final answer (#7638 by @bnsd55). - Added inherited support for OpenAI-compatible streams that omit
finish_reason, usingcompat.supportsFinishReasonto infer normal and tool-use stops when the stream ends. See OpenAI Compatibility. - Added inherited deferred provider request contracts, durable response handles, authenticated fetch/cancel dispatch, and faux-provider support for pending, ready, failed, and cancelled responses (#7339 by @davidbrai).
- Added inherited vendor-neutral telemetry contracts plus agent-owned typed AI-request and harness schemas, composed span starters, and callback helpers. See the agent telemetry schema reference.
- Added inherited structured Amazon Bedrock failure diagnostics with HTTP status, modeled error code, and AWS request id when available (#7286 by @brianstanley).
- Added inherited
AgentOptions.shouldStopAfterTurnfor gracefully stopping after a completed turn before queued messages or another model call are processed. See Agent Options (#7367 by @acmerfight). - Added inherited v4
JsonlSessionReposupport for append-only JSONL harness sessions (#7611 by @davidbrai). - Added inherited bounded branch-entry and indexed open-operation recovery queries to the v4 session API (#7448, #7646).
- Added the inherited compile-complete
AgentHarnessv2 scaffold; unfinished operation paths reject withHarnessNotImplementedwhile durable execution is implemented.
Changed
- Added inherited optional cancellation to pi-ai
ModelsStorereads, writes, and deletions; catalog orchestration binds these waits to the provider refresh signal. - Reduced the inherited default fullscreen mouse wheel step from three lines to one for finer scrolling.
Fixed
- Fixed the footer showing
(sub)for generic OAuth/OpenID sign-ins without a known subscription; extension OAuth providers can opt in withisSubscription. - Fixed inherited OAuth token refreshes so stalled requests release the credential-store lock (#7508).
- Fixed inherited tool argument validation to preserve values that already match an
anyOf/oneOfunion arm before coercion, avoiding nullable unions convertingnullto another primitive value (#7328). - Fixed inherited Fireworks GLM 5.2 requests sending the unsupported
prompt_cache_retentionfield when long cache retention is enabled, and enabled session affinity for automatic prompt caching (#7676). - Fixed inherited
JsonlSessionRepoenforcing session IDs globally across working directories; IDs are now unique within each working directory. - Fixed inherited JSONL session forks and torn-tail repairs to publish atomically, avoiding partially written or corrupted sessions after interrupted writes (#7707 by @davidbrai).
- Fixed path-containing
findglobs returning no results on Windows (#6817). - Fixed messages queued during manual
/compactfailing instead of being sent after compaction completes. - Fixed Git Bash, MSYS, Cygwin, and WSL drive paths passed to built-in file tools resolving against the current Windows drive instead of their native drive (#7064, #7547).
- Fixed project-level nested provider retry settings replacing unmodified global provider retry settings (#7572).
- Fixed inherited GitHub Copilot Grok 4.5 requests to use the supported Responses API (#7560).
- Fixed fullscreen shutdown leaking terminal capability-query replies into the parent shell prompt.
- Fixed bare exact
--modelIDs shared by multiple providers choosing the first catalog entry instead of the sole authenticated provider or a clear ambiguity error (#7327). - Fixed standalone x64 binaries requiring Haswell-era AVX2/BMI2 instructions by compiling release executables against Bun's baseline runtime (#7390 by @davidbrai).
- Fixed
Ctrl+Xcopy confirmations in fullscreen mode adding a transcript status line instead of showing the transientCopied!marker. - Fixed Kitty image previews in fullscreen mode overlapping the sticky editor and footer dock while scrolling.
- Fixed image-heavy fullscreen sessions lagging when layout changes retransmitted visible Kitty image payloads and rendered the transcript twice per frame.
- Fixed spaces in
/settingssearches toggling the highlighted setting while typing multi-word queries such as TUI mode or Quiet startup. - Fixed custom editors not inheriting the default editor's autocomplete dropdown item limit (#7333).
- Fixed malformed resource arrays in package manifests crashing session startup (#7187).
- Fixed the DOOM overlay example downloading its shareware WAD from a dead URL.
- Fixed
setToolsExpanded(false)to be a no-op when tool output is already collapsed, avoiding redundantTool output: collapsedstartup notices from extensions (#7292). - Fixed extension-driven model calls in custom compaction, handoff, and Q&A examples to dispatch through the coding-agent model runtime so custom providers and resolved auth options are preserved (#7325).
- Fixed long-running sessions using stale credentials after another process updates
auth.jsonwithout serializing concurrent credential reads and delaying startup (#7319). - Fixed concurrent
models-store.jsonreads forming a file-lock convoy and delaying startup. - Updated the packaged
brace-expansiondependency to 5.0.8 to address GHSA-mh99-v99m-4gvg (#7316). - Fixed forced model availability refreshes remaining blocked behind a stalled earlier refresh (#7301, #7421 by @a-yeyang).
- Fixed
/modelcatalog refresh failures to identify every catalog that failed. - Fixed provider login remaining stuck after saving credentials when a model catalog refresh stalls by separating local credential consistency from bounded background freshness (#7027, #7113, #7418).
- Fixed
/scoped-modelswaiting for remote catalogs before rendering instead of showing cached models and cancelling refresh on close (#7153). - Fixed
/model <name>waiting for catalog refresh before checking cached model matches (#7443). - Fixed stale availability snapshots and errors publishing after a newer availability pass.
- Fixed stale pi.dev, Radius, llama.cpp, and extension catalog refreshes publishing after a newer provider refresh.
- Fixed cancellation while waiting for file-backed credential or model-catalog locks, preventing cancelled mutations from running or committing later.
- Fixed concurrent in-memory credential mutations losing unrelated provider updates by serializing their read-modify-write sections.
- Updated
undicito 8.9.0 and the packagedbrace-expansionto 5.0.9 to address GHSA-8xcm-r25x-g524, GHSA-4cwx-7wf7-3272, GHSA-m8rv-5g2x-5cg5, GHSA-jr45-8vmc-qm54, GHSA-v3r7-h72x-cjcm, and GHSA-rgw5-rvv9-x895. - Fixed GitHub Copilot compaction and branch summaries using the Individual endpoint instead of the credential-resolved Business or Enterprise endpoint (#6768).
- Fixed extension model calls dropping credential-resolved endpoints when forwarding request authentication, including custom compaction with GitHub Copilot Business and Enterprise accounts (#7579).
- Fixed fullscreen transcript navigation leaving no editor-accessible
Home,End,PageUp, orPageDownvariants by adding Ctrl-modified editor bindings (#7574). - Fixed extension event-bus listeners surviving session reloads and disposal (#7656 by @tudoroancea).
- Fixed
/copyfailing to read clipboard text on Wayland when no X11 clipboard is available (#7387). - Fixed slow connections failing during the initial connection attempt by increasing the connect timeout (#7435 by @muyiyr).
- Fixed oversized images returned by extension and built-in tools bypassing automatic image resizing. See Image settings (#7330 by @tizmagik).
- Fixed session discovery missing sessions stored through symlinked directories (#7552 by @muyiyr).
- Fixed manual compaction racing with threshold auto-compaction (#7370 by @davidbrai).
- Fixed responses truncated below their intended output limit ending the run instead of compacting and retrying once (#7540 by @davidbrai).
- Fixed Git package updates leaving dependencies missing when
git cleancannot remove an ignored dependency directory (#7570 by @mrexodia). - Fixed
findresults from POSIX and Windows filesystem roots losing the first path segment or gaining duplicate trailing separators (#7569 by @petrroll). - Fixed transient version-check, catalog, managed-tool, and package-management HTTP failures not being retried (#7632 by @petrroll).
- Fixed interactive errors ignoring the configured output padding.
- Fixed the inherited OpenCode Go provider display name.
- Fixed inherited provider error normalization treating arrays and class instances as structured response bodies instead of preserving their original errors (#7205 by @erikogenvik).
- Fixed inherited Anthropic streams dropping text or thinking included in the initial content-block event (#7358 by @davidbrai).
- Fixed inherited Google history conversion dropping signed empty text and thinking blocks required for replay (#7362 by @jingtao-wisdomgraph).
- Fixed inherited OpenAI Codex cached WebSocket sessions being shared across different account credentials (#7364).
- Fixed inherited transient Google Generative AI and Vertex AI provider errors bypassing automatic retries (#7471 by @vish-pr).
- Fixed inherited Gemini 3 tool call ids being discarded during history conversion, breaking signed multi-turn replay (#7494 by @muyiyr).
- Restored inherited GitHub Copilot models returned through account-specific policy responses (#7672 by @muyiyr).
- Replaced the inherited retired Qwen Token Plan
qwen3.8-max-previewmodel withqwen3.8-max(#7670 by @QuintinShaw). - Fixed inherited terminal width accounting for Indic conjunct grapheme clusters (#6987 by @petrroll).
- Fixed inherited nested fullscreen stack layouts ignoring child minimum sizes.
- Fixed inherited batched terminal color-scheme reports being parsed as one malformed response (#7550).
- Fixed inherited terminal progress clearing to emit the complete OSC 9;4 sequence (#7581).
- Fixed inherited iTerm2 image payloads omitting the size metadata required by the xterm.js image addon (#7612).
- Fixed inherited width truncation leaving OSC 8 hyperlinks unterminated (#7657 by @xXJSONDeruloXx).
- Updated inherited GPT-5.6 Terra and Luna pricing across OpenAI and passthrough model catalogs.
- Fixed inherited Fireworks Kimi K3 models to use the OpenAI-compatible API with native reasoning-effort levels and deferred tools (#7199, #7230 by @XBeg9).
- Updated the inherited Groq Qwen reasoning override for the replacement
qwen/qwen3.6-27bmodel. - Fixed inherited Windows Shift+Enter detection by reading modifier state from the native Win32 helper.
- Fixed the inherited pi-tui npm package omitting the source and build scripts needed to rebuild its Windows and Darwin native addons.
- Fixed inherited Windows console truecolor detection when Windows Terminal does not provide
WT_SESSIONto child shells. - Fixed inherited phantom fullscreen text selection from unmatched mouse events when changing terminal pane focus.
- Fixed inherited keyboard input rendering latency on Windows by letting input preempt the throttled render timer.
- Fixed inherited agent harness path handling on Windows for file basenames, recursive skill loading, and prompt template names.
-
π r/LocalLLaMA Qwen3.8-2.4T-A95B (aka Qwen3.8-Max) open release time: next wednesday rss
-
π matklad Zig's Io.Threaded is Neat rss
Zigβs Io.Threaded is Neat
Aug 6, 2026
std.Io.Threaded is one of the implementations of Zigβs new
Iointerface that enables concurrency. This is a boring βjust use threadsβ impl. I personally find it neat though β it does this weird thing that I wanted to do for ages, that to my knowledge no one else is doing properly, and implements it better than I thought to be possible.Io.Threadeduses blocking syscalls and fully supports cancelation.Concurrency vs Parallelism
Quoting @tedinski,
- Concurrency is about handling (asynchronous, nondeterministic) events.
- Parallelism is about using hardware resources to do more at the same time.
I think this definition is correct, but doesnβt provide useful intuition directly. Concurrency is the same thing as state transducers? Yes, obviously, but not really illuminating as to how youβd program the thing.
For intuition, I like these two litmus tests. First , parallelism is deterministic or βdeclarativeβ:
use rayon::prelude::*; fn sum_of_squares(input: &[i32]) -> i32 { input.par_iter() .map(|i| i * i) .sum() }You describe how to split the problem into independent partitions, and implement a function to process one partition at a time . Itβs platformβs job to verify the partitioning to be correct (non-racy), process all partitions, and yield control back once that is done.
Second , concurrency invariably involves cancelation. Whenever you have two asynchronous computations happening at the same time, there comes a moment when one computation becomes aware that the second computation is no longer necessary, and must be canceled, actively. In general, it is not possible to just wait until the other computation completes: often, the reason why you want to cancel it in the first place is precisely because youβve learned that it canβt complete (e.g., it is waiting for a message it will never receive).
And that is the problem with
Just Use Threads
Well, there are more, the chief being that, while you totally can spawn many threads, this often requires system-wide configuration change, which is a non- starter for most application. But absence of cancelation really makes you hit a wall sooner or later. The problem are syscalls. Itβs easy enough, in any loopy code, to do something like
while (true) { if (is_canceled()) return error.Canceld; /// Easy! ... }But, the thread is instead blocked inside the syscall in the kernel, programming language APIs generally doesnβt give any way to unblock it:
const read_size = try read(fd, buffer); // ???Wouldnβt it be cool if we could just use standard OS threads, blocking APIs, avoid new shinies like io_uring, but still get to cancel any work reliably? Thatβs exactly what Zigβs
std.Io.Threadedprovides.SIGIO
The way this works on POSIX is a bit cursed. Turns out, the kernel actually provides a roundabout way to cancel a blocking syscall β signals. When a thread is blocked in the kernel, and a signal is delivered to the thread, the thread is woken up and the syscall returns
EINTR. It is customary to just loop re-try the syscall in such cases, but one doesnβt have to.By itself, signals are not a cancelation mechanism β signaling a thread is inherently racy, the signal might get delivered before the relevant syscall starts, or after it finishes. Conversely, a syscall might get interrupted by signal unrelated to cancelation.
The actual protocol is that the canceling thread sets a flag in shared memory to request cancelation, and then signals the cancelee, in a loop, until the cancelation is acknowledged (a different value for a flag in the shared memory). Upon receiving
EINTRfrom a syscall, the thread potentially being canceled checks the value of the flag and either retries the syscall, or acknowledges the cancelation and begins unwinding. SeesignalCanceledSyscalland, egfileReadPositionalPosixfor the two halves of the protocol.On the user-side, cancelation request is materialized as
error.Canceled. Error management as a feature is a combination of cancelation, branching, and reporting, and Zig implements the first two. Cancelation isnβt an error not because it is serendipitous success, but because, vice versa, an error is a cancelation plus a payload.On Windows, thereβs a much more direct
NtCancelSynchronousIoFileLove the name!. In general, between fibers, IO Completion Ports, Job objects, and this, it seems that NT has a better thought through concurrency story than Unix.Prior Art
In Java, thereβs a similarly looking thread interruption mechanism. Critically, it doesnβt support interrupting syscalls:
IOExceptionandInterruptedExceptionare both checked and unrelated, meaning that IOing functions are not interruptible. In Zig, reader and writer interfaces completely type erase errors and therefore support cancelation, though this requires some extra care to handle correctly, on top of the usual donβt forget to flush.pthread_cancelimplements a similar signal+flag machinery. However, it doesnβt integrate with language-level cancelation (try,defer) which makes post-cancelation cleanup cumbersome and slow. More generally, a lot of angst around concurrency steams from a fact that it falls exactly into the twilight zone between the kernel, the runtime, and the language. Thereβs almost (interrupts excepted) no concurrency on the CPU, itβs an illusion with a mixed authorship. The language is usually the better equipped one to tackle the problem, but, traditionally, it is handled by the kernel and libc, with adverse effects on language design.Another problem with
pthread_cancelis that it tears down the entire thread, which would be an OK thing to do if threads were cheap. However, creating threads is still slow, and the configured system limit for a number of threads is typically low, so its usually a good idea to pool OS threads. ZigβsIosolves this problem ingeniously, separating, at the interface level, βmay run concurrentlyβ from βmust run concurrentlyβ:https://kristoff.it/blog/asynchrony-is-not-concurrency/
This achieves an effect similar to that of
std::launchpolicy(item 36 in effective modern C++, if you have that around). By naming what is happening (io.asyncvsio.concurrent), Zig makes it easier to understand what is actually going on, and also gets more precise signatures (concurrentis always fallible,asyncnever is). Of courseconcurrentis backed by a thread pool, falling back on spawning a fresh thread only when the pool is exhausted. -
π Console.dev newsletter syncular rss
Description: Offline-first SQL sync.
What we like: Gives every client a local SQLite database with a server-side commit log. Reads & writes are local, then syncβd (offline outbox). Blobs stored as content-addressed on object storage. CRDT conflict resolution. Optional per-column E2E encryption.
What we dislike: C FFI for non-supported languages.
-
π Console.dev newsletter Mu rss
Description: Local tools for agents.
What we like: MCP server with various tools for agents - news, weather, search, mail. Provides auth and a web UI for using the tools via a browser. Also provided as a CLI. Open source and self-hostable, or available via the authorβs cloud service.
What we dislike: Publicly available by default, but has options to turn off signups or just put it on a private network.
-
π New Music Releases Foo Fighters - Are Playing Where??? Vol. II rss
Foo Fighters - a new release is available:
- 2026-08-06: Are Playing Where??? Vol. II (EP)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-
π Ampcode News Portals into Orbs rss
For remote development in orbs to be better than local dev, you need to be able to easily try out the agent's changes in your app, with live reloading. No VPN, no port juggling, and no waiting for preview deployments.
Today, we're shipping portals, which let you access anything running in an orb that listens on a port and speaks HTTP.
All you need to do is ask Amp: show me in a portal. Or words to that effect.
Obviously, you can use portals to try out the features or fixes made by the agent:
You can also annotate and comment on anything:
But you can also have the agent build ad-hoc web apps for you to debug or understand the system:
Portals are accessible to anyone with access to the thread. They go to sleep and wake along with your orb.
Make a thread multiplayer with on the web, and your team members can also make changes and see them live in the portal.
Services
When you say show me in a portal, the agent knows to create or look for a
.amp/services.yamlfile and then runamp orb services <ensure|start>to run your app and expose it via HTTPS. Your app needs to respect thePORTandPUBLIC_URLenv vars it's given.Amp will handle all of this for you; agents are really good at that kind of stuff. Commit the
.amp/services.yamlfile and Amp's changes to your dev server config so it's faster next time.What about my app's sign-in flow? What about ...?
You don't want to waste time signing into your dev server each time. We recommend adding a way for humans and agents to bypass sign-in flows (such as username/password or OAuth) in your dev server, by visiting a URL like:
https://localhost:2000/__dev/log-me-in/{email}?returnTo={path}We've documented this pattern and more in the portals documentation. Also see Putting an Agent in an Orb for more about how we're using portals. Tell us how else you and your agents are using portals!
-
- August 05, 2026
-
π IDA Plugin Updates IDA Plugin Updates on 2026-08-05 rss
IDA Plugin Updates on 2026-08-05
New Releases:
Activity:
- capa
- fa2be14e: Merge pull request #3137 from mandiant/dependabot/pip/bump-my-versionβ¦
- disrobe
- adfeaf89: grade mba simplification against originals held out of the pass inputβ¦
- 0449e182: grade the apk head-to-head over each tool's whole emitted source set β¦
- d18d4611: keep the wasm toolchain out of a pass-only build, restore the pinned β¦
- c7705751: recover short-circuit control flow through capped node splitting, andβ¦
- ca7149ba: cli: gate the http, grpc and lsp stack behind a server feature and drβ¦
- f3e7af93: apk head-to-head: count a recovered method clean only from a file javβ¦
- c6b38fa6: r: read every serialization variant R writes and grade the reader agaβ¦
- 3e4e31a8: fixtures: replace the build-machine home directory baked into the traβ¦
- 79c91e25: lift-x86: fail the differential when the reference stops producing reβ¦
- 095b284c: lua: call a body fully structured only when every region fit the struβ¦
- 98157241: dotnet: count a body that states either refusal as not recovered in tβ¦
- bb101419: spell-check: exclude per-crate test corpora, whose hex payloads are dβ¦
- e8f032bd: beam: run a toolchain that resolves to a batch script through the winβ¦
- 6e5c9be6: docs: render the android, wasm and beam coverage fractions from recovβ¦
- f5044f1a: format three crates that drifted from rustfmt
- a7c3d9df: cli: keep the no-default-features build compiling by gating the pass-β¦
- 80ae1c36: lift-x86: execute every modelled encoding against a cpu emulator on sβ¦
- ee07f4c7: dotnet: classify a branch condition from the callee return type and tβ¦
- 4ba8f071: dotnet: resolve the fieldptr, methodptr and paramptr indirection tablβ¦
- f1be74fa: dotnet: read every parameter name through one naming path shared by tβ¦
- ffxiv_bossmod
- hrtng
- 43d507e6: - Enums: one more way to import enum type from external til (workarouβ¦
- ida-codemode
- d20287c9: Add timeout argument to execute_python MCP tool
- ida-domain
- 2c9867c2: Fixed segment and function related examples as in #103 (#106)
- ida-hcli
- 02adae21: 0.19.0
- 91f14a81: refactor: construct explain-environment report models in single constβ¦
- 84a00702: Add -json and -offline to plugin status/search, headless explain-enβ¦
- 086297f1: feat: honor $IDAPYTHON_VENV_EXECUTABLE for plugin dependency management
- 44ed0466: feat(ida): add
hcli ida pythonto work in IDA's Python environment β¦ - 3016467a: Warn when IDA's Python version doesn't match the active virtualenv (#β¦
- 6615a3a1: Log Python-relevant environment variables passed to idat (#280)
- ida-pro-mcp
- caa93abf: refactor: audit sweep β dead code, protocol bugs, ida:// removal
- ida-pro-mcp
- IDAPluginList
- af78319e: chore: Auto update IDA plugins (Updated: 19, Cloned: 0, Failed: 0)
- Luc-Nhan
- twdll
- capa
-
π exe.dev Simpler GitHub Integration URLs, Plus Read-Only Access rss
exe.dev integrations let you keep secrets outside of your VM; a proxy injects the secrets. Sometimes this is as simple as adding an HTTP header, and sometimes the integration is bespoke.
We recently gave our GitHub integration two new features:
- One URL for any repo: Any repo that a VM has access to (including team integrations) can be accessed at
https://github.int.exe.xyz/OWNER/REPO. We automatically pick the appropriate integration, saving you the trouble of remembering the integration name as well. We take compatibility seriously, so your old git remotes will work just fine. - Read-only integrations: You can mark a GitHub integration as read-only, both for git operations (fetch, not push) and GitHub API operations.
- One URL for any repo: Any repo that a VM has access to (including team integrations) can be accessed at
-
π HexRaysSA/plugin-repository commits sync repo: +1 plugin, +1 release rss
sync repo: +1 plugin, +1 release ## New plugins - [ida-codemode](https://github.com/hexrayssa/ida-codemode) (0.2.0) -
π r/LocalLLaMA you can now buy llm's at your local supermarket rss
| submitted by /u/ECrispy
[link] [comments]
---|--- -
π Evan Schwartz Notes from the AI Coding Transition rss
Like many other software engineers, my coding workflow has changed dramatically since the start of 2026. And like many others, I've felt some mix of awe, grief, frenetic productivity, atrophying skills, and understanding less while shipping more. In this moment where the field is undergoing this rapid shift, I've found it helpful to read others' takes on their processes, what they're doing to keep their brains engaged, and their genuinely mixed feelings.
Before writing up my own thoughts, I went back through the relevant essays and blog posts from the last ~7 months to find the ones that resonated with me the most. Below are the posts that I especially liked and lines that stuck out from them, either because they gave me some idea about how I might want to use AI or just because they had a particularly incisive description of our field's situation. (Quotes are exact and the bold text is my added emphasis.)
If you've read others that you thought were particularly on point, please send them my way!
February 7, Nolan Lawson:
I didnβt ask for the role of a programmer to be reduced to that of a glorified TSA agent, reviewing code to make sure the AI didnβt smuggle something dangerous into production.
If you would like to grieve, I invite you to grieve with me. We are the last of our kind, and those who follow us wonβt understand our sorrow. Our craft, as we have practiced it, will end up like some blacksmithβs tool in an archeological dig, a curio for future generations.
February 9, Margaret Storey:
Even if AI agents produce code that could be easy to understand, the humans involved may have simply lost the plot and may not understand what the program is supposed to do, how their intentions were implemented, or how to possibly change it.
Peter Naur reminded us some decades ago that a program is more than its source code. Rather a program is a theory that lives in the minds of the developer(s) capturing what the program does, how developer intentions are implemented, and how the program can be changed over time.
Cognitive debt tends not to announce itself through failing builds or subtle bugs after deployment, but rather shows up through a silent loss of shared theory. As generative and agentic AI accelerate development, protecting that shared theory of what the software does and how it can change may matter more for long-term software health than any single metric of speed or output.
February 15, Simon Willison:
the sense of psychological ennui leading into existential dread that many software developers are feeling
Simon: All of the chess players and the Go players went through this a decade ago and they have come out stronger.
February 15, Tom Wojcik:
The Shen-Tamkin study identified six distinct AI interaction patterns among developers. Three led to poor learning: full delegation, progressive reliance, and outsourcing debugging to AI. Three preserved learning even with full AI access: asking for explanations, posing conceptual questions, and writing code independently while using AI for clarification. The differentiator wasnβt whether developers used AI, it was whether they stayed cognitively engaged.
metrics donβt capture whatβs happening underneath. The mental fatigue of reviewing code you didnβt write all day. The boredom of babysitting an agent instead of solving problems. The slow, invisible erosion of the hard skills that made you good at this job in the first place. You stop holding the architecture in your head because the agent handles it. You stop thinking through edge cases because the tests pass. You stop wanting to dig deep because itβs easier to prompt and approve. Thereβs no spark in you anymore.
February 25, Ivan Turkovic:
Here is something that gets lost in all the excitement about AI productivity: most software engineers became engineers because they love writing code.
Not managing code. Not reviewing code. Not supervising systems that produce code. Writing it. The act of thinking through a problem, designing a solution, and expressing it precisely in a language that makes a machine do exactly what you intended. That is what drew most of us to this profession. It is a creative act, a form of craftsmanship, and for many engineers, the most satisfying part of their day.
this is different because it is not asking engineers to learn a new way of doing what they do. It is asking them to stop doing the thing that made them engineers in the first place and become something else entirely.
a mid-level backend engineer is now expected to understand product strategy, review AI-generated frontend code they did not write, think about deployment infrastructure, consider security implications of code they cannot fully trace, and maintain a big-picture architectural awareness that used to be someone elseβs job.
That is not empowerment. That is scope creep without a corresponding increase in compensation, authority, or time.
From my experience building and scaling teams in fintech and high-traffic platforms, I can tell you that role expansion without clear boundaries always leads to the same outcome: people try to do everything, nothing gets done with the depth it requires, and burnout follows.
Now the only limit is your cognitive endurance. And most people do not know their cognitive limits until they have already blown past them.
Set explicit boundaries around role scope. If you are asking engineers to take on product thinking, planning, and risk assessment in addition to their technical work, name it. Define it. Compensate for it. Do not let it happen silently and then wonder why your team is burned out.
talk about what you are experiencing. The isolation of feeling like you are the only one struggling with this transition is one of the most damaging aspects of the current moment. You are not the only one.
February 27, Carson Gross:
Computer programming is, fundamentally, about two things:
- Problem-solving using computers
- Learning to control complexity while solving these problems
I have a hard time imagining a future where knowing how to solve problems with computers and how to control the complexity of those solutions is less valuable than it is today, so I think it will continue to be a viable career even with the advent of AI tools.
I try not to use LLMs to generate full solutions that I am going to need to support.
March 11, Xe Iaso:
Whenever I have Claude do something for me, I feel nothing about the results. It feels like something happens around me, not through me.
the default output has no soul. It's correct. It's competent. It's fine. And "fine" is the enemy of everything I care about as a writer and an engineer.
March 15, Colin Brek:
find it hard to believe that supervising a set of agents is going to lead to an optimal flow experience, because we are more passive, it doesnβt stretch our abilities in the same way, and it requires far less concentration. Will we find flow elsewhere? Solving problems and delivering value will always be rewarding, but I wonder if the optimal flow experience offered by programming has, for the most part, disappeared forever, and many of us will simply find less enjoyment at work.
March 25, Mario Zechner:
You realize you can no longer trust the codebase. Worse, you realize that the gazillions of unit, snapshot, and e2e tests you had your clankers write are equally untrustworthy. The only thing that's still a reliable measure of "does this work" is manually testing the product. Congrats, you fucked yourself (and your company).
You let them run free, and they are merchants of complexity. They have seen many bad architectural decisions in their training data and throughout their RL training. You have told them to architect your application. Guess what the result is?
An immense amount of complexity, an amalgam of terrible cargo cult "industry best practices", that you didn't rein in before it was too late.
All of this compounds into an unrecoverable mess of complexity. The exact same mess you find in human-made enterprise codebases. Those arrive at that state because the pain is distributed over a massive amount of people. The individual suffering doesn't pass the threshold of "I need to fix this". The individual might not even have the means to fix things. And organizations have super high pain tolerance. But human-made enterprise codebases take years to get there. The organization slowly evolves along with the complexity in a demented kind of synergy and learns how to deal with it.
With agents and a team of 2 humans, you can get to that complexity within weeks.
And I would like to suggest that slowing the fuck down is the way to go. Give yourself time to think about what you're actually building and why. Give yourself an opportunity to say, fuck no, we don't need this. Set yourself limits on how much code you let the clanker generate per day, in line with your ability to actually review the code.
March 27, Matheus Lima,
When people say βtaste,β what they actually mean is experience. Pattern recognition built up over years of doing the work. But calling it βtasteβ instead of βexperienceβ does something subtle and harmful: it makes a learnable skill sound like a gift.
May 1, Sid Sundharam:
Doing tasks manually naturally builds up the context required for the decisions involved later because you have time to process everything along the way and construct your mental model of the project's structure.
This process requires more attention and context switching, along with way more decisions per hour. Making constant architectural, big-picture decisions while overseeing the work of a cracked junior dev is fundamentally harder than executing standard programming tasks yourself.
Decision fatigue is, in my opinion, the next invisible friction point for developers.
May 6, Simon Willison:
The problem is that as the coding agents get more reliable, Iβm not reviewing every line of code that they write anymore, even for my production level stuff.
But Iβm not reviewing that code. And now Iβve got that feeling of guilt: if I havenβt reviewed the code, is it really responsible for me to use this in production?
Thereβs an element of the normalization of deviance hereβevery time a model turns out to have written the right code without me monitoring it closely thereβs a risk that Iβll trust it at the wrong moment in the future and get burned.
May 27, Vardan Torosyan:
When you stop fighting with hard problems directly, the mental models fade. You stop building intuition. You start pattern-matching on outputs instead of reasoning from first principles. And the worst part β> you donβt notice it happening. The code still ships. The PR still merges. Everything looks fine until the incident at 2am where you genuinely cannot reason about what the system is doing because you never really had to learn it.
Thereβs a good analogy here from aviation. Pilots trained heavily on autopilot gradually lose the ability to fly manually and this isnβt theoretical, itβs contributed to real crashes.
I think judgment is built from a specific loop: you form a view, you commit to it, you see what happens, and you update. That cycle, repeated enough times, is what builds calibration. The problem with AI is that it short-circuits the first step. You skip forming your own view and go straight to evaluating someone elseβs. Do that enough and the muscle atrophies and again, not dramatically, just quietly. You become a better reviewer and a worse thinker.
- Write before you look. Before opening a tool, before asking the model, write down what you think. Not a design doc necessarily, just your current understanding of the problem, your instinct about the solution, where you think the tricky part is. Even a few sentences. This forces you to articulate your reasoning rather than pattern-match on someone elseβs output. Itβs also surprisingly useful as a diagnostic: if you canβt write anything, you probably donβt understand the problem well enough to evaluate any answer.
- Form a view before reading the suggestion. When reviewing AI-generated code or design, read it critically with your own opinion already in hand. What would you have done? Where does this differ? Why might the model have gone this direction and is it right? This sounds small but itβs the difference between passive consumption and active evaluation. One builds judgment, the other just builds familiarity with AI output.
May 27, Matheus Lima,
I did the software engineering equivalent of forwarding an email with βthoughts?β and then going to lunch.
The job is the part where your fucking brain has to be in the room.
You paste the issue into the machine before reading it. You accept the explanation before forming your own. You create a PR before even understanding what the problem youβre fixing is (!). You request a PR review before reading the diff. You merge because the checks passed and the reviewer approved it and the whole thing smells like progress.
hereβs the new hard rule Iβm following after this βincidentβ: if I still canβt explain the change, I canβt ship it. No exceptions.
June 4, Sean Goedecke:
many software engineers labor under a delusion that their job is to be excellent at their craft. Of course, wanting to be an excellent programmer is not a delusion; it is a completely legitimate value to hold, and a legitimate purpose to pursue. Itβs just not what youβre paid to do at work. Your job, unfortunately, is producing shareholder value. This delusion has been punctured by the end of ZIRP, and again more recently by the rise of AI coding.
June 9, Candost:
Today, the ownership mindset defines the role.
Although unintuitive, limiting the amount of work that runs in parallel is actually producing better outcomes and outputs. I believe the idea of WIP limits must be emphasised more strongly than before.
moving from building features in parallel to building a single feature end-to-end faster.
June 12, Niko Uusitalo:
But for me, prolonged use becomes insidious. It's easy to become lazy and hand over thinking to the machine in looking for the next hit of cognitive offload when coding becomes even a smidge difficult. Why type your search and read half a short blog post to understand the problem when the same keystrokes give you the (possible) answer right there and then.
June 17, Elio Struyf:
When you ask a person to do something, you donβt expect them back in five minutes saying itβs done and ready for the next task. With an agent, thatβs exactly what happens. Done. Next. Done. Next.
Thereβs no breathing space. Thereβs always a next thing to think about. The work used to have a rhythm to it. Youβd struggle, youβd get stuck, youβd finally figure it out, and there was this moment of joy when it clicked. Hours in the code, and then done. Figuring it out was the whole reward.
Thatβs what AI can quietly take from me. Not the joy itself, but the sense that the thing was mine, which is where the joy was coming from all along. It hands me the finished thing, the finished thing works, and somewhere in there, I stop being the person who made it and become the person who approved it.
AI didnβt take the joy out of coding, I gave it away.
June 22, Vardan Torosyan:
a quieter admission: the work isnβt teaching me much anymore, and itβs stopped being fun.
Thatβs a description of becoming a manager. What AI did was give every engineer a small team of tireless, fast, occasionally-wrong direct reports. And with the team came the managerβs problem. The discomfort engineers are feeling right now isnβt an AI problem. Itβs a delegation problem, and delegation is the oldest unsolved problem in our discipline.
The good news: itβs not unsolved because nobody tried. Managers have been failing at it and slowly adapting for decades.
What is in your control is small and it is everything: where you point your attention, what standard you hold, what you decide not to do, and whether youβre honest about which is which. The whole reason βthere is too muchβ feels like drowning is that we keep trying to exert control over the size of the ocean. You canβt. You can only decide where to swim.
- Separate ownership from authorship....You can own code you didnβt write. You cannot own code you refuse to understand. Those are different statements, and the gap between them is the whole job.
- Decide what you must understand deeply - then triage the rest without guilt.
- The discomfort is the job, not a bug in it. Acting on incomplete information, sitting with the unease of not-fully-knowing, and committing anyway - that is judgment. Managers donβt feel more certain than you; theyβve made peace with feeling uncertain and moving regardless....
- Keep something you understand deeply....
- Track what youβre learning, not just what youβre shipping....
June 23, Armin Ronacher:
I want to be able to explain what the system does without first having to ask a clanker to explain it to me.
Present-day models tend to produce code that is too defensive, too complex, too local in its reasoning. They avoid strong invariants. They add fallbacks instead of making bad states impossible. They duplicate code, invent bad abstractions, and paper over unclear design with more machinery.
If each iteration adds another small defense, the system slowly becomes less understandable while appearing more robust.
we may no longer understand the whole system in the same way. We treat it, we monitor it, we stabilize it, but we do not necessarily comprehend it.
Some domains will punish sloppiness and demand trust and responsibility, but a lot of software lives in a world where raw speed, quick experimentation, and vast coverage matter enormously.
Better visualizations of changes or orchestration or agents will not restore our understanding. Either we need to find clever ways to jolt the human back into the loop and make the changes of the loops legible long term, or we need to find better ways to compose these ever more complex systems.
June 28, Andrew Diamond:
In the old workflow, the creative process happened mostly in your mind. In the new process, you supervise the creative process that unfolds inside the AIβs internal machinations.
Now, letβs put the historical novelist in the position of the software developer. She gets a call from her publisher saying theyβve found a way for her to bring four books to market each year instead of one book every two years. Theyβve recruited a bunch of top-notch high school and college students who can each crank out five pages a day of competent writing for dirt cheap. The publisher wants the historical novels to maintain the original writerβs level of excellence, or to at least be close, so theyβre retaining her services as an editor.
The novelistβs job is now to edit the work of the students, each of whom has been carefully prompted to write pages that should, with a little work, be stitched together into coherent chapters.
Anyone who has ever graded the work of high school and college kids knows that this is generally not rewarding work. If youβve ever had to grade a hundred papers in a week, you know what a grind that is.
The novelist, like the software engineer, is no longer deeply engaged in her work. Editing is not creating. You do not give yourself over to your imagination. You do not immerse your mind and feelings in the process of invention. Instead, youβre rooting out problems, trying to clean up clumsy wording and redundant descriptions instead. The flow state is gone. You are now a cog in a larger process that doesnβt really value your creativity or your need to exercise it.
Worse stillβand I have felt this personally after months of reviewing AI-generated codeβyour skills drop off sharply. When a new issue arisesβa feature to be implemented, or a tricky bug to fixβthe idea of wasting several hours on it feels insulting. Why should I dig through all that code when Claude can locate the bug in five minutes and start drafting a fix?
But I think that creative people choosing to hand over their most imaginative, flow-state thinking to an army of bots will be a mistake in the long run.
July 1, Igor Kulman:
The feature gets delivered, but I do not really feel like I built it.
Maybe this is just another evolution of our profession and in a few years it will feel completely normal.
Or maybe one day we will realize that somewhere along the way we stopped programming and nobody really noticed.
July 6, Vini from GolemUI
βIβm not sure I can do my daily job without Claudeβ
The cost was never writing the code. The cost was owning it.
A fix you cannot judge, in code nobody on your team understands, is not maintenance; itβs another spin of the roulette wheel. And when the bug comes back wearing a different hat, who do you escalate to?
Your vibe-coded grid has no changelog, no support contract, and no team whose reputation depends on it. AI makes touching the code cheap; it does not make answering for it cheap.
July 9, Rushabh Mehta:
we are yet to see βmind blowingβ software being churned out showing that it is still hard to build great software purely with agents. Coding using models can take you from 0 to 1 very fast. But what about 1 to 10, 10 to 100?
July 11, Sean Goedecke,
In sufficiently large codebases, everyone operates with an incorrect theory of the program.
Like many software tools, LLMs are a double-edged sword: they make it harder to construct a detailed mental theory of the software, but they allow you to build a partial theory quickly and they can help you leverage that partial theory more effectively. This is a complex tradeoff that Iβm still thinking about.
July 13, antirez:
our field is evolving in an incredible and painful (but also joyful) direction
if you control the ideas of your software, looking at the code itself is suboptimal and often pointless.
July 13, Armin Ronacher:
large software projects have never been limited only by how quickly an individual can produce code. They are limited by how well people can coordinate their understanding of the system they are changing.
The shared language of a software project is not English or Python but it is the common understanding of what its concepts mean, where the boundaries are, which invariants matter, who owns what, and why the system has the shape it does.
Before agents, some of this shared understanding was maintained by friction....Some of it was the process by which your understanding became mine, and by which both of us discovered whether we still agreed about how the system worked.
July 24, Sean Goedecke:
The most important skill in prompting is expertise in the domain youβre prompting for.
A good illustration of this is Terence Taoβs conversation with ChatGPT about the recently-discovered counterexample to the Jacobian Conjecture. This is not the same ChatGPT I talk to! I couldnβt get to where Tao gets, even with unlimited tokens to burn.
Thereβs a lot to learn about good prompting from Taoβs conversation. Here are a few observations:
- Taoβs messages are very short and to-the-point. He doesnβt respond point-by-point to the model, just to the gist
- The model outputs are much more concise than when I try and talk to GPT-5.6 Sol about mathematics. By signalling expertise, Tao shunts the model into βtalking-to-mathematiciansβ mode, not βexplaining-to-amateursβ mode
- Tao pushes back when the modelβs responses look wrong, but he doesnβt directly contradict; instead, he says things like βthis looks more complex than I was hoping forβ
- Tao makes several leaps and suggestions himself. He almost never takes the modelβs advice about where to go next
July 24, Piotr Chmolowski:
So why does software keep getting worse across the board?
The bar for βuser experienceβ has kept rising, but everything has become increasingly fragile.
July 25, Jacob O'Bryant:
LLMs are useful for producing code that meets easily and objectively verifiable acceptance criteria which you provide explicitly
I've found this simple instruction to vastly improve LLMs' output: "Never write READMEs, docstrings, or comments. I will write those myself later. And yes, I really mean this."
-
π Simon Willison One-shotting a Raccoon Heist game using Claude Fable 5 rss
Back in 2022 I tweeted screenshots of a game concept generated by GPT-3 and some concept "art" created using DALL-E. Today, on the fourth anniversary of that tweet, I decided to see if Claude Fable 5 (running in Claude Code for web) could build the entire game from the content of that tweet. It did a pretty good job of it!
You can play the game here. Here's the GitHub repo, and a short video demo:
How I built this
This is the August 5th, 2022 tweet:

My GPT-3 prompt back then was:
Write a detailed product description of a computer game where a team of raccoons go on heists.This was in the text completion days, where you asked GPT-3 to complete the rest of the text. It completed:
In "Raccoon Heist", you and your team of thieving raccoons are tasked with pulling off a series of daring heists. From robbing banks to stealing priceless art, no job is too big or too small for your furry crew. You'll need to use your wits and your skills to avoid the police and make a clean getaway with the loot. With exciting gameplay and a charming cast of characters, "Raccoon Heist" is the perfect game for anyone looking for a light-hearted caper.
My prompt to DALL-E was short:
Screenshot from a video game where a team of raccoons go on a heistToday's experiment: can I dump those screenshots into Fable 5 with a prompt telling it to write a game, then leave it to its own devices and get a working game at the end?
Setting Claude Code for web up to use GitHub Pages
A frustrating thing about Claude Code for web is that it can be hard to test what it's working on while it's still working.
I've been using GitHub Pages to work around that limitation, and found it to work really well.
Here's my process:
- Create a new repository for the project at https://github.com/new - this can be public or private, the trick works equally well for both.
- Start a Claude Code for web session, in the Claude iPhone or Desktop apps or in the browser at https://claude.ai/code
- Tell Claude what to work on, and encourage it to commit an
index.htmlpage as quickly as possible. This will create a branch with a name likeclaude/3d-raccoon-heist-game-50n293 - Navigate to the Settings -> Pages area for the repository (
github.com/simonw/raccoon-heist/settings/pagesin my case), select "Deploy from a branch", pick the branch name, and hit Save.
That's all it takes! Within about 30 seconds of each push the latest content will be visible at
yourname.github.io/your-repo/.If you do this with a private repo, anyone who can guess the name of the repo will be able to view the published content. I don't worry much about this myself.
The Fable 5 prompt
Here's the prompt I gave Fable 5 (written in the notes app on my phone - this entire project was conducted on mobile). I accompanied it with the two images from the original tweet.
Build this 3D game, for the browser.This repo is configured to serve static files so make sure there is an index.html that loads everything else.Make sure it is mobile-friendly (touch controls, works well on small screens).You have an OpenAI API key and access to their image generation model APIs, use that for textures to use with your 3D models. Docs here: https://developers.openai.com/api/docs/guides/image-generation - use gpt-image-2Work independently - do not ask me to make any further design decisions. Make sure the game is fun, a little surprising, has good raccoon heist vibes, and is visually pleasing.Commit and push as often as possible so I can preview your work - start with an index.html that presents a title screen, then build from there.Append to a notes.md file as you work, including your changes to that as part of every commit.I didn't make any technology choices. I assumed (correctly) that it would probably use Three.js based on previous experiments.
Giving Claude access to an OpenAI key turns out to work really well for filling in gaps in its capabilities - in this case we needed some way to generate images to use as textures. Fable is very good at prompting image generators!
I said "Work independently - do not ask me to make any further design decisions" because I wanted to see if it could produce a full, working game without any further input from me.
I also said "Commit and push as often as possible so I can preview your work". When you use Claude Code in the Claude iPhone app you give it a GitHub repository and it works in a branch. Telling it to "push as often as possible" means commits start landing in that branch straight away.
I like asking for
notes.mdas a bit of added flavor - here's that finished file, and the entry it made when it added the dog:New escalation: from night 3 the yards get a patrolling guard dog β a low-poly brown hound with a spiked red collar and a wagging tail. It wanders between random spots, and within 12 units it catches your scent and tracks you by smell (line of sight is irrelevant β it's all nose, shown by a π over its head and barking). It gives up if you open a 17-unit gap. Getting caught messages are now source-specific: guard / headlights / hound. Verified wander β track β caught with an automated test.
Reviewing the transcript
You can access the Claude Code shared session, and I also used my claude-code-transcripts tool to export my own HTML version which you can find here.
Fable started with an index page, vendored a copy of Three.js, then wrote its own gen_textures.py script (copy here).
It generated the textures and spot-checked them to make sure they looked OK. The metal.jpg file it generated for the trash can looks like this, though I don't think it was applied exactly right in the game itself:
Then it built out the first basic version of the game, then decided to "smoke-test in the pre-installed Chromium" using Playwright. This meant it could take screenshots of its own work and eyeball them. It did that for both desktop and mobile widths of the page, then noticed that the raccoon was invisible at mobile widths, so it fixed that:
The raccoon, dumpster hideout, and both crew raccoons are now perfectly visible on mobile. Committing this critical fix.
It decided to generate a title screen, which it did using this gen_title.py script. Here's the
gpt-image-2prompt it used for that:Video game key art, low-poly 3D render style, moody nighttime scene: a cute low-poly raccoon wearing a tiny black burglar mask sneaking on its hind legs carrying a glowing gold coin, next to a tipped-over metal trash can, suburban house with warm glowing windows in the background, deep blue night, full moon, fireflies, cinematic rim lighting, charming heist caper mood. No text, no words, no logos.And the resulting image (which Claude thought was "gorgeous") - though I note that when it's shown on desktop it gets cropped to just the top third without the raccoon!

Then my favorite change: it added the dog:
export function makeDog() { const g = new THREE.Group(); const BROWN = 0x8a6440, DARK = 0x5e4128; const body = new THREE.Mesh(new THREE.SphereGeometry(0.42, 10, 8), M(BROWN)); body.scale.set(0.9, 0.8, 1.5); body.position.y = 0.55; body.castShadow = true; g.add(body); const head = new THREE.Mesh(new THREE.SphereGeometry(0.3, 10, 8), M(BROWN)); head.position.set(0, 0.85, 0.62); g.add(head); const snout = new THREE.Mesh(new THREE.SphereGeometry(0.16, 8, 6), M(DARK)); snout.scale.set(0.9, 0.7, 1.3); snout.position.set(0, 0.76, 0.9); g.add(snout); const nose = new THREE.Mesh(new THREE.SphereGeometry(0.06, 6, 6), M(BLACK)); nose.position.set(0, 0.78, 1.08); g.add(nose); for (const s of [-1, 1]) { const ear = new THREE.Mesh(new THREE.SphereGeometry(0.12, 6, 6), M(DARK)); ear.scale.set(0.7, 1.3, 0.5); ear.position.set(0.2 * s, 1.08, 0.55); g.add(ear); const eye = new THREE.Mesh(new THREE.SphereGeometry(0.05, 6, 6), M(0x1a1a1a, { emissive: 0x331111 })); eye.position.set(0.13 * s, 0.92, 0.86); g.add(eye); } const tail = new THREE.Mesh(new THREE.CylinderGeometry(0.05, 0.09, 0.5, 6), M(DARK)); tail.position.set(0, 0.8, -0.62); tail.rotation.x = 0.8; g.add(tail); // spiked collar const collar = new THREE.Mesh(new THREE.TorusGeometry(0.22, 0.05, 6, 12), M(0xc0392b)); collar.position.set(0, 0.78, 0.5); collar.rotation.x = Math.PI / 2.4; g.add(collar); const legGeo = new THREE.CylinderGeometry(0.07, 0.09, 0.34, 6); const legs = []; for (const [x, z] of [[-0.22, 0.35], [0.22, 0.35], [-0.22, -0.35], [0.22, -0.35]]) { const leg = new THREE.Mesh(legGeo, M(DARK)); leg.position.set(x, 0.17, z); g.add(leg); legs.push(leg); } let phase = Math.random() * 10; return { group: g, animate(dt, speed) { phase += dt * (3 + speed * 10); const amp = Math.min(0.6, 0.1 + speed * 0.6); legs[0].rotation.x = Math.sin(phase) * amp; legs[3].rotation.x = Math.sin(phase) * amp; legs[1].rotation.x = -Math.sin(phase) * amp; legs[2].rotation.x = -Math.sin(phase) * amp; tail.rotation.z = Math.sin(phase * 1.5) * 0.4; body.position.y = 0.55 + Math.abs(Math.sin(phase)) * 0.04 * (0.3 + speed); }, }; }
And did a round of testing on it using Playwright, including another screenshot.
// walk near the dog await page.evaluate(() => { const d = window.__rh.dog; window.__rh.teleport(d.x + 6, d.z); }); await page.waitForTimeout(2000); info = await page.evaluate(() => JSON.stringify({ dog: window.__rh.dog, state: window.__rh.state, player: window.__rh.debug().player })); console.log('after approach:', info); await page.waitForTimeout(3000); info = await page.evaluate(() => JSON.stringify({ dog: window.__rh.dog, state: window.__rh.state })); console.log('after chase:', info); await page.screenshot({ path: __dirname + '/shot-dog.png' });

It made a few more tweaks, then declared itself done:
Raccoon Heist is built, tested, and pushed β 7 commits on
claude/3d-raccoon-heist-game-50n293, all verified with automated Playwright playthroughs on desktop, portrait-phone, and landscape-phone viewports.The game: You're a masked raccoon sneaking out of your crew's dumpster hideout into a moonlit cul-de-sac. Grab coins, gems, rings, donuts, and fish (they visibly stack on your back and slow you down), then waddle home and bank them before dawn. Each night raises the goal and the heat: night 1 has one flashlight-sweeping guard, night 2 has two, night 3 adds a scent-tracking hound that ignores line-of-sight entirely. A police cruiser sweeps the street with headlights, homeowners randomly peek out of windows, a seagull periodically dive-bombs your unclaimed loot, pizza slices trigger a 6-second speed FRENZY, and a rare golden TV is worth 120 points if you can haul its weight home. Win ranks: TRASH PANDA β β CAT BURGLAR ββ β MASTER OF DISGUISE βββ, with your best run saved to localStorage.
How it's built: Vendored Three.js (no CDN), procedural low-poly characters, and a procedural WebAudio soundtrack (sneaky walking-bass jazz plus all sound effects β zero audio files). All seven ground/wall textures and the title-screen hero art were generated with gpt-image-2 and committed as static assets, so the deployed game makes no API calls. Mobile gets a dynamic touch joystick (appears wherever you touch) plus a DASH button; desktop uses WASD/arrows and Space.
Testing caught two real bugs worth mentioning: the canvas rendered at 2Γ size on any real phone (a
cssTextassignment was wiping Three.js's inline sizing β desktop DPR-1 tests masked it completely), and the win screen's star-rating div inherited the title screen's full-screen.starsCSS and silently swallowed every tap on the "next night" button. Both are fixed and regression-tested, along with pickup, banking, chase/caught, dawn, night progression, and lose/retry flows.notes.mdhas the full build log. The game is live on the branch β just serve the repo root and openindex.html.Is the game any good?
It's an impressive starting point, but it's not a good game.
You move your raccoon around a yard collecting items - donuts, fish, gold coins, jewels - while avoiding guards with flashlights and, in later levels, a dog. You have a limited carrying capacity, and once that's full you need to drop stuff off at the dumpster. If you pick up a pizza slice you get a temporary speed boost.
There are no team mechanics at all - there are two other static raccoons next to the dumpster but they're purely decoration.
It gets slightly more challenging as the levels progress - the dog introduced in level 3 is the most interesting new mechanic - but it's very, very easy to beat. It's also pretty boring - each night has a fixed duration and you can collect all of the items and then have nothing else to do while waiting for the dawn.
I was impressed by the implementation. It's fully 3D, there are trash cans, the flashlight illumination cones are fun, and it has a reasonably coherent visual style. It works on mobile. The music ("a procedural WebAudio soundtrack (sneaky walking-bass jazz plus all sound effects β zero audio files)" according to Claude) is simple but feels about right.
As a finished game project, it's mediocre. As a starting point from a single prompt I think it's very impressive.
I've vibe coded up quite a few games now. They've all been deeply disappointing from a gameplay perspective - it turns out designing games that are fun remains a uniquely human trait, and one which requires significantly more skill and experience than either Claude or I can bring to bear.
That said, I thoroughly recommend tinkering with game development projects as a way to explore the capabilities of agents. It's a fun, low-risk way to try out new things. If you stick at it long enough you might even produce something that's worth playing!
Update 7th August 2026: I posed the same prompt to OpenAI Codex Desktop running GPT-5.6 Sol Ultra and got a significantly better result - GPT-5.6 Sol picked up on the importance of the squad of raccoons going on a heist, and built a game where you must rescue your two crewmates in a museum and then stack on top of them to steal the Golden Sardine.
You are only seeing the long-form articles from my blog. Subscribe to /atom/everything/ to get all of my posts, or take a look at my other subscription options.
-
π exe.dev Introducing Auto-Purchasing for Shelley Tokens rss
Weβre happy to announce that you can now enable auto-purchasing of Shelley Tokens. Previously, you had to manually purchase more credits every time you exhausted your token store. With auto-purchasing, you no longer have to take time out of your day to click through the UI.
We also added safeguards to this feature to avoid runaway spend. There are three options you can configure:
- A floor amount that triggers a purchase.
- The number of tokens you wish to purchase each time.
- A monthly spending cap.
You can access this feature via the SSH lobby:
billing auto-purchase status billing auto-purchase billing auto-purchase --floor=10 --amount=25 --cap=200 --yes billing auto-purchase disableOr from the newly redesigned Shelley page in the dashboard:

For our friends on Team plans, we are still working on a solution for shared tokens and payment methods. In the meantime, weβve also enabled auto- purchasing for teams, but remember, it will use your own payment method.
Go build something!
-
π PrimeIntellect-ai/prime-agent v0.7.0 release
Breaking Changes
- Changed agent messages to always use steering delivery and removed delivery-mode options from the Python, CLI, RPC, and connection APIs. Code passing
modetoagent_message.send, or a delivery mode over the CLI/RPC, must drop it.
Changed
- Changed self-updates to report the previous and new Prime Agent versions.
Fixed
- Fixed the subagent summary showing retained children as idle while they run follow-up work.
- Changed agent messages to always use steering delivery and removed delivery-mode options from the Python, CLI, RPC, and connection APIs. Code passing
-
π exe.dev Botiquette rss
There are lots of bots floating around exe, helping us organize and monitor and maintain our world. (Agents and bots and any LLM output are all synonyms for this post.) Weβve organically developed some etiquette around bots that work well for us.
-
Bots do not post to human spaces. Attention is precious, and bots are (currently?) incapable of gauging the cost of their posts.
-
There is no expectation that other humans will read human posts to bot spaces. Or even bot posts to bot spaces.
-
Humans write their own words.
-
If a human pastes bot output into a post, that output is clearly marked as such, typically in block quotes or a code block.
-
Bot posts always include where the bot is running and where its source code is.
-
Bots have names, because it makes it easier to talk about them, but they are computer programs. Their pronouns are always βit/itsβ.
-
-
π Locklin on science The tools of Dan Gelbart rss
One of the cult youtube channels of machinists is the channel of Dan Gelbart. Youtube’s suggestion algorithm found him for me, and it made me nostalgic for all the talented machinists (often with similarly funny accents) I used to run into at Berkeley Labs. I paid more attention afterΒ watching one about a home made […]
-
π PrimeIntellect-ai/prime-agent v0.6.1 release
- Added reverse tab navigation to the
/loginconfiguration menu and moved the model scope shortcut toAlt+S. - Fixed daemon startup crashes hiding their exit status and daemon log until the startup timeout.
- Documented the global
idleEvictionMinutesdaemon setting, including its default, valid values, and eviction/passivation behavior (#621). - Fixed top-level
--helpomittingacpfrom the supported--modevalues (#620). - Fixed
stopandrenamebecoming prompts when--daemon-socketprecedes the command (#622). - Fixed subagent terminal notices arriving as anonymous follow-up prompts instead of attributed agent messages, so a parent can now tell which child reported completion, failure, or cancellation, and a busy parent is steered at the next turn boundary rather than waiting to go idle (#617).
- Fixed ACP mode reporting a failed turn as a clean
end_turn. A provider error, expired auth, or unusable model leftsession/promptresolving with no updates at all, which reads to a client as a successful but empty turn; the turn now fails with the underlying error instead. - Fixed ACP cwd mismatch metadata treating symlink aliases such as macOS
/varand/private/varas different directories (#623).
- Added reverse tab navigation to the
-
π HexRaysSA/plugin-repository commits Snapshot GitHub metadata for legacy api-plugins repos too rss
Snapshot GitHub metadata for legacy api-plugins repos too The snapshot script only walked the HCLI index (plugin-repository.json), so the ~140 legacy api-only plugins never got GitHub repo metadata in combined.json: no fresh stars, no owner avatar, and no owner type β which the UI needs to label publishers as Organization vs Individual (e.g. atredispartners showed a letter-tile avatar and 'Individual' despite being a GitHub organization). Add --api api-plugins.json to also snapshot those repos; wired into the justfile and the deploy workflow. Per-repo 24h caching and 404 skipping apply unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
π The Pragmatic Engineer The Pulse: Bending Spoons' Acquisition Strategy rss
Bending Spoons has announced buying Airtable for $1.285B in cash this week - which is less than the $1.4B in total funding Airtable has raised in the past, and well below the $11B valuation it had during its last fundraise in December 2021.
Selling to Bending Spoons is a company admitting defeat, and its inability or unwillingness to turn its business around, and wanting to get the highest possible cash for the business. Because this is what Bending Spoons is excellent at: they pay the highest cash value for a struggling business with a well-known brand, then take over operations, and operate the product with a fraction of the staff. They often let go most or all of the original team as they move over product operations to their in-house engineering team based in Italy and Europe.
Evernote: what happens when a new team takes over a legacy application
And having talked with Bending Spoons' engineering team on the podcast: they have done impressive engineering work after a takeover, in the past! For example, upon acquiring Evernote, the Bending Spoons engineering team discovered that the note-taking service was running as a Java 11 monolith (!!), with user data sharded across 750 manually provisioned virtual machines (!!!) on top of Google Cloud - in 2023! At a time when running cloud-native setups (managed databases, microservices) was common knowledge for years.
Evernote's existing setup was weirdly inefficient and operationally very heavy, with manual interventions needed to keep the service running. Needless to say, performance was poor because some VMs were regularly overloaded. Also, oncall was brutal!
The Bending Spoons engineering team rationalized the architecture:
- Migrated user data sharded from the 750 manually provisioned VMs to a managed database
- Split up the Java 11 monolith to microservices
- Did all of the above without disrupting user experience
- Improved performance of the backend by a wide margin
- Reduced oncall load after finishing the migration to a cloud-native setup vs the previous manual provisioning setup
- Did all the above in about 6 months.
It's a fair question: would long would have the original Evernote engineering team have taken to do the same changes that made the service more reliable, more performant, and cheaper to operate? I would guess it would have taken them many years: in fact, if they did not make this change until 2023, who knows if they would have ever made these pretty rational changes? And so the "shock therapy" of Bending Spoons starting with a blank page, and a new team taking over operating the full product, with a laser focus on efficiency: well, this approach can be pretty efficient, as the Evernote example shows.
You can listen to the full podcast episode I did with the Bending Spoons team:Twisting the rules of building software: Bending Spoons .
Price increases and the existing team let go: the two most typical
complaints
Bending Spoons taking over an existing product has two major criticisms:
- Price increases. Evernote was the biggest example of price hikes: after Bending Spoons took over operating the product - and improving its performance - price hikes followed. Being Spoons kept investing in Evernote, adding new features (including AI ones), but customers paying $37/year for the Pro plan pre-2023 were charged $250/year by 2026. My take is that this is what happens when a product starts working a business maximizing profits: lots of customers will leave for competition, while others will pay more, valuing a more reliable service that gets more investment than before. Bending Spoons keeps improving Evernote since the acquisition, alongside the price increases. Clearly, the company is optimizing for maximizing revenue, not maximizing the number of customers, though.
- Layoffs. Bending Spoons let go most/all of the Evernote team in the US, briging operations in-house. This is part of the "usual" playbook of Bending Spoons: they buy products to operate them as efficiently as possible. The re-architecting example shows benefits of starting from scratch, and not needing to deal with internal resistance for changes that result in more efficient operations. Knowing that with a Bending Spoons acquisition, letting go of all the existing team is on the table is something that comes with selling to this company.
With this, let me share my analysis of a past Bending Spoons acquisition: when they bought SteamYard from Hopin.
Below is the now un-paywalled excerpt from** The Pulse #89: The end of Hopin** , from April 2024, sent to paid The Pragmatic Engineer subscribers. If you'd like to get analysis like this in your inbox, weekly, subscribe to The Pragmatic Engineer .
The End of Hopin
It's been a real rollercoaster ride for the virtual events provider:
- 2019 : founded with a mission to provide a solution for hosting virtual events.
- 2020-2021: raised a total of $1B in funding during a seed round in Feb 2020, Series A in June, Series B in November, and then a Series C in March-June 2021. The company was valued at $7.75B and acquired several startups, the biggest of which was video streaming platform, StreamYard, for $250M.
- 2022 : layoffs in February, when Hopin was one of the early scaleups to do large cuts (12%), followed by more in July (29%), and November (17%)
- 2023 : Hopin sold its core event tech business to RingCentral for $50M. We analyzed this at the time.
- 2024: Last month, Hopin's UK entity entered liquidation. Insiders told me it was merely a restructure, with Hopin UK employees joining StreamYard. Basically, Hopin became the business it had purchased back in 2021.
This week, Italian mobile app developer Bending Spoons acquired the remains of Hopin, which is basically the StreamYard product. All Hopin staff will soon be laid off.
The Bending Spoons acquisitions strategy
Bending Spoons has previously acquired apps such as the notes app Evernote in 2022, events app Meetup in 2024, and video-recording app FiLMiC in 2022. Their approach to these acquisitions was the same each time:
- Take over operating the product
- Fire most staff immediately
- Have some remaining staff hand over services, then fire them as well
- Operate the app with a much smaller team and raise prices.
- Profit!
I talked with current Hopin employees for details on what will happen next, and if this model will be followed again. Unfortunately, it will.
All existing Hopin staff will be let go, eventually. This affects around 80 staff working on StreamYard, and another 70 on other Hopin products, Streamable (video sharing) and Superwave (community platform.) I'm told severance packages are generous enough, at around 3-4 months' salary.
As with other Bending Spoon acquisitions, a subset of the team was requested by Bending Spoons to help with the transition (and then be let go afterwards.) Understandably, morale is very low for this reason, and the certainty that everyone will lose their jobs.
How much did StreamYard sell for?
From talking with current employees, I gather that circa 95% of Hopin's revenue comes from StreamYard, and not more than 5% from Streamable and Superwave. So the only valuable asset that this acquisition priced in is StreamYard.
In 2021, Hopin paid $250M for it. Back then, the video streaming service generated about $40M in annual revenue. This has risen to about $70M per year and keeps growing in an increasingly crowded market. StreamYard was at around break even and can be easily made profitable, I'm told.
A good question is whether Bending Spoons paid $250M or more for this asset. In 2023, RingCentral paid $50M for the "core" virtual events offering which was making $20M in annual recurring revenue (ARR) at the time, I've confirmed with insiders. However, ARR was falling steeply, and was forecast to hit $10-15M within a year. So RingCentral paid a 2.5x multiple for an asset losing revenue.
StreamYard brings in $70M per year, and this is increasing. I'd assume the purchase price would be at least the same 2.5x multiplier, if not more. So there's a fair chance this sale's value is close to $200M.
Why did Hopin sell to a buyer which wants to lay off everyone?
I have exclusively learned that StreamYard's founders actually offered to Hopin's board of directors to buy the company back, and operate independently, as before. This would've been a better outcome for employees, most of whom would surely have kept their jobs. Some of StreamYard's staff knew of this plan and naturally supported it. The Bending Spoons sale has taken everyone by surprise.
But why would Hopin choose a buyer that is guaranteed to sack existing staff? Well, the board might have had no real choice, due to Hopin having raised too much money.
Hopin raised $1B in funding, during which it almost certainly offered board seats to investors including a16z, General Catalyst, Coatue, Northzone, Salesforce Ventures, Tiger Global, Accel, and others. It's safe to assume investors control the board, and as Hopin will never live up to its $7.75B valuation, the board-level rationale has evidently been to maximize the amount of money clawed back.
Of that $1B, here's what's left:
- $50M from selling Hopin's core business
- Whatever StreamYard sells for
- Residual cash left over from the fundraising
The board serving investors' interests had to shop around for the highest bidder, and minimize losses. I have to assume the decision on whether StreamYard's founders could buy back their own company came down to whether or not someone else was offering more money for it. Unfortunately for Hopin's staff (and fortunately for investors,) Bending Spoons probably offered more.
The risk of raising too much venture capital
Hopin is a reminder that raising too much venture capital can have unexpected, seemingly irrational, outcomes.**** Firing all staff from a company making $70M/year while being break-even or profitable sounds irrational from the company's perspective. But it is rational for investors and a buyer:
- Hopin's investors realized the company is a "failed bet." They want to cash out their losses: get back whatever money they can - which is still in the hundreds of millions of dollars! - and use this capital to make new bets.
- Hopin's buyer - Bending Spoons - wants to maximize their return. They pay $X for the company, and the goal is to generate $Y over the next several years in profit from it, where $Y > $X. So, the acquisition pays for itself. Bending Spoons has a working model that involves firing all existing staff, and operating the product more efficiently.
The biggest losers in this story are:
- Some investors. Collectively, investors poured $1B into Hopin. In October 2023, Hopin returned $581M of capital to investors (so 58% of all amount raised). It is unclear if the StreamYard purchase that could be another $200-300M, will be returned to them. It is safe to assume that investors will lose about 20-42% of the amount they invested, depending on how much proceedings of the StreamYard purchase they get paid. This is much better than in the case of one-click checkout startup Fast going bankrupt _ a year after raising $100M in funding, where investors most likely lost all their investment! In the case of Hopin: it's still a loss, but it's far from a 100% loss like with Fast._
- Employees who expected a better outcome. Shares issued to staff by Hopin are now officially worthless. At the same time, Hopin did pay above-the-market base salaries, and offered generous severance during redundancies. Unfortunately, a reality of fast-growing startups is that they can grow fast, but also go down fast.
Winners of this sale are:
- The original founders of StreamYard who sold the company for $250M cash. Even though these founders are also departing, they netted a healthy return in 2021.
- Bending Spoons, which has acquired a market-leading streaming product generating $70M per year and growing. StreamYard would normally not be available to buy, but the need of the Hopin board to "cash in" the company's remaining assets made this sale possible.
I assume the biggest winner of the Hopin story stands to be Hopin's founder and former CEO, Johnny Boufarhat. He sold more than Β£100M ($127M) of his shares in 2021 as secondaries. He probably netted more money than Hopin - excluding StreamYard - generated in its lifetime! Selling a good chunk of his shares in 2021, at the peak of hype for virtual events is a good reminder that when everyone is buying, it can be a profitable strategy to sell!
What happened to other fast-growing startups in Europe?
In 2020, Hopin was known as the fastest-ever growing startup in Europe by valuation. This visualization by Sifted went viral, and was widely shared by Hopin staff on social media:
Graph
showing Hopin 's growth to $7.75B in under 2 years. Source:
Sifted .Hopin's current value is now zero, having sold its valuable assets. But how have other, formerly fastest-growing startups in Europe performed? I visualized this:
How
the group of fastest-growing startups in Europe in 2020 are doing today. Wolt
and Revolut were the only two to remain on a "hockey stick-growth," valuation-
wise.Excluding Hopin, the car sale website Cazoo did worst; it's currently close to bankruptcy, valued at about $60M. The companies that managed to grow above than their 2020 valuations are:
- Food delivery service Wolt was acquired by DoorDash for β¬7B ($8.1B) in 2022
- Ride-hailing app Bolt was last valued at $8.5B, and is supposedly preparing for an IPO in 2025
- Neobank, Revolut, was valued at $33B, even though some investors cut their valuation of the company to around $20B in the summer of 2023
- Spotify's current market cap is nearly $60B, and the company is trading close to its 2021 all-time-high
This chart confirms what we already know: 2020-2022 was a time when startup and scaleup valuations hit all-time highs, fueled by zero interest rates, and widespread changes in consumer spending caused by the Covid-19 pandemic. We have covered what the end of rock bottom rates could mean for the tech industry.
-
π PrimeIntellect-ai/prime-agent v0.6.0 release
Breaking Changes
- Changed
rlm(...)to return at task admission instead of waiting for the child to finish. It now yields a spawn handle (rlm_child_id,name,session_dir,model);RLMResultand its final answer, usage, and model-fallback warning are gone. A child reports back withagent_message.send(..., receiver_role="parent"), which arrives as an ordinary prompt and starts a parent turn. Code that readresult.answer, or treatedasyncio.gather(...)overrlm(...)as fan-in, must be updated. - Changed
agent_message.sendto role-addressed delivery: passreceiver_role("parent","sibling","child") plusreceiver_namefor siblings and children. The old positionalsend(target, message)form no longer works, and the separateroster()call is nowagent_message.list_agents(). - Narrowed agent reach to the nuclear family: an agent may message or observe only its parent, siblings, and direct children. Top-level sessions are siblings of one another, so agent-to-agent between them still works; grandchildren and cousins must be reached by relaying through the intermediate child. Users are unaffected and still see every session.
- Requesting an unavailable subagent model now fails the spawn instead of silently falling back to the parent's model with a warning.
- Bumped the daemon schema revision to 13 for the parent-edge, depth, naming, and passivation wire changes; older clients and daemons are rejected cleanly at connect.
Added
- Added
--mode acp: Prime Agent now runs as an Agent Client Protocol agent over NDJSON on stdio, driving anAgentConnectionin-process. IPython surfaces as an ACPexecutetool call carrying its cell source, and capabilities ACP has no native concept for (subagents, autonomous gate state, rich IPython output, compaction, goals, heartbeats, continual-harness refinement) travel in a namespacedai.primeintellect.prime-agent_metaenvelope that vanilla ACP clients ignore. Documented indocs/acp.md. - Added
/rlm-max-depthto view or set the recursion cap for the current chat, with--globalto change the default for new sessions. - Added recursive navigation to the agents view: drill into any session's children and back out again, with each chat showing its own depth.
- Added a family roster via
agent_message.list_agents(), listing parent, siblings, and children with name, id, depth, and status, including family members currently on disk. - Added sibling-unique agent names, enforced at spawn and rename against loaded and unloaded sessions alike. The same name may be reused at different depths.
- Added an
idleEvictionMinutessetting (default 90,offto disable) controlling idle eviction and passivation.
Changed
- Changed finished subagents to stay on disk until something touches them, so memory scales with the active frontier rather than every subagent ever spawned. Lists show them without loading them, and attach, message, or transcript read wakes them on demand.
- Changed sessions to persist their parent edge and derived RLM depth, so tree position no longer has to be inferred from whatever happens to be in memory.
- Changed the supervisor to stop worker processes whose whole session tree has been idle past the threshold, and to passivate individually idle children inside still-busy workers.
- Replaced the child-agent inspector with a single subagent summary line under the prompt that opens the agents view scoped to that session's children.
Fixed
- Fixed
stopandrenamerejecting custom daemon socket options. - Fixed SIGINT in print mode leaving the session active until liveness reclaim.
- Fixed daemon startup failing permanently when an interrupted supervisor owner directory contained only stray files.
- Fixed agents-view fallback notices and scoped live sessions surviving transient refresh failures across chat returns.
- Fixed stopping completed subagents deleting their retained sessions.
- Fixed silent or cancelled RLM children leaving parents without a terminal status notice.
- Added missing argument hints to
/name,/model,/export, and/importin autocomplete.
- Changed
-
π BarutSRB/OmniWM OmniWM v0.5.10 release
What's New Since 0.5.9
Window Management
- New windows now land on the active workspace rather than whichever workspace happened to be focused last.
- Transient popup windows are fully suppressed: no frame writes, focus changes, borders, or managed surfaces.
- Floating window admission and focus are more reliable.
- Fullscreen close replacement replay is fixed.
- Pending window identities are preserved through rescans, preventing ghost windows.
- Focused sheets (dialogs, preferences) are preserved across parent window maturation and full rescans.
- Window lifecycle reconciliation is hardened with app-and-Space-scoped rescans.
- Observed-minimum axis updates preserve the existing value when the target hasn't shrunk, reducing layout jitter.
- Observed-minimum sizes are guarded on AX incarnation match during identity rekey.
- Park frame application is deferred to the caller after identity rebind.
- Stable AX size convergence is accepted without requiring an exact match.
Niri Layout
- The Niri mouse-move modifier key is now configurable in Settings β Input.
- Columns reveal on pointer focus when the cursor approaches a column edge.
- A start-scroll directive is inserted when pending animation work exists but no active driver is running, preventing stuck scroll state.
Workspace Bar
- Label clipping in the workspace bar is fixed.
Workspaces Between Monitors
- Workspaces can now be moved between monitors via hotkey.
- Dedicated hotkeys are available for all workspace monitor-move operations.
Command Palette
- Command palette mode cycling is now available, letting you toggle through palette modes.
Quake Terminal
- Ghostty glass transparency mode is now supported in the drop-down terminal.
- The translucent quake terminal now blurs content behind it.
Dwindle Layout
- Inverted vertical window placement during Dwindle moves is fixed.
Project
- Nix installation options are now documented.
- Owned-window interaction button state prevents owned-window blocking from canceling active mouse interactions.
- The Hidden Bar assertion is properly released during shutdown.
Release Integrity
OmniWM-v0.5.10.zipcontains the Developer ID signed, notarized, and stapled OmniWM app.OmniWM-v0.5.10.zipSHA-256:c003dc525e32be6ef560663818af13f8576450f30cc2164770e2345798a7a6daGhosttyKit.xcframework-v0.5.10.zipSHA-256:31a4daf47ce652d5c04ef15538c3fdffc315cd67da54baced628b2f46ec86bc7
-
π New Music Releases Chromeo - Mentirasmentiras rss
Chromeo - a new release is available:
- 2026-08-05: Mentirasmentiras (Single)
Amazon: Canada | Deutschland | France | United Kingdom | United States
Visit muspy for more information.
-