RSSAmplifier

Blog

Antisimplistic

Thoughts on AI-assisted development, tools, and the craft of teaching with code

antisimplistic.comRSS feed ↗14 posts

Latest posts

TIB (Today I Built): secretpath

I kept rebuilding the same little secret resolver. The first version was not a package. It was just a helper tucked into whatever script needed it that week. Try 1Password first. If that fails, try an environment variable. Do not print the token. Do not write it to disk. Report enough provenance that I can see whether a command used op or an env var, but never report the value. This grew out of…

TIL: Inspect Codex Context with prompt-input

The Problem I recently spent a few minutes trying to figure out whether Codex was reading a global AGENTS.md instruction. That debugging path was not very interesting by itself. The useful thing I learned was that Codex has a command for inspecting the exact prompt input it assembles before a session starts. That is valuable beyond this one problem. When working with agentic coding tools, a lot of…

Nobody’s Coming to Save Your Dependencies

A follow-up to TIL: uv Settings I Changed after LiteLLM . After my last post, a couple of commenters pushed back on recommendation 2 - the constraint-dependencies entry blocking litellm 1.82.7 and 1.82.8. The argument, paraphrased: PyPI pulled those versions, so they’re no longer installable. The constraint is unnecessary work defending against something that can’t happen. I appreciate their…

TIL: uv Settings I Changed after LiteLLM

This article was updated on 3/29/26 to correct an error in the second recommendation and to cross-link it to another article elaborating on my justification for the same. The Problem On March 24, 2026, an attacker ( TeamPCP ) compromised the CI/CD pipeline of litellm , a popular Python LLM proxy library with ~3.4 million daily downloads. They stole the PyPI publishing token via a poisoned Trivy…

tmux Scroll Alert: Know When New Output Arrives While You’re Scrolled Back

The Problem You’re running something in tmux — a build, a test suite, an agent CLI. While it’s working, you scroll back to review earlier output. The yellow copy-mode indicator appears, you find what you’re looking for, and then… you sit there. Waiting. The command finished two minutes ago, but you’re staring at frozen scrollback with no way to know. This happens to me regularly with agent CLIs…

TIL: 1Password CLI for Developer Secrets

The Problem I had a file called r2vars in a project root with plaintext Cloudflare R2 credentials: export R2_ACCOUNT_ID = abc123 export R2_ACCESS_KEY_ID = def456 export R2_SECRET_ACCESS_KEY = ghi789 export STORAGE_BACKEND = r2 Plaintext secrets, BAD! 😖 Scripts referenced it as source r2vars && uv run python scripts/some_script.py . It worked, but the file was a liability - one bad .gitignore away…

A Controlled Python Environment for Claude Code

The Problem When Claude Code needs Python for ad-hoc tasks (e.g., parsing Excel files, reading PDFs, quick data analysis) it uses whatever Python is available. This can cause issues: No isolation: packages installed to user site-packages Version uncertainty: using whatever Python happened to be installed Dependency conflicts: risk of polluting project-specific environments Ambiguity: no clear…

Claude Code Permissions and Sandboxing

I’ve had “configure Claude Code permissions properly” on my list for a while. The defaults work, but every session starts with a flurry of “allow this?” prompts. I wanted less babysitting and more security - and it turns out those aren’t opposed. You just have to understand how the pieces fit together. The Three Layers Claude Code has three layers of access control: Permission rules These let you…

TIL: Claude Code’s Instruction Mechanisms

The Problem I had a growing markdown style guide in my CLAUDE.md that was bloating my main config. Every session loaded 50+ lines of formatting rules that only mattered when editing .md or .qmd files. I needed a better home for it. Claude Code has four mechanisms for giving it instructions: CLAUDE.md , skills, rules, and hooks. It also has agents (isolated task workers) and MCP servers (external…

TIL: direnv for Project-Specific Secrets

The Problem I needed an ADMIN_TOKEN available in my terminal for production monitoring commands. I didn’t want to: Export it inline before each command (clumsy, exposes secrets in LLM chat histories) Write wrapper scripts/aliases that set it (adds complexity) Set it globally in ~/.zshrc (always loaded, pollutes environment) Store it in .env (unused until explicitly loaded by an application or…

TIL: Jupytext + MyST for MD ↔︎ Jupyter Notebooks

The Problem I leverage LLMs like Claude and Cursor when generating lecture materials. They accelerate my work and help improve the end product with better sample code, etc. But all of those tools still struggle when creating / editing Jupyter notebooks, which is my medium of choice for this work. They can do it, but it is often a slow, cumbersome, more error-prone process. They sometimes resort to…

Clean TeX Setup on macOS

Context I regularly use Quarto and pandoc for converting markdown to PDF, but just got a new Mac. Time to set up the TeX ecosystem properly from scratch. Installing BasicTeX brew install --cask basictex Why BasicTeX instead of MacTeX? Size: ~90MB vs 4GB Sufficient: provides the TeX engines and package manager needed for pandoc/Quarto Focused: avoids GUI apps and specialized packages I don’t need…

TIL: Decktape for High-Quality PDF Exports from Reveal.js

The Problem I needed PDF versions of my Reveal.js slide decks - for student handouts and accessibility. The slides look great in the browser, but getting them into PDF is surprisingly painful. Reveal.js has a built-in export: append ?print-pdf to the URL, then use Chrome’s print dialog. In practice, this means manually setting landscape orientation, zero margins, and enabling background graphics…

Why Antisimplistic

Why Antisimplistic I’ve been using this handle for almost 30 years. It emerged from frustration - the productive kind. I was working with my business partner and friend. 1 Our roles boiled down to this: he was business development, I was production. Classic setup, familiar tension. He’d make promises; I’d have to figure out how to keep them. When I’d explain why something was harder than it…