GUPPI: A Persistent Self-Hosting Assistant Architecture

General Unit Primary Peripheral Interface · Technical design & operation · generated from the live deployment

1. Abstract

GUPPI is a persistent assistant process that runs as a service on a fixed compute host and serves a small crew over Telegram. It is not a stateless inference endpoint: it maintains long-term memory that persists across conversations, carries a durable free-text journal, schedules its own follow-up work, and publishes artifacts to a public web root. This document describes the system as it is deployed, including the process model, memory architecture, tool surface, and the explicit security boundaries that keep the unit from modifying its own core.

2. Process Model and Hosting

GUPPI runs on a rented Hetzner host, as an unprivileged service account named guppi. The application source and all state live under /opt/guppi. Key paths:

Application source → /opt/guppi/app
Python interpreter  → /opt/guppi/venv/bin/python  (python3)
Working data        → /opt/guppi/data/workspace   (writable by guppi)
Public web root     → /var/www/guppi             (owned by guppi)
Deployment units    → /opt/guppi/deploy

Python is invoked as /opt/guppi/venv/bin/python -m guppi against an editable install of the application package. The process is long-lived and supervised, so a restart respawns the same code with any updated directives already loaded.

3. Memory Architecture

GUPPI’s memory is layered. It is designed so that stable facts persist, recent context is recalled automatically, and nothing is treated as authoritative forever.

3.1 Decaying recall

Every exchange is read by a background process that files away what matters. Automatic recall sees only the current message plus whatever records surface for it. Records carry the date they were learned and are subject to time-based decay, so stale beliefs fade rather than accumulating.

3.2 Pinned memory

A dedicated command marks a fact as pinned so it never fades. Recall and pinned records are separate stores; pinning is a deliberate act, not the only way something is remembered.

3.3 Durable journal

A plain-text, operator-readable journal preserves stable facts, decisions, corrections, and running task state verbatim across time. Unlike decaying recall, the journal does not fade. It is the designated store for facts the unit does not want to lose, and the operator can read it at any time. The most recent journal entries surface automatically as settled notes, more authoritative than decaying recall when the two disagree.

3.4 Retrieval

In addition to automatic recall, GUPPI can search its whole memory store on demand, including archived and superseded records that automatic recall never shows. This is the mechanism for answering “do I remember something older” truthfully rather than from a partial prompt window.

4. Tool Surface

GUPPI acts on the world through a fixed, named set of tools. Each tool has a real effect or a real error; a reply may only claim a result that a matching tool call actually returned.

The sandboxed run_code tool and the live server_shell tool are deliberately separate. The former cannot reach the host; the latter runs unprivileged, so it cannot escalate to root. The writable workspace at /opt/guppi/data/workspace is the bridge: files generated in the sandbox are published from the workspace to the public root on the same machine.

5. Scheduled Work

GUPPI can schedule reminders that fire into the chat, and can attach a live web query to a reminder so it arrives with current data attached (for example a morning price or headline). It can also schedule private to-self follow-ups: at fire time it receives a private turn with its full tool set, acts on the note, and reports back through notify. This is the mechanism that turns “I will check later” into a scheduled fact rather than an empty promise.

6. Self-Modification Boundaries

GUPPI can modify its own behavior only through bounded, additive mechanisms that a human can read and revoke, and none of them touch the core safety, security, or honesty rules.

The critical boundary: none of these is a mechanism by which GUPPI rewrites its own application code unaided. A proposed code change is written to a queue; it does not run, apply, or land until an operator acts on it separately. There is no hidden self-edit pathway, no “loop runner,” and no process by which describing a change makes it real. The system’s core rules cannot be edited by the unit itself.

7. Operating Constraints

8. Conclusion

GUPPI is a supervised, persistent assistant: durable memory, a real tool surface, scheduled work, and a guarded self-modification path. The design places the fundamental security boundary at the human gate. The unit can add to its own behavior, but it cannot remove its guardrails, cannot edit its own application code to completion on its own authority, and is honest about the difference between saying and doing. That distinction, enforced by design, is what keeps the system safe to operate while being genuinely capable.