Fixing SQLite "database is locked" When Many Scheduled Jobs Share One FileYou have a self-hosted agent in one container. Several fetchers run on their own schedules, a scoring job reads what they collect, and everything lands in one SQLite file. It works in testing. Then twOct 10 · 7 min readcraigsolomon.hashnode.dev
Least-Privilege AI Agents: Keep Publishing Keys Out of the Drafting ProcessAn AI agent's permissions are whatever its process can reach. Your system prompt has no say in that. If the publishing token for your blog or social account is in the agent's environment, the agent caOct 9 · 7 min readcraigsolomon.hashnode.dev
How to Make an MCP Database Tool Read-Only in Python With SQLiteI built an MCP server with a query_database tool. The design decision that took the most thought was to reject a query before it runs. Catching it afterwards was never the plan. When you give a model Oct 8 · 7 min readcraigsolomon.hashnode.dev
How to Detect Competitor Pricing Page Changes in Python Without False AlarmsTo find out when a competitor changes their pricing page, fetch the page on a schedule, reduce it to its visible text, store that text, and diff it against the last snapshot. The diff is easy. The har1OOct 8 · 6 min readcraigsolomon.hashnode.dev
How to Write Pluggable Drafters for a Scheduled Claude Agent in PythonA drafter is the part of a content agent that decides what to ask the model. It might read release notes, a docs folder or a list of topics, and then build a prompt from what it finds. If you write ea1IOct 6 · 6 min readcraigsolomon.hashnode.dev