Python Client für Linux
- Python 100%
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 |
||
|---|---|---|
| client | ||
| ui | ||
| .gitignore | ||
| CLAUDE.md | ||
| main.py | ||
| README.md | ||
| requirements.txt | ||
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:8765or 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)