Skip to content
GITHUB INTEL BRIEFBuy me a coffee (opens in a new tab)

Methodology

How an edition is made

GitHub Intel Brief reports cybersecurity-first GitHub projects that are gaining attention. Editions are published on Monday, Wednesday and Friday mornings, Sydney time. Code collects, the model writes: every repository name, number, link, date and advisory ID comes from code. When a language model writes prose (a Gemini writer is being added), it only writes about evidence it was given, and that prose is checked before it is published.

Behind the scenes

How it runs itself, three mornings a week, for AUD 0

No one writes this site by hand, and nothing about it is paid for. A small pipeline wakes up on a timer, reads public data, checks it, writes it up and publishes it, using only the free tiers of GitHub, Cloudflare and Google. Here is the whole journey.

The pipeline

  1. Step 01GitHub Actions

    Wake up

    A scheduled workflow starts every day at 17:07 UTC, just after 4 am in Sydney. Nobody presses a button.

  2. Step 02Python collector

    Collect

    Reads star counts for a watch list of up to 500 projects from the GitHub API, then advisories from OSV, deps.dev, OpenSSF Scorecard and the CISA KEV catalogue.

  3. Step 03Code, not a model

    Decide

    Ranks each section by measured star change, raises risk indicators, runs supply-chain checks and picks the lab pick, all from rules you can read below.

  4. Step 04Template today, Gemini next

    Write

    Turns the checked facts into short notes and the newsreader paragraph. Every name and number in the text must be one the code supplied.

  5. Step 05Cloudflare Worker

    Check and publish

    Validates the whole edition again, stores it in a D1 database as a draft, then makes it live. If anything fails, yesterday's edition stays up.

  6. Step 06Cloudflare edge

    Serve

    This site, the API, the Markdown briefing, the newsreader page and the Atom feed are served from one origin, cached close to you.

The week

A snapshot of every watched project is taken each morning, so changes are measured from our own numbers. On Monday, Wednesday and Friday the run goes on to build and publish an edition, aiming to be live by 6 am Sydney time. On Sunday it first refreshes the watch list.

  • MonSnapshot + edition
  • TueSnapshot
  • WedSnapshot + edition
  • ThuSnapshot
  • FriSnapshot + edition
  • SatSnapshot
  • SunWatch list + snapshot

Times are about 4 am in Sydney during daylight saving and about 3 am otherwise; the schedule itself is fixed in UTC. GitHub can delay scheduled runs, so each edition shows its age and a banner appears if one is late.

What it costs: nothing

Every service below is on its free plan, and none of the accounts has a payment method. Each has a hard cap in code, so reaching a limit makes an edition shorter or plainer, never billable. Measured 2 November 2026.

Free services, their allowances and how GitHub Intel Brief uses them
ServiceFree allowanceHow we use it
GitHub ActionsFree monthly minutesOne run a day, about 2–5 minutes each
GitHub API5,000 requests an hourAbout 500 for a snapshot, about 180 for an edition
Cloudflare WorkersStatic files free and unlimited; 100,000 Worker requests and 10 ms CPU per requestPages are static files; median Worker CPU 0.74 ms
Cloudflare D1500 MB; 5 million rows read and 100,000 written a dayAbout 40–50 MB a year; at most about 6,700 rows written a day
OSV, deps.dev, OpenSSF Scorecard, CISA KEVFree and open, no keyAbout 230 lookups an edition
Google Gemini API, free tierbeing addedFree tier through AI Studio, no billing accountHard cap: 11 calls and 22 attempts an edition
Tavily web searchbeing added1,000 free credits a month, no cardHard cap: 60 basic searches an edition, only when free sources can't explain a move

Where AI fits

Code collects

Every repository name, star figure, link, date and advisory ID comes from code. So do the ranking, the risk indicators and the lab pick. Today every edition is built this way, with a template for the newsreader paragraph, so it can be rebuilt exactly from the stored data.

The model writesbeing added

Google’s Gemini, on its free tier, is being added to explain each section’s movers in plain words, with more research sources. It works inside tight rules:

  • It only sees evidence the code collected. READMEs and web pages are fenced and labelled as untrusted, so instructions hidden in them are ignored.
  • It answers in a fixed JSON shape. Any repository, link or number it wasn't given is rejected.
  • It can't rank, flag, score or pick anything. Those are decided by code before it runs.
  • It can't call a project safe, or suggest one was run or audited.
  • If it fails or runs out of free quota, the edition still publishes with template text and says research is limited.

Built with AI, checked by a person. The pipeline, the Worker, this site and their tests were designed and written with an AI coding assistant working from a written design. A person reviewed each stage before the next one began.

