Skip to content

Sync ​

Your memory is an ordinary git repository. Kessho syncs it, with the git installed on your computer, to the remote you choose, and never forces anything. An indicator also tells you when the memory has just changed.

Memory synchronization: files changed since the last commit and a commit message being typed.

What you see ​

Syncing is driven from two places: the status bar, for one click, and Settings > Sync, for the detail.

  • In the status bar, at the bottom of the window:
    • the Sync the memory button, far left (tooltip: "Sync: commit, pull, push");
    • the git field, which tells you where the repository stands: up to date, N to push, N to pull, N uncommitted, conflict or operation in progress. The tooltip gives the full state line.
  • In Settings > Sync:
    • The state line: the branch and what it tracks, then how far behind and ahead it is, for example "main → origin/main · 2 to push · 0 to pull · remote checked 10:30". The time is when the remote was last checked.
    • The three actions: Sync, Pull, Push.
    • Changes: the number of modified, deleted and untracked files ("3 modified · 0 deleted · 1 untracked"), the Show the list disclosure, the Commit message field and the Commit the changes button.
    • Remote: the address of the remote repository, and the Remote URL (https or ssh) field.
    • Automation: the "Agents commit and sync automatically" checkbox.
    • Commit messages: one line per origin (One click, Automation, Manual, AI agent) with the chosen template and its Preview, then My templates and the New template button.
    • Warnings, when there is something to say.
  • The freshness indicator, top right, next to your avatar: a dot that lights up when the memory changes.

If the memory is not a repository yet, the section says: "This memory is not a git repository. Initialising it creates no commit and connects no remote." If git is not installed, it shows "git not found" with the command to install it. The rest of Kessho works without git.

What you can do ​

Sync in one click ​

Click Sync the memory in the status bar. Kessho does three things, in this order:

  1. it commits what changed, under the message composed by the One click origin's template, by default "vault backup: YYYY-MM-DD HH:mm:ss" (nothing is committed if there is nothing new);
  2. it pulls what is new on the remote;
  3. it pushes your commits.

Nothing is stashed and nothing is forced. When it finishes, the git field updates; a screen reader hears "Memory synced.".

If something blocks it, the bar shows "failed:" followed by one word (conflict, offline, authentication, dirty tree, busy, timeout, identity, markers). Hover it to read the full reason. If the backup commit happened before the failure, the message says so: it was made locally.

The button is greyed out, with the reason in its tooltip, when no remote is connected ("No remote: connect one below.") or a git operation is already running.

Commit your changes by hand ​

In Changes:

  1. Click Show the list to read the files involved.
  2. Write a Commit message.
  3. Click Commit the changes, then Confirm at the question "Commit N changes with this message?". Cancel drops it.

The field is pre-filled by the Manual origin's template (by default "vault backup: YYYY-MM-DD HH:mm:ss"): you can edit it, and once you type in it Kessho no longer replaces it. The button stays greyed out while the message is empty. The message cannot exceed 1,000 characters. Your commit name and email must be filled in your profile (the circle with your initial, top right).

Pull or push ​

  • Pull fetches what is new on the remote and applies it. It is greyed out while changes are uncommitted: "Uncommitted changes prevent pulling: commit them first."
  • Push sends your commits. It is greyed out when there is nothing to push.
  • Sync pulls, then pushes.

Kessho never pulls on its own: the state line shows "N to pull", and you decide.

Connect a remote ​

In Remote, paste the repository's address into Remote URL (https or ssh) and click Connect (the button reads Change once a remote is connected). The accepted forms are https://host/path, ssh://host/path and user@host:path.

No credential is stored: Kessho uses your system's own. An address that carries one is refused.

Initialise the repository ​

If your memory is not a repository yet, click Initialise the repository. It creates no commit and connects no remote.

Let your agents sync ​

