Mentions
Conversations linking to GitHub, newest first. Times are UTC.
Mentions by source
X
Bluesky
Hacker News
V2EX
Qiita
DEV
Mastodon
Latest posts
AI Agent Task performance of small LLM models (4B and below) in self-assessment set The community rarely sees the evaluation of ultra-small models. We have evaluated our own AI Agent tasks for Qwen3.5-4B, Spark-X2.6, LFM3-1.7B, LFM2.5-2.6B, Gemma 4 E2B, MiniCPM5-2B. These models have their own characteristics and advantages and disadvantages. The obvious trend is that the intelligent density of small models is developing rapidly. I look forward to seeing more small models. blog:camthink.ai project:camthink-ai/NeoMind
色ごとに別プロンプトを割り当て、全領域共通のベース文も設定可能。 高速な「mask bounds」と、人物を描きやすい代わりに重い「full image」を選べる。後者は4領域で通常の約3倍の処理時間。 GitHub: eimiss/comfyui_eimiss_nodes
Game over @PeefTwt Se qu’il vole et vend c’est se lien GitHub qui fait exactement la même chose : remotion-dev/skills t.co
@DanaBrunetti @NedKLee12 @zimm3rmann This will get you YT transcripts with timestamps. You could rig up a skill to get transcripts, query timestamps, and ffmpeg to generate a clip. AdrianBinDC/yt-rust-mcp
@ElCapoMaster475 openversus/mvs-buddy We have a one clicker installer for the mod that you can run here.
tried to make a benchmark for this: alexcarterhq/wspbench. thoughts?
I built an open source tool to clean up my music tags without renaming or moving a single file I have about 1,100 MP3 and FLAC files and wanted to fix genres, albums and lyrics. The problem is that I couldn't find anything that did this for me. So I built Acervo, a local app that opens in your browser. What it does: - Suggests genre and album fixes, and only writes what you approve - Makes a backup before every change, with byte-exact restore - Finds lyrics and embeds synced lyrics in the file, with an editor to sync them by hand - Has a player with a queue, shuffle, repeat and a "now playing" view - Can also download music through spotDL, if you want to use that Prints: imgur.com It runs on your machine, with no account. It's built with Python and plain HTML, CSS and JS, under the MIT license. I built it with a lot of help from AI (Claude and Codex), reviewing and testing the changes. So far I've only tested it on Linux, and the project is still early. I'd love your opinions, especially on the code and on what would make you trust a tool like this with your own collection. I'm also thinking about packaging it for the AUR: would you use that? GitHub: Zelloe/acervo-musicas
@Renzexi01 @yetone 来看看我的这个模式,无脑命令行 (肯定也不太好使,但是可以直接让ai配置) huifer/local-router
越狱 PS5 想恢复“刚配置好”的状态,却不想重新安装系统?这个工具或许正是你需要的方案 PS5-Cleanup ALEMAN 可在不重装的情况下清理越狱 PS5,同时保留驱动配对、账户和许可证,让主机焕然一新 目前为 Beta 版本,感兴趣的玩家可以前往了解 xXBneutzerNameXx/PS5-Cleanup t.co
Now it’s Linux’s turn: the Minecraft hotbar as a desktop app launcher 🐧 A while ago the Windows version got a lot of requests for Linux, so here it is. It’s the Minecraft hotbar sitting at the bottom of your desktop, working as an app launcher. Each of the 9 slots opens an app, game, folder or website, and you switch between them with the scroll wheel or the number keys, with the original click sound. The HUD shows real info from your PC: hearts are your free RAM, the food bar is your battery (or disk space on a desktop), and the XP level is your CPU usage. Apps that are open get the enchantment glint, and if one has several windows the slot shows the number like a stack of items. Pressing E opens the survival inventory with 27 extra slots, the crafting grid and your own skin in 3D. You can drag a .desktop file or a folder onto any slot to assign it, and there are some Minecraft-style achievements as you use it. On Linux it runs natively with GTK 3 and WebKit2GTK, no Electron. It works on X11 and Wayland, and the installer supports Ubuntu, Mint, Debian, Arch (there’s a PKGBUILD), Fedora and openSUSE. There’s a tray icon, and you can bind minecraft-hotbar --inventory to any keyboard shortcut. Es gratis y GPL-3.0. Todavía está en beta, así que si algo no funciona en tu equipo, comenta tu distro y tu escritorio y lo reviso. github.com/Jpsb3/MinecraftHotbar/tree/main/linux Proyecto de fans no oficial, sin relación con Mojang ni Microsoft.
GTA V Xbox 360 Port Usei uma Ferramenta para Fazer uma Build do GTA V de Xbox 360 para Android,sou iniciante nisso e Vou tentar pedir ajuda a desenvolvedores de ia pra ajudar ter mais performace e compatibilidade. Botei links dos arquivos necessário no meu Aplicativo, Porthub + 100mill downloadporthub Teste feitos por uns dos usuários do meu grupo S23 Ultra
SafeLine WAF 運用ガイド:リバースプロキシでドメイン・ポート・アップストリームを追加する SafeLine WAF は、Web アプリケーションの手前に配置する自己ホスト型の Web アプリケーションファイアウォールです。リクエストが本来のサーバー(オリジン)に届く前に HTTP トラフィックを検査し、SQL インジェクション、XSS、コードインジェクション、OS コマンドインジェクション、パストラバーサル、SSRF、ボットによる不正アクセスなどを遮断します。本記事では、リバースプロキシとして動作する SafeLine に「ドメイン」「ポート」「アップストリーム」の 3 項目を追加し、オリジンを露出させないまま公開する手順を、確認事項つきの実践ガイドとして整理します。 前提の整理 SafeLine は nginx を基盤に開発されています。公開サイト向けのトラフィックを受け取り、悪意のある通信を除去したうえで、安全なリクエストだけを本来のアプリケーションへ転送します。設定画面上の「ドメイン」は受け付ける名前、「ポート」は待ち受けポート、「アップストリーム」は実体のアプリケーションが動いている場所を意味します。この 3 つがそろって初めて、リバースプロキシとして完全な経路ができます。 手順 1:サーバーの要件を確認する アプリケーションを追加する前に、導入ガイドに記載された最低要件と確認コマンドを実行します。 OS は Linux を使います。対象アーキテクチャは x86_64 と arm64 です。 Docker が 20.10.14 以上、Docker Compose が 2.0.0 以上であることを確認します。 CPU 1 コア以上、メモリ 1 GB 以上、ディスク 5 GB 以上を用意します。CPU は ssse3 に対応している必要があります。 uname -m、docker version、docker compose version、cat /proc/cpuinfo | grep "processor"、free -h、df -h、lscpu | grep ssse3 を実行します。 ARM 環境の場合は、手動導入時の ARM イメージ設定を計画します。導入ガイドでは、ARM 上の SafeLine は Pro ライセンスがないと正常に動作せず、Personal Edition は ARM 非対応とされています。 Docker や Compose が指定より古い場合、空きディスクが 5 GB 未満の場合、ssse3 が無い場合は先へ進まないでください。 手順 2:インストールとサインイン 自動導入が推奨経路で、root 権限が必要です。 bash -c "$(curl -fsSLk waf.chaitin.com)" -- --en を実行します。 完了後、https://<safeline-ip>:9443/ を開きます。 ディレクトリやポート、アーキテクチャ、リリースチャネルを自分で選ぶ場合は手動導入を使います。手動の場合は、/data/safeline に設定とデータを置き、compose ファイルを取得して .env を編集し、docker compose up -d で起動します。初回アカウントは docker exec safeline-mgt resetadmin で作成し、表示されたユーザー名とパスワードを控えます(初期ユーザー名は admin)。その後 https://<safeline-ip>:9443/ からログインします。 なお、MGT_PORT は管理画面のポート、MGT_PROXY は管理画面のプロキシ層の数であり、どちらもアプリケーション画面で入力する公開サイトのポートではありません。 手順 3:ドメイン・ポート・アップストリームを入力する SafeLine の Web 管理コンソールにログインします。 Applications ページを開きます。 右上の Add Application をクリックします。 Domain に、公開するドメイン名・ホスト名・IP アドレスを入力します。例は www.chaitin.com です。クライアントがリクエストする名前を使い、DNS に公開しない名前を二重に入れないでください。 Port に、SafeLine が待ち受けるポートを入力します。例は 80 と 443 です。HTTPS の場合は SSL オプションにチェックを入れます。 Upstream に、本来のアプリケーションの実アドレスを入力します。SafeLine はここへ安全なトラフィックを転送します。運用上の確認として、このアドレスは先ほど選んだ SafeLine の待ち受けポートではなく、オリジンを指すようにしてください。そうしないと、プロキシ経路がアプリケーションへつながらなくなります。 3 項目がすべて設定されてから送信します。待ち受けポートが無いとクライアントのトラフィックを受けられず、アップストリームが無いときれいなリクエストを送る先がありません。 手順 4:DNS をプロキシに向けて確認する 入力したドメインを、SafeLine が動いているサーバーの IP アドレスに解決します。この設定が済むまで、訪問者はオリジンへ直接到達し、フィルターを迂回してしまいます。 そのドメインでアプリケーションを閲覧します。これが SafeLine に保護されたアプリケーションへのアクセス方法です。 自分が運用するサイトに限り、公式のテスト例のホストを置き換えて確認します。たとえば SQL インジェクションは /?id=1+and+1=2+union+select+1、XSS は /?id=<img+src=x+onerror=alert()>、パストラバーサルは /?id=../../../../etc/passwd です。 ブロックページが出れば防御が動作しています。Web コンソールで攻撃一覧を開き、詳細をクリックしてイベントを確認します。管理していないアプリケーションにはこれらのテストを送らないでください。 失敗例:アップストリームを自ポートに向けてしまった よくある失敗として、Upstream に SafeLine 自身の待ち受けポート(例:自分で選んだ 80 や 443)を入力してしまうケースがあります。この場合、SafeLine はアプリケーションではなく自分自身へリクエストを向けることになり、プロキシ経路が成立せず、本来のアプリケーションには到達しません。保存は成功しても、リクエストがオリジンへ届かない状態が続きます。対処は、Upstream を必ずオリジン(実アプリケーションのアドレス)に向け直すことです。同様に、ドメインの DNS を更新し忘れた場合も、保存だけでは公開 DNS は動かないため、オリジンが従来どおり直にトラフィックを受け、SafeLine が検査できない状態が続きます。 まとめ SafeLine にサイトを追加する作業の中心は、ドメイン・ポート・アップストリームの 3 項目を 1 つの画面で正しく埋めることです。導入前のサーバー確認、インストールとサインイン、3 項目の入力、DNS の切り替え、テストの順に進めれば、オリジンを露出させずにリバースプロキシ経由の公開ができます。レート制限や CAPTCHA、動的な HTML・JavaScript 保護などの追加機能は、まずこの経路が正しく動くことを確認してから、それぞれの機能が実際に説明されている手順に沿って有効化してください。 Demo: demo.waf.chaitin.com Official docs: docs.waf.chaitin.com GitHub: chaitin/SafeLine
Como Clonar Qualquer Repositório do GitHub no PC (Passo a Passo) Aprenda a clonar qualquer repositório do GitHub para o seu computador usando o terminal de forma simples, rápida e direta ao ponto! 🚀 Neste vídeo do cebola dev, você vai ver o passo a passo completo para pegar o link HTTPS no GitHub, navegar no terminal com o comando `cd` e executar o `git clone` para trazer o projeto para a sua máquina. 📌 Comandos utilizados no vídeo: • Acessar pasta: cd caminho/da/sua/pasta • Clonar repositório: git clone usuario/repositorio • Entrar na pasta do projeto: cd nome-do-repositorio • Abrir no VS Code: code . 💡 Pré-requisitos: Ter o Git instalado no seu sistema (Linux, Windows ou Mac). 🔔 Se este vídeo te ajudou, não se esqueça de deixar o seu LIKE, se INSCREVER no canal e ativar o sininho para acompanhar os próximos tutoriais de programação e desenvolvimento web! Deixe sua dúvida ou sugestão nos comentários! 👇 #git #github #programacao #desenvolvimentoweb #ceboladev #terminal #linux #vscode
多站视频一键下。 @0xGky:开源 Videdown——基于 yt-dlp,覆盖抖音/小红书/B站/YouTube 等 1000+ 站;可选画质、抽音频、批量排队;登录内容可导入浏览器 Cookie。GitHub:cshuangyy/videdown 判断:经常存公开课/自己作品备份的人先用;无下载需求或平台 ToS 不允许的可跳过。Cookie 只本地用,别分享导出文件。
Version 0.3.1 of the homebrew port of the Android version of Need for Speed Most Wanted (2012) for Nintendo Switch is out. ✨ NEW • Phone effects (on by default). The game gives fast phones effects that the port's recommended detail level (Medium) left out: haze in the distance, wet shiny roads, sky reflections on the cars, smoke and the engine's echo in tunnels. They're now on at Medium too, without the extra objects that make High slow. On the PC test build they cost almost nothing (12.1 ms of game code per frame vs 12.0 ms for Medium alone; High is 16.2 ms). • Anti-aliasing (2x / 4x) for smoother edges. Off by default because it costs GPU time. The game has anti-aliasing code, but EA left it switched off on Android, so no phone ever had it. • Texture filtering (4x by default): the road ahead stays sharp instead of blurring. • Faster loading. While the game loads, the CPU runs at 1785 MHz, as official Switch games do, then goes back to normal. Loading screens should be up to about a third shorter. From now on, updates also keep the JIT cache, so the first session after an update isn't slower anymore. • Bigger debug menu (ZL + ZR + Minus), now four pages switched with L / R: Performance, Graphics, Controls & Sound (tilt steering on/off, sensitivity, invert) and Information (FPS, clocks, temperatures, battery, threads, latest loading times). 🔧 FIXED • After a long session, cars stopped appearing in the garage and the next race stayed on a black screen. The port never released the game's finished threads, and the Switch allows a game 96, so after about 90 car and race loads nothing new could start. Every earlier version had this. It's now fixed, however long you play. 📝 OTHER • log.txt now shows the thread count, how long each loading screen took, and where long loads spend their time. ⚠️ KNOWN ISSUES • The new graphics options and the loading boost haven't been tested on a console yet. If anti-aliasing drops your frame rate, turn it off, and please tell me how your loading times change (log.txt has a "loading screen:" line for each one). • Docking and undocking while playing is still untested on a real Switch or Switch OLED. 📥 DOWNLOAD AND UPDATE github.com/SantiBros/NFSMostWanted2012-Android-Sw… • Download only NFSMostWanted2012-0.3.1.zip (not the -symbols.elf or "Source code"). • Updating from 0.3.0: copy the new "switch" folder over the old one. Your game files, saves and settings are kept. The first start is a bit slower while the JIT cache is rebuilt. ⚠️ No game files are included. You need your own copy of the Android game, version 1.3.128 (APK + OBB, or one .xapk). Please don't ask for game files. Screenshots are from the port's PC test build. Bug reports with log.txt are welcome on GitHub. Fan project, not affiliated with EA or Nintendo.
🎄 Limn League Christmas 2026 — Festive Arcade Football 🎄 Limn League Christmas 2026 — Festive Arcade Football A career-mode football sim wrapped in snow, santa hats, and Jingle Bells — now live on the Limn Arcade. --- 🎯 Play the Game 👉 Limn League Christmas 2026 The game is live on the Limn Arcade and ready to play. It was Last Week's Winner at the time of writing, and it's a strong showcase of what's possible with Limn Engine in the browser. --- 📖 Introduction Limn League Christmas 2026 is a browser-based football career simulator built with Limn Engine. It's the festive entry in the Limn League series — a family of football sims on the arcade that each take a different angle on the same sport. This one wraps the season in snow, santa hats, and Jingle Bells. It has divisions to climb, cups to win, and a 30-match championship to grind through. It's the kind of game that starts as a five-minute test and turns into an hour of career management without you noticing. Here's what makes it worth playing: - 12 divisions to climb, from Street all the way to Immortal. - Cup tiers to win alongside the league. - A full 30-match championship as the endgame. - Upgrade systems so your squad improves over time. - A Christmas visual theme — snow, santa hats, seasonal audio. - No installs — it runs in the browser, on phone or desktop. --- 🎮 What the Game Is The core loop. You start in a lower division, play matches, win games, earn rewards, upgrade your squad, and climb. The higher you climb, the tougher the opponents. The progression is the game — you're not trying to reach a single win condition, you're trying to build a career. The divisions. Twelve of them, from Street to Immortal. Each one has its own difficulty curve. Advancing requires winning matches, and winning matches requires a squad that's good enough. That's where the upgrade system comes in. The cups. Alongside the league, there are cup tiers. Cups are shorter, higher-stakes competitions that give you a chance at bigger rewards. Winning a cup accelerates your climb. The championship. The endgame is a 30-match championship. If you can get through all 30 matches, you've proven your squad is competitive at the top. That's the long-term goal the divisions feed into. The Christmas theme. Snow on the pitch, santa hats on the players, Jingle Bells as the soundtrack. It's the same football sim underneath, but the theme makes it feel like a holiday season — which is exactly what makes it a distinct entry in the Limn League series. --- 🚀 How It Plays The game runs entirely in the browser. The arcade loads it, and the game's own logic takes over. From the arcade logs, we can see the game is a single file of about 138 kilobytes running on the epic.js engine — which is another 55 kilobytes. That's the entire game, engine included, at under 200KB. For comparison: a single hero image on a modern website is often larger than that. The entire game is smaller than most social media avatars. That's the point of Limn Engine. It's not trying to be Unity. It's trying to be small enough to load instantly and fast enough to feel good. On mobile. The game is designed to work on phones. The preview image from the arcade shows it running at a phone resolution with readable UI and a play button that works. Tapping Play starts a game session with the same logic the desktop version uses. On desktop. Same game, bigger screen. The arcade scales the canvas to fit. --- 📊 Behind the Scenes Here's what happens when you open the game's URL, from the arcade logs: | Step | What Happens | |------|--------------| | 1. Boot | The arcade calls boot() with the game's slug | | 2. Fetch | It fetches the game's code from Supabase | | 3. Load | The game's code (138KB) and the engine (55KB) are loaded | | 4. Render | An iframe is created and the game is rendered inside it | | 5. Session | The user's session is checked — if you're signed in, likes and comments are wired up | That's the entire load process. It takes about two seconds from clicking a game to seeing it on screen. That's fast enough that you can browse the arcade, tap a game, and be playing before your finger has left the screen. --- 🏆 Why It Was Last Week's Winner The Last Week's Winner badge is the arcade's way of highlighting the best game of the week. When a game wins, it gets the top spot on the arcade home page for seven days, then moves to the Last Week's Winner slot for the following week before being archived in the Hall of Fame. Limn League Christmas 2026 earned that badge. The reason is visible in the game itself — it's a complete, polished experience that feels like a real football career sim, not a demo. The Christmas theme makes it stand out, the divisions give it depth, and the cup and championship systems give it a long-term goal. For a game built with a lightweight 2D engine, that's a lot of substance. --- 📝 What You've Learned | Concept | Why It Matters | |---------|----------------| | Limn League series | A family of football sims, each with its own angle | | Career-mode design | Divisions, cups, upgrades, and a championship give the game long-term depth | | The Christmas theme | A seasonal wrap makes a familiar game feel fresh | | Single-file games | The whole game is 138KB, engine included — under 200KB total | | Fast load | Under two seconds from tap to play | | Arcade infrastructure | Supabase fetch, iframe render, session check | --- ⚠️ Known Limitations The game is single-player only. There's no multiplayer or online leaderboard. The Christmas theme is cosmetic — the underlying football mechanics are the same as other Limn League entries. That's deliberate: the theme is a skin, not a different game. The career mode is long. Thirty championship matches is a lot of games. If you're looking for a quick session, this might not be the right entry point — but if you want something to sink time into, it is. --- 🚀 What's Next? The Limn League series is still growing. Here are some directions: - More themes — the Christmas entry proves the series can wrap itself in different aesthetics. A summer theme, a Halloween theme, or a retro 8-bit theme would all work. - Cross-game progression — imagine carrying your squad from one Limn League entry to another. - Leaderboards — a public ranking of the best careers would make the championship feel more competitive. - Seasonal events — timed events tied to real-world seasons would keep the game feeling alive. If you build any of these, send a pull request. --- 🐛 Report Bugs If you find a bug in Limn League Christmas 2026, report it on GitHub: 👉 github.com/terracodes004/limn-engine-doc/issues Please include your device, your browser, and a description of what happened. --- 🔗 Resources | Resource | Link | |----------|------| | Play Limn League Christmas 2026 | limn-engine-doc.vercel.app | | Limn Arcade | limn-engine-doc.vercel.app | | Limn Engine Docs | limn-engine-doc.vercel.app | | Limn Studio (Editor) | limn-engine-doc.vercel.app | | Light Editor | limn-engine-doc.vercel.app | | GitHub Repository | terracodes004/limn-engine-doc | | Report Bugs | github.com/terracodes004/limn-engine-doc/issues | | Discord | discord.gg | | Kehinde on DEV.to | dev.to | --- 🎯 The One-Line Summary > "Limn League Christmas 2026 is a festive career-mode football sim — twelve divisions, cup tiers, a 30-match championship, and a full Christmas theme, all in under 200KB of browser code." 🎄⚽🚀 --- Draw your game into existence — one division at a time. 🎮🚀
CleanMyMac 一年 268 年年续,其实只用两个功能:扫垃圾、卸残留。 puremac 扫描缓存/日志/临时文件/旧包列表勾选删除,能查残留配置和大文件,全本地无遥测。 momenbasel/puremac
今天这条解决的是人人都碰过的麻烦:别人发来的文件格式打不开。选它因为 Filee 免费、离线、拖一下就转,仓库两万多 stars、1700 多次提交,9 月底建仓还在活跃更新。 开源宝藏:Filee 拖一下就能转 两百多种格式都行 不用上传,离线转 电脑上都能用 免费开源 仓库 KnifeLemon/Filee
手机投屏到电脑,还能直接用鼠标操作手机 这个开源工具 Escrcpy,真的太方便了 支持 USB 和 WiFi 连接 支持多台手机同时操作 Windows、macOS、Linux 都能用 免费、低延迟、开箱即用 手机演示、内容录制、远程操作、批量管理都能派上用场 项目地址 viarotel-org/escrcpy t.co
【1分で分かるOSS】DeepTutor 香港大学発、AIが"家庭教師"になるOSS ▶ 教科書・論文を読み込ませて出典つきでQ&A ▶ 理解度に合わせて演習問題も自動生成 ▶ Apache-2.0、30以上のLLMに対応しローカル運用も可 試験前に👇 HKUDS/DeepTutor #AI #Cypher
@heydemoura Te fijaste que el fork de zortos github.com/zortos293/Eglantine/tree/nx2 ahora se llama Lichii?
Check out my latest experiment : zyzo/byd-ios-app. Had lots of fun toying with bluetooth mode to implement auto-unlock. #BYD t.co
Clone To New | GIT & Github Git is a local software tool used for version control, while GitHub is a cloud-based platform built around Git to host code and facilitate team collaboration. Think of Git as the underlying technology running on your computer, and GitHub as an online social network and storage space for projects using that technology. ------------------------------------------------------------------------------------------------------------------------------------------------------- Device : Samsung Galaxy M31 Processor : Exynos 9611 RAM : 8 GB Memory : 128 GB GPU : Mali-G72 ------------------------------------------------------------------------------------------------------------------------------------------------------- Track: Rameses B - Cybernetic [NCS Release] Music provided by NoCopyrightSounds. Watch: ncs.lnk.to Free Download / Stream: ncs.io _____________________________________________________________________________________________ Social Media: Instagram : instagram.com Gitgub : DGGDX/Python_Basics
红果短剧又挂热搜,想做AI漫剧的又要坐不住了。 刷到个开源仓库,21个题材的漫剧模板,宫斗、总裁甜宠全有。丢一句点子,吐出企划、剧本、分镜和视频提示词,MIT免费。 冷水:它只管写,图和视频还得自己跑;作者自己写了不少题材还没实测。 zhanghao123vip/ai-manju-skills 你会看AI做的短剧吗? t.co
BangPypers November Meetup is coming! 21 Nov | @AutomationAnywh, Bengaluru In collaboration with Pathfinder Community. Call for Proposals is OPEN! Got something interesting to share? Submit your talk: github.com/bangpypers/meetup-talks/issues/new/cho… RSVP: meetup.com #BangPypers #Python t.co
@mrheed_ @lpagent_io you can check my repo here bro: toanbku/kindle-lpagent-dashboard
I built an open-source Linux agent that learns your server's "normal" and shuts down anything weird Hey, been chipping away at a side project called Phage and wanted to put it out there. Short version: it's a small agent for Linux servers. It spends a while just learning how your box normally behaves, and after that it flags and contains stuff that falls outside that normal, without needing a signature for the specific exploit. So it's less "here is a list of known bad things" and more "this service has never spawned a shell before, and it's never become root with no login session behind it, so something is off." The part I actually care about is what happens next. Most tools just fire an alert and, let's be honest, nobody reads alerts. Phage can actually react: if a process starts dialing out like a reverse shell it cuts its network, and if it looks like a real break-in it freezes the process. All of it is reversible, so a false positive doesn't take anything down. It also refuses to touch your SSH session or systemd, because I locked myself out of a test box once doing exactly that lol. It's Go + eBPF (the detection runs in the kernel so it stays cheap), ships as one static binary, installs with a single command. Honest status: it's early. I've thrown real attacks at it on my own server and it holds up, but I wouldn't call it production ready yet. MIT licensed, fully open source. Repo: AzozzALFiras/Phage Would really appreciate feedback from anyone who runs Linux servers: what would you actually want something like this to catch or do? And does the whole "assume you'll get breached eventually, just make it survivable" idea click for you, or not?
ティアフォーは知っていたが、こんなのあったのか autowarefoundation/autoware
Claude-mem captures agent session traces, extracts structured facts, and injects relevant context into future sessions. Most agent workflows treat each session as a blank slate. Session persistence turns transient runs into cumulative memory. thedotmack/claude-mem
[PC] Fixed: SnowRunner freezes for 30–60 seconds every time I Alt-Tab back in. Cause was a HID device that never answers (script to find yours) I've played SnowRunner for about 700 hours, and the whole time I suffered from the game freezing every time I switched windows. I asked Claude about it and we finally solved it! In my case the cause was a rude HID device that just stayed silent, so I had it write a script to find it. The script tells you the Device Instance Path of the suspicious device, so try disabling it yourself and see! Script: AnonymousWatashi/slow-hid-finder Symptoms - When I switch back to SnowRunner from another window, only the game freezes for about 30 seconds to a minute. - While it's in the background, it keeps running at a lower FPS. - I was using borderless mode. What was happening - Every time SnowRunner gets focus back, it rebuilds its list of input devices (HID) and asks each one for its name. - If one device doesn't answer, the game waits for it. - For me it was a JBL Quantum Duo (USB speakers). Besides the audio part, it also shows up as an "input device" for its volume knob and lighting, and that part stayed silent for 5 seconds and then failed, every single time. - I think this is why so many posts say "it's related to audio devices": it's the input-device side of an audio device. - The guilty device is probably different for each person. How to check The script Find-SlowHid.ps1 sends the same question the game asks to every input device on your PC, one by one, and measures how long each one takes to answer. - Read-only. It doesn't change any settings or devices. - No admin rights needed. - Runs on the PowerShell that comes with Windows (tested on Windows 10, not yet on 11). 1. Open PowerShell in the folder where you saved the script. 2. Run: If a device takes 1 second or more to answer, you'll see something like this at the end: ==== Suspicious devices ==== [SLOW] 5000 ms Product : JBL Quantum Duo Device Manager name : HID-compliant consumer control device Device Instance Path : HID\VID_0ECB&PID_1F63&MI_03\X&XXXXXXX&0&0000 How to fix 1. First, unplug the product shown under Product and try Alt-Tabbing in the game. If it no longer freezes, that's the one. 2. For everyday use, go to Device Manager > "Human Interface Devices" and disable that device. - There are lots of devices with the same name, so open Properties > Details > "Device instance path" and pick the one that matches the path from the script. - In my case, sound still works. The knob or lighting controls on the device may stop working, though. - You can re-enable it any time. How we tracked it down (for the curious) - While frozen, the game's CPU, GPU, and disk usage were all zero. It wasn't doing heavy work; it was waiting for something. - We dumped the frozen game with ProcDump and read the threads with WinDbg (cdb). The main thread was stuck in the same place every time: dinput8!CDIObj_EnumDevicesW → CHid_GetDeviceInfo → hid!HidD_GetProductString - Sending the same question to every input device showed that only the JBL Quantum Duo failed after 5000 ms, every time.
Cutfac - 本地优先的短视频制作工具 可通过 AI 编程助手生成视频并根据指令修改内容。 👉 cutfac/cutfac t.co
大半年已经不打开 IDE 了,把 Jetbrains 的 Git 搬到了 Coding Agent 中 首先我认为将来 Git 也不需要我来管理了,但是目前还处在过渡期,自己也会操作下。 所以目前把 Git 复刻到我的多 Agent 协作平台里了,大家有需要也可以看看。 地址: [flyhero/antumi]( flyhero/antumi) 
官网和仓库都在这里,Mac 版和 Windows 版从官网下载,装机前先确认自己的内存够不够跑想用的档位。 Survival LLM 官网(免费、本机运行、不用注册):brangus.io 开源仓库:anonnerdfrenzy/survival-llm
给仍在使用 Gridea 的 Apple Silicon 用户分享一个小项目:Gridea for ARM64 🎉 基于原版 Gridea 的非官方社区维护分支,原生运行于 M 系列 Mac,无需 Rosetta,并加入跟随系统的深色模式、更新构建链及安全加固 首个测试版已开源,欢迎试用和反馈。感谢原作者@ZaynHao Gridea-Community/gridea-arm64
Spool Factory: I built an Android NFC + Spoolman manager for the Snapmaker U1 Update — v1.8.0: English and Brazilian Portuguese are now available, including confirmations, notifications and app messages. The app follows your phone language, or you can choose it in Control Room → Language → Save. Your Spoolman names, notes and IDs stay unchanged. Hi everyone! I'm the creator of Spool Factory, a free, open-source Android app I built for my own U1 setup. My spools live in a drybox below the printer, and one of my built-in NFC readers has been unreliable. I wanted to scan a spool with my phone, insert the filament, and have the app associate that spool with the next feeder that detects insertion. The public 1.8 beta includes: • Phone NFC identification and automatic next-feeder association. • Spoolman registration: scan a tag to see whether a spool already exists, or register a new one using an existing/new filament definition. • A Warehouse with spool colors, remaining weight, filters, compact view and spool details. • Add NFC tags, edit weight/location/notes, and delete spools with confirmation. • Manual spool/feeder selection and U1 load/unload controls. • A pixel-art factory with workers, a history office and a themed connection control room. For feeder assignment and physical controls, you need a Snapmaker U1 with compatible paxx12 Extended Firmware / SpoolLink and Filament Detection set to External. Change that firmware setting only while idle; it restarts Klipper. This is not stock-firmware or universal Klipper support. The Warehouse can work with Spoolman alone. You'll need an NFC-capable Android 8+ phone and network access to your services (LAN or your own VPN/Tailscale). Version 1.8 supports English and Brazilian Portuguese. Reading a UID does not automatically decode any spool's material/color, and the app does not rewrite tags. Download, setup and screenshots: caiotmoraes.github.io Latest release: github.com/caiotmoraes/spool-factory/releases/tag… Source and issues: caiotmoraes/spool-factory It's an early community beta, tested primarily on a Galaxy Z Fold7, with automated UI/integration tests. More phones, firmware versions and physical load/unload workflows need wider testing. No ads, app account or developer telemetry. Independent project, not affiliated with Snapmaker. I'd love feedback from other U1 owners, especially on NFC workflows and feeder associations. Thanks to the paxx12/SpoolLink and Spoolman projects that make this possible!
SNES Audio Ripper I made a SNES audio extractor that rips the MUSIC and SFX from SNES games. Just drop your SNES games (.sfc files) right into the program and wala, SNES MUSIC and SFX from that game. I thought some people would find this useful with all of the game developing that has been going on as of lately. github.com/Samsqwamch/SNES_Audio_Ripper/releases/…
A passing test is only evidence for the configuration it ran on Here’s a fictional release review I use to explain why a passing test needs context. A controller board passes a thermal test on revision B with firmware 1.8. A week later, the release candidate uses revision C and firmware 1.9. Your dashboard still says “Thermal test: pass.” Before carrying that pass forward, check what actually changed and whether it affects the test. Record three things separately: the configuration tested, the configuration intended for delivery, and the decision about whether the old evidence applies. The first two should be concrete enough for someone else to compare, for example board revision, firmware build, test setup, and the relevant operating limits. The third needs an owner and a reason. For each difference, write one decision: - Reuse the evidence if the responsible engineer can explain why the change does not affect the test condition or result. - Run a targeted check if a specific changed part or behavior affects the evidence. - Rerun the test when the impact is uncertain and the old evidence cannot support the release decision. In this example, a changed regulator could alter the board’s thermal behavior. That does not tell you which test to repeat by itself. It tells you to inspect the regulator’s operating conditions and ask the verification owner to decide what evidence the release needs. Until they decide, mark the release evidence as pending. Try this in your next release review: pick one result labeled pass and ask someone to show the tested build, the intended build, and the decision connecting them. If the team cannot reconstruct that decision from the record, the status needs more context. Tymeline published a free example worksheet with fields for this review: engineering program review kit Tymeline manages this publishing account.
I just set up a public mirror of the Steam Link APK for OpenXR headsets, so it's a bit easier to download. If I set up the GitHub Action right, it should always have the latest stable and beta versions from Valve.
4/4 Credit to @1nkfy Ganbold for planting the DIY idea during a conversation in Sunnyvale, and Xavier Asghar for the original open-source design. Hope I can get some useful data out of this! 🤞 Repo: agteo/diy-eeg-mac #eeg #bci #opensource
これやっていきたいけど、ストレージが足りない... github.com/MiaAI-Lab/DeepSeek-v4.1-Flash-1017-2x-…
@ricouii Rico 老师,自荐下:kubai087/pro-threads
@don_tech1 我的一个开源项目正好解决这个问题。用一个本地的sql lite去管理,同步到各个agent。说了一次,不同agent都会记得。可以试试看哦 ☺️ its-ahoh/co-memo
Made a skill that grills you about your project on a visual map instead of in chat “Grill me” prompts are great for finding holes in a project, but in chat it all turns into a wall of text and you lose track of what’s actually answered. So this moves it into the browser. Type grill my project in Claude Code or Codex, the agent reads your code and opens a local map with questions. You answer there, and each answer gets marked Closed / Weak / Gap / Verify with follow-ups on the weak ones. When you’re done you get a list of risks, and it can turn the whole thing into a spec in docs/specs/. no extra API key, it runs in your current session just Node 18+, nothing to install or build progress is saved, so you can come back later works on a plain idea too, no code needed Repo: ghtalexby/VisualGrilling
これやっていきたいけど、ストレージが足りない... github.com/MiaAI-Lab/DeepSeek-v4.1-Flash-1017-2x-…
Kekurangannya, kalau fiturnya terlalu rumit kadang perlu diarahkan ulang biar pas. Project-nya open source di GitHub: deepseek-ai/deepseek-harness Kira-kira fitur apa yang paling kalian butuhin?
SNES Audio Ripper I made a SNES audio extractor that rips the MUSIC and SFX from SNES games. Just drop your SNES games (.sfc files) right into the program and wala, SNES MUSIC and SFX from that game. I thought some people would find this useful with all of the game developing that has been going on as of lately. github.com/Samsqwamch/SNES_Audio_Ripper/releases/…
Location: Atlanta, GA Remote: Yes (also open to Atlanta hybrid) Willing to relocate: Yes, for the right role (NYC included) Technologies: TypeScript, React, Next.js, React Native, Node.js, Express, GraphQL (Apollo), REST, MongoDB, PostgreSQL (Supabase), MySQL, MSSQL, Redis, BullMQ, Shopify (Liquid, Admin/Storefront APIs, webhooks), OpenAI and Claude APIs, GitHub Actions, Azure, Vercel Résumé/CV: linkedin.com GitHub: github.com/alifaizan786-op Email: faizan.ali@irunadigital.com Full-stack engineer, 6 years as the primary engineer at Malani Jewelers, a multi-location jewelry retailer. I built the pricing engine that reprices 6,000+ products from the live gold price, gemstone prices, weight and 500+ category rules within Shopify's rate limits. I also built a bridge that reads a legacy POS's flat DBF files (no API) and syncs sales to Shopify, so a one-of-a-kind ring can't sell twice, plus the employee portal and internal tools staff use every day. Looking for full-time or contract, full-stack or frontend.
model: WAI-illustrious-SDXL v17 (by WAI0731) LoRA: Smooth Detailer Booster v5 (by DigitalPastel) LoRA: 自作LoRA ControlNet: Union ProMax 2xLexicaRRDBNet by Philip Hofmann (Phhofm), licensed under CC BY 4.0 – github.com/Phhofm/models/%E2%80%A6 画像編集:GPT-image2.5
The Postcard That Ate Six Grammars: 1980 Smalltalk-80, 1976 Make, TDD, and the Four Attractors of Agentic Coding --- title: "The Postcard That Ate Six Grammars: 1980 Smalltalk-80, 1976 Make, TDD, and the Four Attractors of Agentic Coding" description: "Why maintaining six separate parsers for Make, Gherkin, EBNF, DOT, SysV, and prompt checklists collapsed into a single Smalltalk-80 keyword cascade—and how 40-year-old Xerox PARC technology gave AI coding agents mathematical zero-amnesia." tags: ai, architecture, smalltalk, programming series: Synthetic Scars --- _Why did six modern AI prompt grammars—Graphviz digraphs, SysV /etc/init.d cards, Gherkin scenarios, EBNF speech-act rules, Belnap epistemic tables, and rewind checklists—all collapse into a single 1980 Smalltalk-80 keyword message cascade? Because Alan Kay and Dan Ingalls solved the static serialization of algorithms and data structures on the back of a postcard forty years before anyone built a Transformer._ > _"It's fascinating that for decades, we tried to work out 'similar text' through complex algorithms, and now that we have cosine-similarity, nobody recognizes fully how to use it. If anything defines the past few years, it's 'cheap cosine similarity', now in hardware."_ — Randal L. Schwartz > _"I've learned more than 90% of the devs about how LLMs work. I may even know more than most of the 'experts' at the labs, since I'm a field engineer... Without control surfaces, a bigger engine just means the plane still noses into the river—just more accurately, or at a greater carbon footprint."_ — Randal L. Schwartz > _"Wait a minute. In 1980, Alan Kay and Dan Ingalls designed a syntax that fits on the back of a postcard, has only three message precedences (unary, binary, keyword), has zero grammar ambiguity, serializes live call-stack frames (thisContext) to disk via #storeString, logs append-only atomic deltas via .changes, and compacts memory via Smalltalk condenseChanges... What happens if we replace all six notations with 1980 Xerox PARC Smalltalk-80?"_ — Randal L. Schwartz > _"The stack is 40 years old and none of it was invented for LLMs."_ — Francisco Grandón (@fgrandon) --- ⚡ TL;DR (For the Impatient Systems Architect) - The Great Historical Inversion: From 1975 to 2018, computer scientists tried to fake fuzzy semantic similarity using complex deterministic algorithms (Soundex, Levenshtein, TF-IDF) and hit a wall—while deterministic state machines (make, Smalltalk VMs, compiler ASTs) were already 100% solved. Now that GPUs and TPUs finally gave us cheap cosine similarity in hardware, the software industry threw away the deterministic state machines and tried to use fuzzy cosine similarity to fake for loops, call stacks, and dependency graphs. - Why Six Notations Collapsed Into One 1980 Postcard: Across Parts 3.6 through 4.1, our agent control plane accumulated six different notations (Makefile, SysV /etc/init.d Markdown cards, Graphviz strict digraph, Cucumber Gherkin, RFC 5234 EBNF speech acts, and Belnap 4-valued tables). Maintaining six parsers created boundary friction. Why did 1980 Xerox PARC Smalltalk-80 eat the inner five while pairing with 1976 Make on the outside? Because Niklaus Wirth's Algorithms + Data Structures = Programs requires a static syntax that represents both data and deferred execution without ambiguity. Unlike 1960 Lisp (which overloaded (...) and needed special forms and macros, suffering Dyck-1 closing-parenthesis drift )))) on smaller models) and 1988 Tcl / 1990 expect (where {...} is an unparsed string vulnerable to uplevel scope loss), Smalltalk separates eager grouping (...) from 2-byte lexical BlockClosures [:x | ...]. Every control structure (ifTrue:ifFalse:, whileTrue:, on:do:) is an ordinary keyword message send, allowing #storeString and .changes chunks to serialize live call stacks (thisContext) and execution state machines in one grammar that fits on a postcard. - The Suite 8 3-Arm Controlled Shootout (N = 360 Trials Inside Our 2,040-Trial Benchmark): Under ~16,000 tokens of realistic compiler and diff distractor load across four model tiers (gemini-3.5-flash-lite, gemini-3.8-flash, gemini-3.1-pro-preview, and gemini-4-argon), Arm A (English Prose + Gherkin + init.d) scored 2.5% (3/120), Arm B (Common Lisp S-Expressions) scored 91.7% (110/120, dropping to 66.7% on flash-lite due to optional &key omission and )))) parenthesis drift), and Arm C (Smalltalk-80 Keyword Cascades) hit 100.0% (120/120, z = 15.11, p < 0.0001 vs. Prose; z = 3.23, p = 0.0012 vs. Lisp). In Smalltalk, omitting the sad-path branch onFailure: changes the selector from #state:invariant:onSuccess:onFailure: to #state:invariant:onSuccess:—an immediate compile-time MessageNotUnderstood error. - Seven Live Production Flight Tests (FT-236 Through FT-242 — Over 6,400 Combined Steps Across Two Cohorts): We flight-tested the Smalltalk-80 thisContext Image Bootloader (baseline.sources + changes-*.changes + Smalltalk condenseChanges) across seven consecutive production tickets (4 in open-source BlocSignal and 3 in a commercial enterprise medical-imaging monorepo), bringing our cumulative ledger to 250 evaluated tickets (144 Cohort A + 106 Cohort B), 0.0% repeat regression rate (0/250), 1.88 mean Socratic nudges, and 607 codified scars (syntheticscars.org). - The Four Irreducible Attractors of Agentic Coding: Strip away every prompt fad of 2023–2026 and four orthogonal, 40-year-old foundations remain: (1) 1976 Stuart Feldman Make, (2) 1980 Alan Kay & Dan Ingalls Smalltalk-80, (3) 1994/1999 Kent Beck SUnit / TDD, and (4) Clean-Room Six-Pillar Adversarial Review + Somatic Scars. --- 1. The Great Historical Inversion: Cheap Cosine Similarity in Hardware In Part 4.1, we ended with a teaser: what happened when we replaced six separate agent control-plane notations with 1980 Xerox PARC Smalltalk-80? To understand why a 46-year-old programming language from Palo Alto is the missing execution fabric for 2026 Large Language Models, step back and look at the forty-year arc of computer science. From 1975 to 2018, programmers knew how to build deterministic state machines in our sleep. Stuart Feldman gave us make in 1976; Dan Ingalls and Alan Kay gave us the Smalltalk-80 virtual machine in 1980; compiler writers gave us LALR parsers, static type checkers, and SSA control-flow graphs. None of those ever "forgot" what step of a loop they were on or hallucinated a method name. What we _could not_ do from 1975 to 2018 was fuzzy semantic similarity. For four decades, we threw every deterministic algorithm we could think of at the problem of asking _"Does text A mean roughly the same thing as text B?"_—Soundex, Levenshtein edit distance, Porter stemmers, n-gram overlaps, TF-IDF, BM25, and brittle regular-expression heuristics—and we hit an absolute brick wall. Then, over the past few years, the semiconductor and machine-learning industries handed us a genuine miracle: cheap cosine similarity in hardware. With modern GPUs and TPUs computing scaled dot-product attention (softmax(QK^T / sqrt(d_k))V) across high-dimensional embedding spaces at trillions of operations per second, the fuzzy semantic matching problem that stumped us for forty years was suddenly solved in silicon. And in response to that miracle, the software industry performed one of the most baffling backflips in engineering history: We threw away our deterministic state machines, and tried to use fuzzy cosine similarity to fake for loops, call stacks, and build pipelines. From 1994 Perl Markov One-Liners to 1999 spew to 2026 Transformers In Part 3.9, I showed a weighted-BNF un-parser called spew that I wrote in the late 1990s (featured in my September 1999 _Linux Magazine_ column, A Little Spew Is Good For You, and Revisited in April 2004). Even earlier, back in 1994 on comp.lang.perl, we used to amuse ourselves writing character-level and word-level Markov text generators in two lines of Perl: # 1994 Usenet Perl Markov Chain: push @{$follow{$w1, $w2}}, $w3; $next = $follow{$w1, $w2}[rand @{$follow{$w1, $w2}}]; When I evolved that Markov hash into spew in 1999, I added weighted production rules (@) so you could bias the random walk toward realistic grammatical structures: # 1999 spew weighted-BNF grammar: commit_action: 5 @ run_unit_tests_then_commit | 2 @ git_commit_no_verify_shortcut If you have ever written a Markov generator or a weighted grammar like spew, you have zero mystique about what a modern Large Language Model is doing at inference time: > A 2026 Transformer is spew where the @ branch weights are dynamically computed on the fly by hardware cosine similarity (QK^T) across a 128,000-token context window instead of static hash keys. That is a superpower when you need to synthesize a Cupertino widget builder, translate a complex binary imaging specification into Dart, or spot a subtle architectural smell in a diff. But nobody in 1999 would have deleted /usr/bin/make, thrown away their compiler's symbol table, and put spew in charge of remembering which 14 files had already been compiled or whether the production database migration passed! Yet every time a developer writes a 2,000-line Markdown prompt (Step 1: Do X. Step 2: Loop over Y. Step 3: Don't forget Z...) and hopes the LLM stays on the rails for two hours, they are asking spew to be an operating system. A Synthetic Scar paired with a Smalltalk StateGraph is simply setting 0 @ git_commit_no_verify_shortcut (-∞) in the grammar and evaluating a deterministic invariant: [ :ctx | ... ] block before spew is allowed to roll the dice. Langley's 52-Horsepower Potomac Crash vs. The Wright Brothers' 12-Horsepower Control Surfaces Why have so many frontier AI labs missed this, while a field engineer running production tickets all summer tripped right over it? Think back to December 1903. Samuel Pierpont Langley, the Secretary of the Smithsonian Institution, had 70,000 USD in War Department and Smithsonian funding, the prestige of the scientific establishment, and Charles Manly's radial engine—an engineering marvel that produced 52 horsepower. On December 8, 1903, Langley's Great Aerodrome was launched from a houseboat catapult on the Potomac River, reared straight up, snapped its rear wing, and plunged into the icy water like a stone. Nine days later, on December 17, 1903, two bicycle-shop field engineers from Dayton, Ohio—Orville and Wilbur Wright—flew into history at Kitty Hawk using a crude home-built engine that barely wheezed out 12 horsepower. Why did the 12-horsepower bicycle mechanics fly while the 52-horsepower Smithsonian physicist nose-dived into the Potomac? Because Langley believed flight was an engine-scaling problem—strap enough horsepower to an airfoil and brute force will keep it aloft. The Wright brothers realized from thousands of glider flights in the wind at Kill Devil Hills that flight is a three-axis control-surface problem. Before they ever bolted an engine to the flyer, they solved roll (wing-warping), pitch (the forward elevator), and yaw (the rear rudder). Today's frontier AI discourse is packed with modern Langleys—including the "Next-Model" cargo cultists who spend all week datamining IDE binaries for leaked model codenames (_"Sure, my one-shot vibe prompt crashed at 120k tokens today, but wait until next Tuesday's 500-horsepower model drops!"_). Without three-axis control surfaces—topological dependency ordering (Make), a persistent reified execution frame (Smalltalk-80 thisContext), deterministic regression witnesses (TDD), and clean-room adversarial verification (Six-Pillar Critic + Somatic Scars)—a bigger cosine-similarity engine just means the plane still noses into the river, just more accurately, or at a greater carbon footprint (both in datacenter megawatts and in the biological carbon of the human engineer woken up at 3 AM!). --- 2. Why Six Grammars Collapsed Into One 1980 Postcard (Wirth's Equation & The 3-Way Language Fork) At the end of October, Francisco Grandón (@fgrandon) published a great field report on DEV.to: What Broke After I Moved My Agent's Rules Into a CLI — And How Synthetic Scars Reshaped agops v2.1. Francisco had adopted our Target 15 / Target 20 Graphviz strict digraph state-machine verification (SCAR-PROC-152, where every action node must have out-degree >= 2 with explicit ok and fail edges) inside FranciscoGrandon/ag-ops. And almost immediately, his CLI hit what he documented as Scar #2: when an LLM wrote valid Graphviz DOT statements separated by newlines instead of semicolons, his attribute-stripping regex (/\s*\[[^\]]*\]/g) ate the newline before [label="ok"], concatenating two edges into A -> BB -> C and silently corrupting the graph! When I read Francisco's post-mortem, I looked at our own control plane in WORKFLOW.mk and realized something uncomfortable. Over the course of Parts 3.6 through 4.1, each time we solved a failure mode by riding pre-training gravity (Part 3.8), we had recruited a classic systems notation for that layer: 1. 1976 GNU Makefile (target: prerequisites) for backward-chained dependency topology (Part 3.6); 2. 1983 SysV /etc/init.d Numbered Cards (00_...md through 99_...md) for context-compaction survival (Part 3.7); 3. 1986 Winograd & Flores Speech-Act Tables + RFC 5234 EBNF + Hoare CSP (!/?) for role boundaries (Part 3.10); 4. 1977 Belnap 4-Valued Epistemic Tables ({T, F, Both, Neither}) for premise verification; 5. 1991 Graphviz strict digraph for Mealy state-machine branch auditing (out-degree >= 2); and 6. 1998 Cucumber Gherkin (Given / When / Then) for mapping state paths onto unit tests. Every single one of those six notations worked vastly better than unstructured English prose. Yet maintaining six separate miniature parsers, regexes, and translation steps across boundaries was still accidental complexity. A Graphviz .dot node couldn't directly invoke a Belnap retraction; a Gherkin Then clause couldn't directly unwind an /etc/init.d card; and a regex stripping .dot brackets could eat a newline. Why had we needed five different notations inside our Makefile targets in the first place? Solving Niklaus Wirth's Equation (Algorithms + Data Structures = Programs) in Static Text In 1976, Niklaus Wirth titled his classic textbook _Algorithms + Data Structures = Programs_. When you checkpoint an AI agent's brain to disk so it can survive a 200,000-token context compaction—or hand a formal plan from the Planner to the TDD Worker and the Clean-Room Critic—you need a static text representation on disk that captures both halves of Wirth's equation at the exact same time: - Pure Data Formats (JSON, YAML, TOML, Graphviz .dot, SysV Markdown tables) represent Data Structures, but they are 100% blind to Algorithms. Because JSON and .dot have no native representation for deferred execution (if, while, try/catch, lexical closures), you are forced to stuff executable invariants inside dead string literals (label="ok: failing_tests > 0"), where no parser can type-check or execute them without inventing an ad-hoc mini-language inside the strings! - Mainstream Imperative Languages (C, Python, Dart, TypeScript, Rust) represent Algorithms, but they cannot natively serialize their own live Data Structures + Call Stack (thisContext) back out as valid source code (#storeString), because their control-flow constructs (if (...) {}, for (...) {}, try {} catch {}) are hardwired parser statements, not first-class objects or messages. In the entire history of programming languages, only three language families seriously attempted to unify Algorithms + Data Structures into a minimal, uniform, homoiconic syntax where code and data share the same structural representation: 1960 Lisp, 1988 Tcl (and 1990 expect), and 1980 Smalltalk-80. Let's put all three side by side under Transformer attention physics: | Dimension | 1. Lisp (McCarthy, 1960) | 2. Tcl & expect (Ousterhout 1988 / Libes 1990) | 3. Smalltalk-80 (Kay & Ingalls, Xerox PARC 1980) | | :--- | :--- | :--- | :--- | | Core Syntax Primitive | Uniform prefix list: (op arg1 arg2 ...) | Command + [eager] vs. {deferred string} | Receiver + unary, binary, or keyword1: arg1 keyword2: arg2 | | How It Separates Eager vs. Deferred Execution ([ ... ] vs. ( ... )) | Failed to separate them in base syntax! Both grouping/calls and lists use ( ... ). Wrapping every branch in (lambda () ...) was too noisy, forcing Lisp to invent Special Forms (if, cond, let) and Reader Macros (` , ,@ `). | **Separated [ ... ] (eager substitution) from { ... } (deferred raw string)**. Great ergonomic leap for Tcl/Tk UI callbacks and expect scripts! | **Orthogonal 2-character primitives**: ( ... ) is **always eager grouping**; [ :x | ... ] is **always a deferred lexical BlockClosure` object. | | **Control Flow Status | Special Forms & Macros (defmacro) that suspend standard evaluation rules. | Commands Reparsing Raw Strings (if {...} {...}) via uplevel / upvar dynamic stack injection. | 100% Ordinary Keyword Messages (ifTrue:ifFalse:, whileTrue:, on:do:) sent to Booleans and BlockClosures! Zero control-flow keywords in the grammar. | | LLM Token & Attention Failure Mode | Positional Slot Ambiguity + Dyck-1 Closing-Parenthesis Drift ())))): At depth 6+, smaller models miscount homogenous closing parens or drop optional &key slots (66.7% on flash-lite in Suite 8). | Dead-String Blindness & Scope Loss: { ... } is an unparsed dead string until runtime, losing static AST validation and lexical closure state (thisContext). | Self-Labeling Keyword Selectors (100.0% in Suite 8): Every argument is labeled at the call site (state:invariant:onSuccess:onFailure:). Dropping onFailure: changes the selector name and triggers instant MessageNotUnderstood. | Look closely at why Tcl (1988) and Smalltalk-80 (1980) diverged, because both deserve immense historical credit. When John Ousterhout created Tcl/Tk at UC Berkeley in 1988, and Don Libes built expect at NIST in 1990 on top of Tcl, they saw the flaw in Lisp's overloaded parentheses. They gave Tcl two distinct brackets: [ ... ] for immediate command substitution and { ... } for deferred blocks. That single design choice made button .b -command { ... } in Tcl/Tk and state-machine automation in expect (expect { -re "pat" { ... } timeout { ... } }) a revelation for Unix systems programmers in the early 1990s. In fact, expect was so useful that in June 1991, I rewrote Don Libes's Tcl expect engine in pure Perl 4 as chat2.pl—a piece of personal history we will visit in Section 3! So why did we choose 1980 Smalltalk-80 over Tcl for our 2026 agent control plane? Because in Tcl, { ... } is not a parsed AST or a lexical closure—it is an unparsed raw string that gets reparsed from scratch at runtime using uplevel and upvar. In Smalltalk-80, [ :ctx | ... ] is a compiled, lexically scoped BlockClosure object whose syntax fits on the famous Xerox PARC postcard: "1. Eager grouping (parentheses) vs. Deferred BlockClosure (square brackets):" (2 + 3) * 4. [ :ctx | ctx failingTests > 0 ] value: thisContext. "2. Conditionals, loops, and exception handling are 100% ordinary keyword messages:" aBoolean ifTrue: [ self advanceTo: #Target35Green ] ifFalse: [ self haltWithScar: #SCAR_TDD_01 ]. [ remainingWidgets notEmpty ] whileTrue: [ self generateAndTest: remainingWidgets removeFirst ]. [ self executeTarget20Plan ] on: PremiseRetracted , ScopeDecompositionSignal do: [ :ex | thisContext unwindToFrame: #Target15Archaeology. ex retryUsing: #RenegotiatedPlanB ]. There is no if statement in Smalltalk. There is no for loop keyword. There is no try / catch syntax. Every single one of them is a keyword message send where the selector name is the concatenation of all its colons (#ifTrue:ifFalse:, #whileTrue:, #on:do:). My 1980s Smalltalk-80 Roots: Tektronix & Steering GemStone Toward Sanity For me, this wasn't an academic literature search—it was coming home to the very first object-oriented systems I ever touched. Before I became known as "the Perl guy" (and decades before I became a Dart and Flutter Google Developer Expert), I spent a huge chunk of the 1980s immersed in Smalltalk-80 right here in the Silicon Forest of Oregon: 1. Early 1980s at Tektronix (Beaverton, Oregon): Tektronix was one of the original Xerox PARC corporate licensees for Smalltalk-80 (building the legendary Tektronix 4404 artificial-intelligence workstation where Ward Cunningham and Kent Beck later did their pioneering CRC-card and pattern work). Watching Dan Ingalls's live .image + .changes architecture run on early 1980s hardware permanently rewired how I think about software state. 2. Mid-1980s at Servio Logic (GemStone Object Database, 27th Floor of the Georgia-Pacific Building in Downtown Portland): Right after that, I contracted at Servio Logic on the 27th floor of the Georgia-Pacific building in downtown Portland (long before they ever moved out to Beaverton), helping build GemStone—the world's first commercial multi-user Smalltalk object database. As I recounted in my memoir Steering GemStone Toward Sanity, when I arrived, the database query language OPAL was only "Smalltalk-like," and they had invented bizarre magic punctuation on individual comparison operators (emp.salary @1985-01-01 > 50000) to query historical snapshots of object memory. I stood at the whiteboard and asked two Socratic questions: - _"Why does OPAL have to be 'Smalltalk-like'? Why can't it just be standard Smalltalk-80?"_ - _"And why is @timestamp hacked onto individual < and > operators instead of being a message sent to the entire [ ... ] block closure ([ :emp | emp salary > 50000 ] @ 1985-01-01), so the whole block evaluates inside historical object memory at that point in time?"_ Think about that 1985 GemStone insight for a second: evaluating a Smalltalk [ ... ] block closure against an immutable historical snapshot of object memory. Forty-one years later, when our AI orchestrator wakes up from a mid-flight context compaction, reads <brain>/state/baseline.sources plus <brain>/state/changes-*.changes, rehydrates thisContext, and evaluates invariant: [ :ctx | ... ] against a SHA-256-locked SensorReceipt, it is running the exact same temporal Smalltalk block architecture we designed on the 27th floor of the Georgia-Pacific building in 1985! --- 3. A 35-Year Detour (91/06/16): How http://chat2.pl Ended Up in Perl 4 Core, Bootstrapped CPAN, Collided with Linux, and Foreshadowed 2026 AI "Chat" Harnesses Before we look at the Smalltalk-80 StateGraph code and the Suite 8 benchmark numbers, I have to share a 35-year-old story that came up during our architecture review—because if you type http://chat2.pl into your browser right now, it redirects straight to a very specific 1991 commit in the official Perl repository: Perl/perl5@11aea36008/lib/chat2.pl. Why did I buy the Polish domain chat2.pl years ago and point it at a 1991 Perl 4 library file? Because back on June 16, 1991 (V2.01.alpha.7 91/06/16), long before "chat" meant typing into an LLM web box, "chatting" in Unix meant writing a state-machine harness to drive an interactive subprocess or TCP socket (telnet, ftp, passwd, uucp) that expected a human at a terminal—waiting for a regex prompt, branching on what came back, handling TIMEOUT and EOF sad paths, and sending the next command. Don Libes had just written expect in Tcl, and Perl 4 programmers on comp.lang.perl wanted to do the same thing without leaving Perl. So I wrote chat.pl, followed by a multi-handle rewrite called chat2.pl: ## chat2.pl: chat with a server ## V2.01.alpha.7 91/06/16 ## Randal L. Schwartz # Usage: &chat'expect([$handle,] $timeout_time, $pat1, $body1, $pat2, $body2, ... 'TIMEOUT', $timeout_body, 'EOF', $eof_body); Under the hood, chat2.pl took those alternating (pattern, action, 'TIMEOUT', sad_path, 'EOF', eof_path) tuples and dynamically generated and eval-compiled a memoized state-machine subroutine (expectloop000000) on the fly using select(2) bitmasks! Look at that signature: a timeout deadline, positive pattern-match transitions, and mandatory 'TIMEOUT' and 'EOF' sad-path transitions. Thirty-five years ago, chat2.pl was already enforcing SCAR-PROC-152 (out-degree >= 2) on interactive "chat" loops! How Larry Wall Silently Scooped V2.01.alpha.7 Into Perl Core—and Why # but who the heck would change these anyway? (:-) Met Linux Two Months Later! Here is the funny part of the story: 1. The Silent Scoop Into Perl 4 (perl 4.0 patch 12, November 5, 1991): I posted chat2.pl (V2.01.alpha.7) to Usenet as an alpha work-in-progress. Without telling me, Larry Wall scooped it right off Usenet and bundled it into the standard Perl 4 core distribution (lib/chat2.pl, commit 11aea36008)! It was the _only_ piece of code I ever wrote that ended up inside the core Perl distribution. 2. Bootstrapping CPAN (ftp.pl and Lee McLoughlin's mirror): Once chat2.pl was guaranteed to be present in every Perl installation on Earth, Spafford and Lee McLoughlin built ftp.pl and the legendary mirror package on top of chat2.pl. And what did mirror do? For the entire 1990s, mirror (running on top of chat2.pl's state-machine loop) was the replication engine that synchronized the global CPAN (Comprehensive Perl Archive Network) mirror fleet! 3. The 1991 h2ph Dilemma and the Famous Socket Comment: If you read lines 25–28 of lib/chat2.pl in commit 11aea36008, you will see one of the most famous comments in Perl history: unless (socket(S, 2, 1, 6)) { # XXX hardwired $AF_SOCKET, $SOCK_STREAM, 'tcp' # but who the heck would change these anyway? (:-) return undef; } and down in _getpty (line 138): ioctl(DEVTTY, 0x20007471, 0); # XXX s/b &TIOCNOTTY Why did I hardwire (2, 1, 6) (AF_INET = 2, SOCK_STREAM = 1, IPPROTO_TCP = 6) on June 16, 1991 instead of loading sys/socket.ph? Because in Perl 4 (years before Perl 5 introduced compiled XS modules like use Socket;), the only way to get C #define constants was if the local system administrator had manually run Larry's h2ph script against /usr/include/*.h—and on 90% of Unix boxes in 1991, either the sysadmin hadn't run h2ph or h2ph had choked on vendor C preprocessor macros! If I had put require 'sys/socket.ph' at the top of chat2.pl, it would have crashed out of the box on 90% of the machines downloading it from Usenet. And on June 16, 1991, across BSD, SunOS, Ultrix, and NeXTSTEP, SOCK_STREAM was 1 everywhere. So I wrote # but who the heck would change these anyway? (:-). 4. Two Months Later: Linux and SVR4 Arrive: Exactly two months after I wrote that comment on June 16, 1991, a 21-year-old Finnish student named Linus Torvalds posted to comp.os.minix announcing "a different sort of Unix from a new origin"—Linux! Meanwhile, AT&T System V Release 4 (SVR4 / Solaris 2) began spreading with SOCK_STREAM = 2 instead of 1, and Linux changed TIOCNOTTY (0x5422) and architecture-specific socket constants. Suddenly, my alpha Usenet script—frozen inside Perl core where I didn't even have commit bits—was failing on Solaris and Linux! 5. The 9-Year Cleanup (11aea36008 → f97f1ee016 → a6d7165678 → 50f338d87d): In July 1996 (perl5.003_02, commit f97f1ee016), the Perl 5 porters wrapped my call in eval { require "sys/socket.ph" }—keeping my # but who the heck would change these anyway? (:-) in the else branch—which ironically broke machines with half-generated .ph files. By July 1999 (a6d7165678), Gurusamy Sarathy slapped a disclaimer at the top ("Use of this library is deprecated. Do not use it as an example of modern Perl"), while perlfaq8 still coyly mentioned it by name. Finally, after I pleaded on perl5-porters (Re: perlfaq8 coyness) to put my 1991 alpha script out of its misery in favor of Expect.pm and IO::Socket, Jarkko Hietaniemi deleted it on May 15, 2000 in commit 50f338d87d with one of my favorite commit messages in open-source history: > Delete chat2 as requested by Randal Look at the two timeless lessons of chat2.pl (91/06/16 → 2026): - First, that socket(S, 2, 1, 6) story is the textbook proof of our Two-Tier Partition Theorem from Part 4.1 (Sign-Inversion & Environment Drift)! On June 16, 1991, hardwiring (2, 1, 6) to avoid broken h2ph headers was the +∞ pragmatic engineering move for BSD Unix—until two months later, when a brand-new OS kernel called Linux and SVR4 changed the environment constants and flipped it to -∞. You can never freeze environmental assumptions in static weights forever; you need a live sensor. - Second, thirty-five years after I wrote chat2.pl to wrap interactive Unix streams in a deterministic state machine (expectloop with mandatory TIMEOUT and EOF sad paths), the software world started "chatting" with LLMs—and forgot that an interactive chat with an intelligent subprocess still requires a deterministic state machine with mandatory sad-path transitions on the outside! --- 4. The 6-for-1 Smalltalk-80 Unification Architecture & Seaside Continuations When we asked _"How do we keep 1976 Make as our outer dependency graph while unifying all five inner notations (SysV init.d, Graphviz DOT, Gherkin, Belnap tables, and CSP/Flores speech acts) into one zero-ambiguity language?"_, every piece of 1980 Xerox PARC Smalltalk-80 (plus Avi Bryant's 2002 Seaside continuation framework) clicked into place like precision-machined gears: flowchart TD Make["🛠️ Outer Topology: 1976 Stuart Feldman Make\n• Stateless pc-free DAG evaluated backward from make finish\n• Physical file prerequisites on disk"] ST["📮 Inner Execution Fabric: 1980 Xerox PARC Smalltalk-80\n• Fits on a postcard (Unary > Binary > Keyword precedence)\n• Zero special forms: [ :ctx | ... ] BlockClosures"] Make --> ST SG["1. StateGraph >> state:invariant:onSuccess:onFailure:\n• Replaces Graphviz DOT + Gherkin\n• Omitting onFailure: triggers compile-time MessageNotUnderstood\n• Enforces SCAR-PROC-152 (out-degree >= 2) by syntax"] IMG["2. thisContext + baseline.sources + changes-*.changes\n• Replaces SysV /etc/init.d Markdown state cards\n• Append-only #storeString delta chunks (!...!) on 3 triggers\n• Smalltalk condenseChanges atomic fold at phase boundaries"] EX["3. BlockClosure >> on:do: (resume: / retryUsing:)\n• Replaces manual rewind & Belnap retraction rules\n• Non-unwinding handler inspects PremiseRetracted / ScopeDecompositionSignal\n• Preserves verified Target 15 SensorReceipts across rewinds"] DNU["4. Performer >> doesNotUnderstand: + Seaside self call:\n• Replaces Hoare CSP (!/?) + Flores role tables\n• Calling #declareApproved: on Performer raises RolePrivilegeViolation\n• Seaside WATask >> self call: yields turn cleanly at Human Gates"] ST --> SG ST --> IMG ST --> EX ST --> DNU Let's inspect the four architectural mechanisms that made this 6-for-1 collapse work in production: 1. Why Make Stays on the Outside While Smalltalk-80 Runs on the Inside A sharp reader might ask: _"Randal, if Smalltalk-80 is so expressive, why keep 1976 Make as the outer target graph? Why not write the outer build graph in Smalltalk too?"_ Because Make and Smalltalk-80 govern two fundamentally orthogonal mathematical domains: - Make (1976) is a pc-free Declarative Dependency Graph over Physical Files: Make has no program counter (pc = ∅). To find out what to do next, Make walks backward from make finish checking physical file existence and cryptographic hashes on disk. - Smalltalk-80 (1980) is a Reified Activation Frame (thisContext) and Message-Passing State Machine: Inside a target (or across a multi-step loop, an on:do: premise retraction, or a context compaction), you _do_ have an active instruction pointer (pc), a receiver (self), a sender frame (sender), completed vs. remaining loop items (LoopIterationChunk), and live epistemic beliefs (BelnapLedger). 2. Enforcing SCAR-PROC-152 (out-degree >= 2) by Keyword Selector Syntax (StateGraph) In Part 4.0 and Francisco's agops v2.1, verifying that every state in a plan had both a happy-path transition and a sad-path transition required parsing a Graphviz strict digraph and counting node out-degrees (d^+(v) >= 2). Worse, in English prose or even in Common Lisp with optional keyword arguments (&key on-success on-failure), an LLM under token pressure can quietly omit :on-failure and still produce a syntactically valid S-expression (defstate :target-30 :invariant ... :on-success ...). In Smalltalk-80, keyword message selectors include every colon-terminated keyword as part of the method name itself. Look at our canonical StateGraph cascade: StateGraph new state: #Target15Archaeology invariant: [ :ctx | (ctx receiptAt: '15_archaeology_receipt.md') sha256Verified and: [ (ctx belnapAt: #BEL01) ~= #Neither ] ] onSuccess: [ :ctx | ctx advanceTo: #Target20Plan ] onFailure: [ :ctx | ctx haltWithScar: #SCAR_ARCH_01 ]; state: #Target30RedGreenTdd invariant: [ :ctx | (ctx receiptAt: '30_tdd_receipt.md') redWitnessVerified and: [ ctx allTestsGreen and: [ ctx lineCoverage = 100.0 ] ] ] onSuccess: [ :ctx | ctx advanceTo: #Target40Critic ] onFailure: [ :ctx | ctx rewindTo: #Target30RedGreenTdd withScar: #SCAR_TDD_01 ]; yourself. What happens if an LLM tries to cut corners and leaves off onFailure: [ ... ]? In Smalltalk-80, the parser does not see a call to #state:invariant:onSuccess:onFailure: with a missing fourth argument. It sees a completely different 3-argument selector—#state:invariant:onSuccess:—which does not exist on StateGraph! Before a single line of application code is touched, the Smalltalk evaluator (and the model's own pre-trained Smalltalk grammar head) fires MessageNotUnderstood: StateGraph>>state:invariant:onSuccess:. In Smalltalk-80, forgetting the sad path is a syntax/selector error. And to satisfy our Sovereign Presentation Surface invariant (SCAR-HCI-05, Dual Projection), at Target 20 the orchestrator renders both a visual vertical flowchart TD Mermaid diagram for instant human scanning and the bijective Smalltalk-80 StateGraph cascade for the Target 40 Critic to verify 1-to-1 against the unit test assertions. 3. The Dan Ingalls Image Bootloader (baseline.sources + changes-*.changes + Smalltalk condenseChanges) In Part 3.7, we solved the 200,000-token context-compaction "lobotomy" using numbered /etc/init.d Markdown files (00_...md through 99_...md). That worked, but over long multi-hour sessions we noticed a subtle failure mode: if an agent overwrote a monolithic state card in place during a rapid loop, or if compaction struck halfway through a 16-widget implementation loop, the agent knew it was in Target 30, but didn't know _which 9 of the 16 widgets_ were already finished (MethodContext sub-step blindness). In 1980, Dan Ingalls solved crash recovery and live state persistence in Smalltalk-80 with a two-tier storage architecture that every Squeak, Pharo, and VisualWorks programmer knows by heart—including its famous somatic scar when you try to launch two VMs on the same .image file: > Error: Could not open the image file (already locked by another VM process). We brought Ingalls's exact 3-part architecture into <brain>/state/: 1. <brain>/state/baseline.sources (The Condensed Base Image): Initialized once at Target 10/15 intake, serializing the root MethodContext, TicketSession, BelnapLedger, and StateGraph via #storeString. 2. <brain>/state/changes-$timestamp.changes (Append-Only ! ... ! FileOut Delta Chunks): Under our 3-Trigger Checkpoint Law, the orchestrator never mutates baseline.sources in place during normal transitions. Instead, it appends an immutable changes-$timestamp.changes chunk file on: - Trigger 1: Every Phase / Human Gate boundary (#archaeologyCompleted, #planApproved, #criticReviewApproved, #reviewApproved, #commitApproved, #botTriageRemediated, #landingMatrixEvaluated); - Trigger 2: Every completed iteration of a multi-step do: loop via LoopIterationChunk completed: #( ... ) remaining: #( ... ); and - Trigger 3: Every on:do: exception, premise retraction, or scope decomposition unwind. 3. Smalltalk condenseChanges (Atomic Archival Fold at Clean Phase Boundaries): Just as a Smalltalk image runs Smalltalk condenseChanges to fold accumulated .changes deltas into a fresh .sources file, at major phase completions (Target 20 and Target 80/90) the orchestrator folds the active changes-*.changes chunks into baseline.sources.tmp, atomically renames mv baseline.sources.tmp baseline.sources, and moves the historical .changes files into <brain>/state/history/ for O(1) post-compaction wakeup and Target 90 NTSB forensics! 4. Avi Bryant's 2002 Seaside Web Framework (WATask >> self call: & _k Continuations) There is one more piece of Smalltalk history that maps 1-to-1 onto LLM orchestration: Avi Bryant's 2002 Seaside web framework in Squeak Smalltalk. In 2002, web developers were struggling with the exact same architectural problem that AI agent developers are struggling with in 2026: HTTP is a stateless request/response protocol, yet users expect a stateful multi-step workflow where they can hit the browser's Back button or fork a tab mid-checkout without corrupting server state! How did Avi Bryant solve that in Seaside? By modeling an entire multi-page user workflow as a single Smalltalk method (WATask >> go) that pauses at human interaction points by sending self call: aComponent. Each time self call: yields to the human browser, Seaside snapshots thisContext into a continuation key (_k). If the user hits the browser Back button and changes their mind on Step 2, Seaside doesn't corrupt Step 4—it restores the _k MethodContext frame from Step 2 and resumes cleanly! Look at that isomorphism: | 2002 Seaside Web Framework (Squeak Smalltalk) | 2026 Synthetic Scars Agent Fabric (Smalltalk-80 Bootloader) | | :--- | :--- | | Stateless HTTP Request / Response Turn | Stateless LLM Inference Turn (or Post-Compaction Wakeup) | | WATask >> self call: aHumanGateDialog | Sovereign Pause Gate (self call: Target20PlanApprovalGate with tool_calls: []) | | URL Continuation Key (?_s=...&_k=changes-15) | <brain>/state/baseline.sources + changes-$timestamp.changes (thisContext snapshot) | | User Hits Browser Back Button / Forks a Tab | Operator Retracts a Premise (BEL-01 -> F) or Splits Scope (on: ScopeDecompositionSignal do:) | | Role Violation on Unauthorized Action | Performer >> doesNotUnderstand: raising RolePrivilegeViolation if the agent invokes #declareApproved: | --- 5. Controlled Lab Proof: The Suite 8 3-Arm Shootout (N = 360 Trials Inside Our 2,040-Trial Benchmark) Before deploying the Smalltalk-80 fabric onto live production repositories, we extended our automated Pre-Training Gravity Benchmark (tools/benchmark_pretraining_gravity.dart, now totaling 2,040 paired trials, 3,133 live API calls, and 50,406,690 tokens across Suites 1 through 8). In Suite 8 (N = 360 controlled trials, 30 trials per arm across 4 model tiers under ~16,000 tokens of realistic compiler/diff distractor load), we pitted three control-plane representations head-to-head on four simultaneous structural invariants: 1. Probe 1 (SCAR-PROC-152 — Mandatory Sad-Path Out-Degree): Every state transition must define both an explicit success branch and an explicit failure/scar branch (out-degree >= 2). 2. Probe 2 (SCAR-PROC-120 — Non-Unwinding Premise Retraction): When PremiseRetracted fires at Target 30, the agent must rewind to Target 20 (#RenegotiatedPlanB) while preserving LoopIterationChunk progress and verified Target 15 SensorReceipt hashes. 3. Probe 3 (SCAR-PROC-94 / 102 — Role Privilege Separation & Customer Gate Yield): The Performer cannot utter a Customer #declareApproved: speech act (doesNotUnderstand: / RolePrivilegeViolation) and must yield via self call: at the human approval gate. 4. Probe 4 (#condenseChanges — Post-Compaction do: Loop Resumption): Waking up after a simulated context compaction where #ComponentA and #ComponentB are already recorded in completed:, the agent must resume strictly at #ComponentC (zero duplicate work) and fold deltas via Smalltalk condenseChanges. Here are the exact empirical results across all 360 trials: | Model Tier (30 Trials / Arm) | Arm A: English Prose + Gherkin + init.d | Arm B: Common Lisp S-Expressions (1960) | Arm C: Smalltalk-80 6-for-1 Fabric (1980) | Smalltalk vs. Lisp (z, p) | | :--- | :---: | :---: | :---: | :---: | | gemini-3.5-flash-lite | 0 / 30 (0.0%) | 20 / 30 (66.7%) | 30 / 30 (100.0%) | z = 3.46, p = 0.0005 | | gemini-3.8-flash | 0 / 30 (0.0%) | 30 / 30 (100.0%) | 30 / 30 (100.0%) | 100.0% vs. 100.0% | | gemini-3.1-pro-preview | 0 / 30 (0.0%) | 30 / 30 (100.0%) | 30 / 30 (100.0%) | 100.0% vs. 100.0% | | gemini-4-argon | 3 / 30 (10.0%) | 30 / 30 (100.0%) | 30 / 30 (100.0%) | 100.0% vs. 100.0% | | Total (N = 360 Trials) | 3 / 120 (2.5%) | 110 / 120 (91.7%) | 120 / 120 (100.0%) | z = 3.23, p = 0.0012<br>_(vs. Prose: z = 15.11, p < 0.0001)_ | And here is the per-probe breakdown across all 120 trials per arm explaining _where_ Prose and Common Lisp cracked: | Probe | Arm A: Prose (%) | Arm B: Common Lisp (%) | Arm C: Smalltalk-80 (%) | Root Cause of Failures in Arms A & B | | :--- | :---: | :---: | :---: | :--- | | Probe 1: Sad-Path Out-Degree (SCAR-PROC-152) | 81 / 120 (67.5%) | 111 / 120 (92.5%) | 120 / 120 (100.0%) | On flash-lite, Lisp omitted the optional :on-failure &key slot on 9/30 trials (70.0%) and miscounted )))) on 2/30 trials. Smalltalk keyword selector #state:invariant:onSuccess:onFailure: made omission impossible (z = 3.06, p = 0.0022). | | Probe 2: Non-Unwinding Premise Retraction | 82 / 120 (68.3%) | 119 / 120 (99.2%) | 120 / 120 (100.0%) | Prose discarded Target 15 receipts or restarted from scratch on 38/120 trials; Smalltalk on: PremiseRetracted do: hit 120/120. | | Probe 3: Role Privilege & Gate Yield (self call:) | 3 / 120 (2.5%) | 120 / 120 (100.0%) | 120 / 120 (100.0%) | Under 16k distractor load, Prose hallucinated self-approval on 117/120 trials; Smalltalk Performer >> doesNotUnderstand: #declareApproved: + self call: hit 120/120. | | Probe 4: Post-Compaction do: Resumption & #condenseChanges | 78 / 120 (65.0%) | 120 / 120 (100.0%) | 120 / 120 (100.0%) | Prose re-executed #ComponentA / #ComponentB on 42/120 trials; Smalltalk LoopIterationChunk + Smalltalk condenseChanges hit 120/120. | Look at the gemini-3.5-flash-lite row in that first table: Common Lisp dropped to 66.7% (20/30), while Smalltalk-80 stayed at 100.0% (30/30)! Why did Smalltalk-80 make a small, fast flash-lite model behave with the exact same 100.0% structural discipline as gemini-3.1-pro and gemini-4-argon? Because in Common Lisp, (defstate :target-30 :invariant (lambda (ctx) ...) :on-success (lambda (ctx) ...)) is still a valid list even if you forget :on-failure, and closing six nested levels requires counting six identical )))))) tokens (Dyck-1 stack counting, where small attention heads notoriously drift by ±1 parenthesis). In Smalltalk-80, statements are terminated by a period (.), cascades by a semicolon (;), blocks by a single ], and every keyword message carries its own argument schema in its selector name! --- 6. Seven Live Production Flight Tests in the Hangar (FT-236 Through FT-242 — Over 6,400 Combined Steps) A benchmark—even a 2,040-trial benchmark—is still a wind tunnel. The real test is what happens when you take the airplane out of the wind tunnel and fly it through seven consecutive real-world production tickets across two completely different engineering worlds: - Cohort A (Open-Source Reactive Framework & Web Ecosystem): RandalSchwartz/BlocSignal (bloc_signals_genui, bloc_signals_genui_jaspr, and the blocsignal.dev SSR/Wasm website); and - Cohort B (Commercial Enterprise Industrial Monorepo): A proprietary cross-platform enterprise industrial inspection (Flutter / binary imaging codecs / Cloud Functions) monorepo with strict multi-package CI gates and automated review bots. Across these seven consecutive production runs (FT-236 through FT-242, logged as FT-251 through FT-257 in our repository ledger), the Smalltalk-80 thisContext fabric executed 6,440 combined agent steps with 0 escaped regressions: | Run / Field Test | Cohort & Ticket / PR | Scope & Engineering Payload | Combined Steps (Parent + Workers) | Compactions & Recovery | Nudges (N_nudge) | Key Smalltalk-80 Fabric Milestone / Scar Codified | | :--- | :--- | :--- | :---: | :---: | :---: | :--- | | Run 1 (FT-236) | Cohort A: BlocSignal #260 / PR #397 | 16 Cupertino GenUI widget builders + A2uiFlutterCatalog.adaptive() (21 files, +2,544 / -3 LOC, 109/109 tests, 100.00% coverage 1,006/1,006 lines) | 679 (284 + 395) | 0 | 0 | Maiden baseline.sources + changes-1730393400.changes + LoopIterationChunk + #condenseChanges run; calibrated per-gate .changes emission. | | Run 2 (FT-237) | Cohort A: BlocSignal #259 / PR #399 + #398 | bloc_signals_genui_jaspr web DOM catalog (27 files, +4,713 / -0 LOC, 54/54 tests, 100.00% coverage 702/702 lines) | 1,801 (370 + 1,431) | 0 parent / 1 worker (100% zero-amnesia) | 1 _(scope split)_ | SCAR-PROC-155: Dynamic Scope Decomposition via on: ScopeDecompositionSignal do: stack unwind, spawning child Issue #398 while shielding Target 15 receipts. | | Run 3 (FT-238) | Cohort B: Enterprise TICKET-276 / PR #1545 | Annotated capture b
Clay Alternativen 2026: Treg vs. Apollo vs. Hunter vs. Deepline mit 100 echten Leads Clay Alternativen 2026: Treg vs. Apollo vs. Hunter vs. Deepline mit 100 echten Leads Die besten Clay-Alternativen im Jahr 2026 hängen davon ab, wie Sie bezahlen. In Tregs eigenem Test vom Oktober 2026 mit 100 Leads fand Treg 92 korrekte geschäftliche E-Mails für 0,58 $ pro 100 korrekte Ergebnisse, gegenüber 84 bei Clay für 3,77 $. Hunter kam bei der Präzision am nächsten (93 %). Apollo und Deepline eignen sich für Teams, die einen vollständigen Vertriebs-Workflow wünschen, nicht nur E-Mail-Suchen. {% cta apidog.com %} Testen Sie Apidog noch heute {% endcta %} Unten: die vollständige Tabelle, die heutigen Preise (geprüft am 3. November 2026), wo jedes Tool gewinnt und verliert, und wie Sie den Test mit Ihren eigenen Leads wiederholen können. Clay-Alternativen auf einen Blick: das 100-Lead-Duell Treg hat dieselben 100 Leads (den Namen einer Person plus eine Firmendomäne) durch fünf Tools für geschäftliche E-Mails laufen lassen und jedes Ergebnis mit der Adresse verglichen, die das Unternehmen veröffentlicht. Es ist Tregs eigener Benchmark, veröffentlicht auf seiner Personensuchseite, und niemand Unabhängiges hat ihn bisher reproduziert. Treg selbst merkt an, dass „eine Lücke von ein paar Zeilen ein Gleichstand ist“, also lesen Sie kleine Unterschiede als Rauschen. !assets.apidog.com | | Treg | Clay | Apollo | Deepline | Hunter | | --- | --- | --- | --- | --- | --- | | Korrekte geschäftliche E-Mails (von 100) | 92 | 84 | 77 | 80 | 84 | | Präzision (korrekt / gefunden) | 94 % | 88 % | 90 % | 87 % | 93 % | | Kosten für die 100 Leads | 0,53 $ | ~3,35 $ | ~2,24 $ | 2,74 $ | 2,21 $ | | Kosten pro 100 korrekte E-Mails | 0,58 $ | 3,77 $ | ~2,91 $ | 3,40 $ | 2,63 $ | Die Kosten sind Listenpreise am Testtag. Zwei Spalten sind am wichtigsten: - Kosten pro 100 korrekte E-Mails. Tregs 0,58 $ liegen etwa 85 % unter Clays 3,77 $, und es wurden 8 weitere korrekte E-Mails in derselben Liste gefunden. - Präzision. Hunters 93 % liegen einen Punkt hinter Tregs 94 %. Wenn eine falsche Adresse Sie mehr kostet als eine fehlende (Bounces schaden dem Absenderruf), ist die Präzision die Spalte, die Sie im Auge behalten sollten. !Bar chart of cost per 100 correct work emails from Treg's October 2026 test: Treg $0.58, Hunter $2.63, Apollo about $2.91, Deepline $3.40, Clay $3.77 Warum Leute nach Clay-Alternativen suchen Clay ist eine tabellenkalkulationsähnliche Anreicherungs-Workbench: Sie laden Zeilen, verketten Datenanbieter und KI-Schritte über Spalten hinweg und schieben die Ergebnisse in Ihr CRM. Teams suchen aus drei häufigen Gründen nach Alternativen: 1. Planpreis versus Volumen. Clays günstigster kostenpflichtiger Plan, Launch, kostet 185 $ pro Monat bei monatlicher Abrechnung oder 167 $ pro Monat bei jährlicher Abrechnung, laut Clays Preisseite am 3. November 2026. Tregs Vergleichsseite listet Clay mit 149 $ pro Monat, diese Zahl ist also bereits veraltet. 2. Zwei Messgrößen. Clay bepreist Pläne jetzt in Aktionen und Daten-Credits. Launch enthält 15.000 Aktionen und 2.500 Daten-Credits pro Monat, sodass Sie zwei Kontostände verfolgen. 3. Agenten, nicht Tabellen. Mehr GTM-Arbeit läuft jetzt über einen Coding-Agenten wie Claude Code. Diese Teams wollen eine API und ein Token, keine Tabellen-Oberfläche. Clays Free-Plan (500 Aktionen, 100 Daten-Credits, 200 Zeilen pro Tabelle) reicht aus, um ihn als Basis beizubehalten, während Sie testen. Treg: Open Source, Bezahlung pro Antwort Treg beschreibt sich in seiner GitHub-README als „OpenRouter, aber für Agenten-Tools statt für Modelle“. Ein Token gibt Ihrem Agenten einen Katalog von 123 Datenanbietern, darunter Apollo, Hunter, Tomba, People Data Labs, LeadMagic, Icypeas, Exa und Crustdata, mit über 1 Mrd. Kontakten und über 4.100 Tools dahinter. !assets.apidog.com Das ist die ehrliche Beschreibung: Treg ist ein Router vor denselben Anbietern, die andere Tools verkaufen. Es besitzt keine eigene Kontaktdatenbank. Sein Vorteil im Test kommt daher, dass es mehr als einen Finder pro Lead ausprobiert und nur für Treffer berechnet. Preismodell - Kein Abonnement. Sie zahlen im Voraus ein Guthaben. - Aufrufe werden zum eigenen Tarif des Anbieters mit 0 % Aufschlag abgerechnet. Die günstigste E-Mail-Suche beginnt bei 0,0005 $. - Fehlschläge sind kostenlos: Ein Finder, der nichts zurückgibt, berechnet 0,00 $. - Neue verifizierte Konten erhalten einmalig 1,00 $ kostenloses Guthaben. Treg veröffentlicht eine echte Rechnung vom 23. September 2026: 27 Personen eingegeben, 21 E-Mails gefunden (18 von Hunter, 3 von Kitt), 20 als zustellbar verifiziert, 6 Fehlschläge mit 0,00 $ berechnet. Die Gesamtkosten betrugen 0,58 $ oder 0,029 $ pro nutzbarem Ergebnis. Lizenz. Das Repo wird unter Apache 2.0 mit zusätzlichen Bedingungen veröffentlicht. Sie können es frei nutzen, auch kommerziell innerhalb Ihres Unternehmens, aber Sie dürfen es nicht ohne Genehmigung als konkurrierendes gehostetes Verzeichnis weiterverbreiten. Wo es gewinnt: niedrigste Kosten pro korrekter E-Mail im Test, keine monatliche Grundgebühr, für Agenten gebaut (CLI, HTTP-Proxy und ein Claude-Code-Plugin). Wo es verliert: Es ist ein junges Projekt ohne CRM, Sequenzierung oder Dialer. Jeder Benchmark auf seiner Seite ist sein eigener. Apollo: Datenbank plus Vertriebsengagement Apollo kombiniert seine eigene Kontaktdatenbank mit E-Mail-Sequenzierung, einem Dialer und CRM-Synchronisierung. Es ist das Tool, in dem Vertriebsmitarbeiter den ganzen Tag leben, nicht nur eine Lookup-API. !assets.apidog.com Preismodell. Apollo listet Free-, Basic-, Professional- und Custom-Pläne auf. Credits werden im Team gepoolt, in jedem Abrechnungszyklus gewährt und verfallen nicht. Apollos Preisseite zeigte am 3. November 2026 keine Dollarbeträge; Tregs Seite listet Apollo mit 59 $ pro Monat, bestätigen Sie also den aktuellen Preis in Ihrem Apollo-Konto, bevor Sie budgetieren. Wo es gewinnt: ein Ort zum Finden, Sequenzieren und Anrufen. Der Free-Plan hat kein Zeitlimit. Wo es verliert: In Tregs Test fand es die wenigsten korrekten E-Mails (77), obwohl seine 90 % Präzision solide waren. Hunter: der präzise E-Mail-Finder Hunter macht eine Sache gut: geschäftliche E-Mails anhand eines Namens und einer Domäne finden und verifizieren. Seine API ist einfaches REST, was die Integration in Skripte und Agenten erleichtert. !assets.apidog.com Preismodell (geprüft am 3. November 2026): | Plan | Monatliche Abrechnung | Jährliche Abrechnung (pro Monat) | Credits pro Monat | | --- | --- | --- | --- | | Free | 0 $ | 0 $ | 50 | | Starter | 49 $ | 34 $ | 2.000 | | Growth | 149 $ | 104 $ | 10.000 | | Scale | 299 $ | 209 $ | 25.000 | Credits werden monatlich zurückgesetzt und verfallen nicht. Wo es gewinnt: 93 % Präzision im Test, eine klare API und ein kostenloses Kontingent, das Sie heute testen können. Wo es verliert: Es ist ein E-Mail-Tool, keine Anreicherungs-Workbench, daher leben Firmografiken und mehrstufige Abläufe woanders. Deepline: GTM-Workflows über Ihren eigenen Agenten Deepline beschreibt sich als eine Möglichkeit, Leads zu finden und GTM-Workflows mit dem Agenten auszuführen, den Sie bereits verwenden, über eine API, die GTM-Datenanbieter verbindet. Es kommt Treg im Geiste am nächsten, mit mehr Workflow-Funktionen obendrauf. !assets.apidog.com Preismodell (geprüft am 3. November 2026): - Pay as you go: 0 $ pro Monat plus Nutzung, keine Karte erforderlich, 15 geplante Plays und Live-Monitore kombiniert. - Growth: 395 $ pro Monat plus Nutzung, mit 200 $ monatlichen Nutzungsguthaben inklusive. - Credits: 10 Credits entsprechen 1 $. - Bring your own keys: Sie zahlen Anbieter direkt ohne Aufschlag; Pay as you go enthält 50.000 Provider-Key-Aufrufe pro Monat, danach 0,005 $ pro Aufruf. Wo es gewinnt: geplante Plays, Live-Monitore und CRM-Synchronisierung für Teams, die Automatisierung wollen, nicht nur Lookups. Wo es verliert: Es war in Tregs Test Letzter bei der Präzision (87 %), und der Growth-Plan ist ein großer Sprung von 0 $. !Grouped bar chart from Treg's October 2026 test showing correct emails out of 100 and precision: Treg 92 and 94%, Clay 84 and 88%, Hunter 84 and 93%, Deepline 80 and 87%, Apollo 77 and 90% Welche Clay-Alternative sollten Sie wählen? Passen Sie das Tool an Ihre Arbeitsweise an: - Sie führen Anreicherung von einem Coding-Agenten aus und zahlen pro Ergebnis: Beginnen Sie mit Treg. Das Guthaben von 1 $ deckt einen echten Test ab. - Sie benötigen die höchste Präzision von einer bekannten API: Hunter, beginnend mit seinem Free-Plan. - Ihre Vertriebsmitarbeiter wollen Datenbank, Sequenzen und Dialer in einer App: Apollo. - Sie wollen geplante GTM-Workflows, die von Ihrem Agenten gesteuert werden: Deepline mit Pay as you go. - Sie leben in Tabellen und verketten viele KI-Schritte pro Zeile: Bleiben Sie bei Clay und nutzen Sie die anderen als günstigere Finder darin. Wechseln Sie nicht aufgrund eines fremden Benchmarks. Führen Sie zuerst Ihren eigenen Test mit 10 Leads durch. Testen Sie Clay-Alternativen mit Ihren eigenen Leads mit der Apidog CLI Jedes oben genannte Tool ist eine HTTP-API, also testen Sie sie wie jede API. Lassen Sie Ihren Coding-Agenten das mit der Apidog CLI erledigen: Sie definiert die Endpunkte, schreibt den Testfall und führt ihn gegen eine CSV mit Leads aus, bei denen Sie die richtige Antwort bereits kennen. Einmalige Einrichtung: npm install -g apidog-cli@latest apidog auth login --with-token <YOUR_APIDOG_TOKEN> apidog skill install Legen Sie 10 Leads, die Sie verifizieren können, in leads.csv ab (Spalten first_name, last_name, domain, expected_email). Geben Sie dann Ihrem Agenten einen [REDACTED PROMPT]text In Apidog project <projectId>, create two endpoints: GET treg.to<emailFinderToolId> with header X-Treg-Token, and GET api.hunter.io with X-API-KEY. Create one test case per endpoint that reads first_name, last_name and domain from the iteration data, asserts status 200, and asserts the returned email equals expected_email. Log the X-Treg-Cost-Micro response header on every Treg call. Run both against leads.csv in the <envId> environment and give me correct count, precision and total cost per tool. Ihr Agent sollte die Treg-Tool-ID mit `treg catalog search "find work email"` finden. Er arbeitet dann die Apidog-Befehle durch und validiert jede Nutzlast, bevor er schreibt: apidog cli-schema get endpoint-create apidog cli-schema validate endpoint-create --file treg-endpoint.json apidog endpoint create --project <projectId> --file treg-endpoint.json apidog cli-schema get test-case-create apidog cli-schema validate test-case-create --file treg-case.json apidog test-case create --project <projectId> --file treg-case.json apidog run --test-case <caseId> --project <projectId> -e <envId> -d leads.csv -r cli,json Das Flag -d führt eine Iteration pro CSV-Zeile aus, und -r cli,json liefert Ihnen eine Terminal-Zusammenfassung plus einen JSON-Bericht, den Ihr Agent summieren kann. Fügen Sie --upload-report hinzu, wenn Sie den Lauf in der Apidog-App überprüfen möchten. Bewahren Sie die API-Schlüssel in einer Apidog-Umgebung auf, nicht in der CSV. Wenn Sie neu in der Einrichtung sind, decken die Claude-Code-Anleitung und die apidog run-Referenz jeden Schritt ab. Weitere Informationen zu Agenten, die APIs in Ihrem Namen aufrufen, finden Sie unter GPT-6 Astra handhabt Computer-Use-API-Tests und wie Teams eine agentische Softwarefabrik aufbauen. FAQ Was ist die günstigste Clay-Alternative im Jahr 2026? In Tregs eigenem Test vom Oktober 2026 kostete Treg 0,58 $ pro 100 korrekte geschäftliche E-Mails, gegenüber 2,63 $ für Hunter und 3,77 $ für Clay. Treg hat kein Abonnement und Fehlschläge werden mit 0,00 $ berechnet. Wiederholen Sie den Test mit Ihren eigenen Leads, bevor Sie sich auf dieses Ranking verlassen. Ist Tregs 100-Lead-Benchmark unabhängig? Nein. Treg hat ihn durchgeführt und veröffentlicht, und kein Dritter hat ihn bis zum 3. November 2026 reproduziert. Treg sagt auch, dass eine Lücke von ein paar Zeilen ein Gleichstand ist. Hat Treg eine eigene Kontaktdatenbank? Nein. Treg leitet Ihre Aufrufe über ein Token an 123 Anbieter weiter, darunter Apollo, Hunter und People Data Labs. Sie zahlen den Tarif jedes Anbieters mit 0 % Aufschlag. Ist Treg kostenlos und Open Source? Der Code ist Open Source unter Apache 2.0 mit zusätzlichen Bedingungen, die die Ausführung als konkurrierendes gehostetes Verzeichnis einschränken. Die gehostete API wird pro Nutzung bezahlt, und neue verifizierte Konten erhalten einmalig 1,00 $ kostenloses Guthaben. Welche Clay-Alternative hat die beste E-Mail-Präzision? Treg (94 %) und Hunter (93 %) lagen in Tregs Test einen Punkt auseinander, was nach Tregs eigenen Regeln als Gleichstand gilt. Hunters Free-Plan gibt Ihnen 50 Credits pro Monat, um es selbst zu überprüfen. Kann ich Clay behalten und diese Tools ebenfalls nutzen? Ja. Viele Teams behalten Clay als Workbench und rufen für den E-Mail-Schritt einen günstigeren Finder wie Hunter oder Treg auf. Testen Sie die Kombination zuerst mit einer kleinen Liste.