Tabnotes is a Chrome and Edge extension for people who keep lots of tabs open. It puts every tab in a searchable side-panel table, lets you add notes and tags, and remembers useful tabs after they close.
Everything stays in your browser. Tabnotes does not read page contents, send data to a server, or require an account.
- Download
tabnotes-vX.Y.Z.zipfrom the latest release and extract it. - Open
chrome://extensionsin Chrome oredge://extensionsin Edge. - Turn on Developer mode, choose Load unpacked, and select the extracted folder.
- Optionally pin Tabnotes, then click its toolbar button to open Tabnotes in a tab. To use the side panel instead, change Toolbar button opens in Settings.
To update, download and extract the new release over the old folder, then click Reload on the browser's extensions page. Your saved records are kept in the browser, not in that folder.
- Find a tab: Search by title, URL, note, tag, or other custom field. Use the status buttons and column filters to narrow the table.
- Add context: Edit Notes or Tags directly in a row. Open Settings to add fields, choose visible columns, or change the theme.
- Act on tabs: Select one or more rows, choose an action such as focus, close, reload, pin, or copy URLs, then click Apply. A row's More menu includes grouping and window actions; clicking a closed tab's title reopens it.
- Keep something: Mark a record Keep when you want Tabnotes to retain it after the tab closes. Deleting a saved record always asks for confirmation.
- Back up or move data: Use Export JSON for a complete backup and Import JSON to restore or merge it. Export TSV creates a spreadsheet-friendly snapshot.
- Maintain a live list: Choose a file under Live TSV to keep an automatically updated list of active tabs. Your browser may ask you to approve the file again after a restart.
- Recover after a crash: Tabnotes reconnects unique matches while Edge restores tabs and leaves ambiguous records untouched. If restoration takes longer, open Settings and choose Recover restored tabs.
Tabnotes deliberately avoids guessing when tabs are ambiguous after a browser restart. Such records appear as Unmatched so you can reopen or attach them yourself instead of risking the wrong match.
Tabnotes was created during OpenAI Build Week with GPT-5.6 (gpt-5.6-sol) in the Codex CLI.
The collaboration began with a product specification built around explicit invariants: tab identity must survive closing and reopening; URL equality alone must never prove identity; ambiguous restart matches must remain unmatched; browser refreshes must preserve in-progress edits; and older queued TSV writes must never overwrite newer state.
Codex helped:
- Turn the specification into the maintained
PLAN.md. - Design the module and persistence architecture.
- Write failing tests before production code.
- Implement the Manifest V3 service worker and side-panel interface.
- Measure and correct 5,000-record rendering performance.
- Exercise the extension through the Chrome DevTools Protocol.
- Diagnose a real crash-recovery failure and convert it into regression tests.
- Create the automated GitHub release workflow.
I made the key product decisions: local-only data, no inspection of page contents, no server or account, conservative rather than speculative recovery, and visible uncertainty when a match cannot be proved.
Build evidence:
- Primary Codex session:
019f5a20-e97b-7e20-9900-02c7ffe135c4 - Prompts and follow-up sessions
- Initial working implementation
- Crash-recovery implementation
npm ci
npm test
npm run checkBefore the submission-asset pass, the project had 127 tests. The isolated browser capture exposed a close-versus-refresh race. v0.1.1 adds a regression test, so the current gate contains 128 tests across eight suites, followed by syntax, type, and formatting checks.
There is no build step. Load this directory as an unpacked extension, run npm ci, then use npm test and npm run check before submitting changes.
The Build Week video uses the exact v0.1.1 release with synthetic data for product scenes, and public prompts, commits, measurements, and tests for engineering scenes. Generate missing narration and video clips, then stitch the 1080p video with FFmpeg:
submission-assets/video/generate-video.shThe local output is submission-assets/video/final/tabnotes-build-week.mp4. It is about 2:01, begins and ends with silent title cards, and contains a default English closed-caption track; the matching sidecar is submission-assets/video/captions.srt. Generated audio, raw captures, intermediate clips, and the final upload file are ignored by Git; the scene script and rendering tools are versioned under submission-assets/video/.

0 comments
log in to comment.