The Automation checkbox ("Agents commit and sync automatically") is ticked by default. When it is ticked, each tool of your AI agents that writes to the memory commits only what it touched, then pushes. Your uncommitted changes never leave with it. Untick the box to take control back.

The first line of these commits' message is set in Compose your commit messages.

To ask an agent to sync, see Sync the memory. The matching tools are described in the MCP reference.

Compose your commit messages ​

In Commit messages (Settings > Sync, visible when the memory is a git repository), each commit origin composes its message from a template: one of the supplied templates, or your own. The template sets the first line of the message. As long as you do not touch it, nothing changes: each origin keeps its usual message.

The four origins ​

OriginWhat the template setsDefault template
One clickThe message of the commit made by the Sync the memory button.Timestamped: vault backup: {date} {heure_s}, that is "vault backup: 2026-10-21 14:05:09".
AutomationOnly the first line of the commit that one of your AI agents' tools makes after writing. The body, which lists the files, and the Kessho-Outil, Kessho-Embarque and Kessho-Repris lines always stay.Kessho · tool: kessho({outil}): {objet} {demande}, for example "kessho(mem_note): Architecture".
ManualThe pre-filled content of the Commit message field; you can edit it before committing.Timestamped
AI agentThe message of a commit the agent makes through mem_git_commit. The agent's message is always kept: the agent's template can only surround it (it must contain {message}, otherwise it is ignored with a warning), and an empty message is always refused.Agent's message: {message}, the message exactly as the agent wrote it.

The message of a conflict resolution is never affected: Kessho composes it itself.

A subject composed by a template is cut at 72 characters (with "…") for every template except Kessho · tool and Agent's message, which are never cut; the AI agent origin is never subject to it. When a subject is cut, Kessho reports it.

If the chosen template no longer renders, Kessho uses the origin's default template and says so: the Preview shows "The saved template is missing or invalid: the default template is used." For the One click origin, the commit goes ahead with the default template and the status bar shows a non-blocking warning, "default template used". The sync only stops before any commit if no usable message could be composed; the failure then appears in the status bar.

Choose a template ​

  1. On the origin's line, click the template's name: a menu opens, with Supplied templates and My templates.
  2. Pick one: it is saved at once, and the line's Preview updates.
  3. To go back to the origin's default template, click Restore default (the button only appears once you have changed it).

The six supplied templates ​

NameTemplateExample
Timestampedvault backup: {date} {heure_s}vault backup: 2026-10-21 14:05:09
Journal{date} {heure} · {utilisateur|—}2026-10-21 14:05 · Ben
Conventional Commitschore(vault): {action|mise à jour} {n_total|plusieurs} note(s)chore(vault): modification 4 note(s)
Agent trace[{origine}] {outil} — {objet}[automatisme] mem_note — Architecture
Kessho · toolkessho({outil}): {objet} {demande}kessho(mem_note): Architecture (apply)
Agent's message{message}correction de la note

No supplied template uses a sensitive variable (see the warning below).

A template's syntax ​

  • {variable} is replaced by its value when the commit is made.
  • {variable|default} gives fallback text when the variable is empty. The fallback text cannot contain a brace.
  • {{ writes an opening brace, }} a closing brace.
  • A template fits on a single line and is at most 500 characters; the resulting message can be neither empty nor longer than 1,000 characters.
  • An unknown variable, an unpaired brace or a control character is refused with a message that says what, and where when it is a position: a typo never reaches the history. The editor then lists the valid variables.
  • A variable with no value gives its fallback, otherwise nothing: a commit does not fail over a missing counter.

The variables ​

They are grouped by family in the editor, where a click on a variable inserts it at the cursor. When a variable has no value for the origin you are previewing, the editor says so: it will stay empty unless you give a fallback.

