Alle Seiten
Auf dieser Seite

Der Befehl oar

oar ist die Befehlszeile des Relay-Rechners. Es schreibt die Config, startet und stoppt das Relay, gibt die Adresse aus, die du im Browser öffnest, installiert den Dienst für den Start bei der Anmeldung, aktualisiert OAR, prüft die Installation und entfernt sie wieder. Es arbeitet mit der Installation, aus der es gestartet wurde, auf dem Rechner, auf dem es läuft; mit einem Relay auf einem anderen Rechner spricht es nicht.

Führ oar ohne etwas dahinter aus, um ein Menü zu bekommen, oder oar help für den Hilfetext. Wie du OAR installierst, steht unter Installation, der erste Start unter Erster Start.

Die Befehle #

Befehl Was er tut
oar Ein Menü in einem Terminal; anderswo der Status und der Hilfetext
oar setup Schreibt die Config: Auth-Token, Zugriff (dieser Rechner oder LAN) und Port; unter Windows auch den Autostart-Modus
oar start Startet das Relay im Hintergrund
oar stop Stoppt das Relay, sobald kein Turn läuft
oar restart Startet ein laufendes Relay neu oder startet ein gestopptes
oar status Sagt, ob das Relay läuft; Exit-Code 0 oder 3
oar url Gibt die Relay-Adresse mit dem Token aus und einen QR-Code, wo ein Handy sie nutzen kann
oar update Installiert das neueste Release oder eines, das du nennst, und startet das Relay neu
oar service Installiert, entfernt oder meldet den Dienst für den Start bei der Anmeldung
oar autostart Neu in 0.9.15 Stellt um, wie das Relay von selbst startet: bei der Anmeldung, beim Hochfahren oder gar nicht
oar uninstall Neu in 0.9.15 Entfernt die Autostart-Einträge und das Paket; die Daten bleiben, außer du gibst --purge an
oar copilot Startet das Relay und eine GitHub-Copilot-Session im Terminal
oar doctor Gibt die Installation, die Config und die Provider-CLIs aus, die es findet
oar help Gibt den Hilfetext aus
oar version Gibt die Version aus

Die meisten Meldungen beginnen mit [oar]. Fehler gehen auf die Standardfehlerausgabe, normale Ausgaben auf die Standardausgabe.

Wie die Befehlszeile gelesen wird #

  • Der Befehl ist das erste Wort, das keine Option ist. Optionen dürfen davor stehen: oar --port 3400 setup ist oar setup --port 3400.
  • --port, --migrate-from, --to und --autostart nehmen einen Wert, als nächstes Wort oder als --port=3400. Ohne Wert gibt oar --port needs a value. aus und endet mit 2. Für oar update --to und oar copilot --migrate-from nutze die Form mit Leerzeichen; siehe die Hinweise bei diesen Befehlen.
  • --help oder -h vor einem -- gibt den Hilfetext aus und endet mit 0, egal was sonst in der Zeile steht.
  • --setup, --start, --stop und --status nennen einen Befehl, wenn kein anderer angegeben ist: oar --setup --start ist oar setup --start.
  • --install-extension, --no-install-extension, --migrate-from oder ein ---Teil ohne Befehl bedeuten oar copilot. --version oder -v ohne Befehl geben die Version aus.
  • Jeder Befehl akzeptiert nur seine eigenen Optionen und gibt nach einer dieser Meldungen (auf die Standardfehlerausgabe) den Hilfetext aus, Exit-Code 2:
[oar] Unknown command: backup
[oar] Unknown option: --verbose
[oar] Unknown option for oar start: --port
[oar] Unexpected argument: extra
[oar] --lan needs a command.
[oar] oar start takes no "--" part.

Nur oar copilot nimmt einen ---Teil.

In einem Terminal zeigt oar die Version, ob das Relay läuft, die URL (ohne das Token), den Port, den Zugriff, den Zustand des Dienstes und jede Warnung, dann diese Einträge:

Taste Eintrag Führt aus
1 Start (Starten) oar start
2 Stop (Stoppen) oar stop
3 Restart (Neu starten) oar restart
4 Show URL and QR code (URL und QR-Code zeigen) oar url
5 Settings (Einstellungen) oar setup, mit seinen Fragen
6 Install or remove the service (Dienst installieren oder entfernen) oar service install, wenn keiner installiert ist; oar service remove nach Remove the service? [y/N], wenn einer installiert ist; oar service status, wo kein Dienst verfügbar ist
7 Update (Aktualisieren) oar update. Nach einem erfolgreichen Update schließt sich das Menü, weil seine eigenen Dateien ersetzt wurden
8 Doctor oar doctor
9 Copilot session (Copilot-Session) oar copilot
q Quit (Beenden)

Bewege dich mit den Pfeiltasten (oder j und k) und drück Enter, oder drück eine Ziffer oder q. Nachdem ein Eintrag gelaufen ist, führt jede Taste zurück ins Menü. Strg+C in einer Frage führt zurück ins Menü; im Menü beendet es oar mit Exit-Code 130. Die Umgebungsvariable NO_COLOR schaltet Farben ab. Ein Terminal, das keine einzelnen Tasten lesen kann, bekommt dieselbe Liste mit einer Eingabeaufforderung Choose (1-9, q):.

Ist die Standardeingabe oder -ausgabe kein Terminal, gibt oar aus, was oar status ausgibt, eine Leerzeile und den Hilfetext, und endet mit 0, egal wie der Status ist.

oar setup #

oar setup [--port <port>] [--lan | --local] [--new-token] [--autostart signin|boot|off] [--defaults] [--start] [--migrate-from <dir>]

Schreibt config.json in den Zustandsordner von OAR (Wo oar seine Dateien ablegt; die Keys stehen unter config.json). Führ es nach der Installation aus und immer dann, wenn du einen anderen Port, Zugriff oder ein anderes Token willst. Einstellungen, die der Befehl nicht anfasst, bleiben in einer bestehenden Config, wie sie sind.

