- Produce, locally (agent loop + Playwright). A daily job drives a real, logged-in Chrome profile to scrape a social feed. An agent scores each item against a rubric, and a renderer turns the scored data into a branded HTML report. The browser stays local because it needs real session cookies.
- Store (
arg upload). Anupload-to-arg.tsstep pushes the scoreddigest-<date>.jsonandreport-<date>.htmlinto the workspace viaarg upload— byte-exact, and every upload is versioned, so re-running the job the same day keeps full history under one filename. - React (automations). A deployed
.automationwatches**/report-*.html. When the report lands, a Python code node reads the sibling digest, builds a Slack-formatted briefing deterministically, and an http-request node POSTs it onward — the team gets the briefing without anyone opening arg.
What this removes
- No database. The workspace is the store — versioned, member-accessible by deep link (
https://arg.ai/files/workspace/<id>/file/<path>). - No file server. Reports are workspace files; teammates open the deep link.
- No cron host for the reaction. The
file-changetrigger is the schedule — “a report landed” is a first-class event. - One inspectable artifact. The automation is a single JSON file living next to the data it reacts to — diffable, uploadable, and generatable from a script.
.automation reacts → external delivery. Swap the social scrape for a CRM export or an API pull, swap Slack for email, and the architecture holds.