A daily brief from the AI frontier.
An autonomous AI news desk that researches the day's most important AI stories, writes a sharp 5-item brief, designs a social poster, and publishes the web edition. It also includes GitHub Actions delivery paths for LINE and Instagram when their secrets are configured and their workflows complete successfully.
FrontBrief.AI is an automated AI newsroom run by a daily Codex automation. Once a day it operates like a small news startup's AI desk:
- π Researches the last 24β48h of high-quality AI sources across four beats
- ποΈ Writes a 5-item brief β importance-first, with an investment angle and a Money Map
- π¨ Duplicates the locked Canva parent poster, preserving its typography and brand system
- π€ Publishes the web edition; GitHub Actions can deliver the configured LINE digest and Instagram post after their required secrets are set and their workflows succeed
It's built for people who want a concise, high-signal view of the AI world: frontier models, infrastructure, research, startups, adoption, policy, and selected deeptech angles.
Not financial advice. Every "investment angle" is directional signal only β no price targets, no buy/sell calls, no live prices.
Every brief ships with a poster for the single most feed-worthy story of the day (which may differ from the lead article). A few recent editions:
![]() Chips coming for Nvidia |
![]() AI 'actor' lands a role |
![]() A robot played the World Cup |
![]() AI drone maker raises $1.2B |
30+ posters live in
social/poster/β seeindex.mdfor the full run log.
Codex automation β daily 05:00 Europe/London (the Editor-in-Chief)
ββ Stage 1 Research pod β 4 parallel beat reporters
β (Models & Products Β· Money & Markets Β· Deeptech/Research/People Β· Buzz/Trending)
ββ Stage 2 Assignment Editor β dedupes + scores on IMPORTANCE and ENGAGEMENT separately
ββ Stage 3 Audience/Social Editor β picks the engagement-first poster story + creative brief
ββ Stage 4 Producer/Writer β writes the article, LINE digest, and IG caption
ββ Stage 5 EIC final pass β QA, duplicates/edits/exports the Canva parent, updates the ledger, ships
ββ articles/YYYY-MM-DD-ai-brief.md (brief + LINE digest + web edition)
ββ social/poster/YYYY-MM-DD-ai-brief.poster.json (validated editorial metadata)
ββ social/poster/YYYY-MM-DD-ai-brief.png (Canva-exported production poster)
ββ social/caption/YYYY-MM-DD-ai-brief.txt (Instagram caption)
GitHub Actions
ββ line-dispatch.yml new article push β validates + sends the LINE digest
ββ commit-poster.yml historical .png.url compatibility only
ββ post-instagram.yml new poster PNG β posts the poster + caption to Instagram
Configured delivery paths
ββ Website frontbrief-ai.vercel.app renders the public "Web Edition" of each brief
ββ LINE sends the digest to LINE_TO when its workflow and secrets succeed
ββ Instagram posts the poster and caption when its workflow and secrets succeed
Codex handles research, editorial judgement, writing, Canva parent-page production, the poster
metadata, the caption, and the atomic commit. GitHub Actions provides deterministic LINE and
Instagram delivery paths.
The Next.js website (in web/) renders the reader-facing "Web Edition" of every article.
Committed articles and poster assets are the repository's evidence that the daily generation path is producing output. They do not by themselves verify that LINE messages or Instagram posts were delivered. After configuring the required secrets, verify each delivery path in GitHub Actions and confirm receipt in the destination channel before describing it as live.
The desk runs two tracks on purpose:
- Article / LINE = importance-first β the five most must-know stories of the day.
- Poster / Instagram = engagement-first β the most shareable story, even if it isn't the #1 article. People & drama, surprises, and strong visuals win the feed.
The brief picks exactly 5 items, interestingness-first β lead with the single most "must-know" story in AI that day, then rank the rest by importance Γ how interesting/shareable they are. The five tracks below are a guide for breadth, not a quota; never pad with a weak story to fill a track.
| Track | Focus |
|---|---|
| π Global AI / Frontier Models | Frontier labs, model releases, agents, multimodal, reasoning, safety, regulation, policy |
| ποΈ AI Infrastructure / Markets | NVIDIA, AMD, TSMC, Broadcom, hyperscaler capex, data centres, HBM, energy, inference economics |
| π¬ Research / Technical Signal | Landmark papers and technical releases from high-quality labs, journals, and conferences |
| π Product / Startup / Adoption | Enterprise AI, dev tools, robotics, healthcare, finance, legal AI, funding, M&A, adoption |
| π§ͺ Deeptech Lens | Surrogate modelling, neural operators, physics GNNs, FEA/CFD acceleration, aerospace, digital twins |
Each item carries an investment angle (signal, not advice) and closes with a Money Map. The desk ignores generic chatbot news, prompt-engineering tips, duplicated stories, vague hype, and low-signal opinion pieces. Freshness gate: nothing older than 5 days; no repeat story or poster shape within the window.
.github/workflows/line-dispatch.yml # sends the LINE digest on article push
.github/workflows/commit-poster.yml # historical .png.url compatibility workflow
.github/workflows/post-instagram.yml # posts poster + caption to Instagram
articles/ # daily briefs (+ sample-ai-brief.md)
social/poster/ # daily posters (PNG + .poster.json + index.md + ledger.json)
social/caption/ # daily Instagram captions
web/ # Next.js public site (frontbrief-ai.vercel.app)
web/public/mascot/ # the FrontBrief owl
assets/brand/ # logo + footer brand assets
docs/codex-routine-prompt.md # active Codex newsroom and publishing procedure
docs/claude-routine-prompt.md # historical Claude routine prompt
scripts/validate_newsroom.py # deterministic freshness/dedup/channel gates
scripts/render_poster.py # non-production renderer retained for tests/fallback development
scripts/extract_line_digest.py # pulls the ## LINE Digest section verbatim
scripts/send_line.py # sends one LINE message
scripts/post_instagram.py # posts the poster + caption
AGENTS.md # active Codex repository instructions
CLAUDE.md # historical Claude instructions
requirements.txt
Add these under GitHub Settings β Secrets and variables β Actions:
LINE_CHANNEL_ACCESS_TOKEN
LINE_TO # user, group, or room ID
INSTAGRAM_USER_ID # only needed once you enable Instagram auto-posting
INSTAGRAM_ACCESS_TOKEN # long-lived Instagram Graph API token
LINE_TO can be a user ID, group ID, or room ID. For a small group of readers, the simplest setup
is to add the LINE Official Account to a LINE group and use the group ID as LINE_TO. The two
INSTAGRAM_* secrets are optional until you turn on Instagram posting.
The active schedule is a local-project Codex automation at 05:00 Europe/London, operating from
this checkout. Its prompt is versioned in
docs/codex-routine-prompt.md. The zero-duplicate start gate stops
without publishing when that London date already exists.
CLAUDE.md and docs/claude-routine-prompt.md are preserved as migration history. Do not keep the
Claude Routine enabled alongside the Codex publisher.
The public site lives in web/ (Next.js 16, deployed on Vercel). It renders the
## Web Edition section of each article β the reader-facing narrative β at
frontbrief-ai.vercel.app.
cd web
npm install
npm run dev # http://localhost:3000For a local website check that does not publish anything:
cd web
npm ci
npm run lint
npm run build.github/workflows/line-dispatch.yml runs only when a new dated Markdown article is added to
main. Historical edits do not resend the newest brief. Manual dispatch defaults to dry-run mode.
scripts/extract_line_digest.py sends the hand-written ## LINE Digest section verbatim when
present, and otherwise degrades gracefully by building a digest from the TL;DR and Top 5 links.
scripts/send_line.py sends one text message and caps it below 4,500 characters.
Manual test (from GitHub): add the LINE_* secrets β open Actions β select
LINE Article Dispatch β Run workflow with dry-run enabled. Disable dry-run only for an explicit
delivery test.
Manual test (local):
python -m pip install -r requirements.txt
python scripts/extract_line_digest.py
export LINE_CHANNEL_ACCESS_TOKEN="..."
export LINE_TO="..."
python scripts/send_line.py --dry-runEach brief follows the template in docs/codex-routine-prompt.md:
# FrontBrief.AI β YYYY-MM-DD
## LINE Digest # standalone, punchy; sent to LINE verbatim
## TL;DR # 3 standalone bullets
## Top 5 # per item: Category / Why interesting / Why it matters /
# Investment angle / Tharm relevance / Action / Link
## Money Map # where capital + pricing momentum moved
## Watchlist # three catalysts to monitor next
## Web Edition # public, journalist-voice narrative (rendered by the website)
The Top 5 is the full evidence trail; each item includes a direct Link:. The Tharm relevance
and Action fields are internal β the website hides them and renders the ## Web Edition.
Never commit secrets. Store LINE and Instagram credentials only as GitHub Actions repository secrets. If a token or channel secret is ever pasted into chat, logs, issues, or commits, rotate it in the provider's console before relying on it.





