Ein gestarteter Python-Prozess verliert nach einem Neustart seinen Arbeitsstand, obwohl die Sitzungsdateien noch vorhanden sind.

Die schnellste Lösung: Erst eine isolierte Einzelaufgabe ausführen, danach SDK und Laufzeit festschreiben, session_root getrennt sichern und erst anschließend einen dauerhaft überwachten Prozess einrichten.

Zielgruppe und Betriebsgrenze

Dieser Leitfaden ist für Sie gedacht, wenn Sie DeepSeek Harness mit Python-Aufrufen automatisieren und nicht nur einmalig im Terminal testen möchten. Er passt besonders zu drei Rollen:

  • Automatisierungsentwickler, die wiederholbare Codeaufgaben aus Python anstoßen;
  • Plattformingenieure, die einen Cloud-Mac als dauerhaft verfügbaren Agent-Arbeitsplatz betreiben;
  • Projektverantwortliche, die eine übergebene Umgebung auf Wiederherstellbarkeit prüfen müssen.
Die zentrale Entscheidung lautet nicht „lokaler Mac oder Cloud-Mac“, sondern: **Welche Daten müssen nach einem Prozessabbruch erhalten bleiben, und wer startet die Aufgabe danach wieder?** Das Python SDK kann die Kommunikation mit der Laufzeit über einen Adapter beziehungsweise JSON-RPC übernehmen. Es ersetzt jedoch weder Ihre Prozessaufsicht noch Ihre Berechtigungs- und Backup-Regeln.

Der Status ist außerdem wichtig: Die offizielle Dokumentation führt den Python-Zugang als programmatische Alternative zur Weboberfläche und beschreibt eine vorgefertigte Laufzeit, die keine systemweite Node.js-Installation voraussetzt. macOS auf Apple-Silicon wird dabei als Zielplattform genannt. Der Entwicklungsstatus kann sich jedoch ändern; rechnen Sie bei einer Developer Preview mit inkompatiblen Änderungen. Prüfen Sie deshalb vor jeder Übergabe das offizielle DeepSeek-Harness-Repository und die dort verlinkte Python-SDK-Anleitung.

Betriebsmodell vor der Installation

Bevor Sie einen Cloud-Mac einrichten, legen Sie fest, ob Ihr Skript eine einmalige Aufgabe, einen periodischen Lauf oder einen langfristigen Agent-Prozess ausführt. Diese drei Modelle sehen ähnlich aus, haben aber unterschiedliche Anforderungen an Zustände und Wiederanlauf.

<
BetriebsmodellArbeitsbereichSitzungsstrategieProzessverantwortungBewertung
Einmaliges SkriptTemporäres Test-RepositoryNeue Sitzung je LaufManuelles Starten und Prüfen5/5 für Ersttests
Periodischer JobSeparates Arbeitsverzeichnis je AuftragNeue Sitzung oder bewusst versionierte SitzungScheduler, Timeout und Exit-Code4/5 für planbare Automatisierung
Dauerhafter AgentFestes Repository mit klarer ZuständigkeitSitzung gezielt fortsetzenSupervisor, Protokollierung, Wiederanlauf3/5 ohne zusätzliche Betriebslogik
Mehrere Projekte auf einem HostStrikte Trennung pro ProjektNiemals gemeinsame SitzungskennungGetrennte Benutzer- oder Prozessrechte2/5 bei fehlender Isolation
Übertragen Sie nicht einfach Ihr gesamtes lokales Entwicklungsverzeichnis auf den Cloud-Mac und lassen Sie es dauerhaft laufen. Darin können ungetrackte Dateien, alte Sitzungsprotokolle, lokale Konfigurationsdateien und persönliche Zugangsdaten liegen. Die drei häufigsten versteckten Kosten sind:
  1. Zustandsvermischung: Ein gemeinsamer Sitzungsordner kann Gesprächsverlauf und persistente Bash-Zustände zwischen Projekten vermengen.
  2. Unklare Prozessgrenzen: Ein SSH-Abbruch beendet nicht zwingend den Prozess, während ein Prozessabbruch nicht automatisch eine Aufgabe sicher fortsetzt.
  3. Fehlende Beweiskette: Ohne Eingabe, Arbeitsbereich, Ergebnis und tatsächliche Dateiveränderung können Sie nicht unterscheiden, ob eine Aufgabe erfolgreich war oder nur ein plausibel aussehendes Ergebnis geliefert wurde.
