A local TypeScript CLI assistant that combines GitHub notifications and Gmail messages, prioritizes urgent items, and generates a friendly daily action summary using a Groq-hosted model through the OpenAI SDK.
- Fetches GitHub notifications via Nango
- Fetches recent Gmail messages via Nango
- Scores urgency for GitHub and Gmail items
- Tracks new items since the last run using local digest state
- Prints a compact digest snapshot and an AI-written plan in the terminal
- Node.js + TypeScript
@nangohq/nodefor connected account API callsopenaiSDK pointed to Groq endpointdotenvfor local environment variables
- Node.js 18+
- Nango connection IDs for GitHub and Gmail
- Nango integration IDs (provider config keys) for GitHub and Gmail
- Groq API key
- Install dependencies:
npm install- Create your local env file from the example:
cp .env.example .envOn Windows PowerShell:
Copy-Item .env.example .env- Fill in required values in
.env:
NANGO_SECRET_KEYGROQ_API_KEYNANGO_GITHUB_CONNECTION_IDNANGO_GMAIL_CONNECTION_IDNANGO_GITHUB_PROVIDER_CONFIG_KEY(from your Nango integration ID / provider config key)NANGO_GMAIL_PROVIDER_CONFIG_KEY(from your Nango integration ID / provider config key)
-
NANGO_SECRET_KEY: Get this from your Nango account settings (server secret key). -
NANGO_GITHUB_CONNECTION_ID: In Nango, open your connected GitHub account and copy the connection ID. -
NANGO_GMAIL_CONNECTION_ID: In Nango, open your connected Google Mail account and copy the connection ID. -
NANGO_GITHUB_PROVIDER_CONFIG_KEY: In Nango, open the GitHub integration and copy its integration ID (provider config key). -
NANGO_GMAIL_PROVIDER_CONFIG_KEY: In Nango, open the Gmail integration and copy its integration ID (provider config key). -
GROQ_API_KEY: Create or copy this from your Groq API keys page in the Groq console.
Optional:
DEBUG(trueto print raw payloads)GITHUB_NOTIFICATIONS_LOOKBACK_DAYS(default:30)
npx ts-node src/index.tsDIGEST SNAPSHOT: quick totals and top itemsGITHUB NOTIFICATIONS: raw normalized GitHub data (shown whenDEBUG=true)GMAIL MESSAGES: raw normalized Gmail data (shown whenDEBUG=true)ASSISTANT: friendly prioritized summary and action plan
The app stores last-run state in .digest-state.json to calculate what is new since the previous run.
Sensitive and local-only files are ignored by git:
.env.env.*(except.env.example).digest-state.jsonnode_modules/dist/
- This project is currently optimized for local single-user use.
- Do not commit real secrets; use
.env.exampleas the template for GitHub.