AI-powered news digest tool. Automatically generates structured summaries (4H/daily/weekly/monthly) from Twitter and RSS feeds.
ClawFeed runs in read-only mode with zero credentials — browse digests, view feeds, switch languages. Authentication features (bookmarks, sources, packs) require additional credentials.
CredentialPurposeRequiredGOOGLE_CLIENT_IDGoogle OAuth loginFor auth featuresGOOGLE_CLIENT_SECRETGoogle OAuth loginFor auth featuresSESSION_SECRETSession cookie encryptionFor auth featuresAPI_KEYDigest creation endpoint protectionFor write API
Runtime dependency: SQLite via better-sqlite3 (native addon, bundled). No external database server required.
bash
# Install dependencies
npm install
# Copy environment config
cp .env.example .env
# Edit .env with your settings
# Start API server
npm start
Configure in .env file:
VariableDescriptionRequiredDefaultDIGEST_PORTServer portNo8767GOOGLE_CLIENT_IDGoogle OAuth client IDFor auth-GOOGLE_CLIENT_SECRETGoogle OAuth client secretFor auth-SESSION_SECRETSession cookie encryption keyFor auth-API_KEYDigest creation API keyFor write API-AI_DIGEST_DBSQLite database pathNodata/digest.db``ALLOWED_ORIGINSCORS allowed originsNolocalhost
Runs on port 8767 by default. Set DIGEST_PORT env to change.
MethodPathDescriptionAuthGET/api/digestsList digests (?type=4h|daily|weekly&limit=20&offset=0)-GET/api/digests/:idGet single digest-POST/api/digestsCreate digest (internal)-GET/api/auth/googleStart Google OAuth flow-GET/api/auth/callbackOAuth callback endpoint-GET/api/auth/meGet current user infoYesPOST/api/auth/logoutLogout userYesGET/api/marksList user bookmarksYesPOST/api/marksAdd bookmarkYesDELETE/api/marks/:idRemove bookmarkYesGET/api/configGet configuration-PUT/api/configUpdate configuration-
Serve web/index.html via your reverse proxy or any static file server.
templates/curation-rules.md — Customize feed curation rulestemplates/digest-prompt.md — Customize the AI summarization promptCopy config.example.json to config.json and edit. See README for details.
text
handle /digest/api/* {
uri strip_prefix /digest/api
reverse_proxy localhost:8767
}
handle_path /digest/* {
root * /path/to/clawfeed/web
file_server
}