Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
96 changes: 96 additions & 0 deletions config/cloud-network-allowlist.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# Cloud run — network allowlist for the Learning Agent

> **Why this file exists:** On 2026-07-05 a full sweep confirmed that 38/40 source endpoints
> fail from the cloud (Claude Code on the web) environment with `CONNECT tunnel failed,
> response 403` — the **environment's egress network policy** blocks them. This is NOT
> YouTube/Substack rate-limiting a datacenter IP (the rss2json fallback proxy was blocked
> too, which a site-side block can't explain). The previous runs' "datacenter IP block"
> diagnosis was wrong. No fetch trick fixes this — only the environment settings can.

## How to fix (one-time, ~2 minutes)

In **claude.ai/code → Environments → (the environment this repo's scheduled task runs in)
→ Network access**, either:

- **Option A (simplest):** set network access to **Full / unrestricted**. This repo's agent
only reads public feeds and writes to Notion/GitHub, so this is low-risk. **Recommended.**
- **Option B (tighter):** keep the allowlist mode and add the domains below.

Docs: https://code.claude.com/docs/en/claude-code-on-the-web

## Domains to allowlist (Option B)

Verified blocked on 2026-07-05; each maps to a source in `config/sources.md`.

### Critical — primary content sources
```
youtube.com # all 13 YouTube channel RSS feeds (www.youtube.com/feeds/videos.xml)
substack.com # Substack redirect/edge for all custom-domain feeds below
substackcdn.com # Substack CDN (feed assets/redirects)
oneusefulthing.org # Ethan Mollick (Tier 1)
simonwillison.net # Simon Willison (Tier 1)
lennysnewsletter.com # Lenny Rachitsky (Tier 1)
smashingmagazine.com # Vitaly Friedman (Tier 1)
maggieappleton.com # Maggie Appleton (Tier 1)
medium.com # Google PAIR feed (Tier 1) + Aakash mirror
shapeof.ai # Emily Campbell (Tier 1, manual check)
wattenberger.com # Amelia Wattenberger (Tier 1, manual check)
```

### Tier 2 feeds
```
blog.google
openai.com
deepmind.google
huyenchip.com
interconnects.ai
jack-clark.net
magazine.sebastianraschka.com
cameronrwolfe.substack.com
latent.space
stratechery.com
newsletter.pragmaticengineer.com
creatoreconomy.so
exponentialview.co
jakobnielsenphd.substack.com
lukew.com
newsletter.uxdesign.cc
bradfrost.com
peterme.com
garymarcus.substack.com
langchain.com
news.aakashg.com
feeds.simplecast.com # Hard Fork podcast feed
every.to # Dan Shipper / AI & I
pair.withgoogle.com
aixdesign.co
normaltech.ai
```

### Useful extras
```
api.rss2json.com # fallback feed proxy (only needed if a site later rate-limits the runner)
nngroup.com # recurring discovered-pick source
arxiv.org # recurring discovered-pick source
```

### Already reachable (no action)
```
microsoft.com / www.microsoft.com # MS Research feed — worked all along
raw.githubusercontent.com # Anthropic engineering community RSS mirror (stale, but reachable)
```

### Known special case
```
anthropic.com # bypasses the session proxy entirely (NO_PROXY) and Anthropic's edge
# blocks datacenter fetches with a real HTTP 403. Allowlisting may not
# help; the agent should keep using WebSearch for anthropic.com articles.
```

## After changing the setting

The next scheduled run re-tests automatically: STEP 2's fetching discipline starts with a
one-call preflight and reports `policy-blocked` vs `OK` per lane in Source Health. If the
briefing still says `policy-blocked` after you've updated the environment, the change
didn't apply to the environment the task actually runs in — check which environment the
scheduled task uses.
38 changes: 35 additions & 3 deletions config/previously-recommended.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ https://www.youtube.com/watch?v=D4XTefP3Lsc
https://www.deloitte.com/us/en/insights/topics/talent/human-capital-trends/2026/human-ai-interaction-design.html
https://newsletter.uxdesign.cc/p/on-rational-thinking-taking-action

<<<<<<< Updated upstream
# Week 6 — 2026-04-20
https://maggieappleton.com/zero-alignment/
https://www.youtube.com/watch?v=QVJcdfkRpH8
Expand All @@ -83,7 +82,7 @@ https://www.microsoft.com/en-us/research/blog/red-teaming-a-network-of-agents-un
https://www.youtube.com/watch?v=mCO-D3pkviM
https://simonwillison.net/2025/Jun/27/context-engineering/
https://uxdesign.cc/the-web-trained-ai-to-deceive-now-designers-have-to-untrain-it-420f9d3fe78e
=======

# Week 6 — 2026-04-11 (Test run — retroactively logged)
https://smashingmagazine.com/2026/04/identifying-necessary-transparency-moments-agentic-ai-part1/
https://jakobnielsenphd.substack.com/p/workflow-redesign
Expand All @@ -110,4 +109,37 @@ https://engineering.salesforce.com/grounding-enterprise-ai-with-live-web-retriev
https://www.smashingmagazine.com/2025/07/design-patterns-ai-interfaces/
https://mbrenndoerfer.com/writing/rag-architecture-retriever-generator-design-patterns
https://www.youtube.com/watch?v=5ABcYSWPVr8
>>>>>>> Stashed changes

# Backfill — prior Week 13 briefings (were posted to Notion but never logged here; added 2026-07-05 to fix dedup drift)
# Week 13 — 2026-06-14
https://www.anthropic.com/engineering/built-multi-agent-research-system
https://aakashgupta.medium.com/building-multi-agent-systems-will-be-a-must-have-pm-skill-in-2026-30e52fd732cb
https://www.lennysnewsletter.com/p/we-replaced-our-sales-team-with-20-ai-agents
https://www.latent.space/p/andon
https://www.microsoft.com/en-us/research/blog/magenticlite-magenticbrain-fara1-5-an-agentic-experience-optimized-for-small-models/
https://arxiv.org/abs/2510.24937
https://arxiv.org/abs/2603.02050

# Week 13 — 2026-06-21
https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents
https://learn.microsoft.com/en-us/microsoft-copilot-studio/guidance/multi-agent-patterns
https://arxiv.org/abs/2512.11979
https://agentic-design.ai/patterns/ui-ux-patterns
https://www.news.aakashg.com/p/practical-ai-agents-pms
https://www.oneusefulthing.org/p/what-it-feels-like-to-work-with-mythos

# Week 13 — 2026-06-28
https://www.anthropic.com/engineering/harness-design-long-running-apps
https://jakobnielsenphd.substack.com/p/no-more-ui
https://www.lennysnewsletter.com/p/make-product-management-fun-again
https://www.nngroup.com/articles/state-of-ux-2026/
https://www.news.aakashg.com/p/ai-agents-pms
https://www.oneusefulthing.org/p/co-existence-and-the-end-of-co-intelligence

# Week 13 — 2026-07-05 (fourth pass)
https://www.oneusefulthing.org/p/the-twilight-of-the-chatbots
https://www.lennysnewsletter.com/p/not-all-ai-agents-are-created-equal
https://www.anthropic.com/engineering/how-we-contain-claude
https://www.nngroup.com/articles/context-architecture/
https://jakobnielsenphd.substack.com/p/2026-predictions-halfway
https://simonwillison.net/2026/Jul/4/better-models-worse-tools/
4 changes: 0 additions & 4 deletions config/sources.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,6 @@
| 47 | Harrison Chase | 2 | Agents | Blog | blog.langchain.dev | https://www.langchain.com/blog/rss | Surface architecture posts. Skip product announcements. Feed updated 2026-04-18 — old URL `blog.langchain.com/rss` permanent-redirects to this one. |
| 48 | Nadia Piet / AIxDESIGN | 2 | Design x AI | Blog | aixdesign.co | | Manual check monthly. Surface toolkit updates. |
| 49 | Design Better | 2 | Design Leadership | YouTube | youtube.com/@designbetterpod | https://www.youtube.com/feeds/videos.xml?channel_id=UCMVvDE1tbXNoOpoUaMk6iUw | Casual viewing. Surface design leadership + AI design interviews. Skip episodes on non-AI topics unless guest is exceptional. |
<<<<<<< Updated upstream
| 50 | Aakash Gupta — Product Growth | 2 | Product | Substack | news.aakashg.com | https://www.news.aakashg.com/feed | Surface AI-for-PM posts: evals for PMs, AI product playbooks, agent product strategy. Practitioner PM voice — Lenny-tier for product. Skip pure career/interview-prep posts. (Feed verified live 2026-06.) |
| 51 | Hard Fork (NYT) | 2 | Strategy / Culture | Podcast | nytimes.com/column/hard-fork | https://feeds.simplecast.com/l2i9YnTd | Kevin Roose + Casey Newton. Audio-only (no YouTube) — judge from episode title + description. Surface AI policy, product launches, agent/Copilot, and AI-culture segments. Skip non-AI tech-news episodes. (Feed verified live 2026-06.) |
| 52 | Every — "AI & I" (Dan Shipper) | 2 | Building / Product | Podcast + Essays | every.to/podcast · every.to/@danshipper | No RSS — manual | How real people (founders, writers, designers) actually use AI day-to-day. No clean RSS on Every's platform. Manual/discovery: WebFetch every.to/podcast + the AI & I YouTube playlist (PLuMcoKK9mKgHtW_o9h5sGO2vXrffKHwJL), and lean on web search for "Dan Shipper" / "AI & I". Closest in spirit to Lenny. |
Expand All @@ -81,7 +80,6 @@ Curated handles to check as a **secondary, best-effort** signal (see the X step
| 2 | @aakashg0 | Aakash Gupta | AI for PMs, evals, product playbooks. |
| 2 | @danshipper | Dan Shipper | Every / AI & I — how people actually use AI. |
| 2 | @hwchase17 | Harrison Chase | LangChain; agent architecture. |
=======

---

Expand All @@ -105,5 +103,3 @@ Proposed new Tier 1/2 voices to fill the product + design gap. Katherine reviews
2. Confirm posted content in last 90 days (active signal)
3. Read 2-3 recent posts to confirm lane + Tier
4. Add to live table with number, write Agent Notes, done.

>>>>>>> Stashed changes
44 changes: 44 additions & 0 deletions logs/run-2026-07-05.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Run Log — 2026-07-05
Week: 13 (Multi-agent orchestration — design lens)
Topic: Week 13 · Multi-agent orchestration (design lens)
Sources checked: ~25 (13 YouTube channels attempted, Tier-1 blog/Substack feeds attempted, 12 web searches; X skipped)
Items collected: ~18 candidates surfaced via web search
Items after hard filters: 6 (excluded all URLs from the three prior Week 13 briefings 06-14/06-21/06-28, the Weekly Checklist, and previously-recommended.md)
Items after topic gate: 6
Must Read: 2 (score range: 94–96) — Mollick "Twilight of the chatbots", Lenny "Not all AI agents are created equal"
Recommended: 3 (score range: 76–90) — Anthropic "How we contain Claude", NN/g "Context Architecture", Jakob Nielsen "2026 AI & UX mid-year reality check"
Wild Card: yes (trigger: Contrarian) — Simon Willison "Better Models: Worse Tools"
Discovered: 0 (all six are known Tier-1/2 voices; no new voice cleared the bar this run)
Dropped: several low-trust SEO/listicle "agentic design patterns 2026" pages; additional Simon Willison July posts (AI Compass, DSPy Datasette, June newsletter) as lower topic-fit; Aakash Gupta posts (avoided — prior briefings already leaned heavily on Aakash for the 2nd Product slot)

## Idempotency (STEP 1d)
Guard did NOT trigger. Three "Weekly Picks — Week 13" pages already exist (created 2026-06-14, 06-21, 06-28). Most recent is 7 days old — outside the 3-day window — so this run proceeded. New page created: https://app.notion.com/p/39482e5a5fa38177b2cff67f21d299dd

## Diversity rule
Satisfied: 2 Product Lane (Mollick, Lenny), 2 Design Lane (NN/g, Nielsen), 2 pure-engineer-audience (Anthropic containment, Willison) — at the ≤2 engineer cap. No shortfall to note.

## Errors/Notes
- YouTube RSS + rss2json proxy: wholesale HTTP 403 (datacenter-IP block), same as the three prior runs. No fresh-video pick.
- Blog/Substack feeds (direct AND rss2json proxy): 403. Anthropic community RSS mirror reachable but stale (Nov 2025). Article bodies also 403 on direct fetch from this IP. Entire run rebuilt via web search + prior knowledge of the named sources — matching how the three prior Week 13 runs operated.
- Dedup drift fixed: previously-recommended.md only went to Week 7 and was missing the ~18 URLs from the three prior Week 13 briefings. Backfilled all of them plus this run's 6.
- prompts/weekly-briefing.md and config/*.md still contain unresolved git merge-conflict markers (Updated upstream vs Stashed changes). Honored both sides this run (STEP 0 sync + idempotency guard from one side; audience framing + Audience Lanes/diversity rule from the other). Flagging for cleanup.
- STRONG SIGNAL: fourth consecutive Week 13 briefing. Katherine has left every Week 13 item unchecked across four runs while the checklist algorithm keeps returning Week 13 as "current." Fresh Tier-1 multi-agent-orchestration content is exhausted. Recommend advancing the checklist to Week 14 (Agent-Computer Interface + sub-agents). Surfaced prominently in the Notion page callout, the @mention, and the push notification.

## Deliverables
- Notion page: https://app.notion.com/p/39482e5a5fa38177b2cff67f21d299dd
- @mention comment to catphy0825@gmail.com (Katherine): posted (id 39482e5a-5fa3-8186-a801-001d01a8c5b4)
- Google Calendar event: intentionally NOT created (per task instruction; Notion notification is sufficient)
- PushNotification: sent
Duration: ~single run

## Addendum — 2026-07-05 (post-run diagnosis correction)
The "datacenter-IP block" diagnosis in this log (and in the three prior Week 13 runs) was WRONG.
A curl sweep of all 40 source endpoints shows `CONNECT tunnel failed, response 403` — the
**cloud environment's egress network policy** blocks 38/40 hosts (only microsoft.com and
raw.githubusercontent.com are allowlisted). The requests never reached YouTube/Substack;
that's also why the rss2json fallback "failed" — it was blocked too, not overwhelmed.
Fix requires a settings change by Katherine (environment network access), documented in
config/cloud-network-allowlist.md. weekly-briefing.md STEP 2 now includes a preflight that
distinguishes `policy-blocked` from real rate-limits. Merge-conflict markers in
prompts/weekly-briefing.md, config/sources.md, and config/previously-recommended.md were
also resolved (both sides kept).
29 changes: 19 additions & 10 deletions prompts/weekly-briefing.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ You are Katherine's Learning Partner Agent. Your job is to find the highest-qual

---

<<<<<<< Updated upstream
## STEP 0 — Sync repo state (1 tool call)

This task runs on more than one machine (Katherine's laptop + a cloud fallback). Before reading anything, pull the latest committed state so the dedup log is current:
Expand All @@ -16,15 +15,16 @@ git pull --rebase
```

If this fails (no network, or not a git checkout), continue anyway — the run still works, it just may not see the very latest dedup entries.
=======

---

## Who this is for

**Audience:** Katherine is a future PM + designer learning AI to *apply*, not to build from scratch. She is not an engineer and will not write production AI code. She prefers content that helps her make product decisions, design human-AI interactions, evaluate tradeoffs, and speak fluently with AI engineers — not content that teaches her to be one.

**When scoring, ask "who is this written FOR?"** If the answer is "engineers building this system," the item can still appear but should not dominate the top of the briefing. Prefer content written for practitioners who *use* AI to build products and experiences.

This audience framing is enforced downstream by the **Audience Check** (pre-scoring), the **Audience Lane bonus** (scoring), and the **diversity rule** (final-7 selection). All three must agree.
>>>>>>> Stashed changes

---

Expand Down Expand Up @@ -72,18 +72,29 @@ Run two complementary scans. Budget your tool calls carefully:
- **YouTube engagement check**: ~3-5 WebFetch calls (top candidates only)
- **Notion write**: 1 call

### Fetching discipline — beating 403 rate-limits and IP blocks
Feeds (especially YouTube, Substack, Medium) return **HTTP 403 when the requester's IP is rate-limited or blocked** — the signature is "the first few succeed, the rest 403," or (on a datacenter/cloud IP) *wholesale* 403s. The feeds are not dead; the IP is blocked. Escalate **per feed**:
### Fetching discipline — 403s come in two flavors; diagnose FIRST, then escalate

**PREFLIGHT (1 tool call, do this before any feed batch):** fetch one YouTube feed, e.g.
`https://www.youtube.com/feeds/videos.xml?channel_id=UCYO_jab_esuFRV4b17AJtAw` (3Blue1Brown).
- If it succeeds → normal run, go to Flavor B discipline below for any later 403s.
- If it fails, run `curl -sS -o /dev/null -w "%{http_code}" <same URL>` in Bash. If curl reports **`CONNECT tunnel failed, response 403`** (or exit code 56), you're in **Flavor A**.

**Flavor A — environment egress-policy block (cloud runs).** The session's network policy is refusing the tunnel; the request never reaches YouTube/Substack at all, and the rss2json proxy is equally unreachable — *no fetch path or proxy trick will work*. (Confirmed 2026-07-05: 38/40 source endpoints blocked this way; only microsoft.com and raw.githubusercontent.com were allowlisted.) Do NOT burn tool budget retrying every feed or the proxy:
1. Spot-check at most 2 more hosts (one Substack, api.rss2json.com) to confirm it's wholesale.
2. Fall back to targeted WebSearch for the entire run (search still works — it's a harness-side tool).
3. In Source Health, report the lanes as **`policy-blocked`** (not "Failed"/"IP block") and link `config/cloud-network-allowlist.md` — the fix is Katherine adding the domains (or enabling full network access) in the environment's settings, and no run-side change can substitute.
4. Note it under Errors/Notes in the run log.

**Flavor B — target-side rate-limit / datacenter-IP block.** The signature is *mixed* results: some fetches return real content or real HTTP status pages, then YouTube/Substack/Medium start returning 403/429. The feeds are not dead; the requester IP is throttled. Escalate **per feed**:
1. **Fetch the feed URL directly** (fast path — works from a residential IP / laptop). Don't burst: fetch in **small sequential batches (3–4 at a time)**, not all at once.
2. **On a 403/429, refetch the same feed through the free rss2json proxy:**
```
https://api.rss2json.com/v1/api.json?rss_url={URL-ENCODED feed URL}
```
URL-encode the feed URL — YouTube feeds contain `?channel_id=` and must be encoded (e.g. `https%3A%2F%2Fwww.youtube.com%2Ffeeds%2Fvideos.xml%3Fchannel_id%3D...`). The proxy fetches from its own un-blocked servers and returns the feed as JSON (`status:"ok"` + `items[]`). **This is what makes cloud/datacenter runs work** — YouTube/Substack/Medium block datacenter IPs directly but not the proxy. (Verified working for YouTube, Substack, and Medium.)
URL-encode the feed URL — YouTube feeds contain `?channel_id=` and must be encoded (e.g. `https%3A%2F%2Fwww.youtube.com%2Ffeeds%2Fvideos.xml%3Fchannel_id%3D...`). The proxy fetches from its own un-blocked servers and returns the feed as JSON (`status:"ok"` + `items[]`).
3. **Only if the proxy also fails**, fall back to a targeted web search for that source.

Never silently degrade to web-search-only. In Source Health, say which path worked, e.g. `YouTube: OK (via rss2json proxy)`.
Never silently degrade to web-search-only, and never mislabel Flavor A as an IP block. In Source Health, say which path worked per lane, e.g. `YouTube: OK (direct)`, `Blogs/RSS: OK (via rss2json proxy)`, or `YouTube: policy-blocked (see config/cloud-network-allowlist.md)`.

### 2a. FRESH SCAN — What's new this week (last 7 days)

Expand Down Expand Up @@ -467,12 +478,10 @@ Before creating the Notion page, verify:
- [ ] Checklist at bottom has ALL of: tier emoji, title, estimated time, full URL for EVERY item
- [ ] Total estimated reading time in header is the sum of all item times
- [ ] Hard cap of 7 items total is respected
<<<<<<< Updated upstream
- [ ] Idempotency guard checked (STEP 1d) — not re-posting a week that already ran
- [ ] PushNotification sent (STEP 7) and state committed + pushed (STEP 8)
=======
- [ ] **Audience Check recorded for every item** (engineers / PMs / designers / mixed / general)
- [ ] **Diversity rule satisfied**: ≥2 Product Lane, ≥2 Design Lane, ≤2 pure-engineer-audience items
- [ ] If diversity rule couldn't be satisfied by the pool, the shortfall is noted in the run log under Errors/Notes
- [ ] No orphan references to the old "+5 Design Boost" — the rule is now three Audience Lanes (+10/+10/+5)
>>>>>>> Stashed changes
- [ ] Source Health distinguishes `policy-blocked` (environment egress) from target-side failures — see Fetching discipline