# LifeOS + marm-memory — Session Summary

Last updated: 2026-10-26 (session end). One page, everything that happened.

---

## Timeline (what we did, in order)

1. **Installed marm-memory locally** (Hermes container)
   - Cloned `Lyellr88/marm-memory` → `/opt/data/marm-memory`, uv venv, PyPI `marm-mcp-server` 2.47.0
   - Registered as Hermes MCP server **`marm-memory`** (stdio, 14 tools; loads in new sessions)
   - DB pinned: `MARM_DB_PATH=/opt/data/profiles/life-os-test/home/.marm/marm_memory.db`
   - End-to-end store → recall test **PASSED**
   - Installed the repo's **`marm-init` skill** into this profile (patched with local paths/quirk notes)

2. **Installed LifeOS on the biggest VPS** (srv1128538, 186 GB free at the time)
   - bun 1.4.0 + LifeOS **v7.40.4** bootstrap → `/root/.claude/skills/LifeOS`
   - Your fork `joeNobody-ai/LifeOS` has **no releases/tags**, so installs resolve from upstream (fork is byte-identical, same commit `ce046f26495c`)

3. **Published a preview link** on that box: `https://lifeos.srv1128538.hstgr.cloud`
   - nginx container + traefik + Let's Encrypt; notes at `/root/.claude/skills/LifeOS/NEXT-STEPS.md`
   - Disk mystery investigated: ~51 GB of pre-existing ODS images + 18 GB in `/home/ods881` — not caused by us (our footprint ~0.1 GB)

4. **"Hook it into DeepSeek"** research + local test
   - LifeOS ships a **Hermes sidecar** (SOUL/constitution, skill routing, guard plugin, write sandbox) — no Claude Code required
   - Deployed LifeOS to `~/.hermes` and mounted the sidecar into this Hermes profile (worked, smoke-tested)
   - The mount set `approvals.mode: manual`, which then blocked later provisioning commands → **reverted** the local mount at your request (config + SOUL restored from backups; plugin/trees removed)

5. **Moved everything to your new VPS** — **srv2095705** (`2.25.96.188`, KVM 4: 4 CPU / 16 GB / 200 GB, Ubuntu 26.04)
   - Root access set via Hostinger API → password saved at `/opt/data/.rootpw2095705` (rotate when you like)
   - bun 1.4.4, LifeOS v7.40.4 at `/opt/lifeos` (56 skills), user data `/opt/lifeos-user`
   - Hermes Agent (host-level) at `/root/.local/bin/hermes`, home `/root/.hermes`, model **deepseek-v4-flash**
   - LifeOS sidecar mounted (SOUL 38.5 KB, guard plugin, sandbox `/root/HermesWorkspace`)
   - Smoke test: `hermes chat -q "Reply with exactly: LIFEOS_OK"` → **LIFEOS_OK**
   - Old copy removed from srv1128538 (old link now 404), local install reverted/cleaned

6. **Kept the panel apps and wired them up**
   - **AnythingLLM** switched from Hostinger router (`claude-haiku-4.5`) to **DeepSeek** (`deepseek-v4-flash`, `api.deepseek.com/v1`) — applied in DB + compose/env, restarted, verified
   - **OpenVPN Admin** now behind traefik TLS: `https://vpn.srv2095705.hstgr.cloud/admin/` (proxy project `/docker/vpn-proxy`, panel files untouched)
   - Hub page lists all five services with live links

---

## Current state — quick reference

### LifeOS (dedicated box)
| Item | Value |
|---|---|
| Server | srv2095705 · 2.25.96.188 · Ubuntu 26.04 · 4 CPU / 16 GB / 200 GB |
| Root password | `/opt/data/.rootpw2095705` (rotate when convenient) |
| LifeOS | v7.40.4 · `/opt/lifeos` (56 skills) |
| Identity / TELOS data | `/opt/lifeos-user/USER` |
| Hermes home | `/root/.hermes` (SOUL, config, plugins) |
| Model | `deepseek-v4-flash` (provider `deepseek`) |
| Sandbox | `/root/HermesWorkspace` (only writable scratch) |
| bun | `/root/.bun/bin/bun` |

