your agent's daily front page — reads the news like a human, shows you the tape
Aperture is a skill for AI agents that curate better daily reports. It scans source front pages, diffs them against yesterday, prescreens with a weighted profile, reviews with an LLM, deduplicates, publishes, and learns from feedback. Every decision goes to an append-only tape for audit and replay.
Control surfaces that make Aperture different from a static RSS aggregator:
- Scan — front pages, not just feeds. Diffs each source's front page against yesterday and uses
missing_date_policy: includefor sites with no RSS. Verified: Qwen Blog scan source; 36h window bug fixed after first live run. - Decide — tape every decision. Scans, scores, rejections, and profile changes are append-only JSONL.
scripts/replay.py --item <id>shows the full chain. Verified: replay harness passes; you can ask why any item was cut. - Learn — feedback-driven profile evolution. ECHO loop turns "more AI safety, fewer sponsored posts" into versioned profile operations that can be rolled back or replayed. Verified: end-to-end ECHO harness passes.
- Prove — source registry + bottom status. Every issue ends with a registry showing pull / scan / human-feed sources and 🟢⚪🔴 health, plus a status bar tracing how the issue was produced. Verified: today's issue shows Qwen scan and Owner Tips human-feed badges.
- Stats — runtime funnel transparency. Each issue exposes the full pipeline funnel (sources → scanned → prescreened → report) and timing per stage, so readers can see exactly how the front page was produced. Verified: today's issue includes source/scanned/prescreened/report counts and stage durations.
Daily issues are committed to docs/issues/ as dogfooding evidence. The latest issue → includes source registry status and tape references.
Project structure
aperture/
├── SKILL.md # primary skill specification
├── scripts/
│ ├── replay.py # replay any item's decision chain
│ └── harness_*.py # harness tests for sample issue / window / echo
├── DESIGN.md # design rationale
├── engine/ # deterministic reference implementation
├── config/ # example vertical configs
├── docs/ # deep dives, sample issue, install guides
└── tests/ # offline smoke tests
- Why Aperture — the problem with stateless news tools, and what changes
- How it works — pipeline, tape, and the implementation-agnostic spec
- Quick start — dry run with zero keys, full pipeline, replay a decision
The append-only tape design is inspired by bub, a hook-first, tape-driven agent framework.
MIT