kto
A generic, flexible web change watcher with AI-powered analysis.
kto monitors web pages for changes and notifies you when something interesting happens. It can use Claude AI to intelligently filter noise and only alert you about changes that matter.
Features
- Simple setup - Just give it a URL and describe what you're watching for
- Smart URL detection - Auto-detects optimal endpoints for GitHub, Reddit, HN, PyPI, and more
- Deep research mode - Thorough AI analysis to find the best monitoring approach
- AI-powered analysis - Uses Claude to understand changes, not just detect them
- Multiple notification channels - ntfy, Gotify, Slack, Discord, Telegram, Pushover, Matrix, or custom commands
- Shell command monitoring - Watch output of any command, not just URLs
- JavaScript support - Render JS-heavy pages with Playwright
- Watch tags - Organize watches with tags and filter by tag
- Quiet hours - Suppress notifications during sleep/focus time
- Reminders - Set one-time or recurring reminders with simple time syntax
- TUI dashboard - Interactive terminal interface for managing watches and reminders
- Background service - Runs as systemd/launchd service or cron job
- Machine-readable output - JSON output for scripting and automation
Installation
# Recommended: prebuilt binary (fast, no compile)
# From crates.io (requires Rust)
# Via install script
|
# From source
&&
Quick Start
# First-time setup (guided wizard)
# Or manually:
Shell Completions
# Bash
# Zsh
# Fish
Dependencies
- For JS rendering: Node.js + Playwright (
kto enable-js) - For AI analysis: Claude CLI (optional)
Usage
Creating Watches
# Interactive wizard with AI suggestions
# Quick non-interactive setup
# With JavaScript rendering
# Monitor shell command output
# With tags for organization
# From clipboard
# Deep research for complex sites (uses more AI tokens)
Smart URL Detection
kto automatically detects optimal URLs for common sites:
# GitHub releases - auto-detects Atom feed
# → Uses https://github.com/astral-sh/ruff/releases.atom with RSS engine
# Reddit - auto-detects RSS feed
# → Uses https://reddit.com/r/rust.rss
# Hacker News, PyPI, GitLab, Codeberg also supported
Inspecting URLs
# Preview what kto extracts (before creating a watch)
# Real-time ephemeral monitoring (no database)
Managing Watches
# List all watches
# Show details
# Edit a watch
# Pause/resume
# Delete
Reminders
Set simple reminders that trigger notifications without monitoring a URL:
# Reminder in 30 minutes
# Reminder at a specific time (uses your local timezone)
# Recurring reminder
# With a note/message body
# List reminders
# Pause/resume
# Delete
Time formats for --in: 30s, 5m, 2h, 1d, 1w
Testing & History
# Test a watch (fetch now, show what would happen)
# View change history
# View recent activity across all watches
Running the Daemon
# One-time check (for cron)
# Continuous daemon (foreground)
# Install as system service (recommended)
# Manage service
Notifications
# Interactive setup
# Direct setup (non-interactive)
# View current settings
# Send test notification
# Quiet hours (suppress notifications during this time)
# Per-watch notification override
Notifications include a diff preview showing what changed:
https://example.com/page
+3 / -2 changes
[-old text][+new text] some context
TUI Dashboard
Navigate with j/k or arrow keys. Press Tab to cycle between Watches, Changes, and Reminders panes. Use e to edit watches, p to pause/resume, d to delete, ? for help, q to quit.
Configuration
Configuration is stored in ~/.config/kto/config.toml:
= 900
[]
= "ntfy"
= "my-alerts"
# Per-domain rate limits (requests per second)
# Prevents IP bans when watching multiple pages on same domain
[]
= 0.5 # 2 second delay between amazon requests
= 1.0 # 1 second delay
Database is stored at ~/.local/share/kto/kto.db.
Environment Variables
KTO_DB- Override database path (useful for testing)
AI-Powered Analysis
When Claude CLI is installed, kto can use AI to:
- Smart setup - Analyze pages and suggest optimal watch settings
- Change filtering - Only notify about meaningful changes (ignore timestamps, ads, etc.)
- Summaries - Get one-line summaries of what changed
# Enable AI agent for a watch
# With custom instructions
Deep Research Mode
For complex sites where simple analysis isn't enough, use --deep for thorough investigation:
Deep research mode:
- Fetches with both HTTP and JavaScript to compare content
- Discovers RSS/Atom feeds and JSON-LD structured data
- Searches the web for site-specific APIs and monitoring tips
- Recommends stable CSS selectors
Requires Claude CLI:
|
JavaScript Rendering
For pages that require JavaScript:
# One-time setup
# Create watch with JS rendering
Scripting & Automation
All read commands support --json for machine-readable output:
# Get watch count
|
# Get specific watch URL
|
# Check if changes detected
|
# Create watch non-interactively
KTO_DB=/tmp/test.db
Health Check
Shows status of:
- kto binary version
- Claude CLI (for AI features)
- Node.js (for JS rendering)
- Playwright/Chromium
- Database
License
MIT
Contributing
Contributions welcome! Please read CLAUDE.md for development context.