Skip to content

Install

Every release ships a macOS Apple silicon DMG. The link below always points at the latest release.

macOS, Apple siliconRonda-macos-arm64.dmg

macOS

Open the DMG and drag Ronda into Applications. Ronda requires an Apple silicon Mac.

Builds are not notarized by Apple yet, so macOS blocks the first launch. Open Ronda once, then go to System Settings → Privacy & Security and click Open Anyway. If macOS instead says the app "is damaged", remove the download quarantine flag and open it again:

xattr -dr com.apple.quarantine /Applications/Ronda.app

Verify a download

Each release includes SHA256SUMS.txt. Put it next to your download and run:

shasum -a 256 --check --ignore-missing SHA256SUMS.txt

Supported agents

Ronda reads sessions from 18 coding agents, straight from the files each agent already writes:

Claude CodeCodexGrok BuildDeepSeek HarnessCursorOpenCodePiOh My PiKiroKimi CodeGemini CLICopilot CLIAntigravity CLIQoderHermes AgentOpenClawCodeBuddyWorkBuddy
  • Both Cursor transcript and IDE stores are included.
  • Both OpenCode database generations are included.
  • Antigravity transcripts are encrypted, so Ronda shows their metadata only.
  • Unknown token usage stays unknown rather than estimated.

Keyboard shortcuts

Press ? anywhere in the app, or choose the keyboard button in the header, to see this list.

⌘1 / ⌘2 / ⌘3 / ⌘4Sessions, Insights, Intelligence, Settings
⌘,Open Settings
⌘KSearch the library
⌘FFind in the active transcript
Enter / Shift+EnterNext / previous match in transcript find
[ / ]Jump to the previous / next prompt while the transcript is focused
⌘BToggle the library sidebar
Alt ← / Alt →Back and forward through views
↑ / ↓Move through the session list
⌘-click / Ctrl-click, SpaceAdd or remove the clicked or focused session from the selection
Shift-click, Shift+↑ / Shift+↓Select a range of loaded sessions
⌘A / Ctrl+ASelect all loaded sessions while the session list is focused
⌘EnterSave a bookmark note while editing it
?Show this list of keyboard shortcuts
EscClear a session selection, close transcript find, or clear and leave library search

Transcript navigation

Open a session and choose Find in transcript or press ⌘F. Find searches the literal phrase, ignoring case, in the visible message text and textual tool input/output. It preserves punctuation and spaces; it does not split the query into terms. Include thinking also searches recorded reasoning. Images are not searched. With no results the counter says “No matches”, and ⌘F selects the current query so you can type over it.

Use Next match, Previous match, Enter, or Shift+Enter to cycle through matches. Navigation opens the matching disclosure and highlights its text. Escape closes find. First message and Last message jump to the ends of the visible transcript.

Previous prompt and Next prompt, or [ and ] while the transcript is focused, move to the nearest of your prompts above or below the top of the view. Expand all and Collapse all open or close every tool and thinking block. Tool input or output over about 40 lines or 4,000 characters is collapsed to a short preview; choose Show all to read it and Show less to fold it again. The full text stays searchable, and find opens a collapsed block when it lands inside one.

The transcript header shows when the session started and last changed and its token count, with Copy session key to copy its key.

Copy reference under a message copies its ronda:// link, which works with ronda-cli show and ronda_get_session.

Prompts only shows user messages of kind text. Find counts reflect that view. When a session has no prompts, the view says so and offers Show all messages. Opening an excerpt from library search restores the full transcript and closes find before jumping to the requested message. Find survives refresh of the same session and resets when you open another one.

Choose Copy message on a user or assistant text message to copy its original Markdown, including line breaks and code fences. The action excludes system messages, thinking, tool input/output, and image data. Clipboard errors appear in an error alert. The browser preview copies only the selected synthetic sample message; its sample content does not come from your computer.

