[
  {
    "slug": "how-i-separate-readers-from-bots-without-javascript",
    "title": "How I Separate Readers from Bots on a Static Blog Without JavaScript",
    "date": "2026-09-03",
    "section": "engineering",
    "description": "Server-side visitor counts are inflated by browser-shaped automation, and the popular open-source tools do not catch it. Here is the ten-minute test that shows your gap, the two rules that close most of it without a script, what AI readership really looks like on a small site, and the traffic no rule can separate from readers.",
    "tags": [
      "analytics",
      "cloudflare-workers",
      "http",
      "bots",
      "ai-agents",
      "observability"
    ],
    "featured": false,
    "alternativeHeadline": "A server-side counter reported eleven times more readers than a script-based one. Two request facts fix most of the gap. The rest is traffic no rule can separate from readers, and you should know its size.",
    "series": {
      "id": "measurement-boundaries",
      "title": "Measurement boundaries",
      "order": 4
    },
    "url": "/how-i-separate-readers-from-bots-without-javascript",
    "markdown": "/how-i-separate-readers-from-bots-without-javascript.md",
    "prompts": "/how-i-separate-readers-from-bots-without-javascript/prompts",
    "promptCount": 19
  },
  {
    "slug": "which-ai-fetchers-send-which-headers",
    "title": "Which AI Fetchers Send Which Headers, Measured on a Live Site",
    "date": "2026-09-03",
    "section": "engineering",
    "description": "What ChatGPT, Claude, Gemini, Grok, Perplexity, Copilot, Mistral, DuckDuckGo, Claude Code and Codex actually send when they fetch a web page: User-Agent, Accept, Fetch Metadata, IP ranges, Web Bot Auth signatures, and who cannot be identified at all. Captured on a live Cloudflare Worker.",
    "tags": [
      "ai-agents",
      "analytics",
      "cloudflare-workers",
      "http",
      "observability",
      "agentic-engineering"
    ],
    "featured": false,
    "alternativeHeadline": "The request headers, networks, IP lists and signatures of ChatGPT-User, Claude-User, MistralAI-User, DuckAssistBot, Gemini, Grok, Perplexity, Copilot, Claude Code and Codex, captured at a Cloudflare Worker",
    "series": {
      "id": "measurement-boundaries",
      "title": "Measurement boundaries",
      "order": 3
    },
    "url": "/which-ai-fetchers-send-which-headers",
    "markdown": "/which-ai-fetchers-send-which-headers.md",
    "prompts": "/which-ai-fetchers-send-which-headers/prompts",
    "promptCount": 13
  },
  {
    "slug": "oss-radar-06-interp-engine",
    "title": "OSS Radar #06: interp-engine, Neuronpedia's New Interpretability Engine, Tested on a Mac",
    "date": "2026-09-02",
    "section": "oss-radar",
    "description": "interp-engine, Neuronpedia's new interpretability engine, names 34 hook points once and compares 27 across engines. I audited the code and ran it on a Mac.",
    "tags": [
      "oss-radar",
      "interpretability",
      "neuronpedia",
      "vllm",
      "transformerlens",
      "steering"
    ],
    "featured": false,
    "alternativeHeadline": "Same hook name, different tensor: interp-engine names canonical taps once and records cross-engine checks for 27 point types",
    "url": "/oss-radar-06-interp-engine",
    "markdown": "/oss-radar-06-interp-engine.md"
  },
  {
    "slug": "oss-radar-05-bun-1-4",
    "title": "OSS Radar #05: Bun 1.4 Made the Runtime the Dependency",
    "date": "2026-08-26",
    "section": "oss-radar",
    "description": "Bun 1.4 moves fifteen package jobs into one Rust-based binary. The package graph shrinks, but compatibility and maintenance move into the runtime.",
    "tags": [
      "oss-radar",
      "bun",
      "javascript",
      "rust",
      "runtime"
    ],
    "featured": false,
    "alternativeHeadline": "Bun 1.4 moves fifteen package jobs into one Rust-based binary",
    "lastModified": "2026-09-02",
    "url": "/oss-radar-05-bun-1-4",
    "markdown": "/oss-radar-05-bun-1-4.md"
  },
  {
    "slug": "first-party-analytics-for-a-personal-blog",
    "title": "How I Built First-Party Analytics for a Personal Blog",
    "date": "2026-08-26",
    "section": "engineering",
    "description": "A code-backed guide to first-party blog analytics with Cloudflare Workers and D1: edge events, privacy, migrations, and public stats.",
    "tags": [
      "analytics",
      "cloudflare-workers",
      "d1",
      "privacy",
      "observability"
    ],
    "featured": false,
    "alternativeHeadline": "A Cloudflare Workers and D1 architecture for public, source-aware personal blog analytics",
    "series": {
      "id": "measurement-boundaries",
      "title": "Measurement boundaries",
      "order": 2
    },
    "url": "/first-party-analytics-for-a-personal-blog",
    "markdown": "/first-party-analytics-for-a-personal-blog.md",
    "prompts": "/first-party-analytics-for-a-personal-blog/prompts",
    "promptCount": 20
  },
  {
    "slug": "does-llms-txt-work",
    "title": "Does llms.txt Work? What a Live Implementation Revealed",
    "date": "2026-08-25",
    "section": "engineering",
    "description": "Does llms.txt improve AI search? This live audit examines edge data, agent tools, Markdown, and GEO evidence—then shows what to build and measure.",
    "tags": [
      "llms-txt",
      "geo",
      "ai-agents",
      "analytics",
      "agentic-engineering"
    ],
    "featured": false,
    "alternativeHeadline": "A live audit of llms.txt, page Markdown, agent tools, crawler measurement, and GEO evidence",
    "series": {
      "id": "measurement-boundaries",
      "title": "Measurement boundaries",
      "order": 1
    },
    "url": "/does-llms-txt-work",
    "markdown": "/does-llms-txt-work.md",
    "prompts": "/does-llms-txt-work/prompts",
    "promptCount": 24
  },
  {
    "slug": "my-evals-say-it-works-i-dont-use-it",
    "title": "My Evals Say It Works. I Still Don't Reach for It.",
    "date": "2026-08-21",
    "section": "engineering",
    "description": "The ghx AI-agent reconnaissance sidecar passed a 90-episode eval at 25× compression. My usage logs show a three-day burst, then silence.",
    "tags": [
      "agentic-engineering",
      "ghx",
      "sidecar-agents",
      "evals",
      "adoption"
    ],
    "featured": false,
    "alternativeHeadline": "ghx sidecar evals, founder dogfooding, and the adoption gap",
    "series": {
      "id": "ghx-field-notes",
      "title": "ghx field notes",
      "order": 4
    },
    "url": "/my-evals-say-it-works-i-dont-use-it",
    "markdown": "/my-evals-say-it-works-i-dont-use-it.md",
    "prompts": "/my-evals-say-it-works-i-dont-use-it/prompts",
    "promptCount": 7
  },
  {
    "slug": "oss-radar-04-the-agent-multiplexer-is-becoming-a-runtime",
    "title": "OSS Radar #04: The Agent Multiplexer Is Becoming a Runtime",
    "date": "2026-08-21",
    "section": "oss-radar",
    "description": "Herdr gives coding agents durable terminal sessions, agent state, and a control API. Screen-derived semantics remain its limit.",
    "tags": [
      "oss-radar",
      "agents",
      "terminal",
      "herdr",
      "multiplexer"
    ],
    "featured": false,
    "alternativeHeadline": "Herdr turns persistent terminal panes into an agent runtime with state, control, and agent resume",
    "url": "/oss-radar-04-the-agent-multiplexer-is-becoming-a-runtime",
    "markdown": "/oss-radar-04-the-agent-multiplexer-is-becoming-a-runtime.md"
  },
  {
    "slug": "bring-your-own-ai-agent",
    "title": "Bring Your Own AI Agent Everywhere",
    "date": "2026-08-20",
    "section": "engineering",
    "description": "AgentPort lets applications attach a user-owned AI agent with scoped grants, private transport, and no new model subscription per app.",
    "tags": [
      "agentport",
      "webmcp",
      "ai-agents",
      "privacy",
      "agentic-engineering"
    ],
    "featured": false,
    "alternativeHeadline": "One private agent, one subscription, every application surface",
    "url": "/bring-your-own-ai-agent",
    "markdown": "/bring-your-own-ai-agent.md",
    "prompts": "/bring-your-own-ai-agent/prompts",
    "promptCount": 10
  },
  {
    "slug": "oss-radar-03-buzz-is-slack-on-airoids",
    "title": "OSS Radar #03: Buzz Is Slack on AIroids",
    "date": "2026-07-24",
    "section": "oss-radar",
    "description": "Buzz gives agents signed accounts and shared local compute. Delegation reliability and private code access remain unfinished.",
    "tags": [
      "oss-radar",
      "open-source",
      "agents",
      "collaboration",
      "buzz",
      "nostr"
    ],
    "featured": false,
    "alternativeHeadline": "Block gave AI agents signed accounts and shared compute in team chat",
    "lastModified": "2026-07-25",
    "url": "/oss-radar-03-buzz-is-slack-on-airoids",
    "markdown": "/oss-radar-03-buzz-is-slack-on-airoids.md"
  },
  {
    "slug": "openwiki-validates-my-bet",
    "title": "OpenWiki Validates My Bet. I Still Don't Know Where the Memory Should Live",
    "date": "2026-07-23",
    "section": "engineering",
    "description": "OpenWiki validates the main idea behind backlog-mcp. It also forces me to face three problems I have not solved: where agent memory lives, how its files read, and what to call the product.",
    "tags": [
      "backlog-mcp",
      "openwiki",
      "agent-memory",
      "context-engineering",
      "mcp"
    ],
    "featured": false,
    "alternativeHeadline": "One backlog became too large. Project homes became too many.",
    "series": {
      "id": "backlog-mcp-saga",
      "title": "The backlog-mcp saga",
      "order": 2
    },
    "url": "/openwiki-validates-my-bet",
    "markdown": "/openwiki-validates-my-bet.md"
  },
  {
    "slug": "i-am-lost-right-now",
    "title": "I Am Lost Right Now",
    "date": "2026-07-19",
    "section": "essays",
    "description": "I am the only user of my open source projects, I do not know what to build next, and I am trying not to escape into another idea.",
    "tags": [
      "personal",
      "open-source",
      "writing",
      "backlog-mcp"
    ],
    "featured": true,
    "url": "/i-am-lost-right-now",
    "markdown": "/i-am-lost-right-now.md"
  },
  {
    "slug": "one-hundred-pull-requests",
    "title": "117 Pull Requests Later, It Wasn’t a Task Manager Anymore",
    "date": "2026-07-09",
    "section": "engineering",
    "description": "The story of how backlog-mcp grew from a task manager into local-first context and memory infrastructure for AI agents — and produced the UI framework powering this blog.",
    "tags": [
      "backlog-mcp",
      "agentic-engineering",
      "agentic-product-engineering",
      "context-engineering",
      "memory-engineering",
      "nisli",
      "architecture"
    ],
    "alternativeHeadline": "How a simple task backlog became a local-first context engine, memory layer, search system, and the birthplace of the nisli UI framework",
    "series": {
      "id": "backlog-mcp-saga",
      "title": "The backlog-mcp saga",
      "order": 1
    },
    "url": "/one-hundred-pull-requests",
    "markdown": "/one-hundred-pull-requests.md",
    "prompts": "/one-hundred-pull-requests/prompts",
    "promptCount": 13
  },
  {
    "slug": "what-if-the-agent-was-better-before-we-helped",
    "title": "What If the Agent Was Better Before We Helped?",
    "date": "2026-07-05",
    "section": "engineering",
    "description": "I am building ghx, a code reconnaissance CLI for AI agents, and now an agent sidecar framework around it. The hard question is whether any of it actually improves signal per token compared to plain old gh.",
    "tags": [
      "agentic-engineering",
      "evals",
      "ghx",
      "sidecar-agents",
      "opentelemetry",
      "acp"
    ],
    "featured": false,
    "lastModified": "2026-08-21",
    "series": {
      "id": "ghx-field-notes",
      "title": "ghx field notes",
      "order": 3
    },
    "url": "/what-if-the-agent-was-better-before-we-helped",
    "markdown": "/what-if-the-agent-was-better-before-we-helped.md",
    "prompts": "/what-if-the-agent-was-better-before-we-helped/prompts",
    "promptCount": 10
  },
  {
    "slug": "i-thought-building-was-enough",
    "title": "The Builder’s Perfectionism Trap",
    "date": "2026-07-01",
    "section": "essays",
    "description": "For a decade I believed great engineering would make everything else happen automatically. I am starting to understand how toxic that was.",
    "tags": [
      "build-in-public",
      "creator",
      "perfectionism",
      "networking"
    ],
    "featured": false,
    "url": "/i-thought-building-was-enough",
    "markdown": "/i-thought-building-was-enough.md",
    "prompts": "/i-thought-building-was-enough/prompts",
    "promptCount": 6
  },
  {
    "slug": "linux-signal-stack-conflict",
    "title": "One bitmask in task_struct: how a 10-line kernel patch resolves 15 years of multi-runtime signal conflicts on Linux",
    "date": "2026-05-21",
    "section": "engineering",
    "description": "SA_ONSTACK is process-wide. sigaltstack is per-thread. When Go, Bun, .NET, and the JVM share a process, signals land on the wrong stack. One kernel field fixes the class.",
    "tags": [
      "linux-kernel",
      "signals",
      "go",
      "bun",
      "wasm",
      "systems-architecture",
      "posix"
    ],
    "featured": false,
    "url": "/linux-signal-stack-conflict",
    "markdown": "/linux-signal-stack-conflict.md"
  },
  {
    "slug": "life-as-background-music",
    "title": "Life as Background Music",
    "date": "2026-04-22",
    "section": "essays",
    "description": "On realizing how easy it is to like things, want things, even feel things, and still keep them safely in the background.",
    "tags": [
      "essay",
      "life",
      "attention",
      "indifference"
    ],
    "featured": false,
    "url": "/life-as-background-music",
    "markdown": "/life-as-background-music.md",
    "prompts": "/life-as-background-music/prompts",
    "promptCount": 9
  },
  {
    "slug": "you-dont-need-codemap",
    "title": "You Don't Always Need Codemap",
    "date": "2026-04-17",
    "section": "engineering",
    "description": "Codemap, Aider, Gitingest, Repomix, and ghx solve different parts of agent code context: mapping, searching, packing, and deciding what to read before cloning.",
    "tags": [
      "ghx",
      "code-mapping",
      "context-engineering",
      "open-source",
      "agentic-engineering"
    ],
    "alternativeHeadline": "ghx, repo maps, repo packing, and agent code search",
    "lastModified": "2026-04-26",
    "series": {
      "id": "ghx-field-notes",
      "title": "ghx field notes",
      "order": 2
    },
    "url": "/you-dont-need-codemap",
    "markdown": "/you-dont-need-codemap.md"
  },
  {
    "slug": "oss-radar-02-the-toolchain-is-the-moat",
    "title": "OSS Radar #02: The Toolchain Is the Moat",
    "date": "2026-04-12",
    "section": "oss-radar",
    "description": "How the Astral acquisition reveals the real war being fought in AI coding — and why everyone is talking about the wrong thing.",
    "tags": [
      "oss-radar",
      "open-source",
      "python",
      "ai-tooling",
      "rust",
      "astral",
      "uv"
    ],
    "url": "/oss-radar-02-the-toolchain-is-the-moat",
    "markdown": "/oss-radar-02-the-toolchain-is-the-moat.md"
  },
  {
    "slug": "procrastination-is-a-craft-youve-been-mastering-your-entire-life",
    "title": "Procrastination Is a Craft You've Been Mastering Your Entire Life",
    "date": "2026-04-07",
    "section": "essays",
    "description": "Every article you've ever read told you procrastination is the enemy. A flaw to fix. A habit to break. I spent 30 years believing that. Turns out, I had it completely backwards.",
    "tags": [
      "personal-essay",
      "adhd",
      "procrastination",
      "eisenhower-matrix"
    ],
    "url": "/procrastination-is-a-craft-youve-been-mastering-your-entire-life",
    "markdown": "/procrastination-is-a-craft-youve-been-mastering-your-entire-life.md"
  },
  {
    "slug": "topologies-of-thoughts",
    "title": "Topologies of Thoughts",
    "date": "2026-03-31",
    "section": "engineering",
    "description": "On Kat Zhang's obsidian note network, the GitHub ecosystem around it, and what graph neuroscience says about the shape of minds",
    "tags": [
      "research",
      "knowledge-graphs",
      "neuroscience",
      "obsidian",
      "embeddings"
    ],
    "url": "/topologies-of-thoughts",
    "markdown": "/topologies-of-thoughts.md"
  },
  {
    "slug": "how-ghx-was-born",
    "title": "Build the GitHub Exploration Tool, No Mistakes",
    "date": "2026-03-29",
    "section": "engineering",
    "description": "A CLI tool that looks simple took 23 agent sessions, 2,500+ turns, and three rewrites. This is what building with AI actually looks like.",
    "tags": [
      "ghx",
      "agentic-engineering",
      "open-source",
      "build-in-public",
      "context-engineering"
    ],
    "featured": false,
    "series": {
      "id": "ghx-field-notes",
      "title": "ghx field notes",
      "order": 1
    },
    "url": "/how-ghx-was-born",
    "markdown": "/how-ghx-was-born.md",
    "prompts": "/how-ghx-was-born/prompts",
    "promptCount": 37
  },
  {
    "slug": "oss-radar-01-vercel-winter-2026-cohort",
    "title": "OSS Radar #01: Vercel's Winter 2026 Cohort",
    "date": "2026-03-19",
    "section": "oss-radar",
    "description": "A new series: I find a source, go through it, distill what's worth your time, and tell you what I actually think. First up — Vercel's Open Source Program Winter 2026 cohort.",
    "tags": [
      "oss-radar",
      "open-source",
      "vercel",
      "research",
      "distillation"
    ],
    "featured": false,
    "url": "/oss-radar-01-vercel-winter-2026-cohort",
    "markdown": "/oss-radar-01-vercel-winter-2026-cohort.md"
  },
  {
    "slug": "the-agentic-product-engineer",
    "title": "The Agentic Product Engineer",
    "date": "2026-03-05",
    "section": "engineering",
    "description": "Software engineering isn't going away — writing code without agents is. The role is expanding, not shrinking. Here's what that actually means.",
    "tags": [
      "agentic-product-engineering",
      "context-engineering",
      "nisli",
      "backlog-mcp"
    ],
    "featured": false,
    "url": "/the-agentic-product-engineer",
    "markdown": "/the-agentic-product-engineer.md",
    "prompts": "/the-agentic-product-engineer/prompts",
    "promptCount": 17
  }
]