Non-linear AI conversations
Not connected
TRUNK
No conversation selected
Select or create a conversation
🌿

Select a node from the tree or start a new conversation to begin.

βŽ‡ Create Branch(es) at this fork point

No model Context: 0 Ctrl+Enter to send

🌿 ORAND Praxis β€” Overview

Most AI chat tools are linear β€” one message follows another in a single thread. The ORAND Praxis introduces a tree-based conversation model: you can fork any LLM response into multiple parallel branches, explore them independently, then decide what to do with each branch.

Everything runs locally in your browser with zero data leaving your machine. Conversations persist across sessions using IndexedDB.

βš™οΈ LM Studio Setup (Required)

This app connects to LM Studio running locally on your machine. Follow these steps before using the app:

1
Download LM Studio from lmstudio.ai and install it.
2
Download a model β€” recommended: any 7B–14B quantized model (Q4 or Q5). Good options: Llama 3, Mistral, Qwen2.5, Gemma 2.
3
Load the model β€” open LM Studio, go to the Chat tab, and load your chosen model.
4
Start the local server β€” go to the Local Server tab in LM Studio and click Start Server. Default port is 1234.
5
Enable CORS β€” in LM Studio's server settings, ensure "Allow requests from any origin" (CORS) is enabled. Without this the browser cannot connect.
6
Verify β€” open http://localhost:1234/v1/models in your browser. You should see a JSON list of loaded models.
⚠️ CORS is critical. If you see "Failed to fetch" errors in the app, CORS is not enabled in LM Studio. Check the server settings panel β€” it is usually a single checkbox labeled "Allow cross-origin requests".

Connecting in the App

  • The Base URL defaults to http://localhost:1234 β€” change it only if you use a different port.
  • Click ↻ Refresh to load available models from LM Studio.
  • Select a model from the dropdown. The status dot turns green when connected.

🌲 Conversation Tree Concepts

Trunk

The main conversation thread. Shown in blue in the sidebar. All conversations start here. The trunk can have multiple unresolved forks simultaneously.

Fork Point

A point in the trunk where you created branches. Marked visually in the message stream with a divider. A fork point stays open until all its branches are resolved.

Branch

A diverging conversation thread created at a fork point. Inherits an exact copy of all trunk messages up to the fork point β€” preserving perfect context fidelity and ensuring the LLM has complete awareness of the conversation history. Branches are color-coded (red, green, purple, orange) and show a context size indicator.

πŸ“Œ Maximum 4 branches per fork point. Multiple fork points can be open simultaneously on the trunk. Context counter shows active message count with efficiency comparison.

βŽ‡ How to Branch

1
Have an active conversation on the trunk with at least one LLM reply.
2
Each assistant message on the trunk shows a persistent "βŽ‡ Fork here" button below it.
3
Click it, or click "βŽ‡ Fork from last reply" in the input bar to fork from the latest message.
4
The Fork Panel opens. Each row is one branch. Type the seed prompt for each direction you want to explore.
5
Add up to 4 branches. Click "Launch Branches β†’" to send all prompts simultaneously.
6
Branches appear in the sidebar tree under their fork point. Click any to switch focus.

πŸ”„ Branch Lifecycle β€” 4 Actions

When viewing a branch, action buttons appear in the chat header. Each resolves the branch differently:

βœ• Discard

Delete this branch permanently. The trunk and other branches are unaffected.

↩ Commit to Main

Add a summary of this branch as a context message in the trunk. Branch is then closed.

⬆ Promote to Main

Create a new conversation with full original context plus this branch's direction. Original conversation remains intact. This branch remains visible with ↑ indicator showing target conversation.

βŽ‡ Split to New Tree

Create a new conversation starting from the fork point with only this branch's messages. Original conversation remains intact. This branch remains visible with βŽ‡ indicator showing target conversation.

πŸ’Ύ Data & Privacy

  • All conversations are stored in IndexedDB β€” your browser's built-in database.
  • Data persists across page refreshes and browser restarts.
  • Nothing is sent to any external server. LM Studio runs locally.
  • Use πŸ—‘ Clear All Data in the sidebar to wipe the IndexedDB completely.
πŸ”’ This app processes everything client-side. No telemetry, no analytics, no cloud.

⬇ Exporting to Markdown

Click ⬇ Export as Markdown in the sidebar footer to save the active conversation as a structured .md file.

What the Export Contains

  • Header table β€” conversation title, export date, model, message count, branch count.
  • Conversation Tree β€” ASCII diagram showing trunk, fork points, and all branches with their status.
  • Action History β€” git-like table of every fork, discard, commit, promote, and split with timestamps.
  • Trunk Conversation β€” full Q&A with fork point markers inline.
  • All Branches β€” every branch regardless of status (active, committed, discarded, promoted, split), each with its context snapshot, status metadata, and full Q&A.

