Home (All Topics) → Technology → Software → AI-Created Software
By Marios Alexandrou on September 9, 2026.
The following AI-generated aka vibe-coded software. The software is specific to my needs and my system and may not work for you or your system. Support is limited, but if you report a bug I'll certainly look into it. All code is provided in a zip file for you to review should you choose.
A Chrome extension for handling link dumps. Copy a block of text, click the toolbar icon, see every link it contains, and decide what happens to them: open as tabs, save to a dated bookmarks folder, or push to the reading list. It also works in reverse — copy your open tabs back out to the clipboard.
Useful when someone sends you twenty links in a chat message, an email, or a spreadsheet column.
Preview before anything opens. The popup lists every link it found, with a checkbox on each. Untick the ones you don’t want.
Nothing opens until you say so.
Opens in batches. Tabs are created five at a time with a short pause between batches, so a long list doesn’t hit the network all at once. Both numbers are configurable.
Asks twice above a threshold. Past 15 selected links (adjustable), the open button needs a second click.
Three destinations. Open as tabs, save to a timestamped bookmarks folder under Other bookmarks, or add to Chrome’s reading list.
Copies your tabs out. One click puts every web URL in the current window on the clipboard, either as a plain list or as Markdown links with page titles.
Works without the popup. Keyboard shortcuts and a right-click menu item cover the cases where opening the popup is the slow part.
Cleans links up. Trailing punctuation is trimmed, so https://example.com, in a sentence doesn’t become a broken URL, and utm_source, fbclid, gclid and similar tracking parameters are stripped by default. Links that differ only by www., a trailing slash, or host capitalisation are treated as one.
chrome://extensions.manifest.json.Requires Chrome 127 or later. The reading list needs Chrome 120+, and chrome.action.openPopup() — used as a fallback when a shortcut can’t reach the clipboard — needs 127. On a Chromium browser without the reading list API, that button hides itself rather than failing.
Copy some text, click the icon. The popup reads the clipboard as it opens and shows what it found. Tick and untick, then choose Open tabs, Bookmark, or Reading list.
If Chrome blocks the clipboard read, the popup says so and opens a textarea instead — paste there and click Scan this text. That panel is always available under Paste text instead, so you can also scan text you never copied.
| Shortcut | Action |
|---|---|
Alt+Shift+V |
Open the popup |
Alt+Shift+O |
Open every link on the clipboard, no preview |
Alt+Shift+C |
Copy this window’s tab URLs to the clipboard |
The last two never show the popup. Since there’s nowhere to print a status line, they report through the toolbar badge: a count in blue for tabs opened, green for tabs copied, grey 0 when nothing was found, and amber ? if the clipboard couldn’t be read (which also opens the popup as a fallback).
Chrome reserves some combinations. Rebind anything that clashes at chrome://extensions/shortcuts, reachable from the options page.
Select text on any page, right-click, and choose Open links in selection. Nothing has to be copied first.
The handler reads the live selection through chrome.scripting rather than trusting info.selectionText, which Chrome truncates on long selections. That’s legal without host permissions because a context-menu click grants activeTab for that tab.
Open with the gear in the popup, or from chrome://extensions. Everything saves as you change it.
| Setting | Default | Notes |
|---|---|---|
| Confirmation threshold | 15 tabs | Second click required above this |
| Keep current tab in focus | on | Off jumps to the first link after the batch finishes |
| Remove tracking parameters | on | Applies to opening and saving alike |
| Batch size | 5 tabs | |
| Delay between batches | 400 ms | 0 disables throttling |
| Copy tabs as | one URL per line | Or Markdown links with titles |
Settings use storage.sync, so they follow your Chrome profile across machines.
clipboard-tabber/
├── manifest.json Permissions, commands, popup and options registration
├── lib.js Shared: settings, URL extraction, opening, saving
├── background.js Service worker: context menu, shortcuts, badge
├── offscreen.html Clipboard host for the service worker
├── offscreen.js Clipboard read/write via execCommand
├── popup.html Popup markup
├── popup.js Popup logic: preview, actions, status
├── options.html Options markup
├── options.js Options logic: auto-save, clamping, reset
├── styles.css Shared styles, including dark mode
└── icons/
├── icon16.png
├── icon48.png
└── icon128.png
A few things that aren’t obvious from reading the source.
Tabs are always created inactive. Creating an active tab closes the popup, which would kill the loop partway through and lose every remaining batch. When “keep current tab in focus” is off, the extension still creates everything in the background and activates the first tab only after the run completes.
The service worker borrows a clipboard. MV3 service workers have no DOM, so navigator.clipboard doesn’t exist there. The shortcut handlers spin up an offscreen document, ask it to read or write, and close it again. The offscreen document uses document.execCommand rather than the async clipboard API, because an offscreen document is never focused and the async API requires focus.
Bookmark folder lookup is defensive. It prefers the node with folderType === 'other', falls back to the well-known id '2', and then to the last root child, rather than hardcoding an id that varies across Chromium forks.
Reading list entries need a title before the page has ever loaded, so the extension synthesises one from the host and path. Adding a URL that’s already on the list throws; those are counted as skipped and reported rather than aborting the batch.
Deduplication is normalised, opening is not.www. and trailing slashes are ignored when deciding whether two links are the same, but the URL that actually opens is the one that was on the clipboard, minus tracking parameters.
| Permission | Why |
|---|---|
clipboardRead |
Read the copied text |
clipboardWrite |
Write the tab list back out |
tabs |
Read tab URLs and titles for the copy-out feature |
bookmarks |
Create the dated folder |
readingList |
Add entries to the reading list |
storage |
Save settings |
contextMenus |
The right-click item |
activeTab + scripting |
Read the live text selection on context-menu click |
offscreen |
Give the service worker clipboard access |
No host permissions are requested. The extension can’t read or modify any page you visit; the only page code it ever runs is a one-line selection read, on the tab you right-clicked, at the moment you right-click it.
http:// and https:// links. Bare example.com and www.example.com are ignored, as are mailto: and ftp:.href attributes — copying styled links out of a document — aren’t seen unless the URL is also visible as text.google.com/url?q= links aren’t unwrapped, so you land on the tracker’s redirect rather than going straight to the destination.Alt+Shift+O depends on the offscreen clipboard read. If Chrome refuses it, the extension opens the popup instead of failing silently, which costs you a click.
2.0 — Preview step with per-link checkboxes; batched opening; bookmarks and reading list destinations; copy window tabs to clipboard; keyboard shortcuts; selection context menu; manual paste fallback; options page; tracking-parameter stripping; dark mode.
1.0 — Read clipboard, open every link found.


Leave a Reply