Für Datenschutz und DSGVO-Konformität sollten Sie zusätzlich festhalten, welche Repository-Inhalte, API-Anfragen und Sitzungsprotokolle den Rechner verlassen. Der Cloud-Mac ist nicht automatisch ein abgeschotteter Tresor. Zugriff, Benutzerrechte, Festplattenverschlüsselung und die Aufbewahrungsdauer der Logs bleiben Ihre Verantwortung.

Voraussetzungen und Auswahl des Cloud-Macs

Die Auswahl des Rechners sollte sich am Agent-Betrieb orientieren, nicht am Gedanken, dass das Sprachmodell lokal auf dem Mac ausgeführt wird. In diesem Szenario übernimmt der Cloud-Mac vor allem Arbeitsbereich, Tool-Aufrufe, Dateien, Shell-Prozesse und Sitzungszustand; die Modellkommunikation erfolgt über den konfigurierten Endpunkt.

Prüfen Sie in dieser Reihenfolge:

  1. Systemarchitektur: Stimmen die von der offiziellen SDK-Dokumentation unterstützte macOS-Architektur und die Architektur des bereitgestellten Rechners überein?
  2. Python-Version: Verwenden Sie die von der Dokumentation geforderte Python-Haupt- und Nebenversion, statt die globale Standardversion blind zu übernehmen.
  3. Netzwerkzugang: Kann der Rechner den Modell-Endpunkt und den Paketindex erreichen, ohne dass Sie unnötige eingehende Ports öffnen?
  4. Speicherort: Gibt es getrennte Verzeichnisse für Quellcode, Sitzungen, Logs und Backups?
  5. Berechtigungen: Läuft der Agent mit einem Benutzerkonto, das nur die für die Aufgabe erforderlichen Dateien verändern darf?
Ein Cloud-Mac ist besonders sinnvoll, wenn Sie macOS-spezifische Werkzeuge benötigen, eine Apple-Silicon-Umgebung validieren wollen oder einen dauerhaft erreichbaren Entwicklungsarbeitsplatz suchen. Für reine API-Anfragen ohne lokale Datei- und Shell-Operationen ist ein kleiner, kurzlebiger Prozess oft einfacher. Einen GPU-Kauf sollten Sie für diesen Anwendungsfall nicht automatisch daraus ableiten: Die entscheidende Ressource ist die stabile Agent-Umgebung, nicht die lokale Inferenzleistung.

Falls Sie verschiedene Standorte und Bereitstellungsmodelle vergleichen, können Sie die verfügbaren Mac-Konfigurationen von MACGPU als Ausgangspunkt verwenden. Übernehmen Sie daraus aber nur tatsächlich veröffentlichte Angaben; die SDK-Mindestanforderungen stammen weiterhin aus der jeweiligen Projektdokumentation.

Isolierte Python-Umgebung

Legen Sie zunächst ein neutrales Verzeichnis an, das nicht Ihr Produktiv-Repository ist. Ein mögliches Layout sieht so aus:

~/agent-runs/deepseek-harness/
├── app/
├── test-repo/
├── sessions/
├── logs/
├── backups/
└── .venv/

Die konkrete Pfadangabe ist kein SDK-Standard. Entscheidend ist, dass sessions/ nicht innerhalb des Git-Arbeitsbereichs liegt und dass logs/ nicht versehentlich mit Zugangsdaten oder vollständigen Prompt-Inhalten öffentlich archiviert wird.

Führen Sie die Installation in fünf kontrollierten Schritten aus:

  1. Erstellen Sie das Verzeichnis und wechseln Sie hinein.
  2. Erzeugen Sie eine eigene virtuelle Umgebung mit der zuvor geprüften Python-Version.
  3. Aktivieren Sie die Umgebung nur für die Installation und den Test, nicht als unkontrollierte globale Shell-Konfiguration.
  4. Installieren Sie das in der offiziellen Dokumentation genannte Paket für deepseek-harness-sdk und die dazugehörige vorgefertigte Laufzeit in den dort angegebenen Versionen.
  5. Speichern Sie anschließend Installationsquelle, Paketversion, Python-Version, macOS-Version und Architektur in einer Übergabedatei.