Discarded and Promoted Branches

Branches marked as Discarded or Promoted are soft-deleted β€” hidden from active workflow but fully preserved in IndexedDB and visible in the tree for audit purposes. Their complete conversation appears in the export, enabling a full audit of every exploration path and decision taken.

File Naming

Files are named automatically: conversation_title_YYYY-MM-DD.md. If your browser supports the File System Access API (Chrome/Edge), a save dialog appears. Other browsers download directly.

Status Legend

  • 🟒 Active β€” branch is open and in use
  • βœ… Committed β€” selected messages merged into trunk
  • πŸ—‘ Discarded β€” visible in tree with strikethrough, content preserved
  • ⬆️ Promoted β€” became new conversation with full context, visible in tree with ↑ indicator and target ID
  • βŽ‡ Split β€” became new conversation from fork point, visible in tree with βŽ‡ indicator and target ID

πŸ” Search & Filter

Use the search bar at the top of the sidebar to find conversations, branches, or messages across your entire workspace.

What Can Be Searched

  • Conversation titles β€” matches in the main conversation name
  • Branch/node labels β€” matches in custom branch names
  • Message content β€” full-text search across all user and assistant messages

How to Search

1
Type at least 2 characters into the search input at the top of the sidebar.
2
Results appear automatically after a short delay (300ms debounce).
3
Results are grouped: conversation titles first, then node labels, then message snippets, sorted by date.
4
Click any result to jump directly to that conversation, node, or message.
5
Click the βœ• button or clear the input to return to the tree view.

Search Results

  • Each result shows the conversation title, a snippet with your search term highlighted, and metadata (conversation, branch, role).
  • Limited to 50 most relevant results to keep the interface responsive.
  • Message snippets include ~60 characters before and after the match for context.
πŸ’‘ Search is case-insensitive and matches partial words. Minimum 2 characters required.

⚠️ Known Console Warnings (Safe to Ignore)

When running from a local file:// path, Chrome logs the following warning on every page load:

Unsafe attempt to load URL file://... 'file:' URLs are treated as unique security origins.

This is Chrome's internal logging of its own IndexedDB isolation mechanism β€” not an error in the app. It does not block fetch calls, does not affect LM Studio connectivity, and cannot be suppressed from application code. It is safe to ignore.

If the app fails to load entirely

This can happen if a previous IndexedDB upgrade was interrupted (e.g. closing the tab mid-load after a version update). Click βš™ Reset DB in the sidebar footer to clear the corrupted database and reload. Your conversation data will be lost but the app will recover cleanly.

πŸ“‹ Version History

  • v1.6 β€” 2026-03-24 β€” Major: Selective Message Commit β€” Replaced automatic branch summarization with selective message injection. When committing a branch, users now see an interactive modal displaying all branch messages with checkboxes. Select which messages to inject into the trunk - perfect for cherry-picking insights, avoiding hallucinations, or maintaining narrative control. All messages selected by default, with "Select All" toggle and visual selection indicators. Action log records exactly which messages were injected for full audit transparency.
  • v1.5 β€” 2026-03-24 β€” Major: Exact Context Preservation β€” Replaced LLM-generated summaries with exact message copies for branch context. Branches now inherit the complete, unmodified conversation history up to the fork point, ensuring perfect context fidelity and deterministic behavior. Added real-time context size indicator with color-coded badges (green/yellow/orange/red) and comparison tooltips showing context efficiency ("Branch: 8 msgs | Trunk: 30 msgs | Saved: 22 msgs"). Simpler implementation, no LLM calls needed for forking, better semantic awareness per research findings.
  • v1.4 β€” 2026-03-24 β€” Added visibility for discarded branches with read-only mode. Discarded branches now appear in the tree with reduced opacity, strikethrough text, and a "πŸ—‘ DISCARDED" badge. Clicking a discarded branch shows its full conversation history in read-only mode (input/send/fork disabled). Enables complete audit trail visibility while maintaining clear status distinction.
  • v1.3 β€” 2026-03-22 β€” Added full-text search functionality: search across conversation titles, branch labels, and all message content. Search results with clickable navigation and contextual snippets. Improved sidebar usability.
  • v1.2 β€” 2026-03-22 β€” Fixed IndexedDB upgrade logic (duplicate index bug), added auto-recovery on DB failure, added βš™ Reset DB button, added LM Studio connection diagnostics and πŸ”— Test button, fixed CORS fetch headers for file:// origins.
  • v1.0 β€” 2026-03-22 β€” Initial release. Trunk + branch tree, fork panel, 4 lifecycle actions, IndexedDB persistence, LM Studio integration, context snapshots.
🌐 ORAND Advisors | πŸ”— Company LinkedIn | πŸ‘€ Dragos Marin