Choose the export control in a session header to open its options. Include tool input and output and Include thinking are off by default; with both off, Export Markdown… writes the same file as before (role, message number, text, and tool names). Turning either on also adds each message's timestamp and a ronda:// source reference. Tool input and output and thinking go in code fences longer than any backtick run inside them, and failed tool calls are marked. Tool output may contain secrets, so review the result before sharing it.

Export Markdown… opens the desktop save dialog and has no size limit. Copy as Markdown puts the same Markdown on the clipboard, but only up to 100,000 characters, like context bundles; a larger session shows an error suggesting file export, and nothing is truncated. Clipboard errors appear in an error alert. In the browser preview, copy uses the synthetic sample session and Export Markdown… downloads that sample as a .md file. Your option choices are not remembered between launches.

After you deliberately scroll a transcript with the wheel, touch, or keyboard, Ronda keeps the first visible message as a local reading marker. Continue reading appears when that exact message still exists and can be resolved safely. It never moves the transcript automatically. If the message changed or identical duplicates cannot be distinguished, Continue stays unavailable instead of guessing. Ronda retains markers for the 100 most recently saved sessions and evicts the oldest saved place when the limit is reached. A marker contains message fingerprints and an opaque session-key digest, not transcript text, images, paths, or host names; it lives in local preferences and is excluded from bookmark backups and diagnostics reports.

Session connections in the transcript header shows an indexed Parent and a Subagents / Related sessions disclosure. Open a child directly even though the normal library only lists root sessions. Blank child titles use their native identifier. Back and Forward preserve the original conversation. Subagents cannot be resumed or moved to Trash independently.

Related suggestions show up to five root sessions in the exact same project path and host, including archived indexed sessions. They rank shared normalized error signatures first, then shared read/edit file paths, then recency with deterministic ties. Shared error, Shared files, and Same project explain each suggestion; they do not establish that sessions worked on the same task. Paths are compared lexically, including Windows separators, without reading the local or remote filesystem. Absolute paths outside the known project and relative paths escaping it are skipped. When more same-project candidates were ranked than the five shown, the list says “Showing top 5 of N same-project sessions”; at most 512 recent candidates are ranked.

Suggestions use at most 512 candidates, preferring indexed shared errors and directly comparable recorded file paths before recent sessions. More unusual path spellings can be compared only within that candidate set. This is a bounded suggestion list, not exhaustive history. Relationships refresh when the visible library changes. Missing parents and no indexed children mean ancestry was not recorded or is no longer available. The preview adds two synthetic children to the first search session and a file-sharing follow-up; its fixed sample tool strings illustrate the interface rather than duplicating production error derivation.

Transcript shortcuts leave terminal and editable-field input alone. In the browser preview, focus must be inside the preview before ⌘F opens transcript find; the containing page retains its browser shortcuts elsewhere.

Bookmarks and notes

Choose Bookmark message on a transcript message to save its excerpt. Write a plain-text note of up to 4,000 characters and choose Save note. Unsaved note drafts stay available while you browse sessions, filter Bookmarks, or switch transcript views, including after a failed save. Closing the editor keeps its draft; Cancel note or Escape discards it. Drafts last only for the current app session and are lost when you close the app or reload the preview. Only Save note stores the note. Stars and pins still apply to whole sessions.

Open Bookmarks in the library to search saved notes, excerpts, and session titles. Project and agent filters also apply. Most recently updated bookmarks appear first. Click an available excerpt to open its message in the full transcript. Copy reference on a bookmark copies its ronda:// link, even when the original is unavailable.

If the source changes, Changed since bookmarking keeps the original excerpt and note visible. Update saved excerpt to this message explicitly replaces the snapshot. If the message disappears, its saved excerpt and note remain available to read, edit, or remove.

Bookmarks live in your index database and survive rescans and derived-fact rebuilds. They cannot be reconstructed from agent files. Before deleting or moving that database, choose Settings → Data → Export bookmarks to save a versioned JSON backup. Import bookmarks validates the entire file before applying it and keeps conflicting notes. Review both versions before choosing Replace with imported bookmark. Export as Markdown saves a readable notes file grouped by session with each excerpt and note; excerpts may contain secrets, so review it before sharing.

