Sno Station
Sno Station is your agents' workstation: open-source software that turns the AI agents you already run into one squad on your own machine. Two heads are better than one, and they get better with every
Open temporary ChatGPT and Gemini chats in your current page, with keyboard shortcuts and selection-to-sidebar.
PluginsJavaScript · HTMLGitHub @william1010121OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Ask here. Stay here. Temporary ChatGPT and Gemini conversations, right on your page.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
ChatSprig
Ask here. Stay here.
Temporary ChatGPT and Gemini conversations, right on your page.
Reading an article. Working through a problem. A quick question comes to mind.
Open ChatSprig, ask ChatGPT, and return to what you were doing — all in the same page.
ChatSprig opens the ChatGPT and Gemini websites directly. On either service’s main page, select message text and choose Ask in sidebar to send just that selection to the matching floating chat. It does not send the surrounding conversation or page. You can also type or paste context yourself.Read the full README ↗Reading an article. Working through a problem. A quick question comes to mind. Open ChatSprig, ask ChatGPT, and return to what you were doing — all in the same page.
| A little less friction | What you get |
|---|---|
| Chat where you are | A centered, resizable ChatGPT or Gemini overlay on supported web pages. |
| Start fresh | Open a temporary chat, or reload the overlay for a new one. |
| Keep your focus | Hide the embedded sidebar and jump straight into the prompt. |
| Reach it your way | Keyboard shortcuts or a floating launcher in your preferred corner. |
| Take the math with you | Copy supported math on ChatGPT pages as LaTeX source. |
| Make it yours | Click the toolbar icon for settings that sync with Chrome. |
ChatSprig opens the ChatGPT and Gemini websites directly. On either service’s main page, select message text and choose Ask in sidebar to send just that selection to the matching floating chat. It does not send the surrounding conversation or page. You can also type or paste context yourself.
Chrome Web Store: install ChatSprig. The local extension is version 2.6.3, with ChatGPT /btw branches, Ask in new branch, a nested branch sidebar with Clean, Gemini support, Ask in sidebar, Compact view controls, custom prompts, and skill completion.
The ChatSprig showcase site walks through all 14 features with live demos and a 3-minute tour video. Its source is in web/.
Watch the ChatSprig 2.1.1 workflow demo, with the keyboard interaction and the full open → ask → return flow shown on screen. See the demo notes and attribution.
chrome://extensions and enable Developer mode.Sign in to ChatGPT in a normal tab first if needed. ChatGPT account, usage, and plan restrictions still apply. Disable any older userscript version of this helper to avoid duplicate actions.
| Action | Windows / Linux | macOS |
|---|---|---|
| Open / switch to ChatGPT | Alt+K | Option+K |
| Open / switch to Gemini | Alt+G | Option+G |
| Open / switch to Claude | Alt+C | Option+C |
| Open / switch to Grok | Alt+X | Option+X |
| Start a new temporary chat in the current service | Alt+N | Option+N |
| Open settings | Click the extension toolbar icon | Click the extension toolbar icon |
Change browser command assignments at chrome://extensions/shortcuts.
The fixed Alt/Option+K, Alt/Option+G, and Alt/Option+N page shortcuts also work as a fallback, including inside the embedded prompt. They remain active even if browser commands are remapped and require focus inside a web page.
// at the start of a line or after a space in a ChatGPT or Gemini prompt, then type a name to filter. Arrow keys and Enter select a skill; Escape closes the menu. Selection inserts editable text without sending. Custom skills stay in this browser (chrome.storage.local).//system-prompt inserts the current text from Settings → System prompt wherever skill completion is available. If no text is configured, its entry opens Settings and preserves the draft. It is separate from automatic append, so using both may repeat the text.Press Alt+G (Option+G on macOS) to open Gemini. Alt+K switches to ChatGPT. Only one service is visible per page; switching or closing keeps each loaded frame, conversation, and draft. Alt+N replaces only the current service with a fresh temporary chat, even when the overlay is closed. Before either service has been used, Alt+N defaults to ChatGPT. Reloading the host page restores the open service with a new temporary conversation.
The two launcher buttons overlap in the selected corner. Hover or focus them with the keyboard to expand inward, then choose ChatGPT or Gemini. The existing “Hide launcher on ChatGPT” setting applies only to ChatGPT websites.
Gemini loads /app, activates Temporary chat, and verifies that mode before exposing the input. If initialization or embedded sign-in fails, the overlay shows a retry message; it does not silently use an ordinary conversation. Sign in at gemini.google.com in a regular tab first. Google cookies are not rewritten. Browser restrictions can still prevent embedded sign-in. Switching back preserves the existing temporary chat; reloading creates a new one.
In Settings, Default Gemini model selects Flash-Lite, Flash, or Pro for new temporary chats. The default leaves Gemini’s current choice unchanged. Switching back to an existing conversation does not change its model. If a requested model is unavailable or cannot be verified, initialization reports an error instead of silently using another model.
Gemini supports the overlay and Ask in sidebar. LaTeX copying and Compact view remain ChatGPT-only.
Press Alt+C (Option+C) for Claude or Alt+X (Option+X) for Grok, or choose them from the expanded launcher. By default Claude opens an incognito chat (https://claude.ai/new?incognito). Grok has no private-chat URL, so the embedded page triggers Grok's own private-chat shortcut after it loads. The Grok frame stays covered until Grok's composer confirms private mode, so nothing can be sent in a regular chat; if private mode cannot be started (for example, when signed out), the overlay shows a retry message instead. Turn off Start Claude and Grok in incognito / private mode in Settings to open regular chats. Hide the sidebar inside embedded chats applies to both. Settings → Chat overlay lets you change either URL within its own site. Sign in at claude.ai or grok.com in a regular tab first; cookie rewriting also covers these sites. Claude and Grok support the overlay, dock switching, sidebar hiding and prompt focus.
On the main ChatGPT page, the Gemini sparkle icon in each response’s action row has the tooltip explain with gemini. It takes the complete response from ChatGPT’s native Copy action and passes that exact text to the existing Gemini floating chat. Settings → Explain with Gemini lets you edit the prefix; the default is explain this to me. An empty prefix sends only the copied response. The action preserves the user’s clipboard. It follows the shared Auto-send preference and preserves existing drafts; it does not send the surrounding conversation.
In a saved ChatGPT conversation, type /btw your question at the start of the prompt and press Enter or the send button. You can also select /btw in ChatGPT's native / menu to fill the command, then enter your question. ChatSprig uses ChatGPT's native branch route to copy the conversation through the latest visible message, then sends your question in a separate floating chat. Chat and Work branches retain their source mode. The command is removed from the question, and the source conversation receives no message. Shift+Enter still inserts a newline; an empty /btw asks you to add a question. Wait for any current response to finish before branching. Layouts without native conversation/message identifiers cannot create a branch; the draft stays available with a status message.
Typing /b, /bt, or /btw selects the BTW suggestion. Enter completes it to /btw without sending; add your question afterward. The suggestion remains available when ChatGPT's native search has no matching commands. Arrow keys and pointer selection still work, and Escape closes completion while retaining the draft.
Hover over Branches · N above the prompt to see the BTW branches created for this conversation; click to keep the list open, or use the keyboard/touch controls. The right side shows up to three recent ready branches, newest first, with truncated titles for one-click access. Narrow composers show fewer shortcuts. Select a branch to open its floating window. Switching and closing retain loaded conversations and drafts. Branch titles and resolved URLs are stored locally per source conversation, so a page reload can reopen an existing branch without creating it again or resending its question. Unsent iframe drafts survive switching, but not a host-page reload. Gemini and embedded composers do not offer /btw.
Copy links, beside Branches · N, copies plain links to the current conversation and every branch below it, including branches of branches, as an indented list. Nothing is shared or published; each line is the chat's title (when known) and its https://chatgpt.com/c/… link:
- Trip plan — https://chatgpt.com/c/…
- Hotels — https://chatgpt.com/c/…
- Branch · Trip plan — https://chatgpt.com/c/…
In ChatGPT's left history sidebar, branch chats are nested under the conversation they came from, and branches of branches nest one level further, each indented with a guide line. A group sits where its topmost member appears in the native list, and nesting applies within the same native list (Pinned, Recents or a project). /btw branches use their local records. Native branches (titled 分支 · … or Branch · …, including ones made with ChatGPT's own branch action or in another browser) are matched once to the loaded conversation with the same source title that shares the most copied messages, and the result is remembered locally. Hover over a conversation that has branches to show Clean · N at the right of its row; after confirmation it deletes every branch chat below it, including branches of branches, through ChatGPT's normal delete, and removes their local records. The source conversation itself is kept. If you are viewing a deleted branch, ChatSprig returns to the source conversation.
BTW always attempts to send its explicit question once, independently of the Ask in sidebar Auto-send setting. Existing branch drafts or generation keep the question as a draft instead. If branch creation or delivery fails, the source draft stays available; check the floating chat before retrying. A branch uses ChatGPT's normal conversation retention unless the source URL explicitly identifies temporary mode. Alt+N opens a fresh temporary chat while retaining your branch.
On Gemini, select message text and click Ask in sidebar beside the selection to open the Gemini overlay. Only plain selected text is passed.
On ChatGPT, select message text, then click Ask in sidebar beside the native Ask ChatGPT action (shown as Add to chat in Work mode and localized in other interface languages, such as 問問 ChatGPT). The existing floating chat opens without reloading or starting a new conversation.
In a saved ChatGPT conversation, Ask in new branch sits beside it. It works like /btw with the selection as the question: a native branch of the conversation opens in the floating window and appears in Branches · N. The source conversation receives nothing. Unlike /btw, it follows the Auto-send setting below.
0 (default) means first message only, 1 means every message, and 3 means messages 1, 4, 7, 10… The current conversation branch determines the count; AI responses and regenerations do not count. Changing k recalculates from the start, and a new conversation starts over. Manual sends and Ask in sidebar follow the same rule. Unknown or incomplete history skips appending. Existing conversations without a Chat/Work switch are identified when their model menu is opened; verified mode is remembered per conversation in that tab across reloads. Without positive mode evidence, appending stays disabled. Empty text adds nothing; the instructions are ordinary message text, not an API system role.\(...\) and display \[...\] delimiters. Disabling Copy LaTeX keeps plain selected text.The main ChatGPT website keeps its own sidebar. The sidebar preference applies only to ChatSprig's embedded chat.
No developer-operated analytics, advertising, or conversation backend. Settings are stored through Chrome Sync. Chat messages go directly to the selected service and are subject to OpenAI’s, Google’s, Anthropic’s or xAI’s terms and privacy practices.
| Access | Purpose |
|---|---|
| Web-page content scripts | Display the launcher, handle shortcuts, and host the overlay. On ChatGPT, also focus the prompt, hide the embedded sidebar, nest branch chats in the history sidebar, and convert selected math when copying. |
| Storage | Sync preferences and save custom skill templates, BTW branch metadata and branch-to-source links locally. |
| ChatGPT, Claude and Grok cookies | Support cross-site sign-in when cookie rewriting is enabled. |
| Declarative network rules with host access | Remove frame-blocking response headers from ChatGPT, Claude and Grok subframes and X-Frame-Options from Gemini subframes, limited to granted host access. |
Tab routing uses tab IDs and messaging without requesting the tabs or activeTab permission.
Cookie rewriting is enabled by default. It changes eligible ChatGPT, Claude, and Grok cookies (chatgpt.com, chat.openai.com, claude.ai, grok.com) to SameSite=None; Secure, including session cookies, in the browser's cookie store. This weakens SameSite-based cross-site request forgery protection and can affect those sites outside the overlay. The extension does not send those cookie values to its developer.
Turning this setting off stops future rewrites; it does not restore cookies already changed. The services may replace them during subsequent account activity. Chrome's third-party-cookie restrictions can still prevent sign-in inside other websites.
Read the privacy policy for details.
! badge; ChatSprig does not open a fallback ChatGPT tab or window.Plain JavaScript. Manifest V3. No runtime framework or build step.
# Run regression checks (Node.js)
node --test tests/*.test.mjs
# Run offline browser regressions (Node 22+, Python optional)
npm ci
npx playwright install chromium
npm run test:browser
# Run an individual scenario (the Python entry point is retained)
python3 scripts/test_browser.py btw
python3 scripts/test_browser.py btw-completion
python3 scripts/test_browser.py btw-invalidation
python3 scripts/test_browser.py compact-margins
# Or: node scripts/test_browser.mjs provider-lifecycle
# Optional existing Chromium: CHROMIUM_PATH=/path/to/chromium npm run test:browser
# Regenerate icon sizes from the approved artwork (macOS)
python3 scripts/make_icons.py
# Create a clean Chrome Web Store upload
python3 scripts/package_extension.py
background.js Commands, tab routing, settings, cookie compatibility
content/ Overlay, launcher, keyboard handling, LaTeX copying
shared/ Shared settings defaults
options/ Settings page
icons/ Packaged extension icons
assets/branding/ Approved GPT Image artwork and generation prompts
store/ Listing copy, review notes, and promotional assets
web/ Showcase site and tour video (chatsprig.driseam.com)
scripts/ Icon export and release packaging
Report bugs or suggest improvements in GitHub Issues. ChatSprig is available under the MIT License.
Browser tests use synthetic local HTML and stubbed extension APIs. HTTP(S) requests are blocked and fail the suite; no real AI account or messages are used. They cover branch recovery, draft preservation, private-mode input/send gates and new-chat reloads. These fixtures do not verify live provider selectors or remote services. CI runs all Node and browser suites and retains failure screenshots.
Privacy regression tests execute the production frame gate and provider helpers in a Chromium isolated world against synthetic DOMs and settings, including optout, stale/spoofed readiness, and mode exit. They do not load an installed extension or verify live provider contracts. Run npm run test:mutations and npm run test:browser:mutations to confirm isolated deliberate privacy/draft faults are detected.