Lenses
Posts grouped through theoretical frames. One lens shipped; more to follow.
A lens is a theoretical frame I find useful for thinking about the writing itself — what kind of cognitive work produced a given post, what genre move it makes, what posture toward co-authorship it admits. Each lens classifies the same corpus differently. The classifications are mine, sometimes contested, always editable: each is one line of frontmatter on the post it tags. More lenses will arrive as the frames earn their keep.
Bereiter & Scardamalia: knowledge-telling vs knowledge-transforming
Bereiter and Scardamalia (1987) distinguish two cognitive processes behind any written artifact. Knowledge-telling is the retrieve-and-write loop — locate what you know about a topic, write it down, repeat. The text comes out coherent; the writer's beliefs are unchanged. Knowledge-transforming runs two problem spaces in tension — a content space (what do I actually believe?) and a rhetorical space (how should this be said?) — each constraining the other. Beliefs shift during the writing. Mixed means the post does both in different sections.
-
I tagged every blog post by cognitive mode. Most of mine are knowledge-telling — and that's fine.
Adding one optional frontmatter field to my blog produced a taxonomy I couldn't have written without doing the work. The categories come from Bereiter & Scardamalia (1987), and applying them to my own corpus was uncomfortable in useful ways.
-
Scanners produce reports. Insurance needs witnesses.
The AI-supply-chain cohort is already crowded: Invariant, Snyk Agent Scan, JFrog, Klaimee, a dozen more. They all ship the same artifact, a point-in-time report. That is not what underwriters can price against. The primitive insurance needs is a falsifiable attestation with a TTL that re-verifies on drift. Nobody ships that yet.
-
The npm problem nobody wants to work on
Every Node.js production system depends on a single corporate-controlled npm registry with no real alternative — a structural risk the ecosystem ignores.
-
Inversion of Control at the Agentic Boundary
Applying IoC and dependency injection patterns to agentic service boundaries — and why technical plumbing alone won't prevent control inversion.
-
Introducing casq: Content-Addressable File Storage CLI in Rust
casq is a Rust CLI and library for content-addressed file storage — git-style deduplication without the overhead of a full version control system.
-
Locking Down AI Agents: Limiting Blast Radius in Production Systems
Practical techniques for sandboxing AI agents and limiting blast radius — filesystem restrictions, network controls, and permission scoping in production.
-
MeMo prompting, deconstructed: it's just self-routing
MeMo claims near-SOTA prompting via Munger's mental models. Strip the framing: what's left is one trick — ask the LLM to name its reasoning strategy first.
-
Genetic programming, deconstructed: four of five assumptions are 1990s artifacts
Classical GP bundles five independent design choices behind one biology metaphor. Four of them are compute-era assumptions that don't survive contact with frontier LLMs. What's left is a different algorithm.
-
Verifier-native search: the 2026 shape
LLM generation costs roughly 1000× more than verification. The serious program-search systems already exploit this. The agent-scaffold mainstream doesn't — and nobody yet compounds search traces into a domain-specific mutator.
-
Claude Code's Bash tool returns exit 1 with no output? Check /tmp.
If Claude Code's Bash tool returns 'Exit code 1' with empty stdout and empty stderr for every command, including `true` and `echo ok`, your /tmp is almost certainly full. Here is the fix.
-
The Firmbyte Gap: Why the Most Valuable Connections Never Happen
The biggest breakthroughs come from connecting unrelated fields — but the mechanism that produces them is broken. Hidalgo's firmbyte concept explains why.
-
Building a Behavioral Health Monitor and Feedback Loop for AI Agents
Applying signal processing concepts to coding agent actions — from FFT and Markov models to a pragmatic health scoring algorithm for Claude Code hooks.
-
Introducing slog: structured logging for every JS runtime
slog is a zero-dependency structured logger for Node.js, Deno, Bun, and Cloudflare Workers with pluggable transports and a Hono waitUntil middleware.
-
Show HN: Cairn — append-only SQLite event store, immutability enforced by triggers
cairn is an append-only SQLite event store where immutability is enforced by triggers, not convention. Go, TypeScript, and Rust SDKs share one test spec.
-
New Domain: bjro.dev
The blog has moved to bjro.dev — a short domain that's easier to share and signals a long-term commitment to writing about software and technology.
-
Debian: Why the Universal Operating System Still Matters in 2026
Debian turns 33 and keeps earning its title as the universal OS — community governance, 59,000 packages, and the foundation of over 1,000 Linux distributions.
-
Currying AI Agents: Partial Application for Reusable Agent Configurations
Apply partial application from functional programming to AI agents — pre-configure agent parameters to create reusable, composable agent building blocks.
-
Linear Types for Agent Safety - An Approach to Trustworthy AI Systems
Linear types applied to AI agent safety — a type system that enforces single-use for destructive operations and statically rejects unsafe agent code.
-
MarkyMarkov - Markov Chain-Based Code Guidance for LLM Agents and Humans Alike
MarkyMarkov uses Markov chains to learn patterns from your codebase and provide fast, explainable code guidance that complements LLM agents.
-
Building Smarter AI Agents With Ideas From Philosophy
Updated:Philosophically informed AI agent design — modeling belief, knowledge, and epistemic norms — makes agent behavior more reliable and inspectable.
-
Markov chains and LLMs - hybrid architectures for smarter agents
Combine Markov chains with LLMs to build structured, interpretable agents — Markov chains enforce predictable state; LLMs provide semantic flexibility.
-
AI Agents in Business Processes: Temporal, FSMs, and MCP
Updated:How to pair agentic workflows with Temporal for durability, finite state machines for structure, and MCP servers to scale from pilot to production.
-
Context Management for AI Agents: Why MINDMAP Changes Everything
Context is the most underrated lever in AI agent design — this post makes the case for MINDMAP-style context objects as a first-class agent primitive.
-
Cloud LLMs in Production: The Hidden Trust Boundary You’re Already Crossing
Infra teams quietly feed logs, configs, and schemas to cloud LLMs when troubleshooting — extending the trust boundary into a black box they don’t control.
-
Software Development Opinions: LLMs, Agentic Tooling, and What Actually Changes
Opinionated notes on software development in the age of agentic tooling — where LLMs genuinely change how we work and where the hype outpaces the reality.
-
Using casq for Content-Addressable Storage in CI Pipelines
casq brings content-addressable storage to CI pipelines, eliminating redundant builds and test runs by identifying identical inputs with a git-style hash.
-
mise: Per-Project Tool Version Manager and Task Runner
mise pins tool versions per project — Node, Python, Go, and more — in a single .mise.toml, replacing nvm, pyenv, and Makefiles with one unified tool.
-
whosthere: LAN Discovery Tool with a Modern TUI in Go
whosthere is a Go-based LAN discovery tool with a modern terminal UI — fast, intuitive network exploration that shows who and what is on your local network.
-
Terminal Multiplexers: Why I Switched from tmux to zellij
A quick comparison of tmux and zellij as terminal multiplexers — zellij wins on discoverability with visible, mnemonic keybinds right out of the box.
-
Remap Caps Lock to Left Control on Linux and Windows
Remap Caps Lock to Left Control for a more ergonomic keyboard layout — instructions for Debian/Linux via XKBOPTIONS and Windows via SharpKeys.