In einem Terminal und wenn du keine der Optionen --port, --lan, --local, --new-token, --autostart oder --defaults angibst, stellt es drei Fragen und zeigt den aktuellen Wert in eckigen Klammern; Enter behält ihn. Neu in 0.9.15 Unter Windows fragt eine vierte, wie das Relay startet, mit dem geltenden Modus als Vorgabe; sie entfällt, wenn der Start-Task nicht gelesen werden kann. Erster Start geht sie durch.

New auth token? It signs every device out. [y/N]
Access: 1 = this machine only, 2 = LAN (other devices on your network) [1]:
Port [3333]:
Autostart: 1 = at sign-in, 2 = at boot, before anyone signs in (one administrator prompt), 3 = off [3]:
Option Wert Standard Wirkung
--port Ziffern, 1 bis 65535 der Port der Config; bei einer neuen Config der erste freie Port ab 3333 aufwärts (von 20 probierten, sonst 3333) Setzt den Port, ohne zu fragen. Ein Port, den etwas anderes belegt, wird abgelehnt
--lan keiner der Zugriff der Config Zugriff für andere Geräte in deinem Netzwerk (localhostOnly: false). Nicht zusammen mit --local
--local keiner der Zugriff der Config; bei einer neuen Config this machine only (nur dieser Rechner) Zugriff nur für diesen Rechner
--new-token keiner Token behalten; eine neue Config bekommt ein zufälliges Schreibt ein neues Auth-Token. Es meldet jedes Gerät ab
--autostart signin, boot oder off der geltende Modus Neu in 0.9.15 Stellt den Autostart um, ohne zu fragen, wie es oar autostart tut: unter Windows den Anmelde-Eintrag oder den Start-Task (eine Administrator-Abfrage), unter Linux den Dienst. Nur globale Installationen: Ein Git-Checkout wird abgelehnt, und nichts wird geschrieben
--defaults keiner aus Fragt nichts, auch nicht in einem Terminal, und startet ein laufendes Relay ohne Nachfrage neu
--start keiner aus Nur globale Installationen (der Installer nutzt es). Wo es eine systemd-Benutzersitzung gibt, schreibt es auch die Unit des Dienstes; dann startet es das Relay, über den Dienst, wenn es einen gibt. Wird in einem Git-Checkout ignoriert
--migrate-from ein Ordner keiner Kopiert den Zustand eines Git-Checkouts aus der Zeit vor der Umbenennung des Projekts (<folder>/server) in den Zustandsordner von OAR. Die Quelle wird nie verändert. Ein Relay, das noch daraus läuft, blockiert das Kopieren. Nur globale Installationen. Es läuft jedes Mal, wenn du einen Ordner nennst: Ein schon übernommener Ordner, dessen Datenbank noch da ist, sagt nur <state folder> is already migrated from <folder>; nothing to do.; ein Ordner ohne etwas zu übernehmen ist ein Fehler (Nothing to migrate from <folder>: <reason>.); ein Zustandsordner, dessen Datenbank schon Konversationen hat, lehnt es ab, und nichts wird überschrieben. Siehe Dateien und Ordner

Ein Port ist frei, wenn nichts auf ihm antwortet und er auf diesem Rechner gebunden werden kann. Der Port des eigenen laufenden Relays dieser Installation zählt als frei. In WSL wird auch ein Port abgelehnt, den Windows belegt. Bei einer neuen Config, deren Port 3333 belegt ist, sagt das Setup Port 3333 is in use — using <port>. Eine globale Installation übernimmt außerdem einmal den Zustand aus dem früheren verwalteten Config-Ordner, ohne die Option.

Was es tut:

  1. Migriert alten Zustand (globale Installationen): den früheren verwalteten Config-Ordner einmal von selbst oder den Ordner, den --migrate-from nennt. [oar] Migrated <folder or "earlier relay state"> into <state folder> (<n> items, sources untouched; receipt in backups/MIGRATION.md).
  2. Schreibt config.json (Rechte 600 außerhalb von Windows) und gibt [oar] Wrote <path> aus. Eine neue Config enthält authToken, port, localhostOnly, pollIntervalMs (3000), processingTimeoutMs (600000) und conversationSessionMode (isolated).
  3. Neu in 0.9.15 Stellt den Autostart um, wie --autostart oder die Frage es sagt (globale Installationen). Es führt oar autostart mit diesem Modus aus und gibt dessen Zeilen aus.
  4. Läuft das Relay und haben sich Token, Port oder Zugriff geändert, startet es das Relay neu und wartet, bis es mit den neuen Einstellungen antwortet. In einem Terminal fragt es The relay is running. Restart it now to apply the change? [Y/n]; bei Nein gibt es The running relay keeps its earlier settings until it restarts: oar restart aus. Ohne Terminal startet es ohne Nachfrage neu.
  5. Gibt die Relay-URL mit dem Token aus und einen QR-Code, wenn ein Handy die Adresse erreichen kann (LAN-Zugriff mit einer Netzwerkadresse, die nicht WSL-intern ist). Ist der Autostart-Schritt nicht durchgegangen, sagt es dann The config is written; the autostart step did not go through (see above). und endet mit 1.
  6. Läuft das Relay nicht, sagt es, wie du es startest: oar start (mit einem Hinweis auf oar service install, wenn kein Dienst existiert); in einem Git-Checkout npm start.
Exit-Code Wann
0 Die Config ist geschrieben, und der verlangte Neustart oder Start hat funktioniert
1 Der Port ist belegt; das Relay ist nicht neu gestartet oder nicht hochgekommen; die Migration wird abgelehnt oder schlägt fehl (ein Relay läuft aus der Quelle oder auf dem Zustandsordner, eine Datenbank mit Konversationen ist schon da, aus dem genannten Ordner gibt es nichts zu migrieren); der Autostart-Schritt ist nicht durchgegangen; --autostart in einem Git-Checkout
2 --port ist keine Zahl von 1 bis 65535 (--port expects a number from 1 to 65535.), --autostart ist nicht signin, boot oder off (--autostart expects signin, boot or off.), oder --lan und --local sind beide angegeben
130 Strg+C in einer Frage

oar start #

oar start

