Writing

Blog

Just some thoughts.

Glossary

Every technical term on this site, defined. Hover any teal term in a blog post to see its definition; this page collects them all in one place.

meta

Moving File Writes Out of Claude Code Hooks, and Four Other Patterns

Hooks that wrote my daily note hit races and schema errors. Make them append and POST, let a server write. Plus path guard, MCP stdout, SuiteQL paging, dedupe.

buildstoolsmeta

Adding Line Numbers to an NSTextView in SwiftUI Without NSRulerView

An NSRulerView left a SwiftUI-hosted NSTextView blank. Draw the numbers in lineFragmentPadding instead, then restore the scroll settings.

buildstools

Tracking Claude Code Sessions With Two Hooks and a JSONL Buffer

Log Claude Code tool calls: a PostToolUse hook buffers JSONL, a Stop hook posts it to a local server. The code, and two bugs that made the flush send nothing.

buildstools

Turning Claude Code Sessions Into Skills and Vault Notes

Fixes found in a Claude Code session vanish when it ends. A prompt hook, two extraction skills, an Obsidian vault and a stateless CLI keep them.

buildstools

Claude Code in VS Code Ignores bypassPermissions Without a Third Key

Both VS Code bypass settings set, permission prompts anyway. Add skipDangerousModePermissionPrompt, top level, to ~/.claude/settings.json and quit VS Code.

tools

Replacing Dia's New Tab Page by Intercepting chrome://start-page/

In February 2026 Dia ignored chrome_url_overrides.newtab and opened chrome://start-page/ instead. Redirect that URL from a tabs.onUpdated listener.

buildstools

Setting the vaultctl Vault Path Once, and Stopping gray-matter Rewriting Dates as Timestamps

vaultctl config set saves the vault path where agents and cron can find it. Writing frontmatter with gray-matter turns untouched dates into ISO timestamps.

buildstools

LazyLibrarian Overwrites config.ini Edits on Shutdown: Use writeCFG

Edit LazyLibrarian's config.ini while it runs and the next docker stop writes over it. Stop the container first, or change values with the writeCFG API.

toolsbuilds

Building a D&D Dungeon Master in Claude Code That Looks Up Every Number

A Claude Code skill that runs D&D 5e: rules looked up, never guessed, state in JSON files, outcomes decided before the roll, narration in the background.

buildstools

Scheduling Gemini CLI Prompts With Cron and a Wrapper Script

gemini -p works in a terminal and prints nothing under cron: a minimal PATH and no API key. The wrapper that fixes it, then the macOS and quota traps.

buildstools

Adding Umami to Next.js Without the CSP Blocking It

Umami is one Script tag in Next.js. A strict CSP lets it load, then silently blocks its beacon. Allow gateway.umami.is in connect-src and check the network tab.

metatools

Replacing an Obsidian MCP Server With a Stateless CLI

Issue #9176: an Obsidian MCP server dies with BrokenPipeError in Claude Code CLI, closed without a fix. A CLI that reads the vault and exits does the job.

buildstoolsthoughts

Building Analytics Inside NetSuite With an Iframe Loader and N/llm

A Suitelet that loads six saved searches takes about a minute. Serve a spinner and an iframe first, ship the data as inline JSON, send N/llm monthly values.

buildsrevopstools

next-mdx-remote 6 Deletes Braces From Your Prose

A Next.js 16 MDX blog on Vercel, and five things that broke with no error: braces, tables, Resend sends, a deleted env var and the CSP.

buildsnext.jsmeta