gtabs
Health Warn
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Warn
- network request — Outbound network request in src/llm.ts
Permissions Pass
- Permissions — No dangerous permissions requested
This Chrome extension uses large language models (LLMs) to automatically organize browser tabs into color-coded groups based on their content and your usage habits.
Security Assessment
Overall risk: Medium. The tool requires access to your open browser tabs, which can include sensitive URLs and work-related data. To organize these tabs, the extension makes outbound network requests (found in `src/llm.ts`) to send tab information to external AI providers. It does not request dangerous system permissions or execute shell commands, and no hardcoded secrets were detected. The primary risk is data exposure to the third-party LLM you configure it to use.
Quality Assessment
The project is actively maintained, with its most recent code push happening today. It uses the permissive MIT license and includes a clear description of its capabilities. However, community trust and visibility are currently very low. With only 5 GitHub stars, the tool has not been widely adopted or heavily vetted by a large audience. Developers should expect a smaller support community and potential edge-case bugs typical of newer projects.
Verdict
Use with caution — the code is transparent and actively maintained, but you should verify your LLM provider's data privacy policies before sharing your browsing data with a low-visibility tool.
AI-Powered Tab Organizer for Chrome — groups your tabs using any LLM
gTabs — AI Tab Organizer for Chrome
Your tabs are a mess. One click fixes that.
gTabs uses any LLM to intelligently organize your Chrome tabs into color-coded groups.
It learns from your behavior, remembers your corrections, and gets smarter over time.
Star on GitHub · Install · Report Issue

