Five SQLite tables handle scheduling, state, and evidence
Agent Fleet Manager at commit f35f1ec is a 581-line bookkeeping engine built around five SQLite tables. A source stores a route, cadence, next due time, previous content hash, and error streak. Actions move through queued, leased, running, done, or failed states. Batches give work to a worker, observations record what came back, and the change log names the actor and reason behind each canonical write.
That narrow model is the project. It does not choose an agent, understand a web page, compare semantic meaning, or send an alert. A route can be a URL, command, API query, or natural-language instruction because the engine treats it as an opaque string. This separation works well if you already know how the work should run and need one place to answer which sources are due, which changed, and which failed.
What happened when we ran it
Our fresh Debian sandbox at commit f35f1ec installed 35 packages in 7 seconds, taking 37 MB on disk. The build completed in 1 second. Pytest then passed all 7 tests in 2 seconds, with 0 failures, and pip-audit reported 0 known vulnerabilities. The container had 3 CPUs, 8 GB of RAM, no secrets, and no elevated privileges.
The checkout contained 11 files, about 581 lines of source, and measured 0 MB at the repository scale used by our harness. We found a tests directory, no Dockerfile, and 0 CI workflow files. These figures show that the code is quick to inspect and its local checks pass. They do not measure fetch throughput, SQLite contention, worker concurrency, or how an LLM behaves on a real route.
The 30-second HTTP sweep is sequential
The included HTTP executor gives each request a 30-second timeout, reads the whole response, and returns its bytes for hashing. The sweep command queues due sources, leases batches of 10 by default, then runs and reconciles each batch in a loop. That is enough for a cron-driven page checker. It is not parallel fleet execution, despite the project name.
External workers are possible through a small manifest contract. Your dispatcher calls lease(), sends each action to an agent, container, or remote machine, and places one JSON result file per action in the assigned directory. The README explains the fields clearly. No broker, worker process, authentication layer, or remote transport is included, so the difficult operational part of a distributed fleet still belongs to the adopter.
A write-scope directory is a contract, not a sandbox
Each leased batch receives one write-scope directory, and reconciliation is the only path that copies a worker result into the five canonical tables. That design limits the damage from a malformed result and makes every accepted change visible in the ledger. A missing result file becomes a failed action rather than disappearing from the run.
The boundary is enforced by convention inside the 581-line library. Agent Fleet Manager creates the directory, but it does not apply operating-system permissions, start an unprivileged container, or stop an external worker from touching another path. If you run untrusted code or grant an LLM shell access, use a real sandbox around it. The write scope gives the worker a clean protocol; it does not take authority away from the process.
Three attempts and a 16x cap cover simple failures
A failed action is retried up to 3 attempts. The next due time backs off by the source cadence multiplied by powers of two, capped at 16 times the cadence. Successful content is hashed with SHA-256, and the next observation is marked changed when its hash differs. This is plain, inspectable behavior for periodic checks where any byte-level change matters.
There are limits to that simplicity. A caller must invoke reconciliation after a worker stops; otherwise an external action can remain leased because the schema has no lease deadline. Hashing also treats a rotating timestamp or advertisement as a full change. Teams watching noisy pages will need normalization or semantic comparison inside their executor before it returns content to the engine.
Seven tests cover the state machine, not production operation
The 7 tests exercise successful runs, due-time gating, duplicate in-flight prevention, hash changes, retry failure, separate write scopes, and actor labels in the change log. All 7 passed in our sandbox. There is no test for the OpenTelemetry exporter, concurrent schedulers, corrupted result JSON, or recovery after a process dies between leasing and reconciliation. With 0 CI workflows, GitHub does not show those tests running automatically.
GitHub listed 146 stars, 0 forks, and 0 open issues or pull requests on September 26, 2026. The last push was September 2, the repository's first 7 commits arrived within roughly 3 days, and there was no published release. That is evidence of a young, quiet project rather than an abandoned one. It also leaves little public history for judging upgrades, bug response, or compatibility.
Pick 581 readable lines when you want to own the rest
A 7-second install and 581 source lines make Agent Fleet Manager a sensible starting point for one developer building a trusted monitoring loop. The Apache-2.0 license, SQLite ledger, retry rules, receipts, and OTLP export are useful pieces. You can understand the entire control path before wiring it into a scheduled job.
Use changedetection.io when page monitoring and alerts are the product. Choose Huginn when people need a browser interface for connected monitoring agents, or Prefect when jobs must be deployed and observed across machines. Agent Fleet Manager earns its place below those systems: one process, one database, and a worker contract you are willing to implement and secure yourself.