The browser preview uses synthetic bookmarks. Export downloads sample JSON or Markdown; Import opens a file picker. All changes reset when you reload the preview.

Copy context for another agent

Choose Select message for context under user or assistant messages, or select available bookmarks from several sessions. Selections stay while you browse. Choose Preview context to load the original messages, group them by session, and order each conversation by message sequence.

The editable Markdown draft includes the session title, agent, project, host, recorded timestamp, and message reference. Tool input/output and thinking start off; choose an option and regenerate to include them. Images and internal/system context are always excluded. Existing edits stay when you close the preview; regenerating an edited draft requires the explicit Discard edits and regenerate action.

Inspect the draft for secrets and personal paths, edit it, then choose Copy context and paste it into your chosen agent yourself. Export context Markdown opens the desktop save dialog, or downloads a sample file in the browser preview. Nothing is sent to another agent or server, and no agent command runs. Clipboard or file failures keep the draft available for retry; cancelling the save dialog writes nothing.

Drafts are capped at 100,000 Unicode characters, including source metadata. An oversized selection is rejected without truncation. Unavailable originals cannot be replaced by saved bookmark excerpts; remove unavailable messages from the selection. A changed bookmark resolves to its current original message, which you can inspect in the draft.

For example, select a debugging exchange from Codex and a related decision bookmarked in Claude Code, review the combined draft, then paste it into a new agent conversation. A reference such as ronda://session/codex:example#7 identifies local indexed content; these are not promised operating-system deep links. An MCP-connected agent can retrieve the original with ronda_get_session using the reference as its key. Use Copy reference on any message to get its link. The CLI equivalent is shown below.

ronda-cli show 'ronda://session/codex:example#7' --messages 5

Projects

Select a project in the Sessions sidebar to open its overview and filter the library. Project identity is the complete folder path; matching basenames remain separate and show full paths in the sidebar. All hosts combines the same path across machines, while Local sessions or a remote host narrows every overview section.

The overview shows ten recent root sessions, ten recently updated bookmarks, and five recurring errors with exact total counts. Sessions and bookmarks are all-time sections; archived sessions are excluded from the recent-session section. Intelligence totals and coverage use the last 30 days. Recurring errors may include earlier occurrences when the same error also appears in this range.

Choose a session, bookmark, or error evidence to open its exact message. Back and Forward restore the project and host context. View all opens the corresponding project session or bookmark list; View all project Intelligence keeps the project and host filters in the existing Intelligence page.

In the Bookmarks destination, project buttons keep filtering saved annotations. Unavailable bookmarks retain their note and excerpt but cannot open a missing original. Local or remote host filters need available session metadata. An unavailable analytics section does not hide usable sessions and annotations.

Outcomes are inferred from recorded tool events. A commit command is not proof of a fix. Tool and timestamp coverage shows which sessions can contribute errors, outcomes, and active time. The overview refreshes while visible; source changes while another view is open are read when it returns.

The sample preview derives project totals and evidence from its displayed synthetic transcripts. Select ronda and try All hosts or buildbox, then open a synthetic project error and return with Back.

Resume a session

Open a session and check Resume readiness. Unsupported agents and children, unknown projects, missing folders or executables, and incomplete inspection have explicit explanations. Check resume again retries the read-only check; selecting a session does not start an agent or SSH connection.

To return to a previous place in a long transcript, deliberately scroll with the wheel, touch, or keyboard. Continue reading appears when the exact saved message can still be identified. Opening a session never jumps automatically, and a changed or ambiguous message is not replaced by a nearby one. Up to 100 session positions are stored locally, separately from bookmarks, and excluded from bookmark backups and diagnostics reports. Continue works for indexed local, remote, and child sessions.

