Skip to main content
A real pipeline assembled entirely from the patterns in this section — a daily competitive-intelligence job whose only moving part on a machine you own is the scraper.
  1. 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.
  2. Store (arg upload). An upload-to-arg.ts step pushes the scored digest-<date>.json and report-<date>.html into the workspace via arg upload — byte-exact, and every upload is versioned, so re-running the job the same day keeps full history under one filename.
  3. React (automations). A deployed .automation watches **/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-change trigger 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.
The shape generalises: recurring job → file in the workspace → .automation reacts → external delivery. Swap the social scrape for a CRM export or an API pull, swap Slack for email, and the architecture holds.