Skip to main content

Settings → Spine Studio

Spines are the categories your memory files itself under: a handful of natures (Document, Idea, Journal, Conversation…), each with its sub-spines. This page is where you look at that taxonomy, colour it, extend it, and hand what is still unsorted to a model. The rail entry is Spine Studio; the page subtitle reads Shape how your memory organizes itself — natures, sub-spines and lenses.

For what a spine is and how a chronicle gets one, see Chronicles and spines. This page is about the settings.

While the taxonomy loads, the page says Loading taxonomy…. If it cannot be read, Could not load the taxonomy. appears with a Retry button. A brand new memory with no taxonomy at all shows No taxonomy yet.

Once the taxonomy is there, a 2D / 3D switch sits at the top right of the header. 2D is the default; the choice is not remembered between visits.

Natures and sub-spines (2D view)

One card per nature, in a grid. Each card carries the nature's colour swatch, its name, and on the right the number of sub-spines it holds. Names are shown in your interface language when the app knows the spine; a sub-spine created by a model has no translation and keeps its label as written.

Inside a card, one row per sub-spine:

  • A small colour square is a colour picker. Pick a colour and it is saved at once, no Save button. A stored colour the picker cannot display is shown as a neutral grey.
  • The sub-spine's name. Hovering it reveals the raw id (for example EPIPHANY).
  • Either a system badge, for the sub-spines the app ships with, or a × button labelled Remove for the ones you or a model added.
Remove is immediate

There is no confirmation dialog on Remove. The sub-spine is gone as soon as you click. System sub-spines cannot be removed at all; that is what the system badge means.

At the bottom of each card, an add row with two fields, id, e.g. gpu-sidecar and label, and an Add button. Both fields must be filled. The new sub-spine takes the colour of its parent nature and is marked as yours; the fields clear once it is created.

The natures the app ships with:

NatureExamples of its sub-spines
IdeaEpiphany, Ideation, Hypothesis, Discovery, Resonance, Lead, Vision
Document, Note, Journal, Conversation, Profile, Media, Reference, Task, Decision, Dream lead, Inbox, Source code, Git history, Session, Research paper, Socialeach with its own set

3D view

Choosing 3D replaces the grid with a constellation: every nature is a sphere, sized by how many sub-spines it has, and its sub-spines orbit it, joined by faint lines in the nature's colour. The scene tumbles slowly on its own; drag to orbit it. There is no zoom and nothing to click: the 3D view is for looking, and everything else on the page stays available below it.

The 3D library is only loaded the first time you pick 3D, never at startup.

Labels in the 3D view are in English

The constellation prints the natures' original English names, not the translated ones the cards use.

Acronym lens

Every acronym defined across your memory. Nothing is shown until you press Scan memory (the button reads Scanning memory… while it runs). The scan reads up to 3 000 chronicles in each active vault and builds a glossary from the acronyms it finds, each shown as a card: the acronym, its number of sources, and the expansion. No acronyms found yet. means the scan came back empty.

The scan is local, read-only, and calls no model. If it fails, the page keeps whatever it was showing before and prints no error.

Sort conversational memory

A model reads what is still unsorted and files it under a spine, creating one when nothing fits. Nothing is deleted, and anything it cannot place stays where it is.

Memory that comes from conversations lands in the Session nature until something sorts it. This panel is the button that does it. While it looks up your vaults it says Loading vaults…; Could not load the vault list. comes with a Retry; No active vault to sort. means there is nothing to work on.

  • Vault: the vault to sort. Only active vaults are listed. The picker is locked while a sort runs.
  • An info line says {count} memories are in Session, the unsorted bucket. The count shows until it has actually been measured, never a 0 that would claim the bucket is empty.
  • Sort {count} memories starts the run. It stays greyed while the count is zero or not yet known, and while a request is in flight.
  • Stop replaces it while a sort runs. Stopping is graceful, and the next run resumes where this one stopped.
  • If a sort is already running on another vault (a cartridge or the Dream State can start one), the panel says A sort is already running on {vault}.
  1. Pick a vault

    Choose it in Vault. The info line tells you how many memories are waiting in Session.

  2. Start

    Click Sort {count} memories. The result box appears and updates every second or so: {vault}: {scanned} of {total} read ({pct}%), {updated} filed.

  3. Stop whenever you like

    Stop ends the run cleanly. What was filed stays filed; the rest is picked up next time.

  4. Read the result

    When it finishes: {vault}: {scanned} read, {updated} filed., then always {count} left where they were., a chip for every sub-spine the run created, {count} batches got no usable answer. if any batch failed, a few examples of what the model refused to place, and the job's error in red if it had one.

This calls your model

The panel says it under the button: This calls your model, one call per 8 memories. It can be stopped, and it resumes where it left off. The run uses the model route your chat uses, without memory retrieval, and is metered like any other call. On a cloud route, a large unsorted bucket is a real bill.

{count} left where they were. is always printed, on purpose: a finished run is not the same thing as a fully sorted vault. If starting or stopping fails, the panel says The sort could not be started. or The sort could not be stopped.; when the app reports its own reason it is shown as is, in English (for example "A spine scan is already running.").

When a run ends, the cards above reload, because a run can have created new sub-spines.

Nocturnal sort

A local model reviews your memory at night and proposes emergent sub-spines — you decide.

This is a different sorter from the one above. It clusters the vectors of your chronicles during the night, on your machine, and only ever proposes new sub-spines; nothing is filed and nothing is created until you approve it. While its state loads the panel says Loading…; Could not load the nocturnal sort. comes with a Retry.

The configuration card:

  • Enable nightly sort: off by default.
  • Naming model (Ollama tag): e.g. llama3.2:latest — empty = offline naming. Left empty, the proposals get deterministic names computed locally. With a tag, the sorter asks a local Ollama for a short name.
  • Night window: two hours, from 1 to 6 by default, 0 to 23. The window wraps past midnight when the end is before the start (22 to 6 works). Start equal to end is an empty window: it never runs.
  • Save writes the card to disk.
  • Run now forces a pass immediately, ignoring the window, the idle requirement and the memory check. The button reads Running… meanwhile.
Save first

Nothing in the card is stored until you press Save. Run now reads the saved configuration, so an unsaved model tag or window is ignored by it.

The naming model is Ollama, called directly

The tag is sent straight to a local Ollama endpoint, not through the app's model router: no cloud route is ever used for naming, and the app's chat model is not involved. A tag Ollama does not know keeps the offline name, without an error.

Under the card, a status line: the number of proposals pending, and Last run: a date, or never.

The nightly pass also has conditions you do not see in the card: it waits for the machine to have been idle for about ten minutes, stops as soon as you come back, the window closes or memory gets tight, proposes at most five sub-spines per pass, and looks at up to 4 000 vectorised chronicles at a time. The settings live in a nocturnal-sort.json file in the vault root.

Proposals

The Proposals inbox lists what the sorter suggested. Empty, it says No proposals yet. Run a sort or wait for tonight. Each proposal shows its suggested label, under which nature it would sit, and how many chronicles it groups, with two buttons:

  • Approve creates the sub-spine for real, in the parent nature's colour. The cards at the top of the page refresh.
  • Dismiss drops the proposal.
Two sorters, two jobs

Sort conversational memory files chronicles now, using the model you chat with, and may create sub-spines as it goes. Nocturnal sort runs at night on vector clustering, needs no cloud, and only proposes; you approve.