بنقرة واحدة
sin-bridge
NIEMALS darf irgendwas an sin-bridge geraten werden NICHTS NIEMALS !! NUR ECHTE
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
NIEMALS darf irgendwas an sin-bridge geraten werden NICHTS NIEMALS !! NUR ECHTE
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
The God Agent — single entry point that autonomously routes, dispatches, and synthesizes work across the entire 126-agent OpenSIN fleet. Zero human intervention. Maximum parallelism.
4 business growth agent skills and plugins for Claude Code, Codex, Gemini CLI, Cursor, OpenClaw. Customer success (health scoring, churn), sales engineer (RFP), revenue operations (pipeline, GTM), contract & proposal writer. Python tools (stdlib-only).
10 C-level advisory agent skills and plugins for Claude Code, Codex, Gemini CLI, Cursor, OpenClaw. CEO, CTO, COO, CPO, CMO, CFO, CRO, CISO, CHRO, Executive Mentor. Multi-role board meetings, strategy routing, structured recommendations. For founders needing executive-level decision support.
25 advanced engineering agent skills and plugins for Claude Code, Codex, Gemini CLI, Cursor, OpenClaw. Agent design, RAG, MCP servers, CI/CD, database design, observability, security auditing, release management, platform ops.
Curate Claude Code's auto-memory into durable project knowledge. Analyze MEMORY.md for patterns, promote proven learnings to CLAUDE.md and .claude/rules/, extract recurring solutions into reusable skills. Use when: (1) reviewing what Claude has learned about your project, (2) graduating a pattern from notes to enforced rules, (3) turning a debugging solution into a skill, (4) checking memory health and capacity.
23 engineering agent skills and plugins for Claude Code, Codex, Gemini CLI, Cursor, OpenClaw, and 6 more tools. Architecture, frontend, backend, QA, DevOps, security, AI/ML, data engineering, Playwright, Stripe, AWS, MS365. 30+ Python tools (stdlib-only).
| name | sin-bridge |
| description | NIEMALS darf irgendwas an sin-bridge geraten werden NICHTS NIEMALS !! NUR ECHTE |
| version | 1.0.0 |
| author | OpenSIN-AI |
| category | browser-automation |
| source | opensin-native |
| status | active |
| triggers | ["use sin-bridge"] |
| related_skills | [] |
NIEMALS darf irgendwas an sin-bridge geraten werden NICHTS NIEMALS !! NUR ECHTE KONTROLLEN !! nur echte erfassungen !! niemals blind oder geraten NIEMALS !! Jeder CSS-Selektor, jede Koordinate, jede Aktion MUSS vorher durch den DOM Pre-Scan (Accessibility Tree oder JavaScript Element-Scan) zu 100% verifiziert worden sein. Raten führt zum sofortigen permanenten Ban.
Wenn ein explizit gesetzter tabId-Wert stale oder nicht mehr sichtbar ist, MUSS der Worker ihn sofort verwerfen und nur innerhalb seines gespeicherten Fensters wiederherstellen. Ein allgemeiner activeTab/currentWindow-Fallback ist verboten.
CURRENT_TAB_ID + CURRENT_WINDOW_ID) und darf niemals auf den aktiven Browser-Tab ausweichen. Recovery ist nur innerhalb dieses gespeicherten Fensters und nur für den exakt bekannten HeyPiggy-Tab erlaubt. Andere parallel geöffnete Tabs dürfen den Worker niemals beeinflussen.PRIORITY -7.0 — ABSOLUTE OBERSTE REGEL IM GESAMTEN OPENSIN-ÖKOSYSTEM Kein Agent darf jemals wieder eine einzige Web-Aktion ausführen ohne visuelle Verifikation durch das Vision-Modell.
Die wichtigste Entwicklung der OpenSIN-AI Organisation. Eine Chrome Extension mit 39 MCP Tools, die Antigravity und Claude Code in ALLEN Kategorien schlägt.
Agenten haben blind drauflosgeklickt:
Ein LLM SIEHT NICHT was auf dem Bildschirm passiert. Es RÄT. Raten ist VERBOTEN.
SCHRITT 1: Aktion ausführen (URL, Klick, Tastendruck, Scroll, was auch immer)
SCHRITT 2: SOFORT Screenshot des GESAMTEN Bildschirms machen
SCHRITT 3: Screenshot an Vision-Modell senden mit Kontext-Prompt
SCHRITT 4: Vision-Modell-Antwort LESEN und VERSTEHEN
SCHRITT 5: NUR bei "PROCEED" → nächste Aktion erlaubt
Bei "STOP" oder "RETRY" → Situation analysieren
Primär: google/antigravity-gemini-3-flash via OpenCode CLI
Fallback: look-screen CLI mit 6-Model Gemini REST API Chain
Du siehst einen Screenshot eines Browsers nach der Aktion: [BESCHREIBUNG DER AKTION].
Erwartetes Ergebnis: [WAS HÄTTE PASSIEREN SOLLEN].
Prüfe GENAU:
1. Ist das erwartete Ergebnis eingetreten? (JA/NEIN mit Begründung)
2. Gibt es Fehler, Warnungen, Captchas oder Popups? (JA/NEIN, wenn JA: welche?)
3. Ist die Seite vollständig geladen? (JA/NEIN)
4. Was zeigt der Bildschirm GENAU? (Beschreibe alle sichtbaren Elemente)
5. Was ist der empfohlene nächste Schritt? (Konkret)
Antworte mit: PROCEED wenn alles OK ist, STOP wenn etwas falsch ist, RETRY wenn die Aktion wiederholt werden sollte.
import urllib.request, json
# PFLICHT: Bridge Health prüfen BEVOR irgendwas passiert
health = json.loads(
urllib.request.urlopen(
"https://openjerro-opensin-bridge-mcp.hf.space/health",
timeout=15
).read()
)
assert health.get("extensionConnected") is True, "Extension NICHT verbunden! STOP!"
1. Bridge Health prüfen → extension_connected: true?
↓ FAIL? → Extension installieren (siehe §7)
2. Tab navigieren: navigate → URL
3. ★ VISION-GATE: take_screenshot → Vision-Check → PROCEED?
4. DOM analysieren: get_accessibility_tree oder get_html
5. ★ VISION-GATE: take_screenshot → Vision-Check → PROCEED?
6. Element interagieren: click_element / type_text / select_option
7. ★ VISION-GATE: take_screenshot → Vision-Check → PROCEED?
8. Ergebnis prüfen: get_text / get_html
9. ★ VISION-GATE: take_screenshot → Vision-Check → PROCEED?
10. Nächster Schritt NUR bei PROCEED vom Vision-Modell
Jedes ★ ist ein PFLICHT-Checkpoint. Wer einen überspringt: SOFORTIGER PERMANENTER BAN.
import subprocess, json, base64, urllib.request
# ============================================================================
# CONSTANTS — Bridge + Vision Konfiguration
# ============================================================================
BRIDGE_MCP_URL = "https://openjerro-opensin-bridge-mcp.hf.space/mcp"
BRIDGE_HEALTH_URL = "https://openjerro-opensin-bridge-mcp.hf.space/health"
MAX_STEPS = 40 # Absolute Obergrenze für Aktionen
MAX_RETRIES = 3 # Max aufeinanderfolgende RETRYs bevor STOP
MAX_NO_PROGRESS = 5 # Max Aktionen ohne sichtbaren Fortschritt
# ============================================================================
# VISION GATE — Das Herzstück
# ============================================================================
def vision_check(screenshot_base64: str, action_description: str, expected_result: str) -> str:
"""
Sendet einen Screenshot an das Vision-Modell und gibt PROCEED/STOP/RETRY zurück.
WHY: Ein LLM sieht nicht was auf dem Bildschirm passiert.
Ohne Vision-Check rät der Agent blind — und das ist VERBOTEN.
CONSEQUENCES: Ohne diesen Check darf KEINE weitere Web-Aktion stattfinden.
"""
prompt = f"""Du siehst einen Screenshot eines Browsers nach der Aktion: {action_description}.
Erwartetes Ergebnis: {expected_result}.
Prüfe GENAU:
1. Ist das erwartete Ergebnis eingetreten? (JA/NEIN mit Begründung)
2. Gibt es Fehler, Warnungen, Captchas oder Popups? (JA/NEIN, wenn JA: welche?)
3. Ist die Seite vollständig geladen? (JA/NEIN)
4. Was zeigt der Bildschirm GENAU? (Beschreibe alle sichtbaren Elemente)
5. Was ist der empfohlene nächste Schritt? (Konkret)
Antworte mit: PROCEED wenn alles OK ist, STOP wenn etwas falsch ist, RETRY wenn die Aktion wiederholt werden sollte."""
# Vision-Modell aufrufen via opencode CLI (EINZIG ERLAUBTER WEG)
result = subprocess.run(
["opencode", "run", prompt, "--format", "json"],
capture_output=True, text=True, timeout=60,
)
parts = []
for line in result.stdout.splitlines():
try:
ev = json.loads(line)
if ev.get("type") == "text":
parts.append(ev.get("part", {}).get("text", ""))
except json.JSONDecodeError:
pass
response = "".join(parts).strip().upper()
# Extraktion des Verdikts
if "PROCEED" in response:
return "PROCEED"
elif "RETRY" in response:
return "RETRY"
else:
return "STOP"
def vision_gate(screenshot_b64: str, action: str, expected: str,
step_number: int, retry_count: int) -> tuple[str, int]:
"""
Führt den vollständigen Vision-Gate-Check durch.
Returns: (verdict, updated_retry_count)
WHY: Zentrale Funktion die den Vision-Gate-Loop steuert.
CONSEQUENCES: Bei STOP muss der gesamte Workflow anhalten.
"""
verdict = vision_check(screenshot_b64, action, expected)
if verdict == "RETRY":
retry_count += 1
if retry_count >= MAX_RETRIES:
print(f"[VISION-GATE] ❌ {MAX_RETRIES}x RETRY → FORCE STOP (Step {step_number})")
return "STOP", retry_count
print(f"[VISION-GATE] 🔄 RETRY #{retry_count} (Step {step_number})")
return "RETRY", retry_count
elif verdict == "STOP":
print(f"[VISION-GATE] ❌ STOP bei Step {step_number}")
return "STOP", 0
else:
print(f"[VISION-GATE] ✅ PROCEED (Step {step_number})")
return "PROCEED", 0
| Tool | Beschreibung | Vision-Gate danach? |
|---|---|---|
navigate | URL öffnen | JA — PFLICHT |
go_back | Browser zurück | JA — PFLICHT |
go_forward | Browser vorwärts | JA — PFLICHT |
reload | Seite neu laden | JA — PFLICHT |
| Tool | Beschreibung | Vision-Gate danach? |
|---|---|---|
click_element | CSS-Selektor klicken | JA — PFLICHT |
type_text | Text in Element eingeben | JA — PFLICHT |
select_option | Dropdown-Option wählen | JA — PFLICHT |
get_text | Text auslesen | Nein (read-only) |
get_html | HTML auslesen | Nein (read-only) |
get_accessibility_tree | DOM-Baum auslesen | Nein (read-only) |
| Tool | Beschreibung | Vision-Gate danach? |
|---|---|---|
take_screenshot | Screenshot machen | Nein (IST der Gate-Input) |
tabs_list | Tabs auflisten | Nein (read-only) |
tabs_activate | Tab wechseln | JA — PFLICHT |
| Tool | Beschreibung | Vision-Gate danach? |
|---|---|---|
tabs_create | Neuen Tab öffnen | JA — PFLICHT |
tabs_close | Tab schließen | JA — PFLICHT |
tabs_update | Tab aktualisieren | JA — PFLICHT |
REGEL: Alles was den Bildschirm VERÄNDERT braucht Vision-Gate. Alles was nur LIEST nicht.
# ============================================================================
# ANTI-ENDLOSSCHLEIFEN-SCHUTZ
# ============================================================================
# 1. Nach 3 aufeinanderfolgenden RETRY → SOFORT STOPPEN
# 2. Nach 5 Aktionen ohne sichtbaren Fortschritt → SOFORT STOPPEN
# 3. Nach MAX_STEPS (40) Gesamtaktionen → SOFORT STOPPEN
# 4. Bei jedem STOP: Screenshot + Kontext loggen, Issue erstellen
# ============================================================================
class VisionGateController:
"""
Controller der den Vision-Gate-Loop steuert und Endlosschleifen verhindert.
WHY: Ohne diesen Controller laufen Agenten in Endlosschleifen.
CONSEQUENCES: Controller-Verletzung = SOFORTIGER PERMANENTER BAN.
"""
def __init__(self):
self.total_steps = 0
self.consecutive_retries = 0
self.no_progress_count = 0
self.last_screenshot_hash = None
def should_continue(self) -> bool:
"""Prüft ob der Agent weitermachen darf."""
if self.total_steps >= MAX_STEPS:
print(f"[GATE] ❌ MAX_STEPS ({MAX_STEPS}) erreicht → STOP")
return False
if self.consecutive_retries >= MAX_RETRIES:
print(f"[GATE] ❌ {MAX_RETRIES}x RETRY → STOP")
return False
if self.no_progress_count >= MAX_NO_PROGRESS:
print(f"[GATE] ❌ {MAX_NO_PROGRESS} Aktionen ohne Fortschritt → STOP")
return False
return True
def record_step(self, verdict: str, screenshot_hash: str):
"""Zeichnet einen Schritt auf und aktualisiert Zähler."""
self.total_steps += 1
if verdict == "RETRY":
self.consecutive_retries += 1
else:
self.consecutive_retries = 0
# Fortschritts-Erkennung via Screenshot-Hash
if screenshot_hash == self.last_screenshot_hash:
self.no_progress_count += 1
else:
self.no_progress_count = 0
self.last_screenshot_hash = screenshot_hash
1. observe_screen(include_dom="true") → liefert Screenshot + DOM
2. Screenshot an Vision-Modell senden
3. Ergebnis auswerten
# Screenshot machen
screencapture -x /tmp/opensin_vision_gate_step_XX.png
# Vision-Analyse anfordern
look-screen --screenshot /tmp/opensin_vision_gate_step_XX.png \
--describe \
--prompt "KONTEXT: Ich habe gerade [AKTION] ausgeführt. ..."
# Bridge-Screenshot holen
screenshot_result = bridge_call("take_screenshot", {})
screenshot_b64 = screenshot_result.get("screenshot", "")
# An Vision-Modell senden
verdict = vision_check(screenshot_b64, "Klick auf 'Next'", "Nächste Frage erscheint")
# task(subagent_type="multimodal-looker", prompt="Analysiere: ...")
GILT FÜR JEDES SCRIPT, JEDEN AGENTEN, JEDEN FLOW DER AUCH NUR EINEN BROWSER-KLICK MACHT.
# ❌ VERBOTEN — SOFORTIGER BAN
result = await click_element(selector)
if result.get("error"):
result = await ghost_click(selector) # ← blind, kein Vision-Check
if result.get("error"):
await keyboard_action(["Enter"]) # ← blind, kein Vision-Check
# ... 5 Aktionen, KEIN einziger Vision-Check
Stufe 1: click_element ausführen
→ SOFORT Screenshot → Vision-Check (ask_vision / _vision_gate_inside_escalation)
PROCEED? → return True (fertig)
RETRY? → weiter zu Stufe 2
↓
Stufe 2: ghost_click ausführen
→ SOFORT Screenshot → Vision-Check
PROCEED? → return True
RETRY? → weiter zu Stufe 3
↓
Stufe 3: keyboard Enter/Space ausführen
→ SOFORT Screenshot → Vision-Check NACH JEDER TASTE
PROCEED? → return True
RETRY? → weiter zu Stufe 4
↓
Stufe 4: vision_click ausführen
→ SOFORT Screenshot → Vision-Check
PROCEED? → return True
RETRY? → weiter zu Stufe 5
↓
Stufe 5: coord_click ausführen
→ SOFORT Screenshot → Vision-Check
PROCEED? → return True
RETRY? → STOP, alle Methoden erschöpft, Issue erstellen
async def _vision_gate_inside_escalation(step_label, action_done, expected):
"""Screenshot + Vision-Check innerhalb der Klick-Eskalationskette."""
img_path, _ = await take_screenshot(step_num, label=f"esc_{step_label}")
if not img_path:
return {"verdict": "RETRY", "next_action": "none"}
return await ask_vision(img_path, action_done, expected, step_num)
async def escalating_click(selector, description="", x=None, y=None):
# Stufe 1: click_element
result = await execute_bridge("click_element", {"selector": selector, **_tab_params()})
await asyncio.sleep(0.8)
decision = await _vision_gate_inside_escalation("after_click_element", f"click_element auf {selector}", "Seite hat reagiert")
if decision.get("verdict") == "PROCEED":
return True
# → Stufe 2, 3, 4, 5 — JEDE mit eigenem Vision-Gate
| Ersatz | Status |
|---|---|
DOM-Change-Check (dom_verify_change) | ❌ KEIN Ersatz — nur zusätzlich |
result.get("success") von Bridge | ❌ KEIN Ersatz — Bridge sieht DOM, nicht Bildschirm |
| URL-Vergleich vor/nach | ❌ KEIN Ersatz — Survey-Seiten ändern URL nicht |
| "Ich weiß was auf der Seite ist" | ❌ BAN — LLM SIEHT NICHT, Vision SIEHT |
escalating_click Funktion in jedem Scriptimport urllib.request, json
def is_bridge_connected() -> bool:
"""Prüft ob die Bridge-Extension verbunden ist."""
try:
health = json.loads(
urllib.request.urlopen(
"https://openjerro-opensin-bridge-mcp.hf.space/health",
timeout=10
).read()
)
return health.get("extensionConnected") is True
except Exception:
return False
Siehe: references/install-extension-via-keyboard.md
Schnell-Zusammenfassung:
/Users/jeremy/dev/OpenSIN-Bridge/extensionasync def install_opensin_bridge_extension():
"""
Installiert die OpenSIN Bridge Extension via macOS AppleScript.
WHY: Wenn Extension nicht installiert, funktioniert kein Bridge-Tool.
CONSEQUENCES: Ändert Chrome-Konfiguration dauerhaft.
"""
extension_path = "/Users/jeremy/dev/OpenSIN-Bridge/extension"
script = f'''
tell application "System Events"
key down command
key down space
key up space
key up command
delay 0.5
keystroke "chrome"
delay 0.3
key code 36
delay 2
repeat 4 times
key code 48
delay 0.1
end repeat
key code 36
delay 0.5
repeat 3 times
key code 48
delay 0.1
end repeat
keystroke " "
delay 0.5
repeat 10 times
key code 48
delay 0.1
end repeat
key code 36
delay 0.5
repeat 2 times
key code 48
delay 0.1
end repeat
key code 36
delay 1
keystroke "{extension_path}"
key code 36
delay 1
end tell
'''
import subprocess
result = subprocess.run(['osascript', '-e', script], capture_output=True, text=True)
return result.returncode == 0
Die Bridge hat eingebaute Anti-Detection-Funktionen:
| Feature | Beschreibung |
|---|---|
| Human Entropy | Gaussian noise auf Klick-Koordinaten und Timing |
| Shadow DOM Piercing | Rekursive Traversierung von shadowRoot-Grenzen |
| Deterministic Primitives | Bekannte UI-Elemente werden mit harten Regeln behandelt, nicht AI-Raten |
| Self-Healing Loops | Wenn ein Klick keine DOM-Änderung erzeugt, feuern Fallback-Strategien |
| Native Messaging Host | CSP-Restrictions umgehen via stdio |
| Verstoß | Konsequenz |
|---|---|
| Web-Aktion ohne Screenshot danach | SOFORTIGER PERMANENTER BAN |
| Screenshot ohne Vision-Modell-Check | SOFORTIGER PERMANENTER BAN |
| Vision-Modell sagt STOP, Agent macht trotzdem weiter | SOFORTIGER PERMANENTER BAN |
| Autorun (mehrere Aktionen ohne Vision-Gate dazwischen) | SOFORTIGER PERMANENTER BAN |
| Survey/Profil-Arbeit ohne OpenSIN-Bridge | SOFORTIGER PERMANENTER BAN |
| "Ich dachte es hat funktioniert" ohne Screenshot-Beweis | SOFORTIGER PERMANENTER BAN |
| Endlosschleife ohne Vision-basierte Abbruch-Logik | SOFORTIGER PERMANENTER BAN |
| Direktes nodriver/CDP für Survey-Arbeit statt Bridge | SOFORTIGER PERMANENTER BAN |
| Trigger | Aktion |
|---|---|
| "Prolific Profil ausfüllen" | Bridge + Vision Gate Workflow starten |
| "Survey ausfüllen" | Bridge + Vision Gate Workflow starten |
| "Web-Formular automatisieren" | Bridge + Vision Gate Workflow starten |
| "Browser-Automation mit Screenshots" | Bridge + Vision Gate Workflow starten |
| "sin-bridge" | Diesen Skill laden |
| "bridge health check" | §7.1 Health Check ausführen |
| "extension installieren" | §7.2/7.3 Extension Installation |
KEIN EINZIGER KLICK, KEIN EINZIGER TASTENDRUCK, KEINE EINZIGE URL, KEINE EINZIGE WEB-AKTION OHNE DASS antigravity-gemini-3-flash VORHER EINEN SCREENSHOT DES GESAMTEN BILDSCHIRMS ANALYSIERT UND MIT "PROCEED" BESTÄTIGT HAT. PUNKT. KEINE AUSNAHMEN. NIEMALS.
/Users/jeremy/dev/OpenSIN-Bridge/extensionAI Agent (via opencode CLI)
│
▼ (WebSocket)
HF MCP Server (immer online)
wss://openjerro-opensin-bridge-mcp.hf.space
│
▼ (WebSocket)
OpenSIN Bridge v2.6.0 (Chrome Extension)
│
▼ (Chrome APIs)
Chrome Browser (deine Sessions, deine Cookies)
# Repo clonen
git clone https://github.com/OpenSIN-AI/OpenSIN-backend.git
cd OpenSIN-backend/services/sin-chrome-extension
# In Chrome laden:
# 1. chrome://extensions/ öffnen
# 2. Entwicklermodus aktivieren
# 3. "Entpackte Erweiterung laden" → extension/ Ordner
Der HF MCP Server läuft bereits und ist immer erreichbar:
wss://openjerro-opensin-bridge-mcp.hf.spacetabs_list — Alle Tabs auflistentabs_create — Neuen Tab öffnentabs_update — Tab aktualisierentabs_close — Tab schließentabs_activate — Tab aktivierennavigate — Zu URL navigierengo_back — Zurückgo_forward — Vorwärtsreload — Seite neu ladenclick_element — Element klicken (Standard)ghost_click — Element klicken mit vollem Mouse/Pointer-Event-Stack (Für SPA/React Survey-Cards!)click_coordinates — Klick auf absolute x,y Koordinaten (CDP/DOM-Fallback)type_text — Text eingebenget_text — Textinhalt lesenget_html — HTML lesenget_attribute — Attribut lesenwait_for_element — Auf Element wartenexecute_script — JavaScript ausführen (CSP-safe)inject_css — CSS injizierenget_page_info — Title, URL, readyStateget_all_links — Alle Links extrahierenget_all_inputs — Alle Formularfelder extrahierenscreenshot — Screenshot machenscreenshot_full — Vollständiger Screenshotstart_recording — Videoaufnahme startenstop_recording — Videoaufnahme stoppenrecording_status — Aufnahmestatus prüfenget_cookies — Cookies lesenset_cookie — Cookie setzendelete_cookie — Cookie löschenclear_cookies — Alle Cookies löschenstorage_get — Local Storage lesenstorage_set — Local Storage schreibenstorage_clear — Local Storage löschenget_network_requests — Request-Log lesenblock_url — URL blockierenenable_stealth — Anti-Detection aktivierenstealth_status — Stealth-Status prüfenextract_prolific_studies — Verfügbare Studies extrahierenhealth — Extension-Status prüfenlist_tools — Alle Tools auflistenoffscreen_status — Offscreen-Dokument-Statusimport asyncio, websockets, json
async def find_study():
async with websockets.connect('wss://openjerro-opensin-bridge-mcp.hf.space/agent') as ws:
# Navigate to Prolific
await ws.send(json.dumps({
'method': 'navigate',
'params': {'url': 'https://app.prolific.com/studies'},
'id': 1
}))
await asyncio.sleep(15) # Wait for React SPA
# Extract studies
await ws.send(json.dumps({
'method': 'extract_prolific_studies',
'id': 2
}))
resp = await ws.recv()
result = json.loads(resp)
print(f"Studies: {result}")
asyncio.run(find_study())
await ws.send(json.dumps({
'method': 'enable_stealth',
'id': 3
}))
await ws.send(json.dumps({
'method': 'screenshot',
'id': 4
}))
Der A2A-SIN-Worker-Prolific läuft 24/7 und prüft automatisch alle 5 Minuten auf verfügbare Studies:
# Worker starten
cd /Users/jeremy/dev/A2A-SIN-Worker-Prolific
python3 src/worker.py
# Production Mode (navigiert zu Plattformen)
TEST_MODE=false python3 src/worker.py
| Feature | Claude Code | OpenSIN Bridge v2.6.0 |
|---|---|---|
| Tools | ~5 | 39 |
| Video Recording | ❌ | ✅ |
| Stealth Mode | ❌ | ✅ |
| Cookie CRUD | ❌ | ✅ |
| Network Logging | ❌ | ✅ |
| URL Blocking | ❌ | ✅ |
| Offscreen Processing | ❌ | ✅ |
| 24/7 Worker | ❌ | ✅ |
| Open Source | ❌ | ✅ |
| Local Privacy | ❌ (Cloud Relay) | ✅ (Unix Socket) |
CSP-Safe execute_script: Alle Script-Injections nutzen den code Parameter, nicht func. Das umgeht Chrome's CSP unsafe-eval Restriction.
Single Tab Mode: Der Worker öffnet niemals neue Tabs für dieselbe Plattform. Er reused existierende Tabs, um Ban-Risiken zu minimieren.
Safe Mode: Standardmäßig läuft der Worker im TEST_MODE=true, der keine Navigation zu Plattformen durchführt. Für Production: TEST_MODE=false.
Session Detection: Der Worker erkennt automatisch abgelaufene Sessions (Login-Redirects) und wartet auf manuelles Einloggen, statt zu crashen.