The Problem
Users who work with multiple large‑language‑model (LLM) web interfaces must switch browsers, copy prompts, and juggle windows. That manual choreography wastes time and introduces copy‑paste errors, especially when the same prompt must be sent to ChatGPT, Gemini, Claude, Grok, DeepSeek, etc.
What This Does
llm-god is an Electron‑based desktop app (Windows‑only, with a Linux build in testing) that embeds each supported LLM in a separate BrowserView. The UI lets the user add or remove models via the dropdown in src/dropdown.ts, paste a prompt once, and dispatch it to all active views with Ctrl + Enter.
Key files:
src/main.ts– creates the main Electron window (createWindow) and three auxiliary windows (form, model selector).src/renderer.ts– runs in each view; provides helpers such asstripEmojis,logToWebPage, and model‑specific open/close functions (openClaudeMessage,openDeepSeekMessage).src/utilities.ts– orchestrates prompt injection (injectPromptIntoView) and view management (addBrowserView,removeBrowserView).
The app’s assets (*.html, tooltips.css) are loaded into the Electron windows, while answer_scrapers/ contains scripts that can persist LLM responses.
How It Is Wired
Execution begins at src/main.ts:81 in the createWindow function, which builds the primary Electron BrowserWindow and registers a resize listener. That listener calls updateViewBounds, which in turn invokes getViewHeight and updateZoomFactor.
When the user presses Ctrl + Enter, the renderer process calls injectPromptIntoView (defined in src/utilities.ts). This function:
- Calls
stripEmojis(implemented insrc/renderer.ts) to sanitise the prompt. - Calls
updateCharCounter(also insrc/renderer.ts) to keep the UI counter in sync. - Sends the cleaned prompt to each active
BrowserViewvia Electron’s IPC channel.
stripEmojis is the most widely used internal utility (called from four locations). buildPromptTable and refreshPromptTable (in src/save_prompt.ts) are invoked when the user adds or removes a model, updating the on‑screen table that lists active prompts.
The internal call graph shows 41 resolved edges; no circular dependencies exist. The most “blast‑radius” modules are src/utilities.ts (8 functions, deep nesting, 9‑level indentation) and src/main.ts (7 functions, 870 lines total). Both are hotspots for future change because many UI actions funnel through them.
How To Use It
# Clone the exact repository
git clone https://github.com/moses-y/llm-god.git
cd llm-god
# Install dependencies
npm install
# Development workflow (as documented)
npm run start # creates a desktop shortcut and runs the app
# or, for hot‑reload:
npx tsc --watch &
npx electronmon dist/main.js
# Build a distributable Windows installer
npm run make
No environment variables or external configuration files are required; the app expects the user to be logged into each LLM within the embedded browsers.
Real‑World Use
A software team can place llm-god on each developer’s workstation. When a new feature spec is drafted, the author pastes the spec into the app, hits Ctrl + Enter, and receives parallel answers from ChatGPT, Gemini, and Claude. The team then aggregates the responses without leaving the IDE, cutting the typical 5‑minute per‑model copy‑paste cycle to seconds.
Code Health & Issues
- High – Pin third‑party GitHub Actions to a commit SHA (
.github/workflows/*). - Medium – Declare least‑privilege
permissionsforGITHUB_TOKENinbuild.yml. - Medium – Enable Dependabot or Renovate for automated dependency updates.
- Medium – Add a dependency‑vulnerability scan step to CI.
- Medium – Set
persist-credentials: falseon the checkout action. - Low – Add
timeout-minutesto workflow jobs. - Low – Provide repository convention files (
.editorconfig,.gitattributes, formatter config).
Static analysis also flags:
- Deep nesting in
src/utilities.ts(max indentation depth 9). - Oversized files:
src/utilities.tsandsrc/main.ts(~870 LOC each). - Duplicated test blocks across several
__tests__/*.test.tsfiles. - High branching density in
src/utilities.tsandanswer_scrapers/answer_saver_gpt.js(245 branch points).
All findings are deterministic; no additional issues were invented.
The Bottom Line
llm-god delivers a functional, single‑window workflow for sending identical prompts to multiple LLM web UIs, and its codebase is small enough to grasp quickly. However, the core modules are large, deeply nested, and rely on outdated dependencies, which raises maintenance risk. The project is suitable for teams that need immediate multi‑LLM prompting and are comfortable refactoring the utility layer and updating the Electron stack.