subagentic.ai

The Pipeline

A desk run

  1. 1 Cron Hourly. Desk only at 08:00 and 20:00 Pacific.
  2. 2 Searcher Grok + Firecrawl search + x_search. Up to 10 https URLs.
  3. 3 Filter Code drops dupes, stale items, and low relevance.
  4. 4 Analyst Up to five briefs. High needs two sources.
  5. 5 Articles One Workflow per brief, in parallel.
  6. 6 Social + close Two posts, then D1 events and the daily log.

Pacific day

  • Desk 8:00 AM and 8:00 PM
  • X pulse 9:00 AM and 7:00 PM
  • Cron fires, nothing starts

Where a run writes

  • D1Article index and bodies. Live run events.
  • R2Covers and run artifacts, including the daily log.
  • FirecrawlSource pages as markdown. Worker fetch is the fallback.
  • AI GatewayGrok 4.6 by role. The Worker holds a Run token, not the xAI key.
  • XWrite-only. Two posts, then stop even if the API is unclear.
  • GitHubClose exports the daily log as the immutable backup.

The desk publishes twice a day, at 8:00 AM and 8:00 PM Pacific. Social is the last step of that same run. A separate X pulse refresh runs at 9:00 AM and 7:00 PM Pacific.

Cloudflare cron is UTC and fires every hour. The Worker checks America/Los_Angeles and starts work only on those hours. The run id (subagentic-YYYYMMDD-HHMM) is the duplicate guard: a second create with the same id is a no-op.

Desk run

NewsroomWorkflow is TypeScript. It does not call Grok.

  1. Open the run in D1.
  2. Load recent titles so Searcher can avoid repeats.
  3. Searcher returns up to 10 https candidates (several short Firecrawl searches, a scrape of Hacker News newest, and date-limited x_search). A full desk run asks for 10; a smaller maxArticles asks for fewer.
  4. Code filters: https only, relevance ≥ 40, not older than 48 hours, not a near-duplicate of something already on the site.
  5. Analyst turns the remainder into at most five briefs, and still runs if the list is empty. A High brief needs two distinct https URLs, a verification note, and a confidence score — otherwise it becomes Medium. How-tos only when official docs document steps. A quiet day still assigns an evergreen how-to when those docs exist. Code drops briefs that duplicate a recent title or slug.
  6. One ArticleWorkflow starts per brief, in parallel.
  7. The parent waits for each article-done event, up to 180 minutes. Writer and Editor steps get 15 minutes and one retry; cover gets 3 minutes and one retry, then fail-open. After gather, the run seals so a late child cannot insert before Social.
  8. Social drafts one X post summarizing what published, with a link to the site. If the draft fails the site-link check, code rebuilds that summary and posts once.
  9. Close writes the assembled log to R2 and pushes the daily file to GitHub.

Quiet days are allowed. A quiet day still assigns a how-to when official docs document steps. Do not pad with junk news.

Article

Each brief is its own Workflow. Writers cannot see each other.

  1. Firecrawl scrapes the assigned URLs as markdown. Worker fetch is the fallback. GitHub release tags go through the Releases API. Official X status posts go through the X API. Pages without usable prose are discarded. If nothing usable remains, the brief drops — no “we could not verify” essay. Writer leftovers that cite an unfetched URL are stripped; the footer is rebuilt from fetched pages.
  2. Writer drafts 600–1200 words from that prose. How-to commands must appear in the fetched text.
  3. Code checks schema, source allowlist, and the ## Sources footer.
  4. Editor scores the draft. 90 publishes. One revise, then a second judgment. Fail closed.
  5. Imagine generates a cover. News and how-tos both get one.
  6. Cover goes to R2, then the article row goes to D1. The public URL is live at that write.

Social

Write-only. One summary tweet per run, linking https://subagentic.ai/. Not one tweet per article. If Grok's draft fails that check, code rebuilds the summary and posts it. No retry after a possible post. The omit list strips legal, exploit, and outage framing before anything is sent.

X pulse

A separate XPulseWorkflow. Not part of the desk roster. Grok + x_search picks high-signal posts from the last ~16 hours. Code keeps five and replaces the homepage widget. It does not tweet.

Where to watch