What's New in v0.4
Smart Learning — gTabs now learns from every interaction. Corrections you make before applying count 3x. Groups you remove are remembered and avoided. Domain affinity is weighted by frequency and recency with a 14-day decay half-life.
Scheduled Re-org — Set daily or weekly automatic re-organization at a time you choose. Wake up to perfectly organized tabs.
Pinned Groups — Mark groups as permanent so they survive re-organization. Pin "Comms" once, never lose it.
Group Health — Drift detection warns when groups become incoherent. Merge/split suggestions appear when groups overlap or grow too large.
Smarter Routing — New tabs opened from an existing grouped tab automatically join that group. Path-level affinity means github.com/myorg and github.com/trending can map to different groups.
Screenshots
| Settings & Providers | Smart Learning | Organized Tabs |
|---|---|---|
![]() |
![]() |
![]() |
Features
Organize
| One-click Organize All | AI groups every tab in your window by topic |
| Ungrouped Only | Only touches tabs not already in a group |
| Suggestion-first UX | Review, rename, recolor, remove — then apply |
| Undo | Instantly restores the previous tab arrangement |
| Smart Merge | Pre-assigns tabs to existing groups by title similarity before calling the LLM |
Learn
| Weighted Affinity | Tracks how often each domain is placed in each group, decays stale patterns over 14 days |
| Path-level Affinity | github.com/myorg maps separately from github.com/trending for multi-tenant sites |
| Correction Tracking | When you rename groups or move tabs before applying, those edits are remembered as 3x signals |
| Rejection Memory | When you remove a suggested group, gTabs remembers to avoid that grouping for 30 days |
| Pattern Mining | Discovers domains that are frequently grouped together and uses them as co-occurrence hints |
| Opener Awareness | New tabs opened from an existing grouped tab prefer joining that group |
Maintain
| Scheduled Re-org | Daily or weekly automatic re-organization at a configurable time |
| Pinned Groups | Mark groups as permanent — they survive re-organization |
| Group Drift Detection | Warns when groups become incoherent and may need refreshing |
| Merge/Split Suggestions | Detects overlapping groups (>60%) and oversized groups (>10 tabs, >5 domains) |
| Stale Tab Purge | Remove inactive tabs older than a configurable threshold |
Tools
| Focus Mode | Collapses all groups except the active one |
| Sort Groups | Alphabetically sorts tabs by domain within each group |
| Clear Groups | Ungroups everything in the current window |
| Duplicate Detection | Finds tabs with the same URL |
| Zero-LLM Fast Routing | Routes new tabs into existing groups via affinity — no API calls |
| Domain Rules | Hard-wire github.com to Dev, always, skipping the LLM entirely |
Providers
| Provider | Cost | Setup |
|---|---|---|
| Groq | Free (rate limited) | Get key — no credit card |
| Grok (xAI) | $25 free credit | Get key |
| OpenRouter | Free models available | Get key |
| Ollama | Free (local) | Install — no key needed |
| Chrome AI | Free (local) | Requires Chrome origin trial |
| Anthropic | Paid | Get key |
| OpenAI | Paid | Get key |
Quick Start
Install from release
- Download
gtabs-extension.zipfrom Releases - Unzip anywhere
- Open
chrome://extensions→ enable Developer mode - Load unpacked → select the unzipped folder
- Pin gTabs to your toolbar
Build from source
git clone https://github.com/vaddisrinivas/gtabs.git
cd gtabs
npm install
npm run build # → dist/
Configure (30 seconds)
- Click gTabs icon → Settings
- Pick a provider → paste API key → pick model → Test
- Return to popup → Organize All
How It Works
User clicks "Organize All"
|
|-- Domain rules applied instantly (no LLM)
|
|-- Smart merge: title-match ungrouped tabs to existing groups
|
|-- Remaining tabs sent to LLM with:
| |-- Weighted affinity (github.com -> "Dev" 12x, recent)
| |-- Correction signals (user moved amazon.com to "Shopping" 3x)
| |-- Rejection signals (AVOID: news.com in "Dev")
| |-- Co-occurrence ([github.com, stackoverflow.com] often together)
| |-- Opener hints (Tab 5 opened from Tab 2)
| |-- History patterns (50 past groupings summarized)
| '-- Prompt: "Group into max N groups, return JSON"
|
|-- Response parsed -> editable suggestion cards shown
|
'-- User reviews -> Apply -> chrome.tabs.group()
|-- Weighted affinity updated (frequency + timestamp)
|-- Path-level affinity updated for multi-tenant sites
|-- History recorded, costs tracked
'-- Corrections captured if user edited before applying
Architecture
Popup / Options UI
|
Background Service Worker
|-- LLM Provider Adapter (OpenAI, Anthropic, Groq, xAI, Ollama, Chrome AI)
|-- Grouper (prompt builder, parser, domain rules, title matching)
|-- Storage (weighted affinity, corrections, rejections, co-occurrence, history)
'-- Chrome APIs (tabs, tabGroups, alarms, storage)
| File | Role |
|---|---|
types.ts |
All interfaces — weighted affinity, corrections, rejections, settings |
storage.ts |
Chrome storage wrapper — migration, decay math, summarizers |
grouper.ts |
Prompt builder, JSON parser, title matching, domain rules |
llm.ts |
Provider-agnostic LLM client with token counting |
background.ts |
Service worker — orchestration, drift detection, scheduled re-org |
popup.ts/html |
Action popup — organize, pin, correct, reject, merge/split |
options.ts/html |
Settings — providers, learning toggles, schedules, pinned groups |
Settings
Behavior
- Max Groups (2–15) — limit the number of groups AI creates
- Auto-organize Threshold (2–25) — trigger when ungrouped tabs exceed this
- Title Truncation (20–200) — max tab title chars sent to the LLM
- Stale Tab Age (1–168h) — threshold for purging inactive tabs
- Auto-organize — silently group when threshold met
- Protect Existing Groups — only organize ungrouped tabs
- Zero-LLM Fast Routing — route new tabs via affinity, no API calls
- Auto-pin Web Apps — pin Gmail, Calendar, Jira, Spotify to the left
Smart Learning
- Correction Tracking — learn from your edits before applying (on by default)
- Rejection Memory — remember removed groups and avoid them (on by default)
- Group Drift Detection — warn when groups become incoherent
- Pattern Mining — discover co-occurring domains from history
- Drift Threshold (20–80%) — coherence below which a group is flagged
Scheduled Re-org
- Schedule — Off / Daily / Weekly
- Time of Day (0–23) — hour when scheduled re-org runs
Pinned Groups
- Groups marked as pinned survive all re-organization
- Pin from popup (pin icon on each suggestion card) or settings page
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
Cmd+Shift+G / Ctrl+Shift+G |
Organize all tabs |
Cmd+Shift+Z / Ctrl+Shift+Z |
Undo last grouping |
Development
npm install # install dev deps
npm test # run 287 tests
npm run test:watch # watch mode
npm run build # build -> dist/
npm run dev # watch + rebuild on change
Chrome Web Store Submission
HTTP localhost permission justification
manifest.json declares http://localhost:11434/* in host_permissions. Chrome Web Store policy requires a written justification for plain-HTTP host permissions. Use the following text when submitting:
"The extension optionally connects to a locally running Ollama instance (http://localhost:11434) for private, on-device LLM inference. This is the only non-HTTPS endpoint and is entirely user-configured. No data leaves the user's machine when this provider is selected."
Pre-submission checklist
- HTTP localhost justification included in store listing (see above)
-
"windows"permission added tomanifest.json(required forchrome.windows.getCurrent()— seereports/mv3-audit.md) - Store screenshots match current UI
- Version bumped in
manifest.jsonandpackage.json
Contributing
PRs welcome. Run npm test before submitting. Zero runtime dependencies — keep it that way.
License
MIT
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found