Startet das Relay im Hintergrund und gibt die Relay-URL aus (mit dem Token, ohne QR-Code). Es hat keine Optionen. Es braucht eine Config: Ohne eine gibt es No config yet — run: oar setup aus. Ein Git-Checkout wird abgelehnt (This is a git checkout — start the relay with: npm start). Beides endet mit 1.

  • Ein Relay, das schon antwortet, bleibt unberührt: The relay is already running. It keeps the version and settings it started with until you restart it: oar restart.
  • Läuft das Relay mit Einstellungen von vor einem oar setup, sagt oar start das und verweist auf oar restart.
  • Ist ein systemd-Benutzerdienst installiert (Linux), wird der Dienst aktiviert und gestartet. Sonst startet das Relay als Hintergrundprozess, der das Terminal überlebt und server.log und server-err.log in den Log-Ordner schreibt. Führ nach einem Neustart des Rechners oar start erneut aus oder richte den Start bei der Anmeldung ein.
  • Es wartet bis zu 20 Sekunden, bis das Relay antwortet, und hört früher auf zu warten, wenn der Prozess, den es gestartet hat, endet. Dann: The relay did not come up — see <log folder>/server-err.log (über den Dienst: see journalctl --user -u oar). Neu in 0.9.14 Hält ein lebendes Relay den Lock, nennt eine zweite Zeile den Lock und sagt, was zu tun ist: The lock <path> is held by relay process <pid> (started <time>): oar stop, or end process <pid>. Nennt der Lock einen Prozess, von dem sich nicht sagen lässt, ob er ein Relay ist: The lock <path> names process <pid>, which cannot be told to be a relay: if no relay is running, end process <pid> or delete the lock.
  • Neu in 0.9.14 Ein Relay, das noch die Datenbank übernimmt, auf der es bisher lief (der erste Start nach dem Update auf 0.9.14), gilt nicht als fehlgeschlagen: oar start sagt The relay (process <pid>) is bringing over the database it ran on until now (…) and is still running; it answers once that is done. und nennt sein Log.
  • Auf einen Lock, dessen Relay noch startet, wird bis zu 5 Sekunden gewartet. Der Lock einer früheren Version, deren Relay nicht antwortet, wird entfernt (Removing a leftover relay lock); Neu in 0.9.14 einen Lock, den diese Version geschrieben hat, überlässt es dem Relay, das einen veralteten selbst erkennt (siehe Ein Relay pro Datenordner).
  • Ein Port, den ein anderes Programm belegt, oder ein Relay mit einem anderen Token: Port <port> is in use by another program, or by a relay with another token. und ein Hinweis, mit oar setup --port <port> einen anderen Port zu wählen.
  • In WSL warnt es, wenn Windows den Port belegt (WSL).

Exit-Code 0: Das Relay läuft oder übernimmt noch seine Datenbank. Exit-Code 1: keine Config, ein Git-Checkout, der Port ist belegt oder das Relay ist nicht hochgekommen.

oar stop #

oar stop

Keine Optionen; braucht eine Config (Exit 1 ohne eine).

  • Läuft der systemd-Dienst, führt es sofort systemctl --user stop oar aus und sagt The relay service is stopped. It starts again at the next boot (without lingering: at the next login); to take it out: oar service remove.
  • Jedes andere Relay wird über seine eigene Schnittstelle gebeten zu stoppen und stoppt, sobald kein Turn läuft. Laufen Turns, wird Waiting for the relay's running turns to finish … ausgegeben. oar stop wartet bis zu 30 Sekunden und gibt dann The relay is stopped. oder The relay is still busy; it stops by itself when its running turns finish. aus. Beides endet mit 0.
  • Kein Relay läuft: The relay is not running., Exit 0.
  • Port von etwas anderem belegt: Port <port> is in use by another program, or by a relay with another token., Exit 1. Nennt die Lock-Datei einen lebenden Prozess dieser Installation, gibt eine zweite Zeile seine Prozess-ID an und sagt dir, ihn aus seiner Weboberfläche neu zu starten, mit ⋯ → Restart web relay (⋯ → Web-Relay neu starten), oder diesen Prozess zu beenden.
  • The relay did not accept the stop request. oder ein fehlgeschlagenes systemctl: Exit 1.

Unter Windows und dort, wo der Dienst installiert ist, aber nicht läuft, wird das Relay über seine eigene Schnittstelle gestoppt. Was ein Stopp mit laufenden Turns macht, steht unter Das Relay neu starten.

oar restart #

oar restart

Startet ein laufendes Relay neu, damit es eine neue Version lädt und die Config erneut liest, und gibt dann die Relay-URL aus. Ein gestopptes Relay wird stattdessen gestartet, wie bei oar start. Keine Optionen; braucht eine Config.

  • Läuft der systemd-Dienst, startet systemd ihn sofort neu; ein laufender Turn endet (Das Relay neu starten).
  • Jedes andere Relay wird gebeten neu zu starten und wartet auf seine laufenden Turns. Der Befehl wartet bis zu 60 Sekunden, bis das Relay auf dem Port der Config mit dem Token der Config antwortet, und gibt dann The relay restarted. aus. Laufen noch Turns: The relay is still busy; it restarts by itself when its running turns finish., Exit 0. Neu in 0.9.13 Der Neustart wird eingereiht wie bei 🌄 Restart web relay: Die Browser zeigen sein Banner, und nach Ask after a queued relay restart has waited (Nachfragen, nachdem ein eingereihter Relay-Neustart gewartet hat) fragt es dort, ob jetzt neu gestartet, weiter gewartet oder abgebrochen werden soll (Der Neustart wartet).
  • Exit 1 mit The relay came back on its earlier port and token: it was started with fixed ones (oar copilot). End that session, then run: oar start: Ein Relay, das oar copilot gestartet hat, behält den Port und das Token, die es bekommen hat.
  • Exit 1 mit The relay did not accept the restart request. Restart it from the web UI (⋯ → Restart web relay). (Restart web relay), systemctl --user restart oar failed oder The relay did not come back — see <log folder>/server-err.log (über den Dienst: see journalctl --user -u oar).
  • Ein Port, den etwas anderes belegt: die Meldung von oar stop, Exit 1.

