Skip to content

AsierCL/Gist

Repository files navigation

Gist

A JetBrains IDE plugin that fights context-switching fatigue by keeping you focused while automatically summarizing what you missed.

Demo


The problem

Modern software development is fragmented. You're deep in a debugging session when Slack pings. You finish a feature, push a commit, and come back to find the repo has drifted in ten different directions. You lose more time re-orienting than you spent away.

Gist solves two of the biggest culprits:

  1. Distraction while coding: Slack notifications interrupt your flow at the worst possible moment.
  2. Context loss after a break: coming back to a repo and not knowing what changed since your last commit.

What Gist does

Dynamic Do Not Disturb (Slack integration)

Gist watches your coding activity in real time and automatically sets your Slack status to Do Not Disturb while you're working. When you stop coding, it silently lifts it.

The idle detection isn't a simple timer — it adapts to your personal commit rhythm using an Exponential Moving Average (EMA) of your commit history:

  • Commit size — Do you tend to make small, frequent commits or large batch ones?
  • Inter-commit interval — How long do you typically work between commits?
  • Time of day — The threshold is more lenient during work hours (a pause is probably a think-pause, not an absence) and tighter at night.
  • Your own feedback — If the detection was wrong (you were still coding when it went idle), negative feedback nudges the threshold up. Positive feedback gently pulls it back down. These corrections persist and decay gradually so stale signals don't dominate forever.

Moreover, Gist allows users to personalize which messages are truly urgent through a list of important senders.

The result: a truly personal idle window — anywhere from 1 to 30+ minutes — that improves the more you use it.

Adaptive threshold pipeline

Diagram

Catch Up — AI-powered repo summary

Opening a project after a few days away shouldn't require reading every commit message. The Catch Up tab gives users the possibility to ask a large language model about changes since their last commit or within a specific date range. As a result, the LLM produces a concise, grouped summary of everything that has happened:

  • New features, bug fixes, refactors — grouped by theme.
  • 5–6 bullet points, not a wall of text.
  • Generated from the real git history, not a guess.

Architecture

src/main/kotlin/.../gist/
│
├── model/
│   └── CommitInfo.kt              # Data class for a single commit
│
├── services/
│   ├── ActivityService.kt         # Editor event listener + CODING/IDLE state machine
│   ├── AdaptiveThresholdEngine.kt # Computes the idle threshold from profile + feedback
│   ├── CommitProfileService.kt    # Persists EMA of commit size & interval (XML state)
│   ├── FeedbackService.kt         # Persists like/dislike feedback → multiplier (XML state)
│   ├── GitCommitService.kt        # Reads git history via IntelliJ's git4idea API
│   ├── LastCommitService.kt       # Caches & resolves the user's most recent commit
│   ├── OAuthService.kt            # Slack OAuth 2.0 flow (local callback server)
│   ├── OpenAIService.kt           # Calls GPT-4o-mini to summarize commit diffs
│   ├── RepoSummaryService.kt      # Orchestrates git history → prompt → OpenAI
│   ├── SlackService.kt            # Slack API: DND, status, messaging
│   └── UserIdentityService.kt     # Resolves git user.name / user.email
│
├── startup/
│   ├── CommitListenerRegistrar.kt # CheckinHandler: records commit metrics on push
│   └── MyProjectActivity.kt      # Plugin lifecycle: starts ActivityService
│
├── toolWindow/
│   ├── MainToolWindowFactory.kt   # Creates the two tool window tabs
│   ├── LastCommitPanel.kt         # "Catch Up" tab UI (Swing)
│   └── SlackToolWindowPanel.kt    # "Slack" tab UI (Swing)
│
└── utils/
    └── EnvReader.kt               # Reads API keys from env vars or .env file

Setup

Prerequisites

  • IntelliJ IDEA or any JetBrains IDE (2023.1+)
  • A Slack workspace where you can create an app
  • An OpenAI API key (for the Catch Up summary feature)

1. Clone and build

git clone https://github.com/AsierCL/Gist.git
cd Gist
./gradlew buildPlugin

2. Install the plugin

In your IDE: Settings → Plugins → Install Plugin from Disk → select the .zip from build/distributions/.

3. Configure API keys

Create a .env file in the project root (or set environment variables).

Gist will find the .env automatically. System environment variables take priority.

4. Connect Slack

Open the Slack tab in the Gist tool window and click Connect with Slack. A browser window will open for OAuth. After authorizing, you'll be redirected back and the plugin handles the rest.


Contributing

Pull requests are welcome. Please open an issue first for larger changes so we can discuss the direction.

./gradlew runIde     # Launch a sandboxed IDE instance with the plugin

License

This project is licensed under the MIT License. See the LICENSE file for the full text and details.

About

Adaptive focus and AI-driven repo summaries for JetBrains IDEs.

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages