English · 简体中文
A Chrome extension that puts newly opened, ungrouped web pages — including links opened from other apps — into a tab group you choose, instead of at the far end of the tab strip.
Report a bug · Request a feature
Table of Contents
When another app (Notes, a chat client, a mail client) opens a link in Chrome, the new tab always lands at the end of the tab strip. If you keep the pages you are working on in one tab group, you end up dragging every one of them in by hand.
This extension does that step for you:
- New, ungrouped web pages join a target group. The default name is
Current Work, and you can change it. - An open group with the same name is reused; if there is none, a blue group is created.
- Click the toolbar icon to rename the target group, pause and resume grouping, or switch the interface language.
- No network requests, no content scripts, no stored browsing history.
The interface is in English by default and can be switched to Simplified Chinese (简体中文) from the language menu in the popup. The extension's name in chrome://extensions follows Chrome's own display language.
See the open issues for planned features and known issues.
- Google Chrome 102 or later (or another Chromium browser with tab groups)
The extension is installed as an unpacked extension.
- Download
current-work-grouper-v*.zipfrom the latest release and unzip it somewhere permanent — Chrome loads it from that folder, so do not move or delete it afterwards. Alternatively, clone the repository and use itsextension/folder. - Open
chrome://extensionsand turn on Developer mode in the top-right corner. - Click Load unpacked and select the folder that contains
manifest.json. - Pin Current Work · Auto-Group from the puzzle-piece menu in the toolbar.
To update, replace the files in the same folder and click the reload button on the extension's card in chrome://extensions. Keeping the same folder keeps your settings.
- Click the toolbar icon, enter the target group name under Target group name, and click Save settings.
- Click a web link in another app. The new tab appears in that group.
- To pause, clear Auto-group new tabs and save; the badge shows
OFF. Check it and save again to resume (ON).
The name is trimmed, must not be empty, and is matched literally, so Chinese characters, spaces and symbols all work. Changing it only affects tabs opened afterwards; existing groups are not renamed and existing tabs are not moved.
To change the language, pick English or 简体中文 in the menu at the top right of the popup; it applies right away. If you have never saved a group name, the default name follows the language (Current Work or 当前工作). If you used a version before 1.2.0 without saving a name, upgrading keeps 当前工作 as your saved name.
- A new HTTP or HTTPS page that is neither pinned nor already grouped joins the target group.
- A matching group in the new tab's own window is preferred. If the only match is in another window, the tab is moved there. Keep a single group with that name to avoid surprises.
- If no matching group is open, a new one is created. A saved group that is currently closed is not reopened.
- If the new tab was the active tab, the target group is expanded, and when the tab moved to another window, that window is focused.
- After grouping an active tab in the same window, briefly select another tab in the group and return to encourage the vertical tab strip to reveal its new position. Background tabs do not trigger this; skip it if no other non-discarded group member exists.
- Incognito windows, non-normal windows, browser pages (
chrome://),file://pages, and pinned or already grouped tabs are ignored. Tabs that were open before installation are left alone. - When a new tab's URL arrives late, the extension waits for it for up to 10 seconds. A blank new tab you open by hand is not grouped when you later type an address into it.
- The browser creates the tab before the extension can group it, so it may still appear at the end briefly. Extensions cannot read or set the native tab strip's scroll position. The reselection workaround may briefly show another page in the group, and its visual effect depends on the browser version.
- On macOS, Chrome gives links opened from other apps an opener tab too, so the extension cannot reliably tell an external link from one opened inside the browser. It therefore takes every new, ungrouped web page, including bookmarks, pages opened from within the browser and restored ungrouped tabs. Pause the extension before restoring a large session if you do not want those grouped.
- When an external link reuses an already open blank tab, it may not be grouped.
- Dragging tabs or closing the target window at the wrong moment can make one grouping attempt fail. The tab stays where Chrome put it and the badge shows
!. Pause and save, then enable and save again to reset it.
The extension requests three permissions:
| Permission | Used for |
|---|---|
tabs |
Reading the URL and state of new tabs |
tabGroups |
Finding, creating and updating tab groups |
storage |
Saving the group name, the on/off switch, the interface language and short-lived pending tab IDs |
It makes no network requests, injects no content scripts, has no history permission, sends no telemetry and never stores URLs. Pausing or removing the extension does not undo groupings it already made.
Built on the Chrome extension APIs chrome.tabs and chrome.tabGroups.
There are no third-party dependencies; you only need Node.js 20 or later.
git clone https://github.com/anyingiit/current-work-grouper.git
cd current-work-grouper
npm run lint # syntax check and manifest validation
npm test # behavior tests against a mocked Chrome API
npm run package # builds dist/current-work-grouper-v<version>.zipLoad the extension/ folder in chrome://extensions to try a change in Chrome.
Non-trivial features start as a spec. The repository is set up for Spec Kit: the project principles live in .specify/memory/constitution.md, and the /speckit-specify, /speckit-plan, /speckit-tasks and /speckit-implement skills under .claude/skills/ write a feature's spec, plan and tasks into specs/. The plan step checks the design against the constitution before any code is written. The checked-in files work without extra tools; install the specify CLI with uv tool install specify-cli --from git+https://github.com/github/spec-kit.git only if you want to refresh them. Small fixes and documentation edits can skip the spec and go straight to a pull request.
To release, bump the version in both extension/manifest.json and package.json, move the Unreleased entries in CHANGELOG.md under the new version, and push a v<version> tag. The release workflow runs the checks, builds the zip and publishes a GitHub release with it attached.
Contributions are welcome. Read CONTRIBUTING.md for how to open an issue or a pull request, and CODE_OF_CONDUCT.md for the standards expected of everyone taking part.
Please do not report security issues in public issues or pull requests. SECURITY.md explains how to report them privately.
Distributed under the MIT License. See LICENSE for details.
Project link: https://github.com/anyingiit/current-work-grouper