When something goes wrong

  • Drafts stay drafts. An edition goes live only after it passes validation twice, once in the collector and once in the Worker.
  • The last good edition stays up. A failed run publishes nothing, and the failure is emailed to the maintainer.
  • Reruns are safe. Sending the same data twice stores it once, so a run can simply be repeated.
  • Lateness is visible. Every edition shows its age, and a banner appears when the latest one is more than 80 hours old.

Sections

Each edition has up to 45 repositories in ten sections. Each repository has one primary section and counts once.

  • Offensive Security & AI Pentesting
  • Detection Engineering, SIEM & SOC
  • DFIR, Threat Hunting & Reverse Engineering
  • AppSec, Code Scanning & Supply Chain
  • Cloud, Identity & Infrastructure Security
  • AI Security & Agent Auditing
  • Threat Intelligence & OSINT
  • AI Agents & Self-Hosted Models
  • Homelab, IoT & Self-Hosting
  • Wildcard / Emerging

Section sizes are targets, not quotas. When a section has fewer genuine movers, the edition publishes fewer and says so; it never pads. Everything in Offensive Security is labelled dual-use: use it only within an authorised scope.

Ranking and honest numbers

  • Repositories are ranked within their section by net star change: current stars minus the stars at the start of the window. That is not the same as new stars, because people also remove stars.
  • Every change states its window in hours. Monday covers about 72 hours since Friday; Wednesday and Friday about 48.
  • A repository seen for the first time has no baseline. It shows “no baseline”, never zero.
  • Small repositories can’t win on percentages: a repository needs at least 100 stars to be watched and a gain of at least 5 stars in the window to be listed. Sections are never padded.
  • Top movers are the biggest section leaders, at most one per section, so one busy field can’t take the whole opening story.
  • The lab pick is the highest-ranked repository with no risk indicators, an advisory check that completed with none found, a release in the last 90 days, a measured starting figure, and that is neither archived nor a curated list. Dual-use tools can be picked and keep their label. If none qualifies, there is no lab pick.
  • When a repository joins the watch list, its last seven days are estimated from GitHub’s daily star history. Those estimates count new stars only, not removed ones, so a change measured from one is marked estimated. Once our own daily snapshots cover a window, they are used instead.
  • Unknown values stay unknown. Pull-request counts that weren’t collected read “not collected”, and a day without an observation is a gap in the history, never filled in.

Trending but Suspicious

Some repositories show risk indicators. They are signals worth a closer look, not accusations or verdicts, and a flagged repository is never the lab pick.

  • Stars outrun work: at least 300 stars gained with no commits, issue activity or merged pull requests in the window.
  • One-day spike: at least 70% of the window’s new stars (and at least 200) arrived on a single UTC day.
  • New owner account: the owner’s account is younger than 90 days.
  • Instant fame: created in the last 30 days, with at least 1,000 stars.
  • Look-alike name: within one character of a watched project by another owner with at least ten times the stars.
  • Risky install: the README pipes a download straight into a shell, or runs decoded base64, found by reading text only.

Research and sources

Sources are read in this order: the project on GitHub (README, releases, security policy and advisories), Hacker News, OSV and deps.dev, OpenSSF Scorecard, the CISA Known Exploited Vulnerabilities catalogue and, only when free sources can’t explain a move, a capped web search. Every claim links to a fetched source with the date it was retrieved. Without a source, the repository is marked research limited, and a move with no source is unexplained.

Fresh
researched for this edition.
Cached
reused from an earlier edition, showing its original retrieval date.
Project sources only
only the project’s own pages were available.
Deferred
skipped because the run reached its research budget.
Failed
the lookups failed.

Supply-chain checks

Each check is read-only and records one of four states: found, not found, unknown (the check couldn’t be completed) or n/a (it doesn’t apply), always with a reason for the last two.

  • Security policy or vulnerability-reporting process.
  • Advisories that affect the latest version, from GHSA, OSV and deps.dev, with CISA KEV matches. Earlier advisories that list a patched version are noted as history, so a project isn’t penalised for fixing and disclosing.
  • OpenSSF Scorecard’s own result and date. It is Scorecard’s score, not ours.
  • Published checksums, signatures or attestations. Published is not the same as verified.
  • Risky install patterns in the README.
  • Archived or unmaintained.

Limits

  • “No advisory found” never means safe. It means no advisory was found by these sources on that date.
  • Nothing is run. No reported repository is installed, built or executed, and its artifacts are never loaded. The lab pick is worth investigating in an isolated lab; it is not a recommendation to run it anywhere else.
  • READMEs, web pages and model output are treated as untrusted data and are never followed as instructions. The model can’t choose what is ranked, flagged or picked.
  • Everything runs on free tiers with hard caps. When a cap is reached, research is marked deferred rather than paid for.

Corrections

If a claim, flag or number about your project is wrong, email mrdellybot@gmail.com with the repository and the edition date. Corrections are published as a new revision of the edition; history is never rewritten.