Click Resume when available. Ronda opens a terminal inside the app and runs the agent's own resume command in the session's project folder, so you pick up the same conversation with the same agent.

  • The session header gets a Transcript / Terminal switch. The dot next to Terminal pulses while the terminal process is open; it does not verify agent startup.
  • Terminals keep running while you open other sessions or switch to Insights or Settings. Each resumed session has its own terminal.
  • When the agent exits, the terminal stays open in your login shell in the same folder. Restart runs the resume command again.
  • Open in system terminal hands the session to Terminal on macOS.
  • Stop and close terminal ends the process and returns to the transcript.

The terminal starts your login shell ($SHELL -l), so the agent finds the same PATH it has in your usual terminal. Resume needs a known project folder and is not available for subagent transcripts.

For a moved local project, Choose project folder opens the native folder picker. The exact original path maps to the selected existing folder for every local session from that project. Effective folder shows the mapping; session metadata and agent files stay untouched. Remove it under Settings → Locations → Recovered project folders. Remote sessions never use local mappings.

Use Open project folder in a local session's header to open its existing effective folder in the system file manager. This respects recovered-folder mappings. Remote and subagent sessions cannot open a local folder. If the folder has moved or is unavailable, use Copy project path and choose a new folder with Choose project folder in Resume readiness.

Reveal source file selects an eligible local session file in Finder. Ronda rechecks that the source is a regular, non-symlink file inside an enabled location for the same agent. Remote, child, metadata-only, database-backed, missing, or disabled-location sources cannot be revealed. The action does not open or edit the file.

Embedded Resume, Restart, and Open in system terminal inspect again immediately before launch. Executable lookup uses the configured login shell with a two-second timeout. An incomplete check is Unknown, rather than proof the executable is missing. Ronda does not install an agent; DeepSeek’s npx resume uses --no-install and reports a missing package in terminal output. A spawned terminal does not verify successful startup; terminal errors and output remain visible.

The live preview labels readiness as sample data. Choose sample folder changes only a synthetic mapping; Resume, Open project folder, and Reveal source file report Desktop required. It never inspects the visitor’s filesystem, opens a folder, or starts an agent. Deleting a sample follows the desktop rules, so remote or non-deletable samples are refused. You can scroll a sample transcript and try Continue reading; its preference is in memory and resets when the preview reloads.

Open transcripts refresh as local agent files change. When you are reading earlier messages, New messages lets you jump to the latest content without losing your place. Remote transcripts refresh after a successful sync.

Remote folders and agent availability are explicitly unchecked; only local SSH availability is inspected. Launch can report authentication, connection, or remote-environment errors. Remote sessions resume on their host: the terminal runs ssh -t to the host and starts the agent there. Open in system terminal copies that SSH command to the clipboard instead.

Intelligence

Intelligence (⌘3) reports what your sessions add up to. Filter it to the last 7 days, 30 days, or all time, and to one project.

  • Where your time goes: active time split into building features, fixing bugs, refactoring, writing tests, setup and config, and exploring, plus time spent recovering from failing commands. Gaps longer than 15 minutes count as time away.
  • Agent failures: edit loops (one file edited five or more times around errors), context that filled up and was compacted, sessions that ended with tests failing, denied tool calls, and calls to APIs that don't exist.
  • Errors that keep coming back: error lines are normalized so paths, line numbers, and ids don't split one bug into many. Errors are flagged when they return after a session that recorded a commit command.
  • Your stack: languages, frameworks, and tools detected from edited files and commands, as a share of sessions with tool calls. Tech first seen in the selected range is marked new.
  • How sessions end: committed, edited but not committed, ended failing, or no file changes.
  • Worth knowing: short notes, such as recovery time outgrowing tests and setup, or failing sessions running much longer than committed ones.

Recurring errors and your stack show the top rows with a Show all toggle when more exist, and Copy summary copies a Markdown summary of the current range and project. Failure and error rows link to their sessions and open the transcript at the matching message. Everything is derived locally when a session is indexed, with fixed rules and no language model. Agents that don't record tool calls count toward time and sessions, and the view names them.

