Last Updated: 7/24/2026
Troubleshooting and FAQ
This is the place to look when Jolli Memory is not behaving, and the place to check the common questions before you adopt it.
Part 1 walks through problems in the order they usually happen. Part 2 answers the questions people ask most. Whatever the symptom, run jolli doctor first.
Part 1: Troubleshooting
Start here: jolli doctor
jolli doctor is the first thing to run for any problem. It prints a health checklist and tells you what, if anything, is broken.
jolli doctorEach line is one check:
| Check | What it means | Healthy state |
|---|---|---|
| Git hooks | The post-commit, post-rewrite, prepare-commit-msg, and post-merge hooks (a separate pre-push hook handles sync-on-push) | installed |
| Claude hook | The Claude Code Stop and SessionStart hooks (optional) | installed |
| Gemini hook | The Gemini CLI AfterAgent hook (optional) | installed |
| Orphan branch | The jollimemory/summaries/v3 branch that stores your Memories | exists (created on your first commit) |
| Worker lock | The background worker’s lock file, flagged stuck when older than 5 minutes | not stuck |
| Sessions | Count of tracked agent sessions (informational only) | any number |
| Git queue | Pending summary operations, flagged high above 10 entries | empty or low |
| Config | Whether a usable credential is available | credentials found |
| dist-paths | The per-source paths the hooks resolve to at runtime | at least one registered |
| plugin … | Version compatibility of any installed plugin | compatible |
If a check fails, doctor exits with an error so you know to act. To repair automatically:
jolli doctor --fix--fix repairs three things:
- Releases a stale worker lock.
- Reinstalls missing git hooks.
- Removes stale dist-path entries.
--fix does not clear the queue. To remove expired queue data, run jolli clean. To work through a backlog of pending summaries, make one more commit (see Stuck or backlogged queue).
If doctor did not pin the problem, the sections below cover what it does not.
No Memory after a commit
The most common problem. Work through these in order.
1. Restart your agent. This is the single most frequent cause. Two agents capture sessions through hooks, and those hooks only take effect for sessions started after you enabled Jolli. If you enabled Jolli while your agent was already open, restart it (in VS Code or a fork like Cursor or Windsurf, reload the window; in IntelliJ, restart the IDE). Use the table below to see whether your agent needs a restart.
| Agent | How sessions are captured | Restart after enable? |
|---|---|---|
| Claude Code | Stop hook records each response, SessionStart hook injects a briefing | Yes |
| Gemini CLI | AfterAgent hook fires after each completion | Yes |
| Codex CLI | Discovered automatically by scanning the filesystem | No |
| OpenCode | Discovered automatically from a local SQLite database (requires Node 22.5+) | No |
| Cursor IDE (Composer) | Discovered automatically from Cursor’s local SQLite stores | No |
| GitHub Copilot CLI | Discovered automatically by scanning the Copilot CLI session log | No |
| VS Code Copilot Chat | Discovered automatically from the Copilot Chat conversation cache | No |
Cursor CLI (cursor-agent) | Discovered automatically by scanning ~/.cursor/chats and ~/.cursor/projects | No |
| Cline (VS Code) | Discovered automatically from the extension’s task history | No |
| Cline CLI | Discovered automatically by scanning ~/.cline/data/sessions | No |
| Devin | Discovered automatically from a local SQLite database (requires Node 22.5+) | No |
| Antigravity | Discovered automatically from a local SQLite database (requires Node 22.5+) | No |
2. Check your credentials. Memory needs a credential to generate summaries. Run jolli status (or check the Status panel). If nothing is configured, set one:
# Sign in with Jolli
jolli auth login
# Or bring your own Anthropic key
jolli configure --set apiKey=sk-ant-api03-...With no credential, doctor reports Config: no credentials, and the log shows No LLM provider available.
3. Confirm hooks are installed. If doctor reports Git hooks: not installed, run jolli enable from the repo root, then commit again.
4. Confirm a supported agent was running. A Memory is built from a conversation transcript. If you committed without one of the twelve supported sources (see the table above) active in that repo, there is nothing to summarize. Every source except Claude Code and Gemini CLI is discovered automatically, so no hook or restart is needed for them, but the agent does need to have produced a session.
5. Check the queue. If everything above is fine, the background worker may be stuck. See the next section.
For deeper diagnosis, open the log. In VS Code, use View -> Output -> Jolli Memory. Common messages:
| Message | Meaning |
|---|---|
No LLM provider available. | No credential is set. Sign in or add an API key. |
LLM proxy request failed with status 429 | Rate limited. Memory retries once within a few seconds; if that also fails it saves a placeholder summary you can refill later by clicking Regenerate on that commit. |
LLM direct request to api.anthropic.com failed | Your Anthropic key is invalid or rate limited. |
Stuck or backlogged queue
A stuck lock, or a backlog of queued summaries, usually means the worker crashed or the LLM provider was unreachable for a while.
jolli doctor # Reports lock state and queue size
jolli doctor --fix # Releases a stale lock
jolli queue-status # Reports whether summary generation is still running
jolli clean --dry-run # Previews expired data that can be removed
jolli clean # Removes expired sessions, queue entries, and squash markersFor a backlog, just make one more commit. The worker picks up where it left off and processes the rest from that point.
jolli clean only removes expired auxiliary data: session entries older than 48 hours, queue entries older than 7 days, and stale squash markers older than 48 hours. Your stored Memories and transcripts are never deleted by clean. In a non-interactive shell (CI, pipes, redirected input) clean refuses to delete unless you pass -y or --yes, so nothing is wiped by accident.
Sign-in failures
If the browser callback page shows an error, match the code below.
| Code | Meaning | What to do |
|---|---|---|
oauth_failed | The OAuth flow failed. | Retry. If it persists, use BYOK instead. |
session_missing | The sign-in session expired or was lost. | Retry the sign-in. |
invalid_provider | The authentication provider was rejected. | Retry. If it persists, contact support. |
auth_fetch_failed | Jolli could not fetch your user info from the provider. | Retry. |
no_verified_emails | Your Jolli account has no verified email. | Verify an email on your account, then retry. |
server_error | An unexpected server error occurred. | Wait a moment and retry. |
failed_to_get_token | Jolli could not retrieve your credentials. | Retry. Fall back to BYOK if it persists. |
user_denied | Sign-in was cancelled. | Run jolli auth login (or Sign In again) to retry. |
invalid_callback | The server rejected the sign-in callback. | Retry. |
| State mismatch | The callback did not match the flow you started (shown as “Invalid sign-in callback (state mismatch)”). | Retry the sign-in from the same machine. |
If you see “Could not derive Jolli site URL from API key”, your Jolli API key is malformed or incomplete. Regenerate it at Settings -> Jolli Memory -> Create Key and sign in again.
BYOK is always a fallback: if sign-in keeps failing, add an Anthropic key with jolli configure --set apiKey=sk-ant-api03-... and you can still generate Memories (you just cannot use Share in Jolli without a Jolli key).
Share in Jolli failures
Share in Jolli posts a commit’s summary to your Jolli Space. When it fails, the HTTP status tells you why.
| Status | Meaning | What to do |
|---|---|---|
| 426 | Your extension or CLI is older than the server requires (“Plugin Outdated”). | Update the VS Code or IntelliJ extension, or the CLI, to the latest version. |
| 412 | This repo is not yet linked to a Jolli Space (binding_required). | Complete the Share flow, which prompts you to link the repo to a Space first. |
| 409 | The repo is already linked to a Space (binding_already_exists). | No action needed. A concurrent link already won. |
| 403 | The server rejected the request; the message shown comes from the server. | Usually a Jolli API key issued for a different tenant or org, or revoked access. Run jolli auth status, then re-authenticate. |
To check which workspace you are signed in to:
jolli auth statusIf you are not signed in at all, Share asks you to sign in or add a Jolli API key first (in VS Code the button warns “Please configure your Jolli API Key first”; the CLI jolli push reports “Not signed in to Jolli”). Run jolli auth login, or paste a Jolli API key in the Settings panel. A BYOK-only setup (Anthropic key, no Jolli account) cannot use Share in Jolli.
Note: a 429 (rate limit) is not a Share error. It comes from summary generation through the Jolli LLM proxy. Memory retries the summary once within a few seconds; if that retry also fails, it saves a placeholder summary that you can refill later by clicking Regenerate on that commit.
MCP tools not appearing
If your AI agent does not show the Jolli Memory tools (search, recall, and the rest), check these in order.
- Did enable run? MCP registration happens during
jolli enable. Runjolli statusto confirm Jolli is enabled in this repo. - Is the server registered for your host?
.mcp.jsonin your project root is wherejolli enablewrites thejollimemoryserver for Claude Code (and Copilot CLI). Other hosts use their own config: Cursor reads.cursor/mcp.json, and Gemini, Codex, OpenCode, and VS Code Copilot Chat each read a machine-wide file (see the host table in the “Connect Memory to Your AI Assistant (MCP)” doc). Confirm the file for your host exists and contains the entry. - Restart your host. Your agent reads
.mcp.jsonat startup, so restart it (or reload the window) after enabling.
If the tools appear but search returns nothing or looks stale, rebuild the local search index:
jolli mcp --reindex--reindex rebuilds the search index only. It does not register the server or refresh the tool list, so if tools are missing entirely, the fix is in steps 1 to 3 above, not here.
For the full list of tools and how each host connects, see the “Connect Memory to Your AI Assistant (MCP)” doc.
Missing Memory Bank Markdown files
If a visible .md file in your Memory Bank folder was deleted (by you or another tool), restore it:
jolli heal-folderThis re-renders the missing Markdown from the hidden canonical JSON that Jolli keeps alongside it. It does not call the LLM and does not re-summarize anything, so it is fast and free. Your Memories on the orphan branch are the source of truth and stay intact either way.
Healing works only when your storage is in dual-write or folder mode (the default is dual-write). If the repo is set to orphan-only storage, there are no visible Markdown files to heal, and the command tells you so.
Still stuck
File an issue at support@jolli.ai and include your jolli doctor output. That output captures your hook, credential, lock, and queue state, which is exactly what we need to help.
Part 2: FAQ
Will Jolli Memory slow down my commits?
No. Your commit returns immediately. The git hook enqueues the work and hands it to a background worker, then gets out of the way. The summary is generated in a detached process and appears in your editor shortly after, usually within about 10 to 20 seconds. If a summary call fails, it retries once after a short delay, then saves a minimal record so nothing downstream breaks.
Does Jolli Memory send my code anywhere?
Your code stays private by default. Here is exactly what happens:
- Your transcripts stay on your machine by default. They are uploaded only if you turn on
syncTranscriptsfor Memory Bank cloud sync (or runjolli sync-memory-bank --transcripts); they are never sent on Share in Jolli. - To build a summary, your transcript and git diff are sent to the LLM. Either directly to Anthropic (when you use your own Anthropic key) or through the Jolli LLM proxy (when you signed in with Jolli). The proxy holds the payload in memory only for the request and never stores it or writes it to a log.
- Only the generated summary is saved, and it is saved locally. It leaves your machine when you click Share in Jolli, and then the summary (plus a structured JSON copy), the commit hash, branch, commit author, date, change stats, the changed-file paths, any extracted references (Linear, Jira, GitHub, Notion, Confluence, Asana, monday.com, Slack, Zoom, and Context7 library lookups), your repository’s remote URL, and any attached plans and notes are sent. Raw transcripts and the raw diff are never sent to a Jolli Space.
Does it work offline?
Mostly. Your commit and your local Memory storage work fully offline, because the commit hook and the on-disk storage do not need the network. Only summary generation needs the network, since it calls the LLM. If you commit while offline, the worker records a minimal entry and the summary fills in later. Make one more commit once you are back online and the worker processes the backlog.
Does it work with monorepos and git worktrees?
Yes to both. Jolli Memory is worktree-aware: hooks and summaries work across git worktree checkouts, and each worktree tracks its own current branch so its Memories stay consistent. A monorepo is just one repository, so it works normally. One Memory Bank folder can also hold many repositories, each in its own subfolder.
How do I see what Jolli has captured?
Several ways, depending on where you are:
- In the editor sidebar (Current Branch view). The Committed Memories section lists every commit’s Memory; click the eye icon on one to open it: a Quick recap and per-topic cards with Why this change, Decisions behind the code, and What was implemented callouts, plus Conversations, Context, and Files panels. The Working Memory block above it shows what will go into your next commit’s Memory before you commit, so you can see (and adjust) what is being captured.
- In the Memory Bank. The Memory Bank view browses every stored Memory across branches and repos, with search and a Tree / Timeline toggle. Because the Memory Bank is also plain Markdown on disk (default
~/Documents/jolli/<repo>/), you can open and read it with any tool, no extension required. See Memory Bank and Sync. - From the CLI.
jolli view # compact list of recent memories
jolli view --commit 1 # the latest commit's full Memory
jolli view --commit <hash> # any commit by hash prefix
jolli status # which assistants and sessions Jolli detected
jolli recall # the current branch's compiled contextWhat is stored where?
| Data | Where it lives | Leaves your machine? |
|---|---|---|
| Raw transcripts | Orphan branch and Memory Bank folder (both local) | Only if you enable syncTranscripts (Memory Bank cloud sync); never on Share in Jolli |
| Git diff | Sent to the LLM at summary time | Not stored by Jolli, discarded after the summary is made |
| Generated summaries | Orphan branch and Memory Bank folder (both local) | Only when you click Share in Jolli |
| Session metadata | Project .jolli/jollimemory/ (local, gitignored) | No |
| Plans and notes | Local, attached to commits | Only the attached ones, on Share in Jolli |
| Usage telemetry | Local buffer, flushed in small batches | Yes; content-free, and attributable to your account only when signed in |
The orphan branch (jollimemory/summaries/v3) is the source of truth and is completely separate from your code history. See the “Memory Bank and Sync” doc for how the folder is laid out.
Is telemetry on, and can I turn it off?
Usage telemetry is on by default. It is content-free: event names, surface and version, OS and Node version, CPU architecture, a deployment-tier tag, a timestamp, a random install ID, and coarse counts. It never includes your code, file paths, commit messages, diffs, transcripts, Memory content, or repo or branch names. The payload carries no account identifier; note that when you are signed in to Jolli, events upload with your Jolli key, so the server can associate them with your account at ingest. BYOK or signed-out setups upload with no key and stay unattributed.
Turn it off any time with either of these:
# Persisted opt-out
jolli telemetry off
# Or the standard environment variable
export DO_NOT_TRACK=1Check the current state with jolli telemetry status, and see exactly what would be sent with jolli telemetry inspect.
Related
- Getting Started with Jolli Memory - install, sign in, and your first Memory.
- Reference - config keys, commands, and recovery paths.
- Supported AI Assistants and Capture - why a session might not be captured.