Beispiel für die Struktur, wobei Paketname und Versionsbindung vor der Ausführung gegen die offizielle Anleitung geprüft werden müssen:
mkdir -p "$HOME/agent-runs/deepseek-harness"/{app,test-repo,sessions,logs,backups}
cd "$HOME/agent-runs/deepseek-harness"

python3 -m venv .venv
source .venv/bin/activate

python -m pip install --upgrade pip
python -m pip install deepseek-harness-sdk

python -m pip freeze > app/requirements.lock.txt
sw_vers > app/macos-version.txt
python --version > app/python-version.txt
uname -m > app/architecture.txt

Das ist bewusst kein Produktionsrezept mit fest erfundenen Versionsnummern. Am 18.08.2026 müssen Sie die tatsächlich freigegebene Paketbezeichnung und die Laufzeitbindung aus dem offiziellen Repository übernehmen. Die Python-Dokumentation zu virtuellen Umgebungen beschreibt den verwendeten Isolationsmechanismus.

Braucht das Python SDK auf dem Mac Node.js?

Für die vorgefertigte Laufzeit ist laut Aufgabenrahmen keine systemweite Node.js-Installation erforderlich. Das bedeutet aber nicht, dass Node.js in jedem Installationsweg entbehrlich ist. Wenn Sie aus dem Quellcode bauen, ein Entwicklerpaket verwenden oder eine Laufzeit selbst zusammensetzen, können zusätzliche Build-Werkzeuge verlangt werden.

Prüfen Sie daher drei Fälle getrennt:

  • Vorgefertigte Laufzeit: Node.js nicht global nachinstallieren, wenn das Paket die Laufzeit tatsächlich mitliefert.
  • Quellcode-Build: Anforderungen aus dem Repository vollständig übernehmen; hier können Node.js, Paketmanager und Compiler relevant sein.
  • Gemischte Umgebung: Nicht durch ein lokal vorhandenes Node.js kaschieren, dass Ihr Python-Prozess eine andere Runtime startet als die getestete.
Das Erfolgssignal ist ein sauberer Start und ein sauberer Exit des kleinsten verfügbaren SDK-Beispiels. Wenn der Start bereits an einer fehlenden Runtime scheitert, gehen Sie nicht sofort zu Repository-Zugriff und Dauerbetrieb über. Sichern Sie die Fehlermeldung, prüfen Sie Architektur und Paketquelle und kehren Sie zur Minimalinstallation zurück.

Erste Aufgabe mit überprüfbarem Ergebnis

Verwenden Sie für den ersten End-to-End-Test ein wegwerfbares Repository. Es sollte keine Kundendaten, keine privaten Schlüssel und keine Produktionsabhängigkeiten enthalten. Der Test muss drei Ebenen getrennt prüfen:

  • Modellantwort: Erzeugt das SDK eine Antwort und beendet die Sitzung kontrolliert?
  • Dateioperation: Wird eine genau definierte Datei am erwarteten Ort erstellt oder verändert?
  • Bash-Ausführung: Liefert ein ungefährlicher Shell-Befehl das erwartete Ergebnis?
Ein geeignetes Prüfprotokoll enthält mindestens:
Auftrag: Eine Datei TEST_RESULT.md mit einem festgelegten Satz erstellen.
Arbeitsbereich: /vollständiger/pfad/zu/test-repo
Sitzung: test-2026-08-18-001
Erwartete Änderung: test-repo/TEST_RESULT.md
Erwarteter Exit-Status: 0

Nach dem Lauf kontrollieren Sie nicht nur die Antwort des Modells. Prüfen Sie den tatsächlichen Dateistatus:

pwd
git status --short
find . -maxdepth 2 -type f -print

Erfolgreich ist der Test erst dann, wenn Arbeitsbereich, Ausgabe und Dateiveränderung zusammenpassen. Eine sprachlich korrekte Antwort bei falschem cwd ist ein Fehlschlag. Ebenso ist eine Datei am richtigen Ort kein ausreichender Nachweis, wenn der Prozess mit Fehlerstatus beendet wurde.