Find error history sits below global search, in project overviews, and beside message/tool output. It pre-fills the recorded wording but runs only when you choose Look up previous occurrences. Paste a multiline error up to 20,000 Unicode characters, choose a full project path and All hosts, Local sessions or a named remote host. Scope applies before counting and twenty-session paging; repeated events in one session count once. Archived sources are included; removed sources are excluded. Each result shows when its session last changed and has Copy reference to copy a ronda://session/…#N link to the exact message.

The canonical error and each original message link show agent, host, full project path and recorded outcome. Commit command observed does not mean a fix was verified. Tool-data coverage names the indexed sessions that can contribute evidence. A no-match result may reflect missing tool output or different wording. Use Search wording in current transcript to search literal prose and tool output instead; with no transcript open, open a session and use Find in transcript. Missing analytics shows an error without changing your pasted text; submit again to retry.

The preview has 28 explicitly synthetic occurrences of Error: SYNTHETIC_PROJECT_CHECK failed. Paste that line to load twenty results and then the remaining eight; either Local sessions or buildbox narrows it to fourteen. Preview lookup accepts fixed recorded sample lines; the desktop, CLI and MCP share the existing Rust normalizer for paths, line numbers and volatile values.

Insights (⌘2) covers the rest: a year of activity, and which agents, projects, and models your sessions, prompts, and tokens go to. Leaderboards show the top ten rows; choose Show all to see every row, or Copy summary to copy a Markdown summary of your totals and the current board. The activity and breakdown charts also provide a text summary for screen readers.

Locations

Settings → Locations lists the default path detected for each agent. Turn a location off to stop indexing it, or add a folder for agents that store sessions somewhere custom. Adding a folder that is already listed tells you so and leaves your entry in place.

Recovered project folders lists exact local resume mappings separately from session source locations. Removing a mapping restores the recorded project path for the next inspection and launch. If resume reports Missing folder, choose an existing local folder. If it reports Missing executable, check the agent installation in your login shell. Unknown checks can be retried without starting the agent.

File-backed sessions update as agents write them. Settings → Data → Rebuild index and Refresh library show the local scan result: session source records discovered, sessions indexed, sessions unchanged, and the aggregate number of scan errors. Discovered counts source records before sessions are grouped, so it is not a unique-session count and need not equal indexed plus unchanged. Partial results show only the error count; paths and parser details stay hidden. Remote sync reports are not included.

Settings → Locations also shows the last completed local scan time and a status for each configured root. Disabled roots are not scanned; Unavailable roots could not be read; Checked means the adapter reported no errors; and Partial means it reported scan issues. Counts are source records found at that root before grouping, so duplicate sessions across roots can count more than once. Zero does not prove agent data is absent, and some adapters suppress filesystem traversal errors. A missing root with previously indexed local sessions keeps those sessions until the source returns or the location is removed or disabled. The saved summary contains only an opaque root identifier, status, counts and time—not paths, transcript text or parser errors. The summary keeps at most 512 configured roots; the screen calls out when additional roots are omitted. The browser preview shows fixed examples, never accesses the visitor's computer or hosts, and resets when reloaded. Databases with a live SQLite WAL are opened read-only.

Command line

ronda-cli ships beside the desktop app and reads the same index.

ronda-cli index                    # create an index if none exists
ronda-cli sessions --project "$PWD"
ronda-cli sessions --since 14d --until 7d   # a time window: 7d, 2w, 2026-01-31, or an ISO time
ronda-cli search 'useEffect('
ronda-cli show 'codex:SESSION_ID'
ronda-cli show 'claude-code:SESSION_ID' --subagent '*'
ronda-cli sessions --reverse --limit 5      # oldest activity first (also on projects)
ronda-cli projects
ronda-cli insights --since 7d      # time, failures, recurring errors, stack
ronda-cli errors 'database is locked'
ronda-cli setup                    # print paths and an AGENTS.md snippet

