-
-
I keep over 100 tabs open. Tabnotes puts their titles, notes, tags, and next actions in one searchable table.
-
I searched for "crash-safe". It was only in my note, not the title or URL. Tabnotes still found it.
-
I closed the tab. The note, tags, and next action stayed. Reopening restored the same record.
-
After a crash, Tabnotes reconnects only unique matches. Ambiguous tabs stay Unmatched rather than getting the wrong notes.
-
I can edit notes, tags, and custom fields, then act on several tabs together from the same side panel.
-
Everything stays in the browser. I can export a full JSON backup, a TSV snapshot, or an optional live TSV file.
Why I built it
I usually have more than 100 tabs open.
Some are research. Some are reminders. Some are things I have not figured out yet. The browser keeps the URL and title but loses why I opened it and what I planned to do next.
Bookmarks are too permanent. Tabs are too fragile. Tabnotes is my current experiment.
What it does
Tabnotes puts every Chrome or Edge tab in a searchable side-panel table (or a standalone tab).
I can add notes, tags, a next action, a priority, or any custom field. I can close a tab and keep its record. Opening it later restores the same context.
It preserves data across browser closes and crashes, reconnecting tabs there's a clear match, and leaving others as "Unmatched" for me to resolve. Data isn't lost.
Everything stays local. Tabnotes does not read page contents, send browsing data to a server, or require an account. It exports a full JSON backup, a TSV snapshot, or an optional live TSV file of active tabs.
How I built it
I started with an empty code repository on July 13 and a fairly detailed specification.
The specification focused on things the software must not get wrong:
- A tab's context should survive closing and reopening.
- A URL alone should never prove that two tabs are the same.
- An uncertain recovery should stay uncertain.
- A browser refresh should not destroy text I am editing.
- An older queued TSV write should never overwrite newer content.
I used GPT-5.6 Sol in the Codex CLI to turn those rules into a plan, failing tests, plain JavaScript modules, the Manifest V3 extension, and browser-level checks.
Codex wrote and maintained PLAN.md, implemented the IndexedDB data model and service worker, built the side-panel interface, and tested the extension through the Chrome DevTools Protocol. I kept making the product calls, especially around privacy, identity, and what Tabnotes should refuse to guess.
The prompts and Codex session IDs are in prompts.md. The primary build session is:
019f5a20-e97b-7e20-9900-02c7ffe135c4
What broke
The first large-table version worked, but a 5,000-record test took 8.5 seconds to mount and created about 70,000 DOM elements.
Codex replaced the unbounded table with a 120-row window. The same test then mounted in 149 milliseconds with fewer than 1,800 elements.
A real Edge crash found the more useful failure.
Edge restored several tabs, but Tabnotes could not reconnect all of them safely. I did not want a more aggressive matcher. A wrong match would attach my notes to the wrong page and look perfectly normal.
So I added an explicit Recover restored tabs action. Unique matches reconnect. Ambiguous ones remain Unmatched.
Then the submission work found one last bug. The isolated browser capture closed a tab just as a browser refresh changed its state. Codex reproduced the race, fixed it, and added a regression test.
The current release, v0.1.1, passes 128 tests across eight suites, followed by syntax, type, and formatting checks.
What I learned
Codex is more useful when I gave it observable rules rather than a vague "tab manager" request.
Code was easy. Figuring out what I wanted, whether query-parameter or hash variations count as the same tab, what evidence is sufficient, etc. was harder.
I did NOT expect this submission tooling to improve the product :-) Building a synthetic demo profile found a race condition. I plan to add synthetic demo profiles to my workflow now.
Built With
- chrome
- chrome-devtools-protocol
- chrome-sessions-api
- chrome-side-panel-api
- chrome-tab-groups-api
- chrome-tabs-api
- css3
- ecmascript-modules
- file-system-access-api
- github-actions
- gpt-5.6
- html5
- indexeddb
- javascript
- jsdom
- manifest-v3
- microsoft-edge
- node.js
- openai-codex
- typescript
- vitest
- web-navigation-api
Log in or sign up for Devpost to join the conversation.