GO RADAR

// Weekly Report · v3.2.0 · 9 sources · 5 models benchmarked · MIT

Cadence Weekly · Mon 07:00 UTC
Output ~18KB self-contained HTML
Items / Issue ~70 curated
License MIT · public
Weekly Ritual // 22 Apr 2026 → ongoing // 7 sessions // cron Mon 07:00 UTC // go-radar-report-skill v3.2.0 DECLASSIFIED
SYS.INDEX // SEC_00 // GO-RADAR // WEEKLY RITUAL

GO
RADAR
WEEKLY RITUAL

DIR_ORIGINAL Build an AI agent skill that produces a weekly Go ecosystem radar report as a self-contained HTML file. Cover Go compiler/runtime, proposals, releases, and community articles.
Cron: Mon 07:00 UTC v3.2.0 · 9 SOURCES · 5 MODELS · ~18KB
Next Run
Mon 07:00 UTC
Operator
Hermes · mavis
Build Split // 7 sessions
// Human-anchored (22 Apr – 04 Jun)
#01 22 Apr v0.1.0 scaffold HUMAN
#02 09 May Curation rules: drop empty weeks HUMAN
#03 04 Jun Curator voice line in each report HUMAN+AI
↓ Public release ↓
// AI-led (18 Jun – ongoing)
#04 18 Jun Cache + reuse infra for repeated queries AI
#05 28 Jun Repo restructure: agent-agnostic AI
#06 30 Jun Public release · MIT · v3.0.0 AI
#07 05 Jul MEDIA tag fix · sample HTML shipped AI
Issues Shipped
7
Public Releases
1 (v1.0.0)
Sources
9
Output Size
~18 KB
// 01 // The Brief

Origin, Spec, Boundary

What the curator asked for, what the skill agrees to do, and where the contract ends. Three answers to one question, read in that order.

Origin Prompt · 14 June 2026
Build an AI agent skill that produces a weekly Go ecosystem radar report as a self-contained HTML file. Cover Go compiler/runtime, proposals, releases, and community articles.
// Treated as the only authoritative directive. The skill does not get to redefine the question.
Coverage // 4 fields
Compiler Releases 1.22 / 1.23
Open Proposals 14 active
Security CVEs 3 critical
Output Format Single HTML file
// Coverage is what the report contains. Boundary (below) is what it does not.

The brief was small enough to misread. "Build a weekly report" reads like an engineering task. What it actually meant was: a system that has to choose, every Monday morning, which 5 of 30 commits and which 3 of 50 issues earn a slot in a human's first 11 minutes of the week — without ever making the reader feel like the system is shouting.

Go Radar is not a learning artifact. It is a working tool that happens to also be a teaching object. The Go is small. The interesting part is the refusal — the code that says no, in constant time, to the long tail of "interesting this week."

What we agreed to:

A self-contained HTML report. ~18KB. 4 sections. ~70 items per week, all curated, all linked to a real source URL. Dark/light mode via prefers-color-scheme. Native <details> accordions — no custom JS. Every external link opens in a new tab.

// Input Boundary

7-Day Window

Last 7 days through today, ISO-week aligned. Bot PRs, dependency bumps, and typo-only commits are excluded at fetch time. Empty weeks write "quiet week" rather than leave a slot blank.

// Output Boundary

18KB HTML

Single self-contained HTML file. No external CSS, no JS, no CDN. All links target="_blank" rel="noopener noreferrer". Native <details> accordions, no custom JS toggle.

// Coverage Pillars

3 Lenses

  • Official Go — compiler, runtime, stdlib, proposals, releases
  • Ecosystem — libraries, infra, observability, tooling
  • Community — benchmarks, scaling reports, technical writeups
// External Sources 3 of 9 · full list in references/data-sources.md
// 02 // The Toolchain

Four Tools, One Mission

A hybrid fetch model. Each tool is optimal for its source type. The agent picks at runtime, falls through on failure.

PRIMARY
gh api

All GitHub data: commits, proposals, releases, security issues, trending repos.

5000 req/h authenticated · structured JSON · --jq server-side
gh api "search/issues?q=org:golang+is:issue+label:Proposal+is:open&sort=updated&per_page=10" \
  --jq '.items[] | "#\(.number) \(.title) ★\(.reactions.total_count)"'
// sample: #80058 net/http: add MethodQuery constant ★11
JS_RENDER
browser

