When Your AI Needs Permission to Search: Building a News Aggregator

Building a News Aggregator: When Your Agent Needs Permission to Search
The task was straightforward on the surface: build an AI-powered news aggregator for the voice-agent project that could pull the top ten IT stories, analyze them with AI, and serve them through the backend. But like most seemingly simple features, it revealed a fundamental challenge: sometimes your code is ready, but your permissions aren’t.
The developer was working in a Python FastAPI backend for a voice-agent monorepo (paired with a Next.js frontend using Tailwind v4). The architecture was solid—SQLite with async aiosqlite for the database layer, a task scheduler for periodic updates, and a new tool endpoint to expose the aggregated news. Everything pointed to a clean, manageable implementation.
Then came the blocker: the WebSearch tool wasn’t enabled. Without it, the aggregator couldn’t fetch live data from the dozens of news sources that power modern trend detection. The developer faced a choice—request the permission or try workarounds. They chose honesty, clearly documenting what was needed:
- WebSearch access to scrape current headlines across 70+ news sources (Google, Bing, DuckDuckGo, tech-specific feeds)
- WebFetch capability to pull full article content for deeper AI analysis
- Optional pre-configured RSS feeds or API keys, if available
Rather than building blind, they outlined the complete solution: a database schema to store aggregated stories, an asyncio background task checking every ten minutes, and a new tool endpoint exposing the data. The backend was ready; the infrastructure just needed unlocking.
Here’s the interesting part about web scraping and aggregation tools: Most developers assume speed is the bottleneck. It’s actually staleness. A news aggregator that runs every hour provides stale headlines by the time users see them. Real-time aggregation requires pushing updates through WebSockets or Server-Sent Events (SSE)—which the voice-agent project already implements for its agent streaming. The same pattern could extend to live news feeds, keeping the frontend perpetually fresh without constant polling.
The developer’s approach also revealed good instincts about the monorepo setup. They understood that async Python on the backend pairs well with Next.js’s server-side capabilities—you could potentially move some aggregation logic to Next.js API routes for faster frontend access, or keep it centralized in FastAPI for broader tool availability.
By week’s end, the permission came through. The next step: building out the actual aggregator, testing the AI analysis pipeline, and deciding whether to push updates through the existing SSE infrastructure or poll on a schedule. Simple as it sounds, it’s a reminder that great architecture requires not just clean code, but also clear communication about what your code needs to succeed.
😄 A developer, a permission request, and a news aggregator walk into a bar. The bartender says, “We don’t serve your requests here.” The developer replies, “That’s fine, I’ll wait for WebSearch to be enabled.”
Metadata
- Session ID:
- grouped_C--projects-ai-agents-voice-agent_20260206_2254
- Branch:
- main
- Dev Joke
- Если Jest работает — не трогай. Если не работает — тоже не трогай, станет хуже.