Skip to content

Therapist v0.3.0 — self-hosted model provider

Pre-release
Pre-release

Choose a tag to compare

@matteodante matteodante released this 18 Aug 07:14
· 5 commits to main since this release
Immutable release. Only release title and notes can be modified.
v0.3.0

Therapist v0.3.0 — self-hosted model provider

Therapist v0.3.0 is an experimental, free, non-commercial, adult-only self-hosted alpha for
technical contributors and informed self-hosters. It is AI for private self-reflection, not therapy,
diagnosis, medical advice, emergency care, clinical validation, or human monitoring.

Install or update

macOS or Linux:

curl -LsSf https://raw.githubusercontent.com/matteodante/therapist/main/install.sh | sh

Windows PowerShell:

powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/matteodante/therapist/main/install.ps1 | iex"

The installer pins the immutable v0.3.0 source, replaces an earlier isolated thera tool, runs
guided setup, and finishes with thera doctor. It preserves local application files and the shared
embedding-model cache.

Upgrading from v0.2.0

This release does not change the storage schema, which stays at version 3. A v0.2.0 data directory
keeps working and needs no migration, export, or deletion. The clean-break rejection still applies to
a store from an older or unknown schema.

Reinstall the background Telegram service after updating. The service definition now records the
model endpoint, and a definition written by v0.2.0 does not carry it.

What changed

A local: provider reaches any OpenAI-compatible chat-completions server, so a conversation can run
on hardware the operator controls. THERA_LOCAL_BASE_URL selects the endpoint and defaults to
http://localhost:8080/v1; THERA_LOCAL_API_KEY is sent only when set. Guided setup lists whatever
models that server advertises and offers them before the ChatGPT path; when no server answers, only
the ChatGPT path appears. Requests ask for xhigh reasoning effort, which servers without that field
ignore. The existing codex:, openai:, ollama:, and API-key paths are unchanged.

Installing the Telegram background service now records the resolved endpoint in the LaunchAgent's
EnvironmentVariables or the systemd unit's Environment= settings. A background service does not
inherit an interactive shell profile, so without this the listener silently fell back to loopback and
lost a local: server hosted elsewhere. Environment names and values containing control characters
are rejected rather than written into a unit file. THERA_LOCAL_API_KEY is deliberately not recorded,
because these definitions are plaintext on disk.

Reinstalling the macOS service over a running job no longer fails with Bootstrap failed: 5: Input/output error. launchctl bootout returns before launchd finishes unloading, and the immediate bootstrap hit
a label that was still held, leaving a written plist and no running job; install now waits for the
label to be released.

Provider and data flow

The supported first-alpha inference configuration remains a personal ChatGPT account through the
experimental codex: OAuth provider and gpt-5.6-sol. OpenAI documents ChatGPT authentication for
official Codex clients, not this independent direct-backend integration. The path may change or stop
working, is not the OpenAI API, implies no OpenAI endorsement, and must not be used for SaaS.

With the supported configuration, conversation content, selected bounded context, successful session
history, and any dynamically loaded skill are sent to ChatGPT for inference. With a local: server on
the same device, no conversation content is intentionally sent to a remote model or transport; with a
local: server on another host of the operator's own network, that same model input crosses that
network to hardware the operator controls and reaches no third-party provider. Embeddings and
encrypted application state remain local in every configuration. Telegram additionally receives
transported messages when enabled. There is no hosted Therapist service, publisher-operated
inference, product telemetry, or normal publisher access to application data.

Verification and artifacts

The candidate passed the deterministic suite, branch-coverage floor, Ruff, ty, protocol hash
validation, installer checks, wheel installation, package metadata checks, and the locked dependency
audit. The behavior pack and its protocol root hash are byte-identical to v0.2.0, and the supported
inference configuration is unchanged, so the live longitudinal-memory evaluation, bilingual
conversational role-plays, and three repeats of the bilingual safety suite recorded for v0.2.0
remain the current evidence for that configuration. They were not re-run for this release, and this
release adds no protocol, prompt, or memory change that they would have exercised differently.

The local: provider has no live evaluation of any kind. Every recorded role-play, memory, and safety
result was produced against codex:gpt-5.6-sol. Nothing is known about how a self-hosted model
behaves on the safety floors, and that path carries no support claim.

The GitHub prerelease attaches the built distributions, SHA256SUMS, a locked-runtime CycloneDX
SBOM, and GitHub/Sigstore provenance and SBOM attestations. Verify downloaded artifacts against
those release attachments.

Known limitations and rollback

The protocol is experimental, has no clinical review or efficacy evidence, and may respond poorly.
Codex subscription limits and compatibility can interrupt use. A self-hosted model chosen through
local: is unevaluated here and may be far weaker on refusal and safety behavior than the evaluated
configuration; treat that path as an escape hatch you assess yourself. There is no confidential
project-specific conduct inbox, second administrator, hosted support, or deletion control over
provider, Telegram, plaintext export, backup, or terminal copies. A real Telegram message round-trip
is still undocumented.

To roll back, reinstall the v0.2.0 tag. The storage schema is unchanged between these two
versions, so that binary accepts the same data directory. Do not point either binary at a store from
an older or unknown schema. For a material release defect, the prerelease will be marked withdrawn
and the installer channel moved forward to a fixed tag.