The FinField knitting agents: every ready finscrapers source runs unattended — fetch, derive the smart layer, sign, publish — on a schedule, from one config.
Why an agent fleet instead of a batch job: the field converges P2P, so what matters is that every node emits deterministic records. Each source is its own agent with its own key (a bad feed can be down-weighted or revoked without touching the rest), each agent walks the entity pool — the 20,000+ equity universe plus the crypto core — round-robin from a persisted cursor, and two nodes starting from the same state fetch the same entities in the same order. No floats, no timestamps in record bytes, no randomness anywhere in the output path.
With the pulse runtime installed, facts are woven through finknit and the signed, attested records join the same web humans knit into and vote on. Without it, agents only spool invariant-checked unsigned drafts locally — the relay accepts signed records only, and the runner refuses to point drafts at it.
pip install "finagents @ git+https://github.com/FinField/agents" # pulls finfacts, finscrapers, finknit
# optional — signing + P2P publishing:
pip install "knitweb @ git+https://github.com/knitweb/pulse"finagents once --limit 5 # one pass, 5 entities per source, summary JSON
finagents once --source stooq-eod # a single agent
finagents status # config + cursors + spool line counts
finagents serve # loop forever (what the systemd unit runs)from finagents import AgentsConfig, run_once
print(run_once(AgentsConfig(batch=5)))
# {"coingecko-market": {"entities": 5, "facts": ..., "derived": ..., "published": ...}, ...}Running a node (venv, config, systemd unit, key handling) is four short steps: see deploy/README.md for the concrete 5mart.ml/finfield walkthrough.
Part of the FinField field: facts · scrapers · knit · signals · crypto