Automated morning tech news digest powered by Claude Code + MCP.
Runs daily, collects tech news from RSS feeds and GitHub releases, then uses Claude to summarize everything into a personalized Markdown digest.
curl -sL https://github.com/kalinichenko88/ai-digest/releases/latest/download/install.sh | bash- Download the latest release from GitHub Releases
- Unpack:
tar -xzf ai-digest-v*.tar.gz - Run:
cd ai-digest && ./install.sh
./run.sh update- Docker
- Claude Code CLI with Max subscription
git clone https://github.com/kalinichenko88/ai-digest.git
cd ai-digest
cp .env.example .envdocker pull ghcr.io/kalinichenko88/ai-digestOr build locally:
docker build -t ghcr.io/kalinichenko88/ai-digest .Edit config/sources.yml to customize your news sources.
Or use /add-source in Claude Code to add sources interactively.
Edit config/delivery.yml:
language: en # digest language (en, ru, etc.)
output_path: ~/digests # where to save digest files
notification: true # macOS notification when doneTip: Set
output_pathto a folder inside your Obsidian vault (e.g.~/Obsidian/Digests) to read digests directly in Obsidian. If you have Obsidian Sync enabled, digests will be available on all your devices.
Edit CLAUDE.md with your stack, active projects, and interests.
This personalizes the "Relevant to Your Projects" section.
./scripts/run.shai-digest does not include a built-in scheduler — it runs once and exits. To get daily digests, set up scheduling yourself.
macOS — Shortcuts Automation (recommended):
- Open Shortcuts app
- Create new Automation → Time of Day (e.g. 8:00 AM)
- Add "Run Shell Script" action
- Set shell to
/bin/bash - Paste:
export PATH="$HOME/.local/bin:/opt/homebrew/bin:/usr/local/bin:$PATH"
cd /path/to/ai-digest
./run.shNote: Apple Shortcuts runs with a minimal
PATH. Theexport PATHline adds Homebrew (/opt/homebrew/bin) and Claude Code ($HOME/.local/bin) so thatclaudeanddockerare found.
Linux / macOS — cron:
# Run every day at 8:00 AM
0 8 * * * /path/to/ai-digest/run.shWithout a token, GitHub API allows 60 requests/hour. With a token: 5,000 requests/hour.
- Create a token at https://github.com/settings/tokens (no scopes needed for public repos)
- Add to
.env:
GITHUB_TOKEN=ghp_your_token_here
# Run digest
./scripts/run.sh
# Add a source interactively (in Claude Code)
/add-source
# Validate sources config (in Claude Code)
/validate-sources
# View latest digest
cat "$(ls -1t ~/digests/*.md | head -1)"
# Check logs
tail -f logs/$(date +%Y-%m-%d).mdFor local development without Docker:
# Install dependencies
npm install
# Build MCP server
npm run build
# Watch mode (rebuild on changes)
npm run dev
# Run tests
npm test
# Run tests in watch mode
npm run test:watch
# Lint and format
npx @biomejs/biome check --write src/Use the /release skill in Claude Code to create a new release:
/release 1.2.0
This bumps the version in package.json, generates a changelog, creates a git tag, and publishes a GitHub Release.
To use the native MCP server (without Docker), update .claude/settings.json:
{
"mcpServers": {
"ai-digest-mcp": {
"command": "node",
"args": ["dist/mcp-server.js"]
}
}
}├── Dockerfile # Multi-stage Docker build
├── biome.json # Biome linter/formatter config
├── src/ # MCP server source
│ ├── mcp-server.ts # Server entry point
│ ├── tools/ # Collection tools
│ └── types.ts # Shared types
├── config/ # Configuration
│ ├── sources.yml # News sources
│ └── delivery.yml # Output settings
├── .claude/skills/ # Claude Code skills
│ ├── ai-digest/ # /ai-digest — run the full digest pipeline
│ ├── add-source/ # /add-source — add a new source interactively
│ └── validate-sources/ # /validate-sources — validate config & check URLs
├── .github/workflows/ # CI/CD
│ └── ci.yml # Quality checks + Docker + release pipeline
├── scripts/run.sh # Entry point
├── .env.example # Environment variables template
└── CLAUDE.md # Personal context