跪拜 Guibai
← All articles
Artificial Intelligence · Chrome · TypeScript

OpenTeam Puts Five AI Web Apps in One Group Chat to Surface What a Single Model Hides

By afumu ·
Read original on juejin.cn ↗ Google Translate ↗ Alt translation

Multi-model review no longer needs API keys or per-token spend when the web versions are orchestrated through DOM automation, but the cost is living without finish_reason, usage data, or DOM stability. Disagreement between five models exposes a boundary condition one model misses, and four models agreeing on the same error points at training-data bias instead of a single bad sample.

Summary

OpenTeam is a Chrome extension built as a group chat over the web UIs of five major AI assistants: ChatGPT, Claude, Gemini, DeepSeek, and Grok. Users @-mention any role, and every model sees the others' replies so they can challenge each other. The whole thing runs on subscriptions people already pay for; there is no API key, no per-token meter, and no SDK to rotate. The author's starting point: with a single model, an incorrect answer is undetectable because the only perspective you have is the model's, and your own judgment is the weakest check in the loop.

Engineering-wise, OpenTeam is a Manifest V3 extension that loads each AI site in a separate iframe (overriding X-Frame-Options and CSP through declarativeNetRequest), injects content scripts with all_frames: true, and implements a per-site ChatSiteAdapter for input, send, reply container, and completion. Because there is no finish_reason, completion is inferred from DOM text length stability, with tiered debounce thresholds, a separate rule for short replies, container repaint detection, and timeout compensation. Context is quarantined per role with character budgets that mirror each model's window (1M for Gemini and DeepSeek down to 256k for Grok), and roles first run independently, then collaboratively, to avoid an echo chamber.

The author is explicit about the trade-offs: DOM automation breaks when sites redesign, anti-bot systems may flag accounts, and large-scale parallel calls are impossible. The project is open source under PolyForm Noncommercial 1.0.0, supports only Chromium, and requires logged-in sessions. Installation is a three-step load-unpacked flow from GitHub Releases.

Takeaways
— OpenTeam is a Chrome extension (Manifest V3, TypeScript, roughly 48,000 lines) that puts the web versions of ChatGPT, Claude, Gemini, DeepSeek, and Grok into a single group-chat interface.
— It uses no API keys; it operates on the user's existing logged-in web sessions and existing subscription costs.
— Token consumption for multi-model discussion grows quadratically because each model reads everyone else's messages each round; web subscriptions avoid that cost entirely.
— Each AI site runs in a dedicated iframe, and declarativeNetRequest overrides X-Frame-Options and Content-Security-Policy headers to permit embedding.
— Content scripts are injected with all_frames: true so they can manipulate each site's cross-origin DOM from within its own frame.
— A ChatSiteAdapter interface is implemented per site; it locates input, sends, recognizes the reply container, and decides when the reply is complete.
— Without finish_reason, completion is inferred from text-length stability: 2,500ms observation debounce, 1,500ms final settle, 2,000ms polling, 120s per-role timeout, and short replies (50 chars or fewer) need 5,000ms stability.
— Timeout compensation re-grabs the container content; only empty content counts as failure, and the log records reply-timeout-compensated.
— Reply text extraction prefers the site's copy button (clean Markdown), falls back to site-specific extraction, then textContent; a suspicion check rejects clipboard results when their length is under 20% of DOM text.
— Context budgets are per role: Gemini and DeepSeek 1,000,000 chars, Claude 500,000, ChatGPT 272,000, Grok 256,000.
— Roles have independent mode (original question only) and collaborative mode (full group history); the recommended sequence is independent first, then collaborative.
— The license is PolyForm Noncommercial 1.0.0, only Chromium is supported, and the extension depends on logged-in sessions that can be affected by site anti-bot controls.
Conclusions

The author's opening anecdote is the core motivation: a single model's error is undetectable because the user only has that one perspective, and their own judgment is the weakest validator in the loop.

A flat subscription makes marginal token cost zero, which is why DOM automation is economically rational even though it is permanently fragile; the architecture trades stability for a pricing model that fits how people already pay for AI.

Short replies are the hardest case for completion detection because a few characters don't change between polls, so a naive debounce misclassifies them; the fix, a longer stability window, is a reminder that simple heuristics need edge-case-aware thresholds.

Running independent mode before collaborative mode preserves first reactions and prevents echo chambers; going collaborative first only produces five echoes of the loudest opinion, which is a danger any multi-agent orchestration should design around.

Four models converging on the same wrong answer is more informative than one model's unique catch because it suggests the error lives in training data rather than in a single sampling; that is a useful signal for anyone evaluating models.

Concepts & terms
finish_reason
In LLM API responses, finish_reason is a field that tells the caller why generation stopped, typically 'stop' for a natural end of output. Web chatbots don't expose it, so OpenTeam infers completion from DOM text length trends.
declarativeNetRequest
A Chrome extension API that lets extensions intercept and modify network requests declaratively. OpenTeam uses it to rewrite response headers (X-Frame-Options, CSP) so AI websites can be loaded inside iframes.
ChatSiteAdapter
OpenTeam's per-site interface that abstracts four required operations for driving a web AI chat: finding the input element, sending a message, recognizing the reply container, and detecting when a reply is finished.
PolyForm Noncommercial 1.0.0
An open-source license that permits use, copying, and modification only for noncommercial purposes; it is not compatible with commercial or for-profit use.
Source: juejin.cn ↗ Google Translate ↗ Backup ↗