Wenn die Prüfung scheitert, reduzieren Sie den Auftrag auf eine reine Modellantwort. Danach testen Sie eine einzelne Dateioperation und erst anschließend Bash. Diese Rückfallfolge verhindert, dass Sie Netzwerk-, Berechtigungs- und Sitzungsprobleme gleichzeitig debuggen. Für die saubere Übergabe von Exit-Codes und Prozessfehlern ist außerdem die offizielle Python-Dokumentation zum Starten und Überwachen von Unterprozessen relevant.

Session_root, Arbeitsverzeichnis und Sitzungskennung

Die drei Pfadangaben werden häufig verwechselt, obwohl sie unterschiedliche Aufgaben haben:

  • cwd bestimmt, in welchem Arbeitsverzeichnis Datei- und Shell-Operationen ausgeführt werden.
  • session_root bestimmt, wo Sitzungsdaten und der zugehörige persistente Zustand abgelegt werden.
  • Die session id identifiziert die konkrete Unterhaltung beziehungsweise den wiederaufnehmbaren Lauf.
Legen Sie session_root auf einen kontrollierten, nicht öffentlichen Datenpfad außerhalb des Quellcodeverzeichnisses. Ein typischer Aufbau ist:
~/agent-runs/deepseek-harness/sessions/<projektname>/<umgebung>/

Verwenden Sie für jedes Projekt und jede Umgebung einen eigenen Bereich. Sitzungsdateien gehören nicht in ein Git-Repository, nicht in einen frei lesbaren Webserver-Pfad und nicht in ein gemeinsam genutztes temporäres Verzeichnis. Wenn Sitzungsprotokolle vollständige Eingaben, Dateiinhalte oder Tool-Ergebnisse enthalten, müssen Sie deren Zugriff und Aufbewahrung wie bei anderen Betriebsdaten behandeln.

Kann dieselbe Session-ID über mehrere Prozesse fortgesetzt werden?

Ja, sofern die verwendete SDK-Version und Laufzeit die Sitzung über denselben session_root lesen können und nicht zwei Prozesse gleichzeitig dieselbe Sitzung verändern. Die Sitzungskennung allein reicht nicht aus: Der zweite Prozess muss auf denselben Sitzungsbestand zeigen und denselben Arbeitsbereich korrekt setzen.

Das Wiederverwenden einer Kennung setzt normalerweise nicht nur den Gesprächsverlauf, sondern auch den persistenten Bash-Zustand fort. Genau deshalb darf eine Kennung nicht für unabhängige Projekte oder parallele Aufträge geteilt werden.

Regel für die Übergabe:

  • Neue Aufgabe: neue Sitzungskennung;
  • Fortsetzung nach bewusstem Zwischenstand: bestehende Kennung;
  • Parallel laufender Auftrag: eigene Kennung und eigener Sitzungsbereich;
  • Unklarer Zustand nach Abbruch: zuerst lesen und prüfen, nicht blind fortsetzen.
<
ZustandNeue SitzungBestehende Sitzung
Ersttest im Wegwerf-RepositoryJaNein
Fortsetzung nach kontrolliertem TimeoutNeinJa, nach Prüfung
Neues Projekt auf demselben Cloud-MacJaNein
Prozessabbruch während einer DateiänderungNicht sofortNur nach Zustandsprüfung
Wiederholung eines nachweislich nicht gestarteten JobsMeist jaNur mit eindeutigem Startprotokoll
Das wichtigste Beweismittel ist ein Startprotokoll mit Sitzungskennung, Arbeitsbereich, Auftrag und Zeitstempel. Ohne diese Informationen kann ein Neustart denselben Auftrag versehentlich erneut ausführen.

Zugangsdaten und Prozessverantwortung

Speichern Sie API-Schlüssel nicht im Repository, nicht im Python-Quelltext und nicht als Klartext in einer dauerhaft lesbaren Startdatei. Für einen einfachen Test genügt eine geschützte Umgebungsvariable. Für einen länger laufenden Dienst ist ein kontrollierter Geheimnisspeicher oder die macOS-Schlüsselbundintegration vorzuziehen. Die Apple-Dokumentation zu Keychain Services beschreibt den verschlüsselten Schlüsselbund und die Zugriffskontrolle für kleine geheime Daten; verwenden Sie ihn nur so, dass der Dienst beim unbeaufsichtigten Start nicht an einer unerwarteten interaktiven Authentifizierungsabfrage hängen bleibt.

Beispiel für einen interaktiven Test:

export DEEPSEEK_API_KEY='nur-für-diese-shell'
python app/run_probe.py
unset DEEPSEEK_API_KEY

In einem produktiven Ablauf müssen Sie zusätzlich festlegen:

  1. Wer den Prozess startet?
  2. Wer ihn stoppt?
  3. Nach welcher Zeit gilt ein Lauf als festgefahren?
  4. Wo landen Standardausgabe und Fehlerausgabe?
  5. Wie werden Logs rotiert und gelöscht?
  6. Wer entscheidet nach einem Host-Neustart über Fortsetzung oder Abbruch?
Die [Apple-Dokumentation zu launchd](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPSystemStartup/Chapters/CreatinglaunchdJobs.html) ist eine mögliche Grundlage für macOS-Prozessstarts. Sie sollten daraus jedoch nicht ableiten, dass das SDK selbst einen Daemon, automatische Wiederaufnahme oder eine sichere Parallelitätssteuerung bereitstellt. Diese Eigenschaften müssen Sie in Ihrer Betriebslogik und in Ihren Tests nachweisen.

Ein zusätzlicher Kontrollpunkt ist JSON-RPC: Wenn der Python-Adapter einen Runtime-Prozess über stdio steuert, müssen Sie Exit-Status, Transportfehler und unvollständige Antworten getrennt protokollieren. Eine erfolgreiche Verbindung bedeutet nicht automatisch, dass die Aufgabe im Arbeitsbereich erfolgreich abgeschlossen wurde.

Neustart- und Rückfallprüfung

Vor dem produktiven Einsatz simulieren Sie drei Fehlerbilder: kontrollierter Prozessabbruch, unterbrochene Remote-Verbindung und vollständiger Host-Neustart. Nach jedem Szenario prüfen Sie zuerst den Zustand und entscheiden erst danach über eine Fortsetzung.

Wiederherstellung nach einem Cloud-Mac-Neustart

Nach einem Neustart gehen Sie in dieser Reihenfolge vor:

  1. Prüfen Sie, ob der erwartete Benutzer und der erwartete Host aktiv sind.
  2. Wechseln Sie in den festgelegten Projektpfad und führen Sie pwd aus.
  3. Prüfen Sie die SDK- und Python-Version gegen die gespeicherte Lock-Datei.
  4. Lesen Sie das letzte Start- und Abschlussprotokoll.
  5. Prüfen Sie Sitzungsordner und Repository-Status, ohne Dateien zu verändern.
  6. Entscheiden Sie anhand des letzten bestätigten Zustands zwischen Fortsetzung, neuem Lauf und manuellem Eingriff.
  7. Führen Sie erst danach den Python-Prozess erneut aus.
Die Wiederaufnahme ist nur dann sicher, wenn Sie wissen, ob der vorherige Auftrag den Modellaufruf bereits erfolgreich gesendet, eine Datei bereits verändert oder nur teilweise geschrieben hat. Fehlt diese Information, ist ein manuelles Review besser als ein automatischer Retry.

Verwenden Sie für die Abnahme folgende Checkliste:

  • [ ] Python-Version, SDK-Version und Runtime-Version sind dokumentiert.
  • [ ] Die Architektur des Cloud-Macs stimmt mit der getesteten Zielarchitektur überein.
  • [ ] cwd zeigt auf das richtige Repository.
  • [ ] session_root liegt außerhalb des Git-Arbeitsbereichs.
  • [ ] Für neue Aufgaben wird eine neue Sitzungskennung erzeugt.
  • [ ] API-Schlüssel erscheinen nicht in Repository, Log oder Startskript.
  • [ ] Ein Prozessabbruch hinterlässt einen auswertbaren Exit-Status.
  • [ ] Ein Remote-Abbruch führt nicht zu einer unkontrollierten Doppelverarbeitung.
  • [ ] Nach einem Host-Neustart ist der letzte Sitzungsstand lesbar.
  • [ ] Backup-Umfang und Wiederherstellungsziel sind schriftlich festgelegt.
  • [ ] Eine getestete Rückfallversion ist verfügbar.
  • [ ] Die nächste Aufgabe wird erst nach erfolgreicher Abnahme freigeschaltet.
