···12121313```
1414systemctl --user status solstone-tmux
1515-sol remote list
1515+sol observer list
1616```
17171818if it's already active and connected, you're done.
···333334342. register the observer with solstone and save the API key:
3535 ```
3636- sol remote create solstone-tmux
3636+ sol observer create solstone-tmux
3737 ```
383839393. write the config to `~/.local/share/solstone-tmux/config/config.json`:
···53535. verify it's running and connected:
5454 ```
5555 systemctl --user status solstone-tmux
5656- sol remote list
5656+ sol observer list
5757 ```
58585959## notes
+4-4
README.md
···14141515## Setup
16161717-### 1. Register a remote observer on the solstone server
1717+### 1. Register an observer on the solstone server
18181919```bash
2020-sol remote create solstone-tmux
2020+sol observer create solstone-tmux
2121```
22222323This prints the server URL and API key. You'll need both for the next step.
···2929```json
3030{
3131 "server_url": "http://localhost:8000",
3232- "key": "<api-key-from-sol-remote-create>",
3232+ "key": "<api-key-from-sol-observer-create>",
3333 "stream": "<hostname>.tmux",
3434 "capture_interval": 5,
3535 "segment_interval": 300
···5353```bash
5454systemctl --user status solstone-tmux
5555solstone-tmux status
5656-sol remote list # should show the new remote as "connected"
5656+sol observer list # should show the observer as "connected"
5757```
58585959## Manual run
+1-1
src/solstone_tmux/cli.py
···104104 print("Registering via sol CLI...")
105105 try:
106106 result = subprocess.run(
107107- [sol, "remote", "--json", "create", config.stream],
107107+ [sol, "observer", "--json", "create", config.stream],
108108 capture_output=True, text=True, timeout=10,
109109 )
110110 if result.returncode == 0:
+7-7
src/solstone_tmux/streams.py
···8899Naming convention (separator is '.'):
1010 Local tmux: {hostname}.tmux e.g. "archon.tmux"
1111- Remote: {remote_name} e.g. "laptop"
1111+ Observer: {observer_name} e.g. "laptop"
1212"""
13131414from __future__ import annotations
···4040def stream_name(
4141 *,
4242 host: str | None = None,
4343- remote: str | None = None,
4343+ observer: str | None = None,
4444 qualifier: str | None = None,
4545) -> str:
4646 """Derive canonical stream name from source characteristics.
···4949 ----------
5050 host : str, optional
5151 Local hostname (e.g., "archon").
5252- remote : str, optional
5353- Remote observer name (e.g., "laptop").
5252+ observer : str, optional
5353+ Observer name (e.g., "laptop").
5454 qualifier : str, optional
5555 Sub-stream qualifier (e.g., "tmux"). Appended with dot separator.
5656···6666 """
6767 if host:
6868 base = _strip_hostname(host)
6969- elif remote:
7070- base = _strip_hostname(remote)
6969+ elif observer:
7070+ base = _strip_hostname(observer)
7171 else:
7272- raise ValueError("stream_name requires host or remote")
7272+ raise ValueError("stream_name requires host or observer")
73737474 name = base.lower().strip()
7575 name = re.sub(r"[\s/\\]+", "-", name)
+5-5
src/solstone_tmux/upload.py
···7070 if sol:
7171 try:
7272 result = subprocess.run(
7373- [sol, "remote", "--json", "create", name],
7373+ [sol, "observer", "--json", "create", name],
7474 capture_output=True, text=True, timeout=10,
7575 )
7676 if result.returncode == 0:
···8585 if not self._url:
8686 return False
87878888- url = f"{self._url}/app/remote/api/create"
8888+ url = f"{self._url}/app/observer/api/create"
89899090 for attempt, delay in enumerate(self._retry_backoff):
9191 try:
···125125 if self._revoked or not self._key or not self._url:
126126 return UploadResult(False)
127127128128- url = f"{self._url}/app/remote/ingest/{self._key}"
128128+ url = f"{self._url}/app/observer/ingest/{self._key}"
129129130130 for attempt, delay in enumerate(self._retry_backoff):
131131 file_handles = []
···191191 if self._revoked or not self._key or not self._url:
192192 return None
193193194194- url = f"{self._url}/app/remote/ingest/{self._key}/segments/{day}"
194194+ url = f"{self._url}/app/observer/ingest/{self._key}/segments/{day}"
195195 params = {}
196196 if self._stream:
197197 params["stream"] = self._stream
···216216 if self._revoked or not self._key or not self._url:
217217 return False
218218219219- url = f"{self._url}/app/remote/ingest/{self._key}/event"
219219+ url = f"{self._url}/app/observer/ingest/{self._key}/event"
220220 payload = {"tract": tract, "event": event, **fields}
221221 try:
222222 resp = self._session.post(url, json=payload, timeout=EVENT_TIMEOUT)