Sign in

Na'aman Hirschfeld

@nhirschfeld.bsky.social
326 followers 2.6K following 146 posts

Co-Founder & CTO @ xberg.io. Document AI and extraction, polyglot Rust cores. Building basemind. Creator of Litestar & Polyfactory. Open source. Opinionated and strongly typed.

PostsRepliesMedia
Na'aman Hirschfeld @nhirschfeld.bsky.social · 26/09/2026
AI text detection is a similarity score, not a determination. The false positives and false negatives are structural, and they get worse as human writing converges on generated style. Provenance answers what detection only estimates: drafts, timestamps, history.
230
Na'aman Hirschfeld @nhirschfeld.bsky.social · 31/08/2026
poly cannot be published to crates.io. Its crates pin git deps for oxc, biome and rubyfmt, and crates.io forbids that in a published crate. So the prebuilt binary is the product, not the source. A constraint I did not choose, and would not now reverse. github.com/Goldziher/poly
020
Na'aman Hirschfeld @nhirschfeld.bsky.social · 31/08/2026
Wrote a lint rule that catches todo!() and unimplemented!() shipping to prod. Ran it on 48 repos: 324 findings, 320 in generated FFI glue. Of the 4 real ones, 3 were stubs and 1 was a mock. 25% false positives on a sample of 4 is not evidence. It ships off.
000
Na'aman Hirschfeld @nhirschfeld.bsky.social · 31/08/2026
Filed an issue against my own linter today. The MCP report promotes errors to a top level list, so a caller can gate without walking every record. Skipped only exists per record. The cheap check catches failed and misses not checked. github.com/Goldziher/poly/issues/19
000
Na'aman Hirschfeld @nhirschfeld.bsky.social · 31/08/2026
Someone on r/git corrected me today. pre-commit stashes with git diff-index and git apply, so a lost stash is not in the reflog at all. Only commits are. My post said reflog. Wrong, and the real story is worse. poly does not stash. github.com/Goldziher/poly
000
Na'aman Hirschfeld @nhirschfeld.bsky.social · 30/08/2026
poly also ships an MCP server. 11 tools over stdio, TOON output so it does not eat an agent's context, and results that separate "checked and clean" from "we failed to check it". That second distinction matters more than it sounds. github.com/Goldziher/poly
140
Na'aman Hirschfeld @nhirschfeld.bsky.social · 30/08/2026
Every polyglot repo I work on needs a dozen linters, each with its own runtime to install. So I wrote poly. One Rust binary, ~30 languages linted and formatted in-process, one TOML config. Django is 3,113 files in 0.82s. No Node, no Python, no Go toolchain. MIT. github.com/Goldziher/poly
Terminal recording: poly lint running over a Kubernetes checkout, 21,657 files inspected in 6.8 seconds from a single binary.
151
Na'aman Hirschfeld @nhirschfeld.bsky.social · 29/08/2026
Writing polyglot libraries, I often find myself needing to cleanup my machine from all sorts of build artifacts. Its basically a daily occurrence I prune 200GB of build artifacts and caches, which is annoying. I therefore give you VOOM, inspired by Dr. Seuss: github.com/Goldziher/voom
github.com
GitHub - Goldziher/voom: Fast, safe, parallel polyglot build-artifact and cache pruning
Fast, safe, parallel polyglot build-artifact and cache pruning - Goldziher/voom
010
Na'aman Hirschfeld @nhirschfeld.bsky.social · 25/08/2026
I woke up to a PR on Xberg opened and closed during the night. Title: Claude/merge. Nothing else in it. 285 commits, 377 files, 150k added lines, zero deletions. Opened 22:32, closed 22:33. Someone's agent had merged upstream the wrong way round and pointed the PR at me.
110
Na'aman Hirschfeld @nhirschfeld.bsky.social · 13/08/2026
This is my screen on a normal day. Nine agents in iTerm2 tabs, one per repo. I’d run more but the 16" display runs out first. Double-click a tab and it zooms full screen, so that’s my zoom in and out. They’re all in one workspace, and the repos depend on each other.
A 16-inch laptop screen split into nine terminal panes, one per repository: xberg, spikard, poly, html-to-markdown, liter-llm, alef, polyrepo infra, crawlberg and tree-sitter-language-pack. Each pane runs a coding agent working on its own branch, and each shows a basemind entry in its status line.
110
Na'aman Hirschfeld @nhirschfeld.bsky.social · 06/08/2026
posted scythe's generated TypeScript on r/typescript yesterday. someone replied that the row type was wrong. he was half right, and the half he got wrong turned out to be the more interesting half.
110
Na'aman Hirschfeld @nhirschfeld.bsky.social · 05/08/2026
LLMs are genuinely good at writing SQL. It's declarative, the syntax has barely moved in 50 years, and the training corpus is enormous. Where agents fall apart with databases isn't the query. It's the ORM layer wrapped around it.
110
Na'aman Hirschfeld @nhirschfeld.bsky.social · 05/08/2026
starmetal: one self-hosted binary that proxies your package registries. pip, npm, cargo, maven and more through a single cache with integrity and policy. Go/Zig/Swift have no index protocol to proxy, so it mirrors their git repos instead. Rust, MIT, early (v0.4).
121
Na'aman Hirschfeld @nhirschfeld.bsky.social · 04/08/2026
Sceptre: EasyOCR reimplemented in Rust. EasyOCR is accurate but Python-only (a PyTorch stack). Sceptre matches its output using the same OCR approach (CRAFT detection, gen2 CRNN, CTC over ONNX) and ships as one static binary with no Python.
1123
Na'aman Hirschfeld @nhirschfeld.bsky.social · 02/08/2026
Xberg v1 is out. It's the successor to Kreuzberg: a content-intelligence framework with a Rust core that extracts text, tables, layout and metadata from 101 document formats, plus code, audio/video, and URLs. Local-first, CPU-only, MIT.
131
Na'aman Hirschfeld @nhirschfeld.bsky.social · 25/07/2026
Every open-weight model drop splits the room: benchmark hype vs how-was-it-trained. Both skip the point. A frontier-quality open model drops that capability's price to near zero. No lab gets to rent it back as a moat. I build local-first tooling. That pressure on closed pricing is what sticks.
140
Na'aman Hirschfeld @nhirschfeld.bsky.social · 24/07/2026
Long-lived JS/TS projects rot the same way: unused deps in package.json, dead exports, orphaned files. None break the build, so they linger. knip finds all three in one command. I run it on every serious TS repo I maintain. I just wish something this good existed for Python.
230
Na'aman Hirschfeld @nhirschfeld.bsky.social · 23/07/2026
A spec is four documents in a trench coat: product reqs, architecture, the impl plan, the contract. Each rots at a different speed, so the whole file decays at the pace of its fastest-rotting part. Layer docs by lifetime instead of topic. Write-up below.
252
Na'aman Hirschfeld @nhirschfeld.bsky.social · 16/07/2026
A few years ago I was genuinely scared AI would end development as a profession. Now I recognize I was a useful idiot. Big AI has been hyping the doom and gloom as free publicity and a way to set the narrative. Anthropic and OpenAI are basically a single entity in this regard. #ai #agi #skynet
120
Na'aman Hirschfeld @nhirschfeld.bsky.social · 11/07/2026
Building xberg we bet on local-first, CPU-only doc extraction: no GPU, no per-page API call, docs never leave your infra. A Rust and SIMD core does the heavy lifting; the LLM only sees already-clean structured text as the last step. Predictable cost, no rate limits. v1 Jul 21.
210
Na'aman Hirschfeld @nhirschfeld.bsky.social · 10/07/2026
This is a thing of beauty... 3 months of work, all tests are green. #xberg
031
Na'aman Hirschfeld @nhirschfeld.bsky.social · 08/07/2026
Debugging basemind with Claude Code. 488% CPU, five cores pinned, looks like a runaway loop. But disk plateauing while CPU falls to one core is rayon finishing a rebuild. A leak keeps allocating, a scan converges. The derivative is the diagnosis, not the number.
230
Na'aman Hirschfeld @nhirschfeld.bsky.social · 06/07/2026
Hand-maintaining 16 language bindings is where polyglot projects rot. The core moves, one wrapper lags, you find out at runtime. Building xberg we generate them: one Rust core, one alef.toml, idiomatic SDKs per target, shared fixtures e2e-testing every binding so they can't drift.
160
Na'aman Hirschfeld @nhirschfeld.bsky.social · 05/07/2026
We generate code faster than anyone can review by hand. That makes QA critical, not optional: static analysis, type checks, comprehensive e2e/integration tests, agents reviewing against written rules. Then actually test it by hand. Open source it and thousands of users make it stronger.
340
Na'aman Hirschfeld @nhirschfeld.bsky.social · 04/07/2026
Building xberg meant every language in the repo dragged in its own linter and runtime, all wired into pre-commit. So I built polylint: two Rust binaries, one config, no runtimes on the default path. Bundles ruff/oxc/taplo/sqruff in-process, tree-sitter for the rest. Write-up below.
110
Na'aman Hirschfeld @nhirschfeld.bsky.social · 03/07/2026
If you write Rust that touches storage, look at Apache OpenDAL. One Operator API over 50+ backends (S3, GCS, Azure, HDFS, Redis, local fs), and retry/timeout/metrics/tracing are composable layers you stack, not code you rewrite per backend. Really clean design.
210
Na'aman Hirschfeld @nhirschfeld.bsky.social · 02/07/2026
If an LLM's structured output fails schema validation, don't just retry. Same prompt, same odds. Feed the validation error and the model's own bad output back into the next prompt and ask it to fix that field. Flaky retries become first-try-after-feedback.
000
Na'aman Hirschfeld @nhirschfeld.bsky.social · 01/07/2026
A blocking sync call in async code freezes the event loop. Every other task waits. anyio's run_sync offloads it to a worker thread. Wrap it once and any sync fn becomes awaitable, fully typed (PEP 695):
Python code: an as_async decorator using anyio.to_thread.run_sync and functools.partial to turn any blocking sync function into a fully-typed awaitable (PEP 695 generics).
110
Na'aman Hirschfeld @nhirschfeld.bsky.social · 30/06/2026
Benchmark-driven development: spec first, TDD to make it correct, then real benchmarks to keep it honest. The unlock is agents. You can now build serious benchmark and profiling harnesses that most projects could never justify the time for. Correctness and speed, both measured.
120
Na'aman Hirschfeld @nhirschfeld.bsky.social · 30/06/2026
rmux is a terminal multiplexer in Rust with typed SDKs (Rust/Python/TS). So your shell becomes programmable: write a program that spawns panes, runs an agent in each, and orchestrates them. Its Claude mode opens each agent in its own tab. We build basemind this way. github.com/helvesec/rmux
160
Na'aman Hirschfeld @nhirschfeld.bsky.social · 29/06/2026
Underrated tool of the week: lilbee by Tobias Perlstein. A local-first AI search engine — runs its own multi-model fleet via llama-swap, doc extraction + VLMs via xberg. Cited answers over your files + code, MCP server, TUI/CLI/REST/Python. ~30 stars, criminally unknown. github.com/tobocop2/lilbee
lilbee terminal UI showing a multi-GPU fleet (CUDA0-3) tensor-splitting a model and self-indexing its own docs, returning cited answers.
030
Na'aman Hirschfeld @nhirschfeld.bsky.social · 29/06/2026
Every JSON decoder in Python hands you back dict[str, Any] — then you cast and pray. msgspec decodes straight into your type, at C speed. We found it building Litestar — the secret sauce. pydantic's great, but slow even with its Rust core. The whole "decode into T" helper is 3 lines 👇
Python code comparing four ways to decode JSON into a Grant type: json.loads and orjson.loads return dict[str, Any] (cast and pray); pydantic's TypeAdapter.validate_json and msgspec.json.decode return a typed Grant. Below, a 3-line generic deserialize[T] helper built on msgspec that decodes into any type, including list[Grant].
150
Na'aman Hirschfeld @nhirschfeld.bsky.social · 28/06/2026
Vibe coding without guardrails is just fast drift. A model will solve the same problem five ways across one codebase. Strong types and an unforgiving linter are not friction, they are what keeps each iteration honest. Guardrails are no longer optional.
110
Na'aman Hirschfeld @nhirschfeld.bsky.social · 26/06/2026
Happy to introduce basemind - the worlds fastest AI context layer. Basemind does sub-millisecond code searches on massive repos, and millisecond speed git history lookups. Supporting 300+ programming languages and packed with a huge number of features. Check it out! github.com/Goldziher/ba...
github.com
GitHub - Goldziher/basemind: Full AI context layer for coding agents over one MCP server — tree-sitter code-map, document RAG, shared memory, multi-agent comms, web crawl, git history + blame. 300+ la...
Full AI context layer for coding agents over one MCP server — tree-sitter code-map, document RAG, shared memory, multi-agent comms, web crawl, git history + blame. 300+ languages, 10+ agent harness...
020
Na'aman Hirschfeld @nhirschfeld.bsky.social · 15/06/2026
I discovered I am the #4 most prolific committer on #github from #germany. I'm "goldziher" (see first comment). I then looked at number one, HORS, who has an insane number of commits. Then saw HORS signed his name using the commit indicator, during 2021-2. 🫠
110
Na'aman Hirschfeld @nhirschfeld.bsky.social · 20/05/2026
Happy to announce that our SAAS is now in public beta! Check it out at kreuzberg.dev. First 10k pages are free - so you can test it. Feedback welcome 🤗 #ai #rag #agents
kreuzberg.drv
000
Na'aman Hirschfeld @nhirschfeld.bsky.social · 21/04/2026
github.com/kreuzberg-de... is out. It's our crawling engine. Also open source. Have fun 😊
github.com
GitHub - kreuzberg-dev/kreuzcrawl: High-performance web crawling engine with bindings for 11 languages
High-performance web crawling engine with bindings for 11 languages - kreuzberg-dev/kreuzcrawl
020
Na'aman Hirschfeld @nhirschfeld.bsky.social · 07/04/2026
I released github.com/Goldziher/sc... -- an SQL compiler and linter. Scythe can generate code in 13 languages - making ORMs redundant.
github.com
GitHub - Goldziher/scythe: SQL-to-code generator for 10 languages and 3 databases
SQL-to-code generator for 10 languages and 3 databases - Goldziher/scythe
040
Na'aman Hirschfeld @nhirschfeld.bsky.social · 29/03/2026
Following the #LiteLLM supply chain attack - we just released an alternative. Happy to introduce Liter-LLM - faster, leaner, and built on Rust safety. github.com/kreuzberg-de...
github.com
GitHub - kreuzberg-dev/liter-llm: Universal LLM API client — 142+ providers, 11 native language bindings, powered by Rust core
Universal LLM API client — 142+ providers, 11 native language bindings, powered by Rust core - kreuzberg-dev/liter-llm
020
Na'aman Hirschfeld @nhirschfeld.bsky.social · 17/03/2026
Need a new GitHub function to block open claw bots. Getting PRs from claw agents - just noise.
001
Na'aman Hirschfeld @nhirschfeld.bsky.social · 14/02/2026
First time I get a cold email because I starred the competition on #github What do you think? Pretty creepy.
010
Na'aman Hirschfeld @nhirschfeld.bsky.social · 12/02/2026
Happy to publish the new #kreuzberh benchmarks, check it out: kreuzberg.dev/benchmarks
kreuzberg.dev
Kreuzberg - High-Volume Document Processing
Powering High-Volume Document Processing, Fast, Cost-Efficient, and Open Source.
010
Na'aman Hirschfeld @nhirschfeld.bsky.social · 24/01/2026
Two weeks ago we released Kreuzberg v4.0.0. Yesterday we released v41.1. We are going fast and giving our best as permissive open source, and the community is giving back! 2.1K GitHub stars in two weeks is awesome 😎 Check it out: github.com/kreuzberg-de... #kreuzberg.dev #ai #rag
github.com
GitHub - kreuzberg-dev/kreuzberg: A polyglot document intelligence framework with a Rust core. Extract text, metadata, and structured information from PDFs, Office documents, images, and 50+ formats. ...
A polyglot document intelligence framework with a Rust core. Extract text, metadata, and structured information from PDFs, Office documents, images, and 50+ formats. Available for Rust, Python, Rub...
000
Na'aman Hirschfeld @nhirschfeld.bsky.social · 22/12/2025
I released Spikard v0.5.0. Spikard is a Polyglot web toolkit built in Rust—same API across Python, TypeScript, PHP, Ruby, and Rust itself. → github.com/Goldziher/spikard #Rust #Python #TypeScript #WebDev #OpenSource #PolyglotProgramming
github.com
GitHub - Goldziher/spikard: Rust-powered, multi-language web toolkit with bindings for Python, Typescript, Ruby and PHP.
Rust-powered, multi-language web toolkit with bindings for Python, Typescript, Ruby and PHP. - Goldziher/spikard
040
Na'aman Hirschfeld @nhirschfeld.bsky.social · 23/11/2025
I published Spikard v0.1.1 - a polyglot web framework written in #Rust with #Python, #Node, #WASM and #Ruby bindings. Stay tuned for updates. github.com/Goldziher/sp...
github.com
GitHub - Goldziher/spikard: Rust-powered, multi-language web toolkit with bindings for Python, Ruby and Typescript.
Rust-powered, multi-language web toolkit with bindings for Python, Ruby and Typescript. - Goldziher/spikard
050
Na'aman Hirschfeld @nhirschfeld.bsky.social · 20/11/2025
I'm ashamed and saddened to see videos of young Jewish settlers marauding and performing Pogroms in the West Bank. The road to peace passes through accountability and truth.
000
Na'aman Hirschfeld @nhirschfeld.bsky.social · 24/03/2025
I've just released Kreuzberg v3.0! 🚀 Complete overhaul of this lightweight text extraction library: - Multiple OCR backends - Custom extractors - Processing hooks - PDF metadata extraction - Chunking Perfect for RAG & LLM apps. github.com/Goldziher/kr... ⭐ #Python #NLP
github.com
GitHub - Goldziher/kreuzberg: A text extraction library supporting PDFs, images, office documents and more
A text extraction library supporting PDFs, images, office documents and more - Goldziher/kreuzberg
050
Na'aman Hirschfeld @nhirschfeld.bsky.social · 28/02/2025
#Anthropic released Claude-Code, and it's massively trending on GitHub. Claude-Code is a fully fledged coding assistant that runs on the terminal. This move by Anthropic, whose #Claude models form the backbone of AI-powered code editors such as #Cursor, highlights their vulnerability.
100
Na'aman Hirschfeld @nhirschfeld.bsky.social · 16/02/2025
Launched Kreuzberg v2.0! 🚀 Modern async Python lib for text extraction from PDFs, docs & images. Built for RAG/LLMs. • Async/await + type hints • Local processing • Simple deployment github.com/Goldziher/kreuzberg #Python #AI #RAG
github.com
GitHub - Goldziher/kreuzberg: A text extraction library supporting PDFs, images, office documents and more
A text extraction library supporting PDFs, images, office documents and more - Goldziher/kreuzberg
010
Na'aman Hirschfeld @nhirschfeld.bsky.social · 22/01/2025
Got this on Reddit, seems precise
000