When --limit or a show size option (--messages, --chars, --message-chars) is outside its allowed range, ronda-cli clamps it and notes this on stderr, for example ronda-cli: --limit 500 clamped to 100; stdout is unchanged. Put -- before a query that begins with -; after it, --help and similar are search text. Usage errors, including an invalid --since or --until or an unknown --agent (the message lists the valid ids), exit with status 2.

MCP server

ronda-mcp is a read-only stdio server that lets an agent search your past sessions. It exposes ronda_search, ronda_list_sessions, ronda_get_session, ronda_list_projects, ronda_insights, and ronda_find_error, which checks whether an error has been seen before and how those sessions ended. Desktop Find error history uses the same lookup with optional project/host scope and paged original evidence. Recorded commit commands do not prove a fix.

Settings → Connect shows the installed path and ready-to-copy setup for Claude Code, Codex, and other MCP clients, plus a command-line snippet to paste into AGENTS.md or CLAUDE.md. For Claude Code on macOS:

claude mcp add --scope user ronda -- '/Applications/Ronda.app/Contents/MacOS/ronda-mcp'

Remote hosts

Add an SSH alias or user@host under Settings → Remote hosts. SSH must connect without prompts, and rsync must be installed on both machines. Host names may use letters, numbers, @, ., _, and - only and cannot start with -; Ronda explains invalid or duplicate entries.

Ronda mirrors an allowlist of session paths into its own data directory and indexes that mirror. Remote sessions can't be moved to Trash. Resume connects to the host over ssh -t in Ronda's terminal and starts the agent there. Removing a host removes its mirror.

Privacy and data

  • Sessions are indexed into a separate SQLite database on your machine. The session index is rebuildable; your bookmarks and notes require a backup from Settings → Data. They are never sent to a Ronda server.
  • In Settings → Data, preview and save an optional diagnostics JSON containing app/schema versions, index availability, an aggregate session count, and counts of configured, enabled, and existing local source directories. It contains no paths, source names, transcript content, credentials, preferences, or remote sync details; Ronda does not upload it.
  • Recent searches are the last eight completed query texts, stored only in a local preference. They are excluded from diagnostics, bookmark backups, and exports, are never sent to Ronda or an agent service, and can be removed one by one or with Clear recent.
  • Named saved searches can contain sensitive query text and project paths. They are stored only in local preferences, are not included in diagnostics or bookmark backups, and are never sent to Ronda or an agent service. Remove a saved search in the Workbench or explicitly reset an unreadable saved-search preference.
  • Session export includes tool input and output and thinking only when you tick those options. Tool output may contain secrets; Ronda writes the file or clipboard text only on your action and never uploads it.
  • Reveal source file validates a local transcript path against enabled locations for its agent, then asks Finder to select it. The path is not sent, logged, or changed; the file is not opened or edited.
  • Session label names and assignments are stored only in the local index. They are not included in diagnostics, bookmark backups, or saved-search data (a saved search stores only a label id), and are never sent to Ronda or an agent service.
  • Local session titles are stored only in a local preference. They are excluded from diagnostics, bookmark backups, and exports, and are never sent to Ronda or an agent service.
  • Ronda contacts GitHub only when you choose Check for updates, and an SSH host only when you configure and sync it.
  • Agent files are read, not changed. Move to Trash is the only action that removes an agent's session file.
  • Ronda starts an agent only when you click Resume, and that terminal runs on your machine or on your own SSH host.
  • Ronda does not read agent credential files.
  • Set RONDA_HOME to scan a different home directory and RONDA_DB to put the index elsewhere.

Build from source

Install Bun 1.4.2 and a current stable Rust toolchain on an Apple silicon Mac.

git clone https://github.com/tryronda/ronda.git && cd ronda
bun install --frozen-lockfile
bun run tauri:dev      # run the desktop app
bun run tauri:build    # create a macOS Apple silicon DMG