Quickstart
This quickstart installs the OpenSpine system from source. Lyra is the included assistant package. The governed runtime underneath Lyra keeps credentials and task authority outside the model.
Everything runs on your machine. There is no OpenSpine account, hosted service, or telemetry. The current alpha setup is technical and the first useful workflow is narrow.
Build and prove it works
Section titled “Build and prove it works”git clone https://github.com/George-RD/openspine.gitcd openspinenpm ci # dev tools used by the check scriptcargo build --workspace./scripts/check.sh # runs every test and check used by CIcheck.sh runs formatting, lints, the full test suite, strict OpenSpec validation, and the claims register that ties every documented security claim to a named test or recorded manual justification.
First run (local chat)
Section titled “First run (local chat)”One command turns the built binary into a running, governed install. openspine init writes a configuration and an owner-only key file, binds you as the single trusted owner, and prints the trust ceremony — seed key, approval boundary, and how to test it:
cargo build --workspace --binsexport PATH="$PWD/target/debug:$PATH"openspine --config openspine.local.yaml init --owner <telegram_user_id> --name "Your Name"openspine --config openspine.local.yaml chat--owner is your Telegram user id — the trusted principal every later approval and audit row is bound to. Message @userinfobot to find it. This is the fastest path to a governed local reply; the first-run guide explains each step of the ceremony and the capability rungs beyond it. The Docker deployment below adds Telegram and the guarded Gmail draft flow.
Configure a real server
Section titled “Configure a real server”- Copy
.env.exampleto.envand fill in the values. Compose passes this file into the kernel container. At minimum you need:DOCKER_GID: the numeric group ID of/var/run/docker.sock. Usestat -c '%g' /var/run/docker.sockon Linux orstat -f '%g' /var/run/docker.sockon macOS.OPENSPINE_TELEGRAM_BOT_TOKEN: get one from @BotFather.OPENSPINE_ARTIFACT_KEY: a random 32-byte key fromopenssl rand -hex 32.- Your model provider credentials, such as
ANTHROPIC_API_KEY.
- Copy
openspine.docker.example.yamltoopenspine.yaml. Setowner.telegram_user_idto your Telegram user ID. Message @userinfobot to find it. - To use
/draft, follow the Gmail setup guide:- fill
OPENSPINE_GMAIL_CLIENT_SECRETandOPENSPINE_GMAIL_REFRESH_TOKENin.env; - add the
gmail:block toopenspine.yaml, including yourmailbox_address.
- fill
- Build the contained task-worker image expected by the Docker configuration, then start the kernel:
docker build --file Dockerfile.shell --tag openspine-shell:latest .docker compose up --buildCompose mounts the Lyra package read-only and retains runtime state in ./data. A one-shot initializer fixes that directory’s ownership before the non-root kernel starts, so existing Compose data is preserved across upgrades. Docker is the supported path for the Gmail workflow. The bare-metal process driver is a development shortcut and refuses /draft unless unsafe_allow_uncontained_private_data: true is set in an isolated development config.
Full setup guides:
Talk to Lyra
Section titled “Talk to Lyra”Send a direct message to your bot from the configured owner account:
/statuschecks whether the system is up and holding its invariants./draft <thread_id>reads only the selected Gmail thread and prepares a reply. Telegram shows the exact text for approval before Gmail receives a draft. Email sending remains denied./propose <kind>followed by YAML proposes a new rule, route, or policy. It stays inactive until you approve the exact text.
openspine init collapses local first-run into one command (issue #118); the remaining Docker/Telegram/Gmail setup and the intended package-level install and run flow are tracked in issue #117.