Tornevall Networks Social Media Tools is a browser-wide extension for AI-assisted replies, fact-checking, and social media workflows. The source tree stays Chrome-first for development, while release packaging can now emit separate archives for Chrome, Edge, Opera, and Firefox. All AI processing runs server-side through the Tornevall Networks Tools platform.
Users who have a Tornevall Networks Tools account and want AI-powered assistance while browsing, moderating social media, or reading content on any website.
projects/socialgpt-chrome folder in the Tools repository.tools.tornevall.net, open Social Media Tools from your account/dashboard, and generate a personal SocialGPT AI token there or from My API keys.The Social Media Tools start page is available to every signed-in user for extension installation and token setup. The SocialGPT token is dedicated to the extension/Social Media Tools client flow and is separate from ordinary direct OpenAI API access. If you need direct OpenAI-backed API endpoints outside SocialGPT, submit the separate OpenAI access request from that same page. The Facebook/X operator dashboards and audit views on the same area still require the Social Media Tools management permission.
If your Tools account had to be restored from earlier outgoing mail history after an incident, My API Keys can also expose a one-time recovery form for that specific restored account. That flow lets the restored user re-register one previous unmatched SocialGPT token exactly once; after the token is rebound, the recovery allowance is consumed and does not stay open permanently.
The same Social Media Tools page and My Profile now show your current SocialGPT/OpenAI limits, including daily budget usage, request limiter, default model/output budget, access state, and whether web search is available for your account/environment.
As soon as you paste or edit the token, the popup/config page now also performs a lightweight token-only validation call and shows an inline spinner plus a clear accepted/rejected result.
The popup's Use dev / beta server checkbox is intentionally off by default. SocialGPT should keep using tools.tornevall.net unless you explicitly opt into the dev/beta host.
The Facebook admin activity switch, the Facebook admin debug-diagnostics switch, and the participant-request helper switch are no longer shown in the popup or the larger config/options page. Those on/off controls now live only on the Tools-side Facebook Admin Tools dashboard, and the extension fetches their current state from Tools before it starts working on those Facebook surfaces.
On Facebook group participant_requests, Analyze user includes the visible request-card text from the start: profile rows, group/friend clues, membership questions, visible answers/rule acknowledgements, and preview/comment markers are structured into the analysis context. If you click inside the card and Facebook opens or loads more obvious comment/post preview context, the result box can show that new context is available and lets you run Update analysis. The participant helper now also reads Facebook's dedicated preview GraphQL response for that dialog more selectively, keeping participant-specific preview/comment/post details while avoiding large raw response dumps. It now prefers richer GraphQL fields such as preferred_body.text, body_renderer.text, original-post message text, author names, timestamps, comment/post ids, and Facebook URLs before it falls back to DOM-only clues. When Facebook exposes compact base64-like graph ids inside that response, the helper can also decode the readable parts before they are shown back to the AI/user-analysis flow. If Facebook temporarily rerenders the underlying request list while the preview dialog is open, the helper now keeps following that dialog as the active participant surface instead of pretending that no participant card is available anymore. Once the preview dialog is matched, the helper also keeps rescanning that same preview surface as Facebook swaps in more context inside it β including when the operator clicks through to View original post from the preview. That autoscan now also survives Facebook's separate root-level mount_* preview wrappers instead of only listening below body, so later preview/original-post context is less likely to stall until a manual Find preview element click. That follow-up capture now also keeps structured original-post comment-thread payloads (for example later CometPhotoRootContentQuery GraphQL responses), so the helper can show explicit thread-comment counts, original-post text, and captured comment excerpts instead of hiding those deeper comments inside generic network snippets only. Preview-context extraction is now more participant-name-aware too, so scattered comment/post lines tied to the analyzed person are prioritized more strongly while generic preview UI noise is filtered harder. The first visible-card-only participant analysis now deliberately races two backend requests β one without web search and one with web search β so the fastest useful answer can be shown first, while later preview/original-post follow-up reruns can do the same again after more comment context appears. Those follow-up reruns still give the participant's own visible comment extra weight against the saved group rules/context, and the waiting notice now backs off more gracefully when Facebook has already stopped changing. The waiting box now also tells you more clearly what has already been captured so far β for example GraphQL preview entries, thread batches, thread comments, and participant-focused lines β and the visible detected-context list now includes more of those preview/original-post lines directly. If the helper still seems behind after the full thread becomes visible, Find preview element now also forces another preview/comment rescan instead of only scrolling to the dialog. The floating helper panel also shows a small listbox-style Detected context view with the current participant name/profile information, visible group/friend/profile clues, preview-comment hints, original-post links, and captured GraphQL thread-comment clues when those hints are available. Long-running Toolbox/browser-companion requests now also keep their step indicator on the last visible step instead of cycling back to step 1 and looking like the whole request restarted.
If you leave the Facebook participant_requests page, the floating participant user-analysis result box now closes automatically and clears any stale follow-up state so an earlier analysis does not linger over unrelated Facebook pages.
The popup also normalizes old string-based devMode values once when it loads, so legacy sync-storage leftovers do not keep users on the dev/beta host accidentally.
Background RSS host-match hints are currently disabled, so Toolbox and the browser companion no longer call /api/rss just to show one small related-site note for the current page.
projects/socialgpt-chrome/manifest.json remains the Chrome-first source manifest.projects/socialgpt.sh, which creates browser-specific archives under projects/socialgpt-chrome/dist/.browser_specific_settings.gecko without changing the source manifest in the repository.The extension uses a two-tier permission model designed to minimize default access while preserving full browser-wide capability for users who want it.
In baseline mode the extension:
tools.tornevall.net and tools.tornevall.comactiveTab permission to inject scripts temporarily when the user triggers the menu itemNo passive injection happens on arbitrary pages in baseline mode.
Users with a valid Tools bearer token can enable this mode from the extension popup:
<all_urls>)Disabling the toggle removes the broad permission immediately. The extension never activates global mode automatically.
On pages with text composition fields, a floating button appears near the active input. Clicking it opens the Toolbox panel where you can:
The Toolbox header is now draggable, so you can move the panel away from the page UI instead of leaving it anchored to the default composer edge.
The Toolbox close Γ button now also works again alongside that draggable-header behavior.
When Toolbox is opened from a rich-text editor or another editable iframe/document surface, the floating SocialGPT UI now mounts inside a dedicated non-editable overlay root so the panel itself does not become editable page content. If the editor itself lives inside an editable iframe, Toolbox now also tries to place the panel on the nearest same-origin top-level page surface so it does not stay visually trapped inside the text editor box.
When you open Toolbox or run Quick response, the currently targeted editor is now outlined so it is easier to see exactly which field SocialGPT is anchored to. On Facebook, that anchor is now also kept through one ordinary composer rerender, so Paste into field, browser-companion paste, and successful Quick response runs can append into the same reply draft instead of losing the target or wiping the whole field unexpectedly.
If you clear the optional Custom mood field in Toolbox or in the browser companion, that empty value now persists locally too. The extension should therefore stop resurrecting an older custom tone only because the popup autosaved another setting or refreshed its cached defaults.
The Panel mode selector inside Toolbox now supports two extra companion layouts:
These modes now prefer the browser's real side-panel companion surface when that API is available, so SocialGPT stays outside the page itself instead of behaving like just another taller floating overlay. On Chrome-family builds with chrome.sidePanel, choosing one of those modes now opens the real browser side panel directly. If the browser/runtime does not expose that side-panel API, the extension still falls back to the older in-page docked layout.
When you select text on any page (in global mode, or on the supported platforms in baseline mode), two small floating buttons appear:
When a fact-check, source-check, search, lookup, or user-analysis request requires independent verification, Tools now separates the normal AI answer from the web-search verification lookup. The visible answer can still use the preliminary AI analysis when web search fails or adds no useful evidence, but the metadata clearly marks the result as independent verification missing or web search failed instead of presenting it as verified. Verify-mode model selection is now also Tools-controlled: the extension no longer decides its own fact-check model, and Tools may prefer gpt-4o as the primary verification model when web search is part of that run. Verify-mode wording is now also analysis-first: fact-check answers should describe the visible claim/content more concretely instead of talking to one named participant as if the check itself were a direct thread reply. Result boxes now render the first markdown answer as safe HTML (including headings, bold text, lists, and links), can show structured citation links returned by Tools, keep long answers in an internal scroll area so the result can be read without losing the action buttons, and show a cleaner styled preview card while the first analysis is still running. The pending verify card now also explains the multi-step flow more concretely by surfacing a current phase and a visible stage list for context preparation, request handoff, initial analysis, separate lookup/source checks, and final rewrite. The renderer is now also more tolerant of slightly messy AI formatting such as indented headings, numbered lists, and text mixed with simple HTML line breaks. Verify-result cards now also surface explicit web-search metadata when Tools returns it β for example whether web search was actually used, whether independent verification is still missing, how many source links were attached, whether a verification notice/finalization warning was returned, and a simple timing breakdown when Tools includes one. Tools can now also apply a server-side blocked-domain filter to verify/source-check citations, so configured domains are excluded from the returned More links list and the verification finalizer is instructed not to rely on them as evidence. Successful verify and participant-analysis runs are now also archived automatically to the signed-in Tools account. The result card can create a public share link directly, while My Profile and the dedicated fact-verification archive let the same user reopen or share older verifications later without rerunning the browser-side check.
The same Tools bearer token used by the extension can now access the saved verification archive endpoints:
GET /api/socialgpt/fact-verify-cards β list the signed-in user's saved verification entriesGET /api/socialgpt/fact-verify-cards/{card} β read one saved verification entryPOST /api/socialgpt/fact-verify-cards/{card}/share β create or reuse a public share link for one saved entryThese endpoints expect Authorization: Bearer YOUR_API_TOKEN and only expose the caller's own archive entries.
When the Tools backend itself hits a temporary OpenAI timeout/connection issue, POST /api/ai/socialgpt/respond can now return a clearer user-facing user_message together with additive retryable, error_code, and upstream metadata instead of only exposing a raw transport failure. In verify/source-check flows, if the preliminary answer already exists but the final OpenAI refinement step times out, Tools can keep the preliminary answer visible and attach an additive notice plus web_search.finalization_failed=true instead of failing the whole request outright. When a verify/source-check request instead dies behind a raw non-JSON 502/other 5xx response (for example a plain upstream Bad Gateway page), the extension now also captures a short response excerpt plus the returned content type in its debug metadata so it is easier to distinguish one structured Tools JSON error from a raw proxy/gateway failure.
Both buttons can be dragged again and reset with double-click or Esc.
Verify fact now has its own local Verify-fact result target setting too, so fact-checking can stay on the ordinary on-page result box or be routed into the browser companion independently of Toolbox panel mode.
Toolbox and browser-companion generation now also stay visibly alive while waiting for Tools: Generate, Refresh, and Verify fact keep an inline progress state with step labels, elapsed time, and a small moving progress bar instead of only looking frozen behind one static spinner label.
The popup/config page and Toolbox itself now also share one AI request timeout setting. That timeout applies to Generate, Quick response, Verify fact, and browser-companion runs. While a request is still running, Toolbox can now Abort it or Restart the same request from the inline loader instead of forcing the operator to wait blindly. Pending on-page Verify fact cards now also expose their own Abort action while the verification is still running, so you do not have to return to the Toolbox panel just to stop one active fact-check.
The floating Verify fact result card can now also keep an explicit Follow-up question for verification. Nothing is sent while you type in that box. Instead, the next Refresh or Dig deeper click rebuilds the verification prompt with your follow-up question and sends that richer verification request to Tools. That follow-up field now stays available even while a verification is still running, and those actions can immediately stop the in-flight run and restart it with your updated follow-up question.
Selection detection was also hardened for short direct selections and double-click timing, so these floating actions appear more reliably on pages with sensitive editors.
Right-clicking anywhere on a page provides:
When the Tools-side Facebook participant scanner is enabled, /groups/*/participant_requests pages can now show:
The Toolbox/fact box now also anchors itself to the chosen participant-request card instead of always opening in a generic detached corner.
When the Tools-side Facebook extension settings enable it, the extension can now assist on Facebook group pages that match /groups/<group>/participant_requests.
The floating helper panel is now explicitly labeled Participant helper (Experimental) in the UI.
Current behavior:
/groups/<id>) instead of one shared rule for every group, and the same per-group rules map is now also saved through Tools extension settings so it can sync back into other installs for the same user/token; on the actual participant-request page only the exact current group's saved rules are shown/used there... action areaSG shorthand, so the main action explicitly reads Analyze usermount_* containers, and a dedicated Find preview element action can scroll to and highlight the currently matched preview dialog for operator confirmationCards enhanced: 0Checking now⦠spinnerThe popup also no longer duplicates the Facebook Send queued / Release stuck controls because those actions already exist on the ingest page itself.
Guardrails:
These work on all pages. On pages without a running content script, the background injects the required scripts via activeTab when the menu item is clicked.
The popup now also includes Open Toolbox in active tab as a no-right-click fallback. If the page already has a live text selection, the popup shortcut imports that selection into Toolbox automatically. The popup and the larger config/options page now also expose the same local Panel mode selector as Toolbox itself, so you can switch straight to the browser companion modes before opening the panel in the active tab. Toolbox panel mode now stays separate from the new Verify-fact result target selector, which decides whether Verify fact should stay in the ordinary on-page result box or open inside the browser companion.
As of 1.2.16, the popup shortcut and the right-click Open Toolbox / Verify fact with Toolbox flows are routed frame-aware through the background worker. On iframe-heavy pages the extension now prefers the most relevant injected frame (existing Toolbox frame, selected-text frame, focused editable frame, otherwise the top frame) instead of depending on whichever frame happened to answer first.
On SoundCloud 4 Artists insights pages, the extension can capture GraphQL-based analytics payloads and submit them to Tools. Auto-ingest must be explicitly enabled in the popup before any data is sent.
On Facebook group admin-activity pages, the extension can collect reportable moderation/activity rows and queue them for bulk delivery to Tools.
The top summary cards on the Tools-side Facebook Admin Tools dashboard mix two different kinds of statistics:
Current summary cards:
The detailed approved/rejected breakdown is also event-based:
Important: Other unclassified approved/rejected events is not a count of unique people. The same person can contribute more than one row there if multiple approved/rejected event lines for that person were stored and those lines could not be classified as join-request or pending-post actions.
The options/config page still provides the full settings surface in a larger three-card layout for easier reading and editing.
The popup keeps the most common day-to-day controls, while the Facebook admin activity/debug master switches now intentionally live only on the Tools-side dashboard.
Both surfaces now also localize dynamically at runtime, with Swedish selected automatically when the browser prefers Swedish and English used as fallback.
As of extension 1.2.15, that UI localization no longer leaks into the actual AI responder defaults: the Answer language and Verify-fact language selectors stay authoritative for generated output even when the popup/config page itself is shown in Swedish.
The popup/options page now also exposes a dedicated Extension language selector (Auto, English, Swedish) so the extension chrome can be localized separately from the AI output language.
| Control | Purpose |
|---|---|
| SocialGPT AI Token | Your personal SocialGPT token from tools.tornevall.net β required for extension AI features |
| Use dev / beta server | Switches to tools.tornevall.com for development and testing |
| Enable global browser-wide AI mode | Activates full cross-site AI overlay after permission confirmation |
| Open Toolbox in active tab | Opens Toolbox directly from the popup and imports the current selection when available |
| Panel mode | Chooses whether Toolbox should open near the field, in one of the docked layouts, or in the companion/sidebar modes that now prefer the real browser side panel when available |
| Verify-fact result target | Chooses whether Verify fact should stay in the ordinary on-page result box or open inside the browser companion |
| Extension language | Controls the popup/config/Toolbox UI language separately from generated AI reply language |
| Responder name | Your name used in AI-generated replies |
| Auto detect Facebook name | Tries to auto-fill responder name from your Facebook profile |
| Answer language | Language for AI replies (default: match context) |
| Verify-fact language | Language for fact-check results (default: match context) |
| Fact-check model | Informational only in the extension UI; Tools now decides the verification model server-side |
| Default quick-reply style | Tone preset for quick-reply panel |
| Responder profile | Persona description sent to the AI (stored in Tools) |
| Advanced mark-mode context | Optional local-only settings on the config page for richer mark labels and broader DOM context extraction |
| Test Tools β OpenAI | Tests the connection end-to-end and verifies your token |
The Facebook admin activity switch, Facebook admin debug-diagnostics switch, and participant-request helper switch are no longer popup/config controls. They are managed only from the Tools-side Facebook Admin Tools dashboard, and the extension fetches the live on/off state from Tools when those Facebook workflows run.
Version 1.2.15 fixes a regression introduced during the popup/config runtime localization work:
Practical effect: choosing English (or another supported output language) should once again produce output in that language instead of drifting back to Swedish because the extension UI itself is Swedish.
The larger config/options page now includes an Advanced mark-mode context section for Toolbox users who need more traceability than plain [1], [2] labels.
Default behavior is unchanged:
Available options:
[1], [2], β¦ headerstn-mark-2When a richer mark-label mode is enabled, the page also shows a visible badge on the selected element so you can map the on-page marker to the context text shown in Toolbox.
The extension now also runs its content scripts in nested frames (including matching about:blank child frames) where Chrome allows it, which improves iframe-backed page support for mark mode and selection overlays.
| Storage area | Contents |
|---|---|
chrome.storage.sync |
Token, settings, model catalog, and global mode flag β synced across devices |
chrome.storage.session |
Debug logs, per-tab state β cleared when browser closes |
The extension does not read, store, or transmit page content or URLs outside of explicit user-triggered AI actions.
client_name, client_version, client_platform) to POST /api/ai/socialgpt/respond so Tools can identify which extension build created a request.client_platform field now reflects the active browser build more accurately (chrome_extension, edge_extension, opera_extension, or firefox_extension) instead of always claiming Chrome..env values, passwords, tokens, API keys, or similar secrets.The extension does not download or execute remote code. All JavaScript is bundled locally. Remote communication is limited to HTTPS API calls to the Tools platform, which return JSON responses β not executable code.
https://tools.tornevall.net/api/ai/socialgpt/respond/api/social-media-tools/extension/settings/api/social-media-tools/extension/validate-tokenai.socialgpt (ai.client remains as a legacy alias). The built-in generator still creates a dedicated provider_socialgpt token row, and legacy personal tools_ai_bearer tokens still work for compatibility, but the provider name is now only a label/category. Direct OpenAI-style endpoints remain separate and require approved OpenAI access.CHROME_WEB_STORE_COMPLIANCE.md in the extension source directory