Programmes from outside

A programme is the words and the light of one self-hypnosis session in the Hypnosis lab: for relaxation, focus and practice, not treatment. It is a small JSON document. Liminal reads one from three doors, none of which needs a network path into the headset:

Whatever arrives is shown first: title, what it is for, its length, and whether it ends in sleep. The wearer keeps it or discards it. Nothing runs on its own; a kept programme starts only when the wearer presses Begin in the lab. The consent gate, the light limits and the panic stop are what they always are.

The editor also hands a programme on: Copy link puts the link on the clipboard, Share file offers the .liminal file.

The shape

A file or a link carries an envelope; the bare programme object is accepted too.


{
  "liminal": 1,
  "programme": {
    "title": "A quiet hour",
    "blurb": "For setting the day down before sleep.",
    "symbol": "moon.stars",
    "endsInSleep": false,
    "stages": [
      {"name": "Settling", "mood": "still", "kind": {"spoken": {}},
       "text": "Let yourself sit as you are. [3]\nNotice the weight of your body where it rests. [4]"},
      {"name": "Eyes", "mood": "fixation", "kind": {"spoken": {}},
       "text": "Rest your eyes on the point of light ahead. [3]\nAnd when they want to close, let them close. [4]\nClosed now. [3]"},
      {"name": "Descent", "mood": "settling", "kind": {"descent": {"from": 10, "interval": 3}},
       "text": "Picture a lift going gently down, one floor with each number. [3]\nHeavier with every floor. [2]\nThe shoulders let go. [2]"},
      {"name": "The floor", "mood": "dark", "kind": {"spoken": {}},
       "text": "The doors open onto a quiet place. [5]\nRest here a while. [7]"},
      {"name": "Return", "mood": "rising", "kind": {"ascent": {"to": 5, "interval": 3}},
       "text": "When I count to five, you come back, rested. [3]\nLighter. [2]\nThe room around you again. [2]"},
      {"name": "Awake", "mood": "rising", "kind": {"spoken": {}},
       "text": "Eyes open, and back, and glad of it. [3]"}
    ]
  }
}

Fields:

How a link is packed

The data value is one letter and then base64 with the URL-safe alphabet (- and _) and no padding. The letter j means the base64 is the JSON as it is; z means it is the JSON compressed as a raw DEFLATE stream, no zlib header or checksum. The app writes z when that is smaller. Anything that can base64-encode can make a j link.

What a good programme is

The shipped programmes run about fifteen minutes by their content. A programme is not made longer with silence; it is made longer with words. The usual shape is: settling, eyes on the point of light until they close, breathing with the light, a counted descent with a phrase for every number, the floor, the suggestions in plain second-person present tense, carrying it out of the session, and a counted return with the eyes opening at the last stage. A sleeping programme ends at the floor, with a short stage that says the words will end and the dark will stay.

Suggestions are about relaxation, focus, rest and practice, in the wearer's own words where they gave any. Nothing in a programme claims to treat, cure or diagnose.

The page to hand a chatbot

Copy this to any chatbot, with what the wearer wants after it.

Write a self-hypnosis programme for Liminal, an Apple Vision Pro app. A programme is for relaxation, focus or practice, never treatment, and makes no medical claim. Return it as one JSON object in the shape below, inside an envelope {"liminal": 1, "programme": {...}}, and nothing else. Stages in order, each with name, mood (one of still, breathing, rising, settling, dark, fixation), kind ({"spoken": {}}, or {"descent": {"from": N, "interval": 3}} counting down, or {"ascent": {"to": N, "interval": 3}} counting up) and text: one sentence a line, with a pause mark like [3] at the end of a line to hold three seconds. In a counted stage the first line is spoken once, and every line after it is spoken between the numbers in turn, so give a different phrase for every number. Aim for about fifteen minutes of words: settling, eyes on the point of light until they close (mood fixation), breathing with the light, a descent from twenty or thirty with the light settling, the floor in the dark, suggestions, carrying it out, and a counted return ending with the eyes open. If the programme is for sleep, set "endsInSleep": true, leave out the return, and end with a short stage saying the words will end and the dark will stay. Set title and a one-line blurb.

The answer is saved as a .liminal file, or pasted into the editor with Paste a programme, or sent to the headset any way a file travels. A chatbot that can make links can also return the JSON to a local agent, which turns it into a liminal:// link with liminal_programme.