FamilyVariableWhat it givesExample
Time{date}Today's date2026-10-21
Time{heure}Time, without seconds14:05
Time{heure_s}Time, with seconds14:05:09
Time{iso}Full date and time (ISO 8601), with the time zone2026-10-21T14:05:09+02:00
Time{semaine}Week number43
Time{fuseau}Local time offset+02:00
Volume{n_modifies}Number of modified notes (not for automation)3
Volume{n_ajoutes}Number of added notes (not for automation)1
Volume{n_supprimes}Number of deleted notes (not for automation)0
Volume{n_total}Total number of notes touched (not for automation)4
Context{utilisateur}Your name, as signed in the ProfileBen
Context{appareil} (sensitive)Name of this computerMacBook-de-Ben
Context{memoire}Name of the memory (its folder)SecondBrain
Context{branche}Current git branchmain
Context{version}Kessho version0.3.1
Origin{origine}Origin of the commitun-clic
Origin{outil}Tool that wrote (automation only)mem_note
Origin{objet}What was written, for example a note's title (automation only)Architecture
Origin{message}Message typed in (only has a real value for the agent; the manual preview shows an example)correction de la note
Origin{demande}Mode of the tool's request (automation only)(apply)
Action{action}Kind of change: addition, modification, deletion (not for automation; empty when there is no change)modification
Content{zones} (sensitive)Memory zones touched10-episodes, 20-knowledge
Content{projets} (sensitive)Projects touchedkessho, atelier
Content{fichiers} (sensitive)Notes touched (the first ones, then the rest as +N)a.md, b.md +3

{origine} is un-clic, automatisme, manuel or agent.

Warning: what the sensitive variables write ​

The content variables ({zones}, {projets}, {fichiers}) and {appareil} reveal what your memory contains or the name of your computer. The composed message is written into the git history, then pushed to the remote repository you chose: once it is there, it stays. No supplied template contains them, and Kessho never puts them in a template you did not write. In the editor they are folded under Sensitive variables, and as soon as your template uses one, a privacy note names it.

Create, edit, delete a personal template ​

  • New template (or New template… in an origin's menu) opens the editor. Give a Template name (1 to 40 characters) and write the Template. You can keep 20 at most.
  • The Preview updates live, with the same engine as the commit. Pick the previewed origin under Preview for origin: the preview renders like that origin's commit.
  • While the template is refused, Save template stays greyed out and the error message says why. A template created from an origin's line is chosen for that origin at once.
  • Edit reopens a template from My templates. If you leave the editor with changes, Kessho asks "Discard the changes to this template?".
  • Delete template asks for confirmation and names the origins that use it: they go back to their default template.

Understand a refusal ​

The messages say what to do. The most common ones:

  • Conflict: the pull is cancelled and nothing changed. The files involved are named: merge them by hand, commit, then sync.
  • Push refused: the remote moved ahead. Pull first. Nothing is ever forced.
  • Offline: the remote cannot be reached. Nothing changed, try again later.
  • Authentication refused: Kessho uses your system's credentials. For GitHub over https, run "gh auth login"; otherwise switch the remote to SSH.
  • Operation in progress or repository busy: another git process is working on the memory. Wait a moment.

Under Warnings, Kessho also tells you when conflict markers have been committed in a file, when it resumed an interrupted operation, or when the Obsidian Git plugin is syncing the same memory (two automations get in each other's way: set its intervals to 0). Kessho never changes Obsidian's configuration.

Know when the memory changed ​

The freshness indicator, top right, lights up when the memory changes, for example when an agent has just written. Click it to open its panel.

The freshness indicator, top right: an agent has just written in the Procedures zone, the indicator lights up and says what moved.
  • The first line says since when: "Seen a second ago." With no change since opening: "No change since opening." If the reading fails: "The memory state could not be read."
  • Changes since the last reload lists the zones that moved, with the number of changes: "Procedures 1". The number counts changes, not the zone's size: adding a note then removing it makes two.
  • When a note changed without any zone changing size, the panel says so: "A note changed, without any zone changing size."
  • Reload refreshes what the screen shows and resets the count.

Kessho · Cookie-free audience measurement, on an ArboRithm server.