The interesting call is `bulk_apply`: up to 250 sub-operations land atomically and reverse as a single undo step, which is what makes "reorganise my tabs by topic" a reasonable thing to ask rather than a reckless one. Writes go through the same confirmation and undo machinery as the extension's own UI, and the token in the URL is the thing to guard — anyone holding it can read and change your tabs.
A native messaging host that bridges the Pinako browser extension to desktop AI clients. It exposes your tab tree, libraries, library groups, Main Notes and browser bookmarks as tools — read and write both, so an assistant can reshape the tree, not just describe it.
- Reading: `get_tree`, `get_tree_summary`, `search_tabs`, `search_pinako`, `list_libraries`, `get_library`, `get_main_tree_notes`, `get_bookmarks`, `find_duplicates`
- Structure: `move_node`, `indent_node`, `outdent_node`, `create_group`, `create_folder`, `delete_node`, and `bulk_apply` for up to 250 atomic sub-ops that undo as one step
- Metadata: `set_title`, `set_tags`, `add_tags`, `remove_tags`, `set_memo`, `set_star_color`, `set_row_color`
- Libraries: `create_library`, `add_to_library`, `set_library_title`, `set_library_description`, `delete_library`, plus library groups and `reorder_library_panel`
- Notes and bookmarks: `create_note`, `set_note_content`, `delete_note`, `add_to_bookmarks`
- Destructive calls return `CONFIRMATION_REQUIRED` until the caller confirms; every write returns `{ok, error}` so a client can branch on the code
- Read tools are safe to auto-approve; write tools are annotated idempotent, non-idempotent or destructive so clients can gate them
The Pinako extension in your browser and an active Pinako subscription (Pro or higher). Installers are provided for Windows (graphical) and Linux x64 / ARM64 (CLI); building from source is `npm install` then `node setup/build.js --all`. The bridge listens on `127.0.0.1:37421` and serves loopback only. Write tools need a machine-local token that the installer writes into each client's URL — a client without it still connects and still reads.
