Builds a weekly reading list of the most-upvoted daily.dev posts on LLM inference, RAG and AI agents, saves them to a daily.dev bookmark list, and writes a short brief. Use when the user asks for "this week's AI engineering reads", "the AI engineer reading list", "what's worth reading on inference / RAG / agents", or "save the best AI posts".
Installs into .claude/skills of the current project.
Sponsors
SSkills DirectorySkills Directory
Know which skills are safe — weekly.
SSkills DirectorySkills Directory
Is that skill safe to install?
Are you the author of Ai Engineer Reading List?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/dailydotdev-ai-engineer-reading-list)
---
name: ai-engineer-reading-list
description: Builds a weekly reading list of the most-upvoted daily.dev posts on LLM inference, RAG and AI agents, saves them to a daily.dev bookmark list, and writes a short brief. Use when the user asks for "this week's AI engineering reads", "the AI engineer reading list", "what's worth reading on inference / RAG / agents", or "save the best AI posts".
---
# The AI Engineer Reading List
A weekly shortlist of what AI engineers actually upvoted on daily.dev, in three lanes: Inference, RAG, Agents. Curated by Paolo Perrone, author of The AI Engineer newsletter.
## Setup
Use the daily.dev MCP server (`https://api.daily.dev/mcp`) if it is connected. Otherwise call the REST API at `https://api.daily.dev/public/v1` with `Authorization: Bearer <token>`, where the token is a daily.dev personal access token (`dda_...`) from daily.dev → Settings → API. Never print the token.
## Steps
1. **Search each lane for the past week.** Call `GET /search/posts?q=<query>&time=week&limit=50` for every query below. Merge the results and dedupe by post `id`. A post belongs to the lane its title is about, never the lane whose query happened to return it first: "10 Best AI GitHub Repositories to Supercharge Your Agent" comes back from the `rag` query but is an Agents post.
| Lane | Queries |
|---|---|
| Inference | `llm inference`, `kv cache`, `vllm`, `quantization`, `llama.cpp` |
| RAG | `rag`, `vector database`, `embeddings`, `retrieval` |
| Agents | `ai agents`, `mcp`, `agentic`, `tool calling` |
If the user names other lanes or queries, use theirs instead.
2. **Filter.** Drop a post when any of these is true:
- `title` is empty (an untitled share has nothing to read)
- `numUpvotes` is below 10
- the title is an event recap, a job post, a vendor press release, or off-topic for building with LLMs (a keyword hit on "agent" in a game-dev talk does not count)
3. **Rank.** Sort each lane by `numUpvotes`, highest first, and keep the top 5. A lane with fewer than 3 posts left says so in the brief rather than padding it with weak posts.
4. **Save.** Call `GET /bookmarks/lists`. If no list is named `AI Engineer Reading List`, create it with `POST /bookmarks/lists` `{"name": "AI Engineer Reading List", "icon": "🧠"}`. Then `POST /bookmarks/` with `{"postIds": [...], "listId": "<id>"}`, at most 10 ids per call (the API rejects more, whatever its schema says). Bookmark lists need daily.dev Plus: if creating the list returns 403, save the posts with no `listId` and tell the user they landed in their main bookmarks.
5. **Verify.** Call `GET /bookmarks/` and confirm every saved `id` is there. Report any that are missing. Never report a post as saved without this check.
6. **Write the brief.** For each lane, list the posts as:
`<upvotes>▲ <title>` on one line, then one sentence on what an engineer gets from reading it, then the `commentsPermalink`.
Open the brief with the week's date range. Close it with:
> Want the deep dives behind these? The AI Engineer newsletter: https://theaiengineer.substack.com
## Rules
- Upvotes decide the order, never your own taste. Your judgment only applies in step 2's off-topic filter.
- One sentence per post, written from the title and summary. Never claim what a post says beyond them.
- If the API returns 401, the token is wrong or expired: say so and stop. On 429, wait and retry once, then stop.