---
title: "Craig Solomon (@craigsolomon) | Hashnode"
description: "Founder, Fulcrum Enterprises — Building the Foundation for an AI Driven Future. Read the latest articles by Craig Solomon on Hashnode."
url: "https://hashnode.com/@craigsolomon"
---

@craigsolomon

# Craig Solomon

@craigsolomon · Florida · Joined April 2026

Founder, Fulcrum Enterprises — Building the Foundation for an AI Driven Future

[Website](https://fulcrumenterprises.tech/)

### [Fixing SQLite "database is locked" When Many Scheduled Jobs Share One File](https://craigsolomon.hashnode.dev/sqlite-database-is-locked-scheduled-jobs-python?utm_source=hashnode&utm_medium=feed)

Run many scheduled Python jobs against one SQLite file without lock errors: WAL mode, BEGIN IMMEDIATE, short writes and idempotent inserts.

7 min read · [craigsolomon.hashnode.dev](https://craigsolomon.hashnode.dev/sqlite-database-is-locked-scheduled-jobs-python?utm_source=hashnode&utm_medium=feed)

[Oct 10](https://hashnode.com/posts/sqlite-database-is-locked-scheduled-jobs-python/6acab3e56fd21317d56b4f0e)

### [Least-Privilege AI Agents: Keep Publishing Keys Out of the Drafting Process](https://craigsolomon.hashnode.dev/least-privilege-ai-agent-publishing-credentials?utm_source=hashnode&utm_medium=feed)

Keep publishing credentials out of your AI drafting agent's container, and trigger publishing from a human click instead of a status column.

7 min read · [craigsolomon.hashnode.dev](https://craigsolomon.hashnode.dev/least-privilege-ai-agent-publishing-credentials?utm_source=hashnode&utm_medium=feed)

[Oct 9](https://hashnode.com/posts/least-privilege-ai-agent-publishing-credentials/6ac917945e9fe41e3e6dd2d6)

### [How to Make an MCP Database Tool Read-Only in Python With SQLite](https://craigsolomon.hashnode.dev/mcp-database-tool-read-only-sql-guard-python?utm_source=hashnode&utm_medium=feed)

Stop an MCP query tool from running writes or stacked statements, using a text guard plus engine-level read-only enforcement in Python.

7 min read · [craigsolomon.hashnode.dev](https://craigsolomon.hashnode.dev/mcp-database-tool-read-only-sql-guard-python?utm_source=hashnode&utm_medium=feed)

[Oct 8](https://hashnode.com/posts/mcp-database-tool-read-only-sql-guard-python/6ac810198ce037768cc97fc6)

### [How to Detect Competitor Pricing Page Changes in Python Without False Alarms](https://craigsolomon.hashnode.dev/detect-competitor-pricing-page-changes-python?utm_source=hashnode&utm_medium=feed)

Fetch a pricing page, normalize it, store it in SQLite and diff it, while filtering the noise that makes naive page watchers fire on every run.

6 min read · [craigsolomon.hashnode.dev](https://craigsolomon.hashnode.dev/detect-competitor-pricing-page-changes-python?utm_source=hashnode&utm_medium=feed)

[1](https://hashnode.com/posts/detect-competitor-pricing-page-changes-python/6ac80f5d44cfc905740cf803) [Oct 8](https://hashnode.com/posts/detect-competitor-pricing-page-changes-python/6ac80f5d44cfc905740cf803)

### [How to Write Pluggable Drafters for a Scheduled Claude Agent in Python](https://craigsolomon.hashnode.dev/pluggable-drafters-scheduled-claude-agent-python?utm_source=hashnode&utm_medium=feed)

Write drafters for a scheduled Claude agent as plain Python functions with no publish access, registered with APScheduler and tested offline.

6 min read · [craigsolomon.hashnode.dev](https://craigsolomon.hashnode.dev/pluggable-drafters-scheduled-claude-agent-python?utm_source=hashnode&utm_medium=feed)

[1](https://hashnode.com/posts/pluggable-drafters-scheduled-claude-agent-python/6ac44d4af427172dd5fcdfff) [Oct 6](https://hashnode.com/posts/pluggable-drafters-scheduled-claude-agent-python/6ac44d4af427172dd5fcdfff)
