Dylan Wright5 downloadsLog Hemi-Sync and Gateway Experience meditation sessions into your daily note — wave and track pickers, focus levels that fill themselves in, and an embeddable one-tap button.
"I am more than my physical body." — Robert Monroe, the Gateway Affirmation
An Obsidian plugin for logging Hemi-Sync and Gateway Experience meditation sessions into your daily note — built for the moment right after a tape ends, when your eyes have not fully opened and typing a heading by hand feels like a lot to ask. Open the logger, glance at what you ran last time, tap through three pickers, and land with your cursor already blinking on a blank line under a fresh notes header.
The Gateway tapes reward a log. Fifty tracks across eight waves, each one building on the last, each one asking you to notice something specific — and the noticing evaporates within about ninety seconds of sitting up. Anyone working the waves in order ends up keeping some kind of record, and anyone keeping that record in Obsidian ends up doing the same small chore over and over: scroll to the right heading, count which session number today has reached, remember whether last night ran Wave IV track 3 or track 4, type out the focus level, then finally start writing the part that matters.
Every step of that chore follows from something already written in the note. The session number sits in the previous header. The focus level follows from the track — Voyager 4 means Focus 27, and it always will. The track you want next usually sits one line below the track you ran last. A tool that reads the note first can fill in nearly all of it and leave you with one decision: which track tonight.
So the plugin reads the note first. It parses the previous session out of your own heading, shows it back to you on a card, pre-fills every control to match, and writes a block whose shape it can parse again tomorrow. Nothing else did this, so this had to exist. Now it does, and you can have it for free.
The note holds the state, and the plugin cycles through it — no sidecar database, nothing to drift out of step with what you actually wrote:
%%{init: {'flowchart': {'curve': 'basis'}}}%%
flowchart LR
N[("Your daily note<br/>holds all the state")]
M(["The logger,<br/>already filled in"])
N -->|"reads the last session:<br/>count · time · audio · focus"| M
M -->|"writes one minimal,<br/>undoable transaction"| N
classDef note fill:#ede9fe,stroke:#7c3aed,color:#4c1d95,stroke-width:2px;
classDef modal fill:#dcfce7,stroke:#16a34a,color:#14532d,stroke-width:2px;
class N note
class M modal
That return arrow matters more than it looks. The plugin splices the new block in through a single minimal editor.transaction covering only the lines that actually change — so one undo puts the note back exactly as it stood, your folds elsewhere stay folded, and a note with three years of entries in it does not get rewritten end to end just to add four lines.
Four of the five fields derive from something already written down. You supply the fifth:
%%{init: {'flowchart': {'curve': 'basis'}}}%%
flowchart LR
A["Sessions already<br/>under the heading"] --> S["Session 2"]
B["The clock"] --> T["21:40"]
C["Last session's track"] --> K["Adventure 3<br/>pre-selected"]
K --> F["Focus 12"]
S & T & K & F --> OUT(["The block written for you"])
Y(["You pick tonight's track"]) -.->|the only decision| K
classDef src fill:#dbeafe,stroke:#2563eb,color:#1e3a8a,stroke-width:1px;
classDef val fill:#fef3c7,stroke:#d97706,color:#78350f,stroke-width:1px;
classDef out fill:#dcfce7,stroke:#16a34a,color:#14532d,stroke-width:2px;
classDef you fill:#ede9fe,stroke:#7c3aed,color:#4c1d95,stroke-width:2px;
class A,B,C src
class S,T,K,F val
class OUT out
class Y you
### Daily Meditation
##### Meta Notes - Session 1 (14:30)
**Start Time:** 14:30
**Audio:** Hemi-Sync - Wave I - Discovery - Discovery 2: Intro To Focus 10
**Focus:** 10
##### Notes - Session 1
▏
The cursor lands on that blank line, with two more waiting under it. Log again and Session 2 appends below, then Session 3, and so on — the plugin counts what already sits under the heading rather than trusting a stored number, so deleting an entry by hand never desynchronizes anything.
The heading itself stays flexible. ### Daily Meditation, ## **Daily Meditation**, #### _Daily Meditation_, or a bare Daily Meditation line all match, at any level from # to ######, and the section ends wherever the next heading of equal or higher level begins. Rename it in settings and the parser follows.
Six ways to open the logger, because the useful one differs by device and by habit:
brain glyph, on desktop and mobile alike.[🧘 Log meditation](obsidian://hemi-sync-log) works anywhere a link works.```hemi-sync
```
Put that fence in your daily-note template and every day arrives with its own logger button. Text inside the fence becomes the button label. hemi-sync-button and hemi-sync-helper work as fence aliases, and the command palette offers Insert logger button to drop one in.
By default, logging a session clears that fence from the note — the button has done its work, and a daily note that keeps a dozen of them stops looking like a journal. Turn that off in settings if you would rather the button stay put.
The pickers ship pre-loaded, so nothing needs typing:
| Series | Tracks | |
|---|---|---|
| 🌊 | Gateway Experience, Waves I–VIII | Discovery, Threshold, Freedom, Adventure, Exploring, Odyssey, Voyager, Union — 50 tracks |
| 🔮 | Mediumship | Concentration through Sacred Space |
| 💤 | Lucid Dreaming | Exercises 1–4 |
| 📼 | Wider Monroe catalogue | The Gathering, Secret Fire, Spindrift, Central Core, The Maze, and others |
| ✍️ | N/A (Custom / Other) | Custom title, Silence, Free Form |
Picking a track fills in its focus level from a built-in map — Voyager 4: Intro Focus 27 sets Focus 27, Threshold 1: Intro To Focus 12 sets Focus 12 — and you can always override it, either from the preset list (3, 10, 12, 15, 20, 21, 23, 25, 27, 34/35, Free Form, ?) or by typing whatever you actually reached.
Anything outside the catalogue goes in through N/A (Custom / Other), which opens a free-text title field. The plugin remembers your last wave, track, and focus level between sessions, so an unlisted practice you repeat nightly still arrives pre-filled.
Daily Meditation.hemi-sync fences from the note once a session logs, so a templated daily note tidies itself. On by default.hemi-sync fence at the cursor.Every tool encodes assumptions; these deserve stating plainly rather than discovering painfully.
##### Meta Notes and ##### Notes feed the parse; your free-text notes never do. Write "Focus: hard to hold today" in the body and tomorrow's pre-fill stays correct.Until the plugin lands in the community catalog, install with BRAT pointed at this repo, or copy main.js, manifest.json, and styles.css from a release into <vault>/.obsidian/plugins/hemi-sync-helper/.
Works on desktop and mobile. CHANGELOG.md tracks what changed across releases.
npm install
npm run dev # esbuild watch mode
npm run build # typecheck + production bundle
npm test # parser test suite — keep it green
src/NoteParser.ts holds every decision about reading and writing notes, and imports nothing from Obsidian — which lets test/run.mjs bundle it and run the whole suite under plain Node, including a check that each planned edit's coordinates reproduce the document it claims to produce. The Obsidian-facing shell (main.ts, src/LogModal.ts, src/settings.ts) stays thin on purpose. Set OBSIDIAN_PLUGIN_DIR to a vault's plugin folder and every build deploys there.
One stylistic note for contributors: the README and UI text keep to E-Prime — English without any form of "to be" — as a small tribute to Korzybski and Robert Anton Wilson, who argued that dropping "is" makes claims about what happened easier to tell apart from claims about what things really are. A plugin for logging altered states might as well take care to record the territory rather than assert the map.
MIT
A footnote for the ones who track these things: Robert Monroe stumbled into all of this in 1958, when a radio executive experimenting with sleep-learning tapes began, unexpectedly, to leave his body — and spent the next thirty-odd years building instrumentation and vocabulary for a thing he had no framework to describe. The waves this plugin catalogues came out of that stubbornness: not a doctrine, but a numbered sequence of experiments, each one asking you to go somewhere and then write down what you found. This plugin only handles the writing-down part. The rest stays yours.