oar status #

oar status

Gibt den Zustand des Relays aus und endet mit einem Code, den ein Skript prüfen kann.

[oar] OAR 0.9.19
[oar] The relay is running on port 3333 (this machine only): http://localhost:3333/
[oar] Service: installed, running
Zeile Bedeutung
Not set up yet — run: oar setup Keine Config; nur die Versionszeile steht davor
The relay is running on port <port> (<access>): <url> Das Relay antwortet mit dem Token der Config. Access ist LAN access (LAN-Zugriff) oder this machine only. Die URL hat kein Token; oar url gibt es aus
The relay is stopped (port <port>, <access>). Start it with: oar start Nichts antwortet auf dem Port
Port <port> is in use by another program, or by a relay with another token. Etwas antwortet, aber es ist nicht dieses Relay mit diesem Token
Service: <state> installed, running (installiert, läuft), installed (installiert) oder not installed (nicht installiert). Entfällt, wo es nichts zu melden gibt: bei einem Git-Checkout, unter macOS, unter einem Linux ohne systemd-Benutzersitzung
Tunnel: <state> Nur wenn der eingebaute Cloudflare-Tunnel in der Config an ist. Für ein laufendes Relay: running, not connected, not connected (<reason>) oder off: <reason>. Sonst managed (cloudflared: <path>) oder managed, cannot start: <reason>
eine Warnung The relay runs with its earlier settings; restart it to apply the new ones. nach einem oar setup, das Port oder Token geändert hat; in WSL, dass Windows den Port belegt

Exit-Code 0: Das Relay läuft. Exit-Code 3: Es ist gestoppt, der Port ist von etwas anderem belegt oder es gibt keine Config.

oar url #

oar url

Gibt die Adresse aus, die du im Browser öffnest, mit dem Auth-Token, so wie oar setup endet. Keine Optionen; braucht eine Config (Exit 1 ohne eine). Sonst Exit 0.

[oar] Relay URL: http://localhost:3333/?token=...
[oar] This machine only. For a phone, switch on LAN access (oar setup --lan) or use a tunnel (README: Remote access).
  • Mit LAN-Zugriff ist die Adresse die erste nicht interne IPv4-Adresse des Rechners, und ein QR-Code dafür folgt auf die erste Zeile.
  • Mit LAN-Zugriff, aber ohne Netzwerkadresse: LAN access is on, but this machine has no network address. Im Standard-Netzwerkmodus (NAT) von WSL ist die Adresse WSL-intern; die Ausgabe sagt das und nennt einen Tunnel oder den Mirrored-Netzwerkmodus als Auswege. In diesen Fällen kein QR-Code.
  • Meldet das laufende Relay eine Tunnel-Adresse, folgt eine Zeile Tunnel URL: mit angehängtem Token und ein QR-Code dafür.
  • Eine letzte Zeile sagt The relay is not running. Start it with: oar start oder, nach einer geänderten Einstellung, dass das Relay bis zu oar restart mit seinen früheren Einstellungen läuft.

oar update #

oar update [--beta] [--to <version>]

Installiert ein neueres Release von OAR aus npm und bittet ein laufendes Relay, neu zu starten. Es ist das Gegenstück im Terminal zum Button Update (Aktualisieren) in Settings → General (Einstellungen → Allgemein) (OAR aktualisieren). Ein Git-Checkout gibt This install runs from a git checkout — update with git pull, then restart the relay. aus und endet mit 1.

Option Wert Standard Wirkung
--beta keiner aus Nimmt die Version des Beta-Kanals aus dem Update-Manifest (Kanäle). Ohne die Option folgt eine Beta-Version dem Beta-Kanal und jede andere dem stabilen Kanal. Ein Kanal ohne Version fällt auf den stabilen zurück
--to X.Y.Z, optional mit Vorabversion (X.Y.Z-beta.N) die neueste des Kanals Installiert genau diese Version direkt aus npm, ohne das Manifest. Ältere Versionen gehen auch; es vergleicht nicht mit der laufenden

Schreib --to mit Leerzeichen

--to 0.9.2 funktioniert. --to=0.9.2 besteht die Prüfung der Befehlszeile, wird aber ignoriert: oar update installiert dann das neueste Release des Kanals.

Was es tut:

  1. Ohne --to holt es https://oar.sh/latest.json (5 Sekunden), bei jedem Lauf, egal ob die automatische Prüfung in der Weboberfläche an ist.
  2. Ist die Version des Kanals nicht neuer als die laufende: Already up to date (<version>)., Exit 0.
  3. Gibt Updating @oar-sh/oar <old> -> <new> ... aus und führt npm install -g @oar-sh/oar@<version> aus, mit dem Flag, das die Installationsskripte von OAR und seinen nativen Abhängigkeiten laufen lässt. Außerhalb von Windows nutzt es das npm neben dem Node.js, das oar ausführt, und installiert in das Präfix, in dem das Paket liegt; unter Windows npm.cmd. npm gibt seine eigene Ausgabe aus; dann Installed @oar-sh/oar@<version>.
  4. Läuft ein Relay, bittet es dieses, neu zu starten, sobald die Queue untätig ist (Relay restart requested — it restarts once the queue is idle.); ohne Relay No running relay detected — the update loads on the next start. Eine Ablehnung gibt Could not request a relay restart; restart it manually to load the update. aus.

Exit-Code 0: installiert oder schon aktuell. Exit-Code 1: ein Git-Checkout; --to ist keine Version wie 0.9.2; das Manifest kann nicht geholt werden (Could not fetch <url>.), hat eine andere schemaVersion als 1 oder enthält keine nutzbare Version; npm install ist fehlgeschlagen (the running install is unchanged).

Variable Wirkung
OAR_NO_UPDATE_CHECK=1 Blockiert die Anfrage nach dem Manifest. oar update endet dann mit 1 und verweist auf oar update --to X.Y.Z, das weiter funktioniert
OAR_UPDATE_MANIFEST_URL Liest das Manifest stattdessen von dieser URL

