Python Client für Linux
Find a file
User dfe445d6ef docs: Link auf 2ndbrain-Ökosystem-Index ergänzt
CLAUDE.md dieses Repos verwies bisher nirgends auf Entwicklerdokumentation/ÖKOSYSTEM-INDEX.md
im übergeordneten 2ndbrain-Repo — ein frisch startender Agent findet den Gesamtüberblick über
alle sechs Iris-Codebasen sonst nicht von selbst.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XFoSz9zrZ9UYh4ww7PEXeA
2026-08-29 19:28:24 +02:00
client feature: Stop-Button zum Abbrechen laufender Jobs — Job-Liste und Detail-View 2026-06-13 16:36:08 +02:00
ui feature: Stop-Button zum Abbrechen laufender Jobs — Job-Liste und Detail-View 2026-06-13 16:36:08 +02:00
.gitignore chore: .gitignore und CLAUDE.md aktualisieren 2026-06-07 20:33:35 +02:00
CLAUDE.md docs: Link auf 2ndbrain-Ökosystem-Index ergänzt 2026-08-29 19:28:24 +02:00
main.py feature: Light/Dark-Mode-Umschalter in Einstellungen 2026-05-25 13:56:24 +02:00
README.md feat: implement all UI phases + add README 2026-05-24 14:20:37 +02:00
requirements.txt feat: markdown rendering, file chips, collapsible intermediate results 2026-05-24 15:24:12 +02:00

Iris Remote Client

Cross-platform desktop client (Linux, Windows, macOS) for the IrisRemoteServer running inside the macOS Iris menu-bar app. The AI logic stays on the Mac — this client is a thin remote viewer, analogous to the iOS companion app.

Features

  • Connect to IrisRemoteServer over HTTPS with Bearer Token auth
  • Create agent jobs (Hermes / Claude Code / opencode)
  • Stream job output live via SSE
  • Send follow-up messages to running jobs
  • Browse and re-open previous jobs
  • Config persisted per platform (~/.config/iris-remote/ on Linux)

Tech Stack

What Library
UI PyQt6
HTTP + SSE httpx (async, verify=False for self-signed certs)
Qt ↔ asyncio qasync
Config paths platformdirs

Setup

# Create venv (once)
python3 -m venv .venv
source .venv/bin/activate        # Windows: .venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

# Run
python main.py

Configuration

On first launch, open the Einstellungen tab and enter:

  • Server-URL — e.g. https://192.168.1.x:8765 or your Tailscale address
  • Bearer Token — from Iris → Settings → Remote Server

Click Verbindung testen to verify, then Speichern. Settings are stored in ~/.config/iris-remote/config.json (never in the repo).

Project Structure

linux-client/
├── main.py                  # QApplication + qasync event loop
├── requirements.txt
├── client/
│   ├── models.py            # AgentJob, IrisConfig dataclasses
│   └── server.py            # IrisServerClient — all HTTP calls + SSE
└── ui/
    ├── main_window.py       # Main window, tab management, client lifecycle
    ├── settings_view.py     # Server URL + token, connection test
    ├── job_list_view.py     # Job list with 5 s polling, new job button
    ├── job_detail_view.py   # Streaming output + follow-up input
    └── new_job_dialog.py    # Agent type picker + prompt input

IrisRemoteServer API

The client talks to IrisRemoteServer (default port 8765) running on the Mac:

Endpoint Method Purpose
/health GET Connection test + version
/agents GET List all jobs
/agent POST Create new job
/agent/:id/stream GET SSE stream (job output)
/agent/:id/followup POST Send follow-up message

SSE format: data: {"chunk":"..."} / data: [DONE] / data: {"error":"..."}

Requirements

  • Python 3.12+
  • IrisRemoteServer reachable on the network (LAN or Tailscale)