Thoughts on AI Safety
A cautious, nuanced case for AI optimism: why safety, interpretability, bias, and alignment matter as much as raw capability.
Steve Kinney is a software engineer, educator, and engineering leader in Denver, Colorado, with deep experience in AI systems, developer tools, and frontend architecture.
A cautious, nuanced case for AI optimism: why safety, interpretability, bias, and alignment matter as much as raw capability.
I wired OpenAI's Codex into Claude Code as a consulting subagent—a different training lineage I can tap for architecture calls, stuck bugs, and security reviews. Here's how the `codex-advisor` agent works and why it isn't actually an MCP server anymore.
The follow-up to my Codex-as-advisor setup. Same second model family, opposite stance: instead of asking Codex for an opinion, I hand it the implementation, let it work in an isolated worktree, and run an approval loop where I own the diff and Codex never gets to commit.
How I use sentinel files to gate the risky moves my coding agents make—exiting plan mode, opening a pull request, addressing review feedback, backing off a rate-limited model. The whole mechanism is a file on disk and a hook that checks for it.
Ultraplan hands the planning phase of a coding task off to a Claude Code on the web session running in plan mode, then lets you review it in the browser and decide where to execute. Here's what it actually changes about your workflow, what it costs, and where the sharp edges are.
Playwright and Chrome DevTools both ship official tools for letting AI agents drive a browser, but they're optimized for different jobs. Here's how Playwright CLI, Playwright MCP, and Chrome DevTools MCP actually fit together, and how to pick between them without guessing.
A while-true loop, a prompt file, and a clean context window on every iteration. The Ralph Loop is the dumbest-sounding technique that actually works—and the reason it works will change how you think about programming LLMs.
The old short-term/long-term taxonomy doesn't capture what modern agent memory systems actually do. A new three-axis framework—Forms, Functions, and Dynamics—maps the design space from flat vector stores to RL-driven memory management. Here's what the research says and what you can build today.
Temporal shipped one of the first major infrastructure vendor agent skills. The diagnosis is right and the architecture is sound. The execution has some fixable gaps.
Every major AI agent runs the same core loop. The 6-line version is easy. The production-hardened version—with context compaction, loop detection, cost budgets, and graceful termination—is where things get interesting.
Agent skills are not a new capability—they're a context management strategy. Their value comes from routing and progressive disclosure, not from smarter prompts.
A deep technical walkthrough of what it takes to design a build system that securely executes arbitrary customer repositories and turns build output into deployable artifacts—covering the pipeline, the security model, the architecture, and the operational realities.
A two-layer architecture for production AI systems: a gateway that abstracts providers, enforces policies, and tracks costs, paired with a durable workflow engine that makes long-running agentic tasks survive failures, pause for human approval, and replay deterministically.
MCP servers return data. MCP Apps let them ship a UI alongside that data—so the tool author, not the client, decides how results look.
A walkthrough of the system I use to ship code with AI agents—from planning in Linear to worktrees, linting gauntlets, and a small army of code review bots.
A drop-in replacement for @temporalio/worker's bundleWorkflowCode that swaps Webpack for esbuild—delivering 9–11x faster builds and 94% less memory usage.
A practical guide to writing reliable prompts across the major LLM APIs—covering core techniques, where the providers actually diverge, trust boundaries, and two production workflows built from brittle to hardened.
A little TypeScript library for building Markdown-friendly strings without template literal sprawl.
Essential guidelines and best practices for writing reliable Temporal workflows in TypeScript, covering serialization, determinism, and workflow patterns.
A collection of some potentially useful Cursor rules as well as a rundown of what potentially makes a Cursor rule great.
Build scalable, cost-efficient AI processing with Anthropic's Message Batches API and Temporal workflows.
Exploring the pitfalls of counterfactual reasoning in AI, highlighting its fragility, chaotic nature, and alignment with Nassim Taleb's critique of prediction in complex systems.
A naïve guide to get the most out of GPT-4.1: context window optimization, coding tips, prompt best practices, and when to choose GPT-4.1 over GPT-4.5.
A friendly intro to neural networks, what they are, how they learn, and why they matter for software engineers exploring the world of generative AI.
In which we learn how to build a simple vector database using Pinecone and OpenAI embeddings, and discover it was way easier than we might have expected.
A brief guide for getting started writing Python on a Mac using virtual environments.
A gentle walkthrough where we build our take on Obsidian's callout component in Svelte.
Is Tailwind the best choice when building out a design system? It depends.
Let's look at how to write our own preprocessor for SvelteKit.
Let's learn a little bit about what generics are in TypeScript, why they're useful, and how to use them.
Svelte stores simplify state management across components. Let's learn how they're implemented.