Sichern Sie mindestens die Sitzungsdaten, die versionierten Installationsinformationen und die für die Wiederaufnahme erforderlichen Metadaten. Kopieren Sie nicht automatisch alle Logs und kompletten Repository-Inhalte in jedes Backup. Das erhöht Datenschutzrisiko und Speicherbedarf, ohne die Wiederherstellung zwingend zu verbessern.

Entscheidung für den Dauerbetrieb

Die folgende Bewertung hilft Ihnen, die richtige Ausbaustufe zu wählen:

  • Einzeltest: Der Cloud-Mac ist geeignet, wenn Sie Architektur, Paketinstallation und Werkzeugzugriff prüfen möchten.
  • Periodische Automation: Ergänzen Sie feste Exit-Codes, Zeitlimits und eine neue Sitzungskennung je Auftrag.
  • Langfristiger Agent: Ergänzen Sie Prozessüberwachung, Logrotation, Backup, Locking und eine dokumentierte Wiederaufnahme.
  • Produktionskritischer Lauf: Starten Sie erst nach einem simulierten Neustart und einer manuellen Prüfung des letzten Zustands.
Wenn Sie bereits wissen, dass dauerhaft mehrere Projekte parallel laufen, behandeln Sie jeden Projektlauf wie einen eigenen Dienst. Gemeinsame Sitzungsordner und gemeinsam genutzte Arbeitsverzeichnisse sind dann keine Vereinfachung, sondern eine Fehlerquelle.

Cloud-Mac statt lokaler oder Linux-Umgebung

Eine lokale Umgebung ist für Entwicklung und schnelle Iteration angenehm, aber sie hängt an Ihrem Arbeitsgerät, Ihrer Netzwerkverbindung und Ihrer persönlichen Shell-Konfiguration. Ein Linux-Server kann für headless Prozesse günstiger und leichter automatisierbar sein, ist jedoch nicht die passende Wahl, wenn Sie macOS- und Apple-Silicon-Verhalten validieren müssen. Eine kurzfristig zusammengestellte Container- oder Hackintosh-Lösung erschwert zusätzlich die Reproduzierbarkeit und die rechtssichere Betriebsdokumentation.

Für den hier beschriebenen Fall bietet ein Cloud-Mac vor allem drei konkrete Vorteile: ein dauerhaft erreichbarer macOS-Arbeitsbereich, eine sauber übergebbare Umgebung und die Möglichkeit, Wiederanlauf unter den tatsächlich benötigten Systembedingungen zu testen. Er ist trotzdem nicht für jede Aufgabe die beste Lösung. Wenn Sie über lange Zeit eine gleichmäßig hohe Rechenlast ohne macOS-Abhängigkeit betreiben oder physische Schnittstellen benötigen, sollten Sie den Kauf eigener Hardware beziehungsweise eine andere Serverklasse sachlich gegenrechnen.

Wenn Sie zunächst nur die Plattform- und Systemseite vergleichen möchten, finden Sie bei MACGPU weitere Informationen zur Auswahl eines passenden Mac-Systems. Entscheiden Sie erst nach dem Minimaltest über eine längere Mietdauer. Für die meisten Python-Agent-Projekte ist eine klar begrenzte Testphase mit dokumentiertem Rückfallweg belastbarer als eine sofortige Dauerbuchung.

Ein Cloud-Mac beseitigt weder fehlerhafte Sitzungslogik noch ungeschützte API-Schlüssel. Er beseitigt aber einige Schwächen des bisherigen Setups: den an einen Arbeitsplatz gebundenen Prozess, die nicht reproduzierbare lokale Python-Umgebung und die fehlende Prüfung nach einem Host-Neustart. Wenn Sie genau diese drei Probleme lösen müssen und nur vorübergehend eine stabile macOS-Umgebung benötigen, ist die Miete eines Cloud-Macs von MACGPU meist der vernünftigere nächste Schritt als ein vorschneller Hardwarekauf. Prüfen Sie vor der Buchung anhand dieser Anleitung Arbeitsbereich, session_root, Prozessverantwortung und Wiederanlauf; erst wenn diese Punkte abgenommen sind, lohnt sich die Entscheidung für Konfiguration und Mietzeitraum.

Zuletzt aktualisiert am 18.08.2026; geprüft gegen die zu diesem Datum verfügbare offizielle DeepSeek-Harness-Dokumentation, die Python-Umgebungs- und Unterprozessdokumentation sowie die Apple-Dokumentation zu launchd und Keychain Services.