### Links
| What | URL |
|---|---|
| **Hub / docs** | https://lifeos.srv2095705.hstgr.cloud |
| Hub notes (markdown) | https://lifeos.srv2095705.hstgr.cloud/next-steps.md |
| This summary | https://lifeos.srv2095705.hstgr.cloud/summary.md |
| AnythingLLM (DeepSeek) | https://anythingllm-8ocz.srv2095705.hstgr.cloud |
| Hermes dashboard | https://hermes-agent-w3ea.srv2095705.hstgr.cloud |
| Paperclip | https://paperclip-79ql.srv2095705.hstgr.cloud |
| OpenVPN admin | https://vpn.srv2095705.hstgr.cloud/admin/ |

### marm-memory (local Hermes)
| Item | Value |
|---|---|
| Location | `/opt/data/marm-memory` (uv venv) |
| Hermes MCP server | `marm-memory` — stdio, 14 tools (new session to load) |
| Database | `/opt/data/profiles/life-os-test/home/.marm/marm_memory.db` |
| Skill installed | `marm-init` (profile skills) |

---

## How to use LifeOS

```bash
ssh root@2.25.96.188
cd /opt/lifeos && hermes chat
# then: "Run the LifeOS interview — TELOS current state and ideal state."
```

Maintenance:
```bash
cd /opt/lifeos && HERMES_HOME=/root/.hermes bun LIFEOS/HERMES/Mount.ts        # re-render SOUL
cd /opt/lifeos && HERMES_HOME=/root/.hermes bun LIFEOS/HERMES/Mount.ts --check # drift check
bun /opt/lifeos/LIFEOS/TOOLS/Doctor.ts                                         # capability doctor
```

### App credentials
Each panel app keeps its own creds in `/docker/<project>/.env` (anythingllm-8ocz, hermes-agent-w3ea, paperclip-79ql, openvpn-access-server-nuha). They are not linked into the LifeOS tree.

---

## Built after the move (2026-10-26, later)

- **LifeStack product repo** created at `/opt/data/lifeos-stack` (git, committed):
  modular app catalog, `stackctl` CLI (render/build/cloudinit/signals), Packer
  image skeleton, CI workflow, Ops runbook, Signal Program design, 10 passing tests.
- **Voice integration deployed and verified** on srv2095705:
  - TTS (Kokoro-FastAPI) → https://tts.srv2095705.hstgr.cloud
  - STT (Speaches + faster-whisper-base) → https://stt.srv2095705.hstgr.cloud
  - Round-trip test: TTS audio → transcribed back verbatim ("Life Stack Voice
    Transcription Test. The quick brown fox jumps over the lazy dog.") — 200 OK.
  - Containers: `/docker/voice` (compose), data under `/docker/voice/data`.
- **Messaging integration built** (catalog app + `setup.sh`), not yet activated —
  needs bot tokens (Telegram/Discord/Slack) in `/root/.hermes/.env`.

## Open items

1. **Run the TELOS interview** — the only remaining LifeOS setup step (needs your answers; writes only to `/opt/lifeos-user`).
2. **Fork releases** — publish a tag/release on `joeNobody-ai/LifeOS` to install from your fork:
   `LIFEOS_REPO=joeNobody-ai/LifeOS curl -fsSL https://ourlifeos.ai/install.sh | bash`
3. **Panel redeploy caveat** — hPanel can rewrite `/docker/*/docker-compose.yml`; the AnythingLLM DeepSeek setting is also in its DB, so it persists even if the env block is reverted.
4. **Rotate the new VM root password** (it was set via API).
5. **Push the LifeStack repo to GitHub** — SSH auth works as joeNobody-ai, but the
   repo must be created first (or provide an API token).
6. **Messaging**: supply bot token(s) → `bash apps/messaging/setup.sh`.
7. **Image build**: no `/dev/kvm` on srv2095705 → build via GitHub Actions (workflow
   ready) or on a KVM-capable host.

---

## Known quirks learned

- `marm_log_entry` treats a `Session: [name]` prefix as a session switch — don't pad it with the whole entry text.
- LifeOS mount sets `approvals.mode: manual`; long provisioning commands will sit waiting for approval.
- AnythingLLM's host port can change on recreate (32768 → 32770); traefik routes by container port, so public URLs are stable.
- This container's clock is behind the VPS/Hostinger time (Sept vs Oct 2026) — use remote dates for server-side decisions.
