I have a love-hate relationship with browser tabs. I need a lot of them to work, but once I pass the 30-tab mark, my browser bar becomes useless.
Google Chrome actually experimented with an auto-grouping feature a while back, but they removed it. I tried finding alternatives on the Chrome Web Store, but they all had the same problem: They were lazy.
Most existing extensions group tabs based on the domain, even they calling LLM to group it. If they see youtube.com, they dump it in a “YouTube” folder. This is useless for me. If I have 5 tabs open for “Lofi Music” and 5 tabs open for “Python Tutorials,” those shouldn’t be in the same group. One is Work, the other is Background Noise.
I realized that to actually organize tabs, the software needs to read the page, not just the URL. So I spent my free time building Group Tab AI.
How it actually works

I didn’t want to over-engineer this, but I needed it to be smart. When you click the button, the extension doesn’t just look at the link. It injects a script to grab the “context” of the page, the H1 title, the meta description, and a snippet of the body text.
It sends that data to an LLM (I set it up to work with either OpenAI or Gemini). Because it reads the content, it can tell that a GitHub page for a “React Library” is different from a GitHub page for “Tracking Issues.”
I’m using Google Gemini 2.0 Flash for this mostly, with the thinkingBudget set to 0. It’s fast enough that by the time I blink, the tabs are sorted.
I spent nights tweaking prompts to make it focus on tasks, not domains with extra context from the website contents along with careful prompt to let them reasoning and choose. For example, if you’re a dev, it might make groups like “Bug Hunting” or “API Docs.” Designers get “Mockups” or “Inspo.” It works for anyone,
students with class notes, marketers with campaigns.

The feature I actually wanted: It learns
This is the part I’m most proud of. I know AI isn’t perfect. It’s going to mess up. It might group a design blog under “Development” instead of “Inspiration.”
Usually, with AI tools, you just have to live with the bad output. But I built a Learning System into this.
- If the AI groups something wrong, I manually move the tab to the right group.
- The extension records that move.
- After I’ve corrected it a few times, I can click a button to “Analyze Behavior.”
- The system looks at my corrections and rewrites its own system prompt.
Next time I run it, it knows: “Oh, he likes to keep his ‘Localhost’ tabs separate from his ‘Production’ tabs,” because it updated its own instructions based on my manual fixes.
The Tech Stack
For the frontend devs out there, I built this using Plasmo. It’s basically the Next.js of browser extensions, makes working with React and TypeScript in a chrome-extension environment actually bearable.
Everything is local. Your API keys are stored in your browser, and the learning data (your grouping habits) stays on your machine.
Try it out
It’s open source (GPL-3.0). I built it because I needed it, but if you’re tired of domain-based grouping that doesn’t actually help, give it a shot.
https://github.com/quochung-cyou/group-tab-ai-extension
Releases: https://github.com/quochung-cyou/group-tab-ai-extension/releases/











![[LibGDX | Java 2D Game] Phần 1: Cài đặt môi trường 30 image 19 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/04/image-19-1024x576.png)











![[Java Core] B8: File, sơ lược về test trong Java 43 image - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/03/image.png)
![[Java Core] B8: File, sơ lược về test trong Java 44 image 1 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/03/image-1.png)
![[Java Core] B8: File, sơ lược về test trong Java 45 image 3 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/03/image-3.png)
![[Java Core] B8: File, sơ lược về test trong Java 46 image 4 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/03/image-4.png)
![[Java Core] B8: File, sơ lược về test trong Java 47 image 5 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/03/image-5.png)
![[Java Core] B8: File, sơ lược về test trong Java 48 image 6 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/03/image-6-1024x1010.png)
![[Java Core] B8: File, sơ lược về test trong Java 49 image 7 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/03/image-7.png)
![[Java Core] B8: File, sơ lược về test trong Java 50 image 8 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/03/image-8.png)
![[Java Core] B8: File, sơ lược về test trong Java 51 image 9 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/03/image-9.png)
![[Java Core] B8: File, sơ lược về test trong Java 52 image 10 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/03/image-10.png)
![[Java Core] B8: File, sơ lược về test trong Java 53 image 11 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/03/image-11-1024x576.png)
![[Java Core] B7: Exception trong Java 55 image - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-1024x536.png)
![[Java Core] B7: Exception trong Java 56 image 1 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-1.png)
![[Java Core] B7: Exception trong Java 57 image 2 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-2-1024x434.png)
![[Java Core] B7: Exception trong Java 58 image 3 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-3.png)
![[Java Core] B7: Exception trong Java 59 image 5 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-5.png)
![[Java Core] B7: Exception trong Java 60 image 6 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-6-1024x513.png)
![[Java Core] B7: Exception trong Java 61 image 7 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-7-1024x718.png)
![[Java Core] B7: Exception trong Java 62 image 8 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-8-1024x841.png)
![[Java Core] B7: Exception trong Java 63 image 9 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-9-1024x780.png)
![[Java Core] B7: Exception trong Java 64 image 10 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-10-1024x810.png)
![[Java Core] B7: Exception trong Java 65 image 11 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-11-1024x841.png)
![[Java Core] B7: Exception trong Java 66 image 12 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-12.png)
![[Java Core] B7: Exception trong Java 67 image 13 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-13-1024x647.png)
![[Java Core] B7: Exception trong Java 68 image 15 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-15.png)
![[Java Core] B7: Exception trong Java 69 image 16 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-16-1024x570.png)
![[Java Core] B7: Exception trong Java 70 image 17 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-17-1024x725.png)
![[Java Core] B7: Exception trong Java 72 image 20 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-20-1024x564.png)
![[Java Core] B7: Exception trong Java 73 image 21 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/02/image-21-1024x796.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 75 image 60 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-60.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 76 image 62 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-62.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 77 image 63 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-63.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 78 image 64 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-64-719x1024.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 79 image 65 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-65.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 80 image 66 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-66-1024x869.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 81 image 67 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-67-1024x883.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 82 image 68 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-68-1024x757.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 83 image 69 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-69-1024x594.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 84 image 70 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-70-1024x1006.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 85 image 71 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-71-964x1024.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 86 image 72 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-72-1024x976.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 87 image 73 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-73-1024x320.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 88 image 74 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-74-954x1024.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 89 image 75 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-75-1024x474.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 90 image 76 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-76-1024x941.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 91 image 77 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-77-1024x338.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 92 image 78 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-78-1024x958.png)
![[Java Core] B6: Design Pattern Iterator. Iterable và Collection trong Java 93 image 79 - quochung.cyou PTIT](https://quochung.cyou/wp-content/uploads/2024/01/image-79-1024x658.png)