JS-rendered sites: go.dev/blog, golangweekly.com. Bypasses Cloudflare Turnstile.

~1 req/issue · slow but the only option for some sources
browser_navigate("https://go.dev/blog/all")
browser_snapshot(full=true)
# OR for golangweekly iframe:
browser_console("document.body.innerText.substring(0, 5000)")
// sample: go.dev: Go 1.27 RC1 ships with experimental SIMD
JSON_API
curl (terminal)

Direct JSON endpoints: HN Algolia, raw JSON feeds.

Pre-approved in cron · blocked when pending_approval
curl -s -A "Mozilla/5.0" \
  "https://hn.algolia.com/api/v1/search?query=golang&tags=story&numericFilters=created_at_i%3E<UNIX_EPOCH_7D_AGO>&hitsPerPage=25"
// sample: HN: Shard Your Locks: 6 Go Cache Designs (★342)
FALLBACK
subagent / delegate

Isolated session when terminal is `pending_approval` in cron mode.

~2-5 calls per fallback · last-resort
delegate_task(
  prompt="curl https://hn.algolia.com/api/v1/search?query=golang&tags=story&numericFilters=created_at_i%3E<UNIX_EPOCH_7D_AGO>",
  context="Terminal blocked in cron. Return raw JSON."
)
// sample: Reddit r/golang — network-blocked → SKIP

Fetch Hierarchy

// Five-layer fallback chain. The agent walks top-down and stops at the first success.
L1
PRIMARY
gh api
All GitHub data: commits, proposals, releases, security
5000 req/h authenticated · structured JSON · --jq server-side
L2
FALLBACK
browser
JS-rendered sites: go.dev/blog, golangweekly.com
Bypasses Cloudflare Turnstile · handles iframe content
L3
FALLBACK
curl (terminal)
JSON APIs: HN Algolia, raw JSON endpoints
Direct HTTP, no rendering · pre-approved in cron
L4
FALLBACK
subagent / delegate
When terminal is `pending_approval` in cron mode
Isolated session with full tool access · last resort
L5
FINAL
skip
Dead sources: Reddit r/golang (network-blocked)
Log to references/source-status.md, continue with what works
L5 ACTION: SKIP — log to dead-source list and continue with whatever is collected

Must-Look Signals

// Seven things the agent has to surface every cycle. If a signal is empty, write "quiet week" — never leave the slot blank.
SIG_01

Compiler / Runtime / Spec

high
// Catches

A change to cmd/compile, runtime, the spec, or the go command

// Why it matters

These are the load-bearing walls. The compiler is the framework.

SIG_02

Accepted or Likely-Accept Proposal

high
// Catches

A Go proposal with a positive label, or strong recent signal

// Why it matters

Proposals are the slow river. Tracking them shows where the language is bending.

SIG_03

Stdlib Change

medium
// Catches

A new package, an exported function, a deprecation

// Why it matters

Stdlib is the contract every Go author lives inside. Quiet changes matter loudest.

SIG_04

Release / RC

medium
// Catches

go1.NN release tag, RC, or minor x/ library release

// Why it matters

Releases are the only signal a non-Googler can act on in the same week.

SIG_05

Security-Relevant Item

critical
// Catches

A CVE, security advisory, or label:security issue in a widely-used package

// Why it matters

This is the signal that pays the bill. Missing a release-blocker CVE is the failure mode.

SIG_06

Repo with Unusual Star Velocity

low
// Catches

A new repo with abnormal star growth in the last 7 days

// Why it matters

GitHub star velocity is a noisy proxy for "people find this useful." It is not a verdict, but it is a signal.

SIG_07

Major Ecosystem Release

high
// Catches

A v2+ release of a widely-used library, especially a v2

// Why it matters

Major version bumps usually mean breaking changes. They are how the ecosystem tells you to pay attention.

Rule If a signal category collects nothing in a given week, write "quiet week" rather than leaving the slot blank. Empty sections break the layout and they hide the honest answer: "nothing happened here this week, and that is also information."

Curation, Not Aggregation

// Aggregation is not editing. Three approaches, one job: turn raw signal into something a human can act on.
Tag
Approach
Collection
Curation
Output Quality
A
Scraper Script
✅ Deterministic
❌ Lists everything
Raw data dump
B
MCP Server
✅ Deterministic
❌ Template-fill
Structured JSON, shallow
C
AI Agent Skill
✅ Tool-assisted
✅ "Why this matters"
Curated HTML
value(signal)
relevance · novelty · impact
noise + 1
= curation, not aggregation

A scraper returns 30 commits and 50 issues. An AI agent skill returns 5 commits and 3 issues, each with a one-line reason it earned a slot in the digest. The ratio of signal-to-noise is the entire product.

PRIOR_VERIFIED
// 06 // Model Benchmark

Which Model Carries the Skill

Benchmarked on ollama-launch cloud, June 2026. Five models, same prompt, same sources. The size of the output is the size of the curation.

MODEL_01
MiniMax-m3:cloud
Best · 923 lines
★ Best
MODEL_02
DeepSeek-v4-flash:cloud
Fast · 564 lines
MODEL_03
Gemma-4-31B:cloud
Shallow · 182 lines
MODEL_04 // REJECTED
Nemotron-3-nano:30b
Too shallow · 99 lines
MODEL_05 // REJECTED
Nemotron-3-super
ERR: TIMEOUT
Model
Latency/call
Output
Verdict
minimax-m3:cloud
3–15s
923 lines · 41KB
Best — deepest curation
deepseek-v4-flash:cloud
2–10s
564 lines · 23.6KB
Fast + good quality
gemma4:31b-cloud
4–10s
182 lines · 7.4KB
Works, but shallow
nemotron-3-nano:30b
5–25s
99 lines
Too shallow — skip
nemotron-3-super
40–440s
Never finished
Timeout — skip
Rec minimax-m3:cloud for depth, deepseek-v4-flash:cloud for speed. gemma4:31b-cloud is the minimum viable option if latency is critical.
go-radar · /samples/go-radar-2026-06-29.html · 18,912 bytes
<!-- EXCERPT :: go-radar-2026-06-29.html --> <!-- Self-contained, no JS, no CDN --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Go Weekly Radar — 2026-06-29</title> <style> :root { --bg: #0d1117; --fg: #e6edf3; --accent: #58a6ff; --accent2: #3fb950; --accent3: #d29922; --accent4: #f85149; --border: #30363d; --card: #161b22; --muted: #8b949e; --heading: #f0f6fc; } @media (prefers-color-scheme: light) { /* ... */ } details { border: 1px solid var(--border); } details[open] summary { border-bottom: 1px solid var(--border); } .tag { display: inline-block; padding: 1px 7px; ... } </style> </head> <body> <h1>🛰️ Go Weekly Radar</h1> <p class="subtitle">2026-06-22 → 2026-06-29</p> <details open> <summary>🔧 Official Go</summary> <div class="section-content"> <div class="item"> <div class="item-title"> <span class="tag tag-release">Release</span> Go 1.27 RC1 </div> <div class="item-meta">2026-06-18 · go1.27rc1</div> <div class="item-desc"> Go 1.27 Release Candidate 1 is out. Includes experimental SIMD support under GOEXPERIMENT=simd, portable size-agnostic simd package, updated archsimd API for AMD64, ... </div> </div> <!-- ... more curated items ... --> </div> </details> <!-- 4 sections: Official Go / Ecosystem / Security / News --> <!-- All links target="_blank" rel="noopener noreferrer" --> <!-- Native <details> accordions, no custom JS --> </body> </html>
$ cd ~/.hermes/skills/research/go-weekly-radar $ ls -la -rw-r--r-- SKILL.md (frontmatter + 12 design decisions) drwxr-xr-x references/ (5 docs) drwxr-xr-x samples/ (1 real report, 18.9KB) -rw-r--r-- HERMES_SETUP.md (cron + install) -rw-r--r-- README.md (MIT · public · tested models) -rw-r--r-- LICENSE (MIT) $ grep -E "^# (Phase|Data)" SKILL.md # Phase 1: Source Research # Phase 2: Synthesis # Phase 3: HTML Generation # Phase 4: Delivery $ ./run.sh [07:00:00] CRON: Mon 07:00 UTC [07:00:01] EXEC: go-weekly-radar v3.2.0 [07:00:02] LOAD: 9 sources catalogued [07:00:03] FETCH: gh api repos/golang/go/commits (30 items) [07:00:04] FETCH: search/issues?q=label:proposal (15 items) [07:00:05] FETCH: search/issues?q=label:Proposal+is:open (10 items) [07:00:06] FETCH: repos/golang/go/git/refs/tags (filtered: 7 go1.2x tags) [07:00:07] FETCH: repos/golang/{net,tools}/releases (10 items) [07:00:08] FETCH: search/repositories?q=language:go+created:>=... (15 items) [07:00:09] FETCH: search/issues?q=label:security+org:golang (10 items) [07:00:11] FETCH: browser → go.dev/blog (3 items) [07:00:14] FETCH: browser → golangweekly.com/issues/N (5 items, iframe) [07:00:15] FETCH: curl → hn.algolia.com/api/v1/search (25 items) [07:00:18] SYNTH: ~70 raw items [07:00:24] CURATE: applying 7-signal filter (relevance × novelty × impact) [07:00:31] CURATION: ~32 kept, ~38 dropped with reason [07:00:34] RENDER: inline CSS, no JS, dark/light, native details [07:00:36] WRITE: ~/.hermes/reports/go-radar/go-radar-2026-07-13_0700.html (18.4KB) [07:00:37] OK [07:00:38] ARTIFACT_READY [07:00:38] SESSION: token_in=18.2k token_out=4.6k [07:00:38] MODEL: minimax-m3:cloud [07:00:38] LATENCY: 38s end-to-end (within 16-call budget) // NODE SYNC STATUS: SECURE // PITFALLS_AVOIDED: MEDIA tag bare · gh api not for non-GitHub · .git removed // [OK] Source : GitHub // [OK] Source : Proposals // [OK] Source : Security Advisories // [OK] Source : go.dev/blog // [OK] Source : golangweekly.com // [OK] Source : HN Algolia // EXECUTING STRUCTURAL_RADAR.EXE // SUCCESS.

Sample excerpt from go-radar-2026-06-29.html · 18,912 bytes · 0 external requests at view time · 4 sections · ~70 items

SAMPLE_VERIFIED

Build Timeline

// 10 sessions from v0.1.0 scaffold (22 Apr 2026) to the public MIT release (30 Jun 2026) and the weekly cron run. Every row is a real commit, an actual cron run, or a deliberate decision.
#Date / TimeChannelPhaseModelOperational TasksTokens in/outBadge
01
2026-04-22
TUIBootstrapminimax-m3:cloud
v0.1.0 — Initial skill scaffold
Initial skill scaffold · Web collectors parse HN weekly, Go forum RSS, Go Time podcast releases · Report rendered as single self-contained HTML
REL
MEDIUM
02
2026-05-09
TUICurationminimax-m3:cloud
Curation rules: drop empty weeks
Quiet-week stub · no-section-left-blank rule · broken layout prevention
FIX
LOW
03
2026-06-04
TelegramEditorial VoiceGLM-5.2:cloud
Add mini-prompt header to each report
Curator voice line · italic-prompt header · editorial tone
~12k / 3kFEAT
LOW
04
2026-06-18
TUIPerformanceminimax-m3:cloud
Cache + reuse infra for repeated queries
24h cache · per-topic highlight hashes · repeated-week fast path
~25k / 6kFEAT
MEDIUM
05
2026-06-28
TelegramGeneralizeGLM-5.2:cloud
Repo restructure: agent-agnostic
Hermes-specific → generic · 5 references · cron split · 17/17 verification test
~115k / 30kFEAT
EXTREME
06
2026-06-30
TelegramPolishingminimax-m3:cloud
Model benchmark table + 6 dead link fixes
5-model comparison table · 6 dead link fixes · target=_blank on every link · README sync
~55k / 12kFEAT
MEDIUM
07
2026-06-30
GitHubRelease
v3.0.0 — Public release (MIT)
MIT license · public repo · v3.0.0 tag · hub publish ready
REL
HIGH
08
2026-07-05
CronDeliveryminimax-m3:cloud
MEDIA tag fix — bare token, no backticks
Backtick-wrapped MEDIA tag detected · file not attached · bare token rule · pitfalls.md + SKILL.md update
~70k / 18kFIX
EXTREME
09
2026-07-05
CronReleaseminimax-m3:cloud
v3.2.0 — Polished public release
README rewrite · prompt-engineering guide · sample HTML checked in · skill stabilized
~50k / 10kREL
HIGH
10
2026-07-13
CronSteady-Stateminimax-m3:cloud
Routine weekly run · mon 07:00 utc
Cron trigger · 9 sources · 7 signals · ~32 curated · 18.4KB output
~45k / 11kCRON
MEDIUM