oar service #

oar service [install | remove | status]

Startet das Relay bei jeder Anmeldung. oar service allein ist oar service status. Ein Git-Checkout wird abgelehnt (Exit 1). Die Seite Das Relay automatisch starten erklärt den Dienst aus Sicht des Besitzers.

Linux #

Eine systemd-Benutzer-Unit, oar.service, in ~/.config/systemd/user/. Sie führt das Relay mit dem Config-, Daten- und Log-Ordner dieser Installation aus und mit dem PATH deiner Shell plus ~/.local/bin und dem Ordner des genutzten Node.js. systemd startet es 5 Sekunden nach einem Absturz neu.

Wort Was es tut
install Braucht eine Config. Schreibt die Unit; führt loginctl enable-linger aus, damit das Relay ein Abmelden überlebt (schlägt das fehl, gibt es den Befehl aus, den du selbst ausführen kannst); lädt systemd neu; stoppt ein Relay, das du von Hand gestartet hast, damit der Dienst den Port übernehmen kann; aktiviert und startet den Dienst. Stoppt dieses Relay nicht, wird der Dienst aktiviert und übernimmt beim nächsten Hochfahren (ohne Lingering bei der nächsten Anmeldung) oder sobald dieses Relay gestoppt ist und du oar start ausführst
remove Deaktiviert und stoppt den Dienst, löscht die Unit, lädt systemd neu. The service is not installed., wenn es keinen gibt
status Service: installed, running, installed, not running oder not installed

Ohne systemd-Benutzersitzung sagt der Befehl das und endet mit 1. In WSL nennt die Meldung zusätzlich, wie du systemd einschaltest: systemd=true unter [boot] in /etc/wsl.conf, dann wsl --terminate <distro> aus Windows.

Windows #

Ein Eintrag in deinem Autostart-Ordner startet das Relay, wenn du dich anmeldest.

Wort Was es tut
install Braucht eine Config. Schaltet den Start bei der Anmeldung ein; es startet das Relay nicht sofort (Start it now with: oar start)
remove Schaltet ihn ab: Autostart is off. A running relay keeps running; stop it with: oar stop
status Autostart: on, at sign-in, on, at boot (scheduled task) oder off

Ein Start beim Hochfahren über eine geplante Aufgabe wird mit oar autostart boot eingerichtet oder in der Weboberfläche unter Settings → General → Autostart (Windows) (Einstellungen → Allgemein → Autostart, Windows) (Windows). Solange diese Aufgabe bereit ist, lehnen install und remove ab (Exit 1) mit The relay starts at boot through a scheduled task. Change that with oar autostart signin|off, or in the web UI: Settings → General → Autostart (Windows).; status meldet sie.

macOS #

The service is not supported on macOS yet. Start the relay with: oar start, Exit 1 für jedes Wort.

Exit-Code 0: erledigt oder status. Exit-Code 1: ein Git-Checkout, macOS, keine systemd-Benutzersitzung, keine Config bei install, ein geplanter Start-Task unter Windows oder das Relay ist nach install nicht hochgekommen. Exit-Code 2: ein anderes Wort als die drei oder ein zweites Wort.

oar autostart Neu in 0.9.15 #

oar autostart [signin | boot | off | status] [--replace]

Stellt um, wie das Relay dieser Installation von selbst startet. oar autostart allein ist oar autostart status. Ein Git-Checkout wird abgelehnt (This is a git checkout — autostart is for global installs., Exit 1). signin und boot brauchen eine Config; off und status nicht. Autostart erklärt die Modi aus Sicht des Besitzers.

Windows #

Wort Was es tut
signin Schreibt den Eintrag in deinen Autostart-Ordner und entfernt den Start-Task, falls es einen gibt (eine Administrator-Abfrage). Gibt The relay starts when you sign in to Windows. aus. Es startet das Relay nicht sofort
boot Registriert die geplante Aufgabe oar-relay und ihren Starter (eine Administrator-Abfrage: Confirm the administrator prompt to register the boot task …) und entfernt den Anmelde-Eintrag. Gibt The relay starts at boot, before anyone signs in (scheduled task \oar-relay). aus. Ist es schon im Boot-Modus, ändert es nichts und fragt nichts ab; fehlt der erzeugte Starter oder stammt er aus einer früheren Version, registriert es die Aufgabe erneut, mit einer Administrator-Abfrage
off Entfernt den Start-Task (eine Administrator-Abfrage) und den Anmelde-Eintrag. Autostart is off. A running relay keeps running; stop it with: oar stop
status Der Modus und jeder Eintrag, jeweils (generated by OAR) oder (hand-made); siehe Status

Die Administrator-Abfrage erscheint auf dem Desktop des PCs selbst, und es wird bis zu 2 Minuten auf sie gewartet. Nur der Aufruf von schtasks läuft mit erhöhten Rechten. Eine abgelehnte Abfrage ändert nichts (Nothing changed: the administrator prompt was declined.). Nach einem Wechsel mit --replace wird jede Kopie genannt: Kept a copy of <entry> as <copy>. Ein Wechsel, der nach der Abfrage fehlschlägt, stellt die Tasks wieder her, die er gelöscht hat, und seine Fehlerzeile endet mit Copies kept: ….

Nur Einträge, die OAR erzeugt hat, werden gelöscht oder überschrieben. Solange ein von Hand angelegter oder bearbeiteter Eintrag neben dem neuen Modus stehen bliebe oder durch ihn ersetzt würde, ändert sich nichts, und der Eintrag wird genannt; siehe Einträge, die OAR nicht angelegt hat.

Option Wirkung
--replace Ersetzt selbst angelegte Einträge durch die von OAR. Vorher behält es von jedem eine Kopie, als <name>.bak im OAR-Ordner: die eines Starters daneben, die exportierte XML einer Aufgabe (<task>.task.xml.bak), die eines Autostart-Eintrags. Ohne --replace wird ein selbst angelegter Eintrag nie verändert

Ein Start-Task, der nicht gelesen werden kann (z. B. Access is denied), stoppt jeden Wechsel, auch mit --replace: Nothing changed: the boot task could not be read (<reason>).

Linux und macOS #

Unter Linux bilden die Wörter auf oar service ab: signin und boot führen oar service install aus, off führt oar service remove aus, status führt oar service status aus. Mit Lingering startet der Dienst beim Hochfahren. Unter macOS: Autostart is not supported on macOS yet. Start the relay with: oar start, Exit 1.

Exit-Code 0: erledigt oder status. Exit-Code 1: ein Git-Checkout, macOS, keine Config bei signin oder boot, ein selbst angelegter Eintrag im Weg, eine abgelehnte oder fehlgeschlagene Administrator-Abfrage, ein Start-Task, der nicht gelesen werden kann, oder ein Anmelde-Eintrag, der nicht geändert werden kann; unter Linux die von oar service. Exit-Code 2: ein anderes Wort, ein zweites Wort oder eine andere Option.

oar uninstall Neu in 0.9.15 #

oar uninstall [--purge]

Nimmt OAR vom Rechner und behält deine Daten. Ein Git-Checkout wird abgelehnt (This is a git checkout — there is no global package to uninstall., Exit 1). Mit --purge stellt es zuerst seine Fragen (unten); dann, der Reihe nach:

  1. Stoppt das Relay, wie oar stop es tut: Es wartet auf laufende Turns. Ein Relay, das danach noch beschäftigt ist, beendet den Befehl (The relay finishes its running turns first; it stops by itself after them.), und sonst wird nichts geändert. Ein Relay, das seinen Lock hält, ohne zu antworten, während es eine Datenbank übernimmt oder startet, beendet ihn auch: The relay (process <pid>) is bringing over its database and does not answer yet; once oar status says it runs, run oar uninstall again. oder A relay (process <pid>) holds <lock> without answering; stop it (oar stop, or end process <pid>).
  2. Entfernt die Autostart-Einträge, die OAR für diese Installation erzeugt hat: unter Windows den Start-Task (eine Administrator-Abfrage) mit seinem Starter und seiner Task-XML sowie den Anmelde-Eintrag; unter Linux die systemd-Unit, wenn es die ist, die oar service install geschrieben hat. Dann den Wrapper der Copilot-Extension in ~/.copilot/extensions/web-relay/, den OAR für diese Installation geschrieben hat. Ein Eintrag oder Wrapper, der von Hand angelegt oder geändert wurde oder zu einer anderen Installation gehört, bleibt und wird genannt (Left as it is: <path> (hand-made)).
  3. Mit --purge löscht es die Daten (unten).
  4. Startet npm uninstall -g @oar-sh/oar im Hintergrund, mit dem npm neben dem Node.js, das oar ausführt, und in dem Präfix, in dem das Paket liegt (unter Windows npm.cmd). npm kann ein Paket nicht entfernen, während es läuft, daher wartet das, bis oar beendet ist (bis zu 2 Minuten), und schreibt dann das Ergebnis von npm in oar-uninstall.log: im OAR-Ordner logs oder mit --purge im Temp-Ordner.

Es endet mit dem, was es getan hat:

[oar] Done: stopped the relay.
[oar] Done: removed C:\Users\dev\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\oar-web-relay.cmd.
[oar] Your data stays in C:\Users\dev\AppData\Roaming\oar (config, database, uploads, logs). A later install picks it up again; delete the folder yourself if you no longer need it.
[oar] npm removes @oar-sh/oar once this command has ended (log: C:\Users\dev\AppData\Roaming\oar\logs\oar-uninstall.log).

Liegt der Datenordner außerhalb des Zustandsordners, nennt die Zeile beide. Session-Worker laufen weiter, wenn das Relay stoppt, und npm kann die Dateien nicht entfernen, die ein laufendes Programm hält. Laufen noch Programme aus dem Paket, nennt der Befehl ihre Prozess-IDs, und npm lässt ihre Dateien in einem versteckten Ordner .oar-* neben dem früheren Ort des Pakets zurück; das Log nennt diesen Ordner. Lösch ihn, sobald sie beendet sind, spätestens nach einem Neustart des Rechners.

Schlägt ein Schritt fehl, stoppt der Befehl mit dem Grund (z. B. Uninstall stopped: <reason>. oder The relay did not stop.), dann Done: … und Not done: the autostart entries; the package. (mit --purge auch the data) und Run oar uninstall again once that is sorted out. (mit --purge: oar uninstall --purge).

Option Wirkung
--purge Löscht außerdem den Zustandsordner endgültig: die Config, die Datenbank mit jeder Konversation, die Uploads und die Logs. Es sagt zuerst --purge deletes <folder> for good: … und bittet dich dann, delete einzutippen (Type "delete" to confirm: ); alles andere beendet es mit Not confirmed. Nothing was changed. Strg+C oder keine lesbare Eingabe beendet es mit Exit-Code 130, und nichts wurde geändert

Mit --purge bekommen manche Ordner nach dem delete eine eigene Frage, [y/N]: der Zustandsordner, wenn er in einem Git-Checkout liegt, rescued-package-data (Daten, die eine frühere Version in ihrem Paket abgelegt hat), und ein Datenordner außerhalb des Zustandsordners (dataDir in der Config oder COPILOT_WEB_RELAY_DATA_DIR). Egal was du eingibst, --purge löscht nichts in einem Zustandsordner, der die Wurzel eines Laufwerks oder Dateisystems ist, dein Home-Ordner oder ein Ordner darüber, ein Systemordner oder ein Ordner darüber, ein Ordner im Windows-Ordner, ein Git-Checkout oder ein Ordner ohne OAR-Config oder -Datenbank darin: --purge deletes nothing in <folder> (<reason>). Nothing was changed. Ein zusätzlicher Ordner dieser Art wird nicht angeboten (Not deleted, and not offered: …).

Exit-Code 0: Das Entfernen des Pakets ist gestartet. Exit-Code 1: ein Git-Checkout; ein Zustandsordner, den --purge ablehnt; delete nicht eingetippt; ein Relay, das nicht gestoppt ist oder seinen Lock hält, ohne zu antworten; ein Autostart-Eintrag, der nicht entfernt werden konnte (eine abgelehnte Abfrage, ein Start-Task, der nicht gelesen werden kann); ein Ordner, der nicht gelöscht werden konnte; npm konnte nicht gestartet werden (remove it yourself: npm uninstall -g @oar-sh/oar). Exit-Code 2: eine andere Option. Exit-Code 130: Strg+C bei einer Frage.

oar copilot #

oar copilot [--port <port>] [--install-extension] [--no-install-extension] [--migrate-from <dir>] [-- <gh copilot args>]

Startet das Relay, wenn keines antwortet, und führt dann die GitHub Copilot CLI (gh copilot) in deinem Terminal aus. Ein Relay, das es gestartet hat, stoppt, wenn die Session endet. GitHub Copilot erklärt, wann du es nutzt. Dieselben Optionen ohne das Wort copilot führen es auch aus: oar -- <args>, oar --install-extension, oar --port 3400 --no-install-extension.

Option Wert Standard Wirkung
--port 1 bis 65535 der Port der Config, sonst 3333 Findet oder startet das Relay für diesen Lauf auf diesem Port, ohne die Config zu ändern; eine Config, die dieser Befehl anlegt, speichert ihn. Ein Relay, das dort schon läuft, wird genutzt. Ein Wert, der keine Portnummer ist, wird ohne Meldung ignoriert
--install-extension keiner aus Schreibt oder erneuert den benutzerweiten Extension-Wrapper in ~/.copilot/extensions/web-relay/ (COPILOT_CONFIG_HOME verschiebt ~/.copilot) und endet. Braucht kein gh
--no-install-extension keiner aus Überspringt den Wrapper für diesen Lauf. Ohne die Option schreibt oder erneuert jeder Lauf ihn
--migrate-from ein Ordner keiner Wie bei oar setup. Schreib es mit Leerzeichen: --migrate-from=dir wird ignoriert
-- der Rest der Zeile keiner Wird nach einem eigenen -- an gh copilot weitergegeben

Der Reihe nach: prüft, dass gh existiert; erneuert den Wrapper (ein Fehler wird gemeldet und stoppt nur --install-extension); migriert alten Zustand (globale Installationen); sucht das Relay auf dem Port; startet es, wenn es nicht antwortet, und wartet bis zu 20 Sekunden (Relay did not become ready at <url>); dann führt es gh copilot im aktuellen Ordner mit angeschlossenem Terminal aus. Ein Relay, das schon lief, läuft weiter. Eine fehlende Config wird mit Zugriff nur für diesen Rechner angelegt.

--help oder -h vor dem -- gibt den allgemeinen Hilfetext aus, keinen für copilot. Ein --help oder -h nach dem -- gibt die Hilfe von oar copilot aus und endet mit 0. --install-extension und --no-install-extension nach dem -- liest oar ebenfalls. Keine davon erreicht gh.

Das Relay einer Copilot-Session hat den Port und das Token, mit denen es gestartet wurde. oar restart kann es nicht verschieben; siehe oar restart.

Exit-Code Wann
der Code von gh copilot Die Session lief (1, wenn gh durch ein Signal beendet wurde)
0 --install-extension hat den Wrapper geschrieben
1 gh ist nicht installiert (The Copilot session needs the GitHub CLI (gh)...); der Wrapper kann mit --install-extension nicht geschrieben werden; der Port ist belegt; das Relay wurde nicht bereit; das Relay übernimmt noch seine Datenbank; die Migration des Zustands ist fehlgeschlagen (eine blockierte wird gemeldet, Nothing was migrated; starting on the state root as it is., und die Session startet trotzdem)

oar doctor #

oar doctor

Gibt aus, was oar findet. Keine Optionen, ändert nichts, endet mit 0.

OAR 0.9.19
  node          : v22.13.0 (linux)
  mode          : global install
  state root    : /home/dev/.oar
  config        : /home/dev/.oar/config.json
  port          : 3333 (localhostOnly: yes)
  auth token    : set
  tunnel        : disabled
  database      : /home/dev/.oar/data/copilot.db (12.4 MB)
  provider CLIs :
    gh (Copilot)  : gh version 2.60.0 (2025-01-01)
    claude        : 2.1.0 (Claude Code)
    grok          : not found
    cursor        : bundled (@cursor/sdk)
Zeile Bedeutung
mode global install oder git checkout
state root Der Zustandsordner; (repo-local server/) in einem Git-Checkout
config Der Pfad der Config, mit (missing — run: oar setup), wenn es keine gibt; port, auth token und tunnel entfallen dann
port Der Port der Config; localhostOnly: yes ist nur dieser Rechner, no ist das Netzwerk
auth token set oder MISSING
tunnel disabled, managed (cloudflared: <path>) oder managed, cannot start: <reason>
database Der Pfad und die Größe in MB oder (not created yet)
provider CLIs gh (Copilot), claude und grok: die erste Zeile von <cli> --version (nach 60 Zeichen gekürzt), installed, wenn es keine gibt, not found, wenn der Befehl fehlschlägt oder fehlt (Limit 5 Sekunden). cursor ist immer bundled (@cursor/sdk): Cursor braucht keine CLI
warning In WSL, wenn Windows den Port des Relays belegt

oar help und oar version #

oar help          # also: oar --help, oar -h, oar <command> --help
oar version       # also: oar --version, oar -v

help gibt den Hilfetext aus. version gibt die installierte Version aus, z. B. 0.9.19. Beide enden mit 0. --version und -v funktionieren nur ohne Befehl.

Wo oar seine Dateien ablegt #

oar arbeitet mit einer Installation: dem Paket, aus dem es gestartet wurde, und dessen Zustandsordner.

Installation Zustandsordner Config Daten Logs
Global, macOS und Linux ~/.oar config.json darin data/ logs/
Global, Windows %APPDATA%\oar config.json darin data\ logs\
Git-Checkout server/ des Checkouts server/config.json server/data/ ~/.config/copilot-remote/logs (Windows: %LOCALAPPDATA%\copilot-remote\logs); npm start schreibt nach server/logs

OAR_STATE_ROOT verschiebt den Zustandsordner einer globalen Installation. Ein Paketordner, der .git enthält, gilt als Git-Checkout. Der Datenordner enthält die Datenbank copilot.db, die Lock-Datei relay-server.lock und, zwischen einem oar setup und dem Neustart, der es übernimmt, relay-previous.json. Die Logs sind server.log und server-err.log. Andere Orte, an die oar schreibt: ~/.config/systemd/user/oar.service (Linux-Dienst), oar-web-relay.cmd im Windows-Autostart-Ordner, oar-web-relay-launcher.cmd, die XML des Start-Tasks, oar-relay-elevate.ps1, oar-web-relay.log und oar-web-relay-launcher.log in %APPDATA%\oar sowie ~/.copilot/extensions/web-relay/extension.mjs. Neu in 0.9.15 oar autostart --replace legt seine Kopien als <name>.bak im Zustandsordner ab, und oar uninstall schreibt oar-uninstall.log in den Log-Ordner (mit --purge in den Temp-Ordner).

Umgebungsvariablen #

Variable Genutzt von Wirkung
OAR_STATE_ROOT allen Der Zustandsordner einer globalen Installation
OAR_NO_UPDATE_CHECK update 1 blockiert die Anfrage nach dem Manifest; --to funktioniert weiter
OAR_UPDATE_MANIFEST_URL update Eine andere URL für das Manifest
COPILOT_WEB_RELAY_LOG_DIR allen Ein anderer Log-Ordner
COPILOT_WEB_RELAY_CONFIG nur copilot Eine Config-Datei, die genutzt wird, wenn sie existiert. Die anderen Befehle nutzen immer die eigene config.json der Installation
COPILOT_WEB_RELAY_DATA_DIR copilot, start, restart, setup, uninstall, Windows-Autostart Wird dem Relay als Datenordner übergeben, wenn diese es starten, außer durch den Linux-Dienst. setup migriert hinein, und uninstall nennt ihn und bietet ihn unter --purge an. oar selbst sucht die Lock-Datei im Standard-Datenordner
COPILOT_CLOUDFLARED_MODE, COPILOT_CLOUDFLARED_TOKEN, COPILOT_CLOUDFLARED_BINARY status, doctor Ändern die Zeile Tunnel: von status und die Zeile tunnel von doctor, so wie sie den Tunnel des Relays ändern
COPILOT_CONFIG_HOME copilot Der Copilot-Home-Ordner für den Wrapper, Standard ~/.copilot
APPDATA, USERPROFILE, LOCALAPPDATA, XDG_CONFIG_HOME allen Ordnerorte unter Windows und ältere Orte
NO_COLOR Menü Schaltet Farben ab
PATH service install Der Dienst bekommt diesen PATH (plus ~/.local/bin und den Node.js-Ordner)

Wie oar das Relay findet #

oar liest Port und Token aus der config.json der Installation und fragt http://localhost:<port>/api/status mit dem Token an:

Antwort oar liest sie als
Der Status eines Relays Das Relay läuft
Jede andere Antwort (ein falsches Token, ein anderes Programm) oder keine Antwort innerhalb von 2,5 Sekunden Der Port ist von einem anderen Programm belegt oder von einem Relay mit einem anderen Token
Die Verbindung wird abgelehnt Das Relay ist gestoppt

Eine Lock-Datei ist kein Beweis: Sie kann ihr Relay überleben. oar start und oar copilot warten auf ein Relay, das sie hält und noch nicht antwortet, und entfernen nur einen Lock, den eine frühere Version geschrieben hat. oar update nimmt einen lebenden Lock als laufendes Relay. oar uninstall macht nicht weiter, solange ein lebender Prozess ihn hält. Zwischen einem oar setup, das Port oder Token geändert hat, und dem Neustart, der es übernimmt, antwortet das Relay noch auf den alten Werten; oar findet es über relay-previous.json und sagt, dass es mit seinen früheren Einstellungen läuft.

Ist der Dienst installiert, gehen start, stop und restart unter Linux über systemd (sofort, ohne auf Turns zu warten); sonst startet start einen abgekoppelten Prozess, und stop und restart nutzen die eigene Schnittstelle des Relays, die wartet, bis kein Turn läuft. Unter Windows ist der Autostart nie an start beteiligt; status zeigt Service: installed, wenn der Autostart oder der Start-Task an ist.

WSL #

In WSL erkennt oar die Distribution (WSL_DISTRO_NAME oder WSL_INTEROP oder das Kernel-Release) und fragt Windows, welches Programm einen Port belegt. oar setup lehnt einen Port ab, den Windows belegt. oar setup, start, status und doctor geben Windows holds port <port> (<program>): a browser on Windows reaches that program, not this relay. Pick another port: oar setup --port N aus. Mit LAN-Zugriff im Standard-Netzwerkmodus von WSL sagt oar url, dass die Adresse WSL-intern ist.

Exit-Codes #

Code Bedeutung Befehle
0 Erledigt; bei stop und restart auch, wenn das Relay noch beschäftigt ist und von selbst fertig wird alle; status nur, wenn das Relay läuft
1 Der Befehl konnte nicht tun, was du verlangt hast: keine Config, ein Git-Checkout, der Port ist belegt, das Relay ist nicht hochgekommen oder hat die Anfrage nicht angenommen, npm install ist fehlgeschlagen, gh fehlt, eine Administrator-Abfrage wurde abgelehnt, ein selbst angelegter Autostart-Eintrag ist im Weg, --purge wurde nicht bestätigt; außerdem ein unerwarteter Fehler setup, start, stop, restart, url, update, service, autostart, uninstall, copilot
2 Bedienfehler: unbekannter Befehl oder unbekannte Option, ein fehlender Wert, ein ungültiger --port (nicht bei copilot) oder --autostart, --lan mit --local alle
3 Das Relay läuft nicht (gestoppt, von etwas anderem belegt oder nicht eingerichtet) nur status
130 Strg+C in einer Frage oder im Menü setup, uninstall, das Menü
der Code von gh copilot Die Copilot-Session ist beendet copilot