Changelog

Release notes

Updates to the monthlet app: new features, improvements, and fixes.

0.16.5

LATEST

There is no 0.16.4 release — it was prepared but never published. The fixes it contained are included in this version.

Fixes

The note map opened squashed into a corner the first time. After turning the note map on and opening it, the graph could appear small and bunched into one corner and stay there. "Fit to screen" did not help; changing anything else — the view mode, the depth, a tag filter — rebuilt it correctly. It now lays out properly on the first open.

Note map labels were cut off at the edges of the frame. A note sitting near the left or right edge had its name clipped — the beginning or the end of it was missing — and "Fit to screen" did not bring it back. Labels now stay inside the frame.

Links the assistant wrote into a note were stored in an unencoded form. When you asked it to link to a note whose file name contains spaces, the link worked on screen, but the form written into the file was one that other tools reading your notes could not follow. Links are now normalized as they are written, so what is stored matches what you see.

The assistant mentioned internal identifiers when it explained an edit. Its replies could include a block's internal id and English type name — "updating the existing paragraph block (blk_45b6…)" — neither of which appears anywhere in the interface. It now describes what it changed in the words you see on screen.

Removing a tag from a note could not be undone. Clicking the × on a tag chip — or pressing Backspace in an empty tag field — removed it immediately, with no way back: tag changes are not part of a note's history, so neither the history view nor ⌘Z could return it. A notice now appears with "Undo", which puts the tag back as it was.

0.16.3

Fixes

Asking the chat for tag suggestions did not always produce the chips. When you asked for tags on a note you had not just created or edited — "suggest some tags for this note" — the reply sometimes listed tags as plain text instead of offering them as chips above the input. Reading them back and typing them in by hand was the only way to apply them. The suggestions now come back as chips, so a click applies them.

This affected Anthropic models only; OpenAI and Gemini already behaved this way.

0.16.2

Fixes

A link to another note sometimes did not become a link. When you asked the chat to link to another note, and that note's name contained a space, the link stayed in the page as [Note name](Note name.html) and could not be clicked. The note map showed the two notes as connected, so it was only the page itself that disagreed. Links are now made properly.

Notes already in that state are fixed when you reopen them. Nothing in the files changed — the way they are displayed did — so the link appears the next time the note is opened.

0.16.1

Fixes

A path could point outside the vault and not be caught. When the chat asked to open or change a file, a path written in escaped form (%2E%2E%2F…) was treated as an odd file name rather than as an attempt to leave the vault. Those are now read for what they mean and refused. Nothing outside your vault was reachable before this — the file simply did not exist — but the check now happens where it should.

The chat sometimes had to try a file path twice. Paths it had been given in escaped form were rejected on the first attempt. It worked around this on its own, so you would not have noticed anything beyond a slightly slower answer. It now works the first time.

0.16.0

Seeing how your notes connect

Notes have been able to link to each other for a while. What you could not do was step back and look at the whole thing. The note map draws it.

  • The whole vault, or just what is near. Switch between the two at the top. "Nearby" starts from the note you have open and follows links out one to three steps.
  • Colour comes from tags. A note takes the colour of its first tag. Click a tag in the legend to narrow the map to it, and turn off "Show isolated notes" to hide the ones that connect to nothing.
  • Hover a note to read it. The same preview you get from a link in the text.
  • It keeps up while it is open. Save, create, rename or delete a note and the picture changes with it. Where you have panned and zoomed to stays where you left it.
  • Off by default. Turn it on in Settings → General, and it appears at the top of the sidebar.

The chat can work with links too

Looking at a real vault made one thing obvious: notes that should be connected often are not. So the chat now knows about links.

  • Ask which notes nothing points to, which ones sit at the centre, or what is near a particular note.
  • Ask it to add links, and it writes them with paths that work from the note being edited.

Starting from a template

Two structures come with the app: meeting notes (attendees, agenda, decisions, to-dos, next time) and a weekly review (what moved, the numbers, what is stuck, next week).

Ask for one in the chat — "make today's meeting memo with the meeting notes template" — and the structure becomes the base while the content is written for what you asked. They live in the app, so no template files appear in your vault, and they follow your display language.

Fixes

Standard menu items stayed in English. Undo, Cut, Paste, Close Window, About monthlet and their neighbours were English no matter what language you had chosen, so a single menu mixed two languages. They follow your language now, in all six.

0.15.0

Bringing a day's events into a note

You could already ask the chat to put your schedule into a note. Now the calendar offers it, so you do not have to think of asking.

  • Start from the day you are looking at. In the month, week, and day views, each day now offers to import its events. It sits next to the button that opens that day's Daily Note.
  • It fills in the request; you send it. Choosing it writes the request into the chat box and stops there. You can change the date, or widen it to a whole month, before sending.
  • Shown when Daily Note is turned on in Settings → Calendar.

Fixes

The menus were in English on a first run. Before a Vault was chosen, the app was in your language but the menus were not. They now follow your language from the start. The Help menu kept its English title even after that, and now it does not.

Help described a message that does not exist. When only Google Sheets was connected, the help said the card would ask for a reconnect. The card says something else, so there was nothing to look for. The help now quotes what the card actually says, and adds that the button reads Connect — you do not have to disconnect first.

Help named the Google connector by its old name. The card was renamed when Calendar was added, and the help was still sending you to the old name in every language.

One thing had three names. The same folder was called Vault in one place and a folder in another, so it was not clear they were the same thing. It is Vault throughout now.

Asking for help in your own words. Some sections could not be reached by the phrasing people actually use, such as asking to search notes rather than naming the feature. Those sections are reachable now.

Two help sections were missing in French. Search, and import and export, had no entry at all, so questions about them could not be answered.

The token for external agents was shown as dots. Settings showed the token masked, and that masked text could end up in an agent's configuration — it looks like a token, so nothing seemed wrong until the agent tried to connect. The token is now shown as it is. A connection refused because of the token also says how the token was wrong, instead of only that it was rejected.

0.14.0

Google Calendar

monthlet connects to Google Calendar. Ask the chat what is on your schedule and it reads the calendar directly, and ask it to put something on the calendar and it creates the event for you.

  • Your day, in the note you are already writing. Bring today's events into your daily note instead of copying them across by hand.
  • Creating events from the chat. Describe the appointment in words and it is added to the calendar you choose.
  • You decide what is connected. Connect and disconnect in Settings → Connectors. Calendar data goes to the AI provider you have set up, and nowhere else.

Fixes

Choosing which Google account to connect. When you were signed in to several Google accounts, authorization picked one without asking. It now asks you which account to use.

Stopping partway through authorization. Closing the Google window before finishing left the connector in a state where trying again did nothing. You can start over now.

Telling apart the reasons a connector is refused. "Access denied" was all you saw, whether a permission was missing or the service had never been turned on for the account. The message now names the cause, and monthlet checks the calendar once right after you connect, so a setup problem shows up then rather than on your first real request.

Working locations are no longer listed as appointments. Entries that only record where you are working were appearing among real events in today's schedule.

Writing to a note that is not open. When the assistant edited a note you did not have open, nothing on screen led you to it. There is now a way to open it.

Answers about how to use monthlet. A long help section could take up the whole answer and push out the section that actually fit the question. Several sections now come back together, so the right one is not crowded out.

Setting up for the first time. "Skip" ended the whole setup rather than the step in front of you, and there was no way to open it again — so the sample notes were lost for good. The button now says what it does, asks before closing, and setup can be run again from Settings → General.

What the first setup step asks you. The first and third steps were both called "API key setup", which read as being asked the same thing twice. The first one only asks how you want to use AI, so that is what it says now. The card that offered your own key was headed with the abbreviation on its own; it now says what it means first.

The notes you start with. The three sample notes created at the end of setup are about ordinary things you can adapt to your own use, rather than about building monthlet.

0.13.3

Connecting an external agent

Connecting monthlet to an agent like Claude Code no longer puts a token into the agent's configuration file. The command you copy from Settings → Connectors → Publish to external agents now registers only the path to a command that ships with monthlet, and the token is read from monthlet each time the agent connects.

  • Regenerating the token no longer means re-registering. The agent has nothing stored to go stale, so it reconnects on its own.
  • Running this command requires Node.js. For agents that cannot start a command, Direct HTTP (with token) is still available and works the way it did before.

Editing a note you do not have open

Asking the assistant to add a paragraph to a note that is not currently open would sometimes work and sometimes fail on the same wording — and rephrasing it as "at the top" was often the only way through. The assistant now sees the identifiers it needs when it reads a note, and adding to the end of a note no longer needs one at all.

0.13.2

Fixes

Gallery thumbnails. A card that never came into view could stay a plain placeholder for the rest of the session. Reopening the tab did not help, and the picture came back only after restarting the app. A card now asks for its thumbnail again when the image fails to load, so it recovers on its own.

Approving an action after a pause. If you left an approval dialog open for more than about a minute and a half, the chat request failed with a timeout — even though the action you approved had already run, which meant resending could run it a second time. The time you spend deciding no longer counts toward the response. If a request does time out after a tool has run, the message now says the action may already have taken effect.

Update check. When a check fails, the reason is shown under the message, so a problem with the update feed and a problem with the connection are no longer indistinguishable.

0.13.1

monthlet can act as an MCP server

Agents outside the app — Claude Code, for example — can now work with the notes in your vault through monthlet itself, instead of editing the .html files behind its back. Every write goes through the app, so the note history, the search index, and the tab you have open stay in step with what an agent does.

  • Turn it on in Settings → Connectors → Publish to external agents. It is off by default. Copy the setup command shown there and run it in a terminal to register monthlet with Claude Code.
  • Reading: search and list notes, read a note as Markdown, read spreadsheet cells, and read the numbers behind a chart.
  • Writing is a separate switch (Allow writing, also off by default): create a note from Markdown, replace the body of a note, create a folder, create a spreadsheet. Deleting, moving, renaming, and editing cells in an existing spreadsheet are not offered.
  • Two guards on writes: a note that is open with unsaved changes is not written, and neither is a note that has changed since the agent read it. The previous version is kept in the note's change history either way.
  • Elements that Markdown cannot express — charts, embeds, calculation blocks — travel as placeholders with an id. Leave the line in place and the element survives; anything removed is reported back rather than dropped in silence.

Agents connect only while the app is running, only from the same machine (127.0.0.1), and only with the token shown on that screen. The vault they see is the one you have open. The full tool list, arguments, and guarantees are at monthlet.ai/docs/mcp.

Version history

An external write to a note you had open recorded the same pre-write version twice. It now records once.

0.12.6

Gallery thumbnails

Some cards in the gallery could keep showing a placeholder instead of their thumbnail, and stay that way until the app was restarted. This release fixes that.

  • The cause: thumbnails looked up a note's location through the search index. A request that arrived while the index was being rebuilt — right after launch, or when switching vaults — found nothing and was dropped, and the card never asked again.
  • The fix: thumbnail generation now waits for the index to settle, and falls back to the same lookup the gallery itself uses.
  • Also faster: a redundant step that could spend up to two seconds per thumbnail was removed. Thumbnails are fixed to the light appearance as before, which the stylesheet already handles on its own.

0.12.5

Menu items, "Check for updates", and gallery thumbnails work again

Three things in this release were quietly broken: clicking anything in the app menu did nothing, "Check for updates" appeared to do nothing, and gallery cards never got their thumbnails. They turned out to be one chain of causes, so they are fixed together.

  • App menu items respond again. Settings…, New note, Search, Save, Export and the rest did nothing when clicked from the menu bar. Keyboard shortcuts kept working, which is why this went unnoticed. Messages from the app to its window were being delivered to an invisible helper window instead of the one you see.
  • "Check for updates" shows its result immediately. The check itself was running, but the result never reached the settings panel — you only saw it after closing and reopening the panel. It now updates in place, whether an update is available or not.
  • Gallery thumbnails are generated again. Thumbnail rendering could stall forever on one note and take the whole queue with it, leaving no thumbnails at all and an invisible window running in the background. Rendering now gives up on a stuck note and moves to the next one.

Known limitation: thumbnails are supposed to always render in light mode. That fixing step is currently inactive, so on a system set to dark mode, thumbnails render dark. This will be addressed separately.

0.12.4

Connector actions now always ask before they run

This release fixes three things around custom MCP servers, all of them about the moment an action is about to run.

  • Auto-approving vault operations no longer covers connector actions. If you had turned on "Auto-approve vault operations from Chat", a custom MCP server could write outside your vault without asking. That setting is about operations inside your vault, so it no longer applies to connectors — an MCP action that writes, sends, or deletes now asks every time, the same way fetching an external URL always does.
  • A connector action no longer reads "Done" before it has run. The step in the chat said the action was finished while the confirmation dialog was still open, and it stayed that way even if you cancelled. It now stays "Running" until the action actually returns.
  • The ID field explains the rule it enforces. Custom MCP IDs accept lowercase letters, digits, - and _, starting with a letter or digit — the hint and the error message said "letters and digits", which left uppercase input rejected with no reason given.

0.12.3

Fixes to the approval dialog for connector actions

This release corrects the wording of the dialog that asks before a connector action runs. Both issues showed up with custom MCP servers, which are the first connectors to use the approval gate.

  • The heading no longer calls every action a vault operation. A custom MCP server can act outside your vault — writing to a folder you allowed, for example — so the dialog now asks about "this operation" instead.
  • The English interface no longer shows Japanese in the details. The heading was translated but the line describing what would run was not, so an English UI showed a mixed dialog.

Nothing about what gets approved has changed. Read-only actions still run without asking, and actions that cannot be undone still ask first.

0.12.2

New

  • Connect Google Sheets and ask the chat about a spreadsheet — open Settings → Connectors and connect a Google account. Give the chat a spreadsheet URL or ID and it can look at the sheet structure and read a range to answer questions about it. The connection is optional, off until you set it up, and read-only: monthlet never creates, edits or deletes anything in your Google account. Disconnecting revokes the authorisation and deletes the stored credentials from your device.
  • Import a Google Sheet as a spreadsheet document — open a spreadsheet document, then "⋯" → Import → Import from Google Sheets. Paste the URL and monthlet lists the tabs of that file so you can choose which ones to bring in. You can create a new document or insert the sheets into the one you have open. The values are copied to your disk once; the document does not stay in sync with Google afterwards.
  • Connect your own MCP servers — Settings → Connectors → Add custom MCP registers a server you run yourself (stdio command or HTTP URL), and its tools become available to the chat. Tools can be switched on and off individually, and remote servers that require signing in are supported. Actions that write, send or delete ask for confirmation before running.

Fixes

  • Importing a table larger than the displayed range now tells you — the grid shows up to 50,000 rows × 1,000 columns per sheet. Data beyond that was kept in the file but never drawn, with nothing on screen to say so. Opening such a document now shows the actual size of the data and the displayed range. The values were never lost: they are in the file and come back out when you export to Excel or CSV.

Note

The Google connection is currently under review by Google. Until that finishes, the consent screen shows a warning that the app has not been verified. Nothing about what monthlet reads changes when the review completes.

0.12.1

Fixes

  • The report window now opens as a dialog in the middle of the window — "Report what didn’t work" used to open inside the chat panel, so the fields were only a few lines tall and the note about what gets sent was cut off. What is sent has not changed; it is simply readable now. The same fix applies to the confirmation shown before sending a large request.
  • Cost estimates now appear for the default Gemini model — the estimate shown before sending a large request had no price registered for Gemini Flash (latest), so anyone using Gemini with the default model saw a token count without an approximate cost. Prices are approximate and are still omitted when a model's price is unknown.

0.12.0

Report a problem with an AI response

When a response in the chat was not what you expected, you can now send that exchange to the developer to help improve monthlet.

  • You decide what is sent — pressing "Report what didn’t work" under a response opens a preview of the exact content: your message, the AI response, the tool calls, the model name, and the app version. You can edit or remove anything before sending.
  • Nothing is sent automatically — a report leaves your device only when you press Send. The button itself can be hidden under Settings → AI.
  • Your vault path is masked — the folder path of your vault is replaced with <vault> before sending. After sending you get a report ID; contact [email protected] with that ID to have the report deleted. Reports are kept for at most 12 months.

The license agreement (§3, Data Storage and Privacy) was updated for this feature, so the app shows the agreement once more on next launch. Nothing else about data handling has changed: notes stay on your device, and nothing is sent unless you send it. Details: https://monthlet.ai/privacy

0.11.3

Skills now follow your vault

The list of custom skills (the / commands in chat) was only read when the app started. Two cases where this got in the way are fixed:

  • Skills arriving via cloud sync — if you keep your vault in a synced folder and use it on a second Mac, a skill created on one machine now appears on the other as soon as the window regains focus. Previously it did not show up until the app was restarted.
  • Switching vaults — the / list now switches to the new vault's skills immediately. Previously the previous vault's skills could remain in the list.

Skills live in your vault (.monthlet/skills/) as plain files, same as before — nothing about where your data lives has changed.

0.11.2

Fixes

  • When a note in a vault on cloud storage has not been downloaded yet and cannot be opened (for example while offline), the app now says the note is not downloaded yet, instead of suggesting the file may be corrupted.
  • When a save conflict is resolved with "Load changes", the edits discarded from the tab are now kept in the note's version history. Whichever option you choose, the discarded side can be restored later.

0.11.1

Fixes

  • Fixed an issue where opening a note in a vault on cloud storage (iCloud Drive, etc.) could start downloading the entire vault in the background. Backlink calculation no longer reads files that have not been downloaded yet; backlinks from those notes appear once the files are downloaded.

0.11.0

Vaults on cloud storage

Vaults kept on cloud storage (iCloud Drive and similar) now work properly on a machine where the files haven't been downloaded yet.

  • The sidebar no longer waits for downloads. Previously, opening such a vault silently downloaded every note before showing anything — the sidebar stayed empty with no error. Now folders and notes appear immediately.
  • Notes not yet downloaded are listed with a cloud icon, titled by their file name. Opening one downloads just that note, and it becomes a regular note.
  • Folders that can't be read (for example due to permissions) now say so in the sidebar instead of appearing empty.
  • Search keeps working from the start: the synced search index is reused instead of rebuilding it by downloading everything.

Faster sidebar for large vaults

The folder tree now appears in two steps: the structure shows up first, then note titles and pin/archive states fill in moments later. Reading notes was also parallelized. On a vault with 1,700+ notes, the first paint dropped from waiting on a full scan to roughly the time of a directory listing.

Fixes

  • The search index was being built twice on every launch, which could corrupt in-memory search state. It now builds once.

0.10.0

Note history

Notes and spreadsheets now keep their earlier states, and you can go back to any of them. Unlike undo, history survives a restart.

  • Open it from the note menu (the in the toolbar) → Version history…. Dates on the left, a preview of that version on the right.
  • What gets recorded: edits are coalesced into one entry every 5 minutes by default. On top of that, a version is always recorded before the AI rewrites the note, before a note changed outside the app is reloaded, and before you restore an earlier version — regardless of the interval. The list shows which kind each entry is.
  • Restoring keeps the current content in history too, so you can undo the restore.
  • Deleting: remove single entries with ×, or clear a note's history at once. Deleting a note deletes its history with it.
  • SettingsVault: turn history off, change the interval (1–60 min), and set the maximum entries per note (default 100, up to 1000). Oldest entries are dropped past the maximum.

History is stored inside your vault as compressed copies of the note itself. It never leaves your disk.

0.9.1

A maintenance release. Most of it is keeping BYOK working as the providers move underneath it.

  • Gemini works again. The models the app defaulted to were retired by Google, and Gemini 3 started requiring a signature field the app wasn't sending back — both produced hard errors on every request. Fixed, and Gemini 3 no longer loops over the same edit several times before settling.
  • OpenAI gpt-5.6 works. The newer models reject the parameters the app was sending; requests failed with a 400 instead of returning a note.
  • Help text no longer assumes macOS. Wording that named macOS-only concepts has been made OS-neutral, in all six languages.
  • Smaller download. Development-only files were being packaged into the distributed build; they are excluded now.

There is also a provider contract smoke test that runs all three providers before every release, so this class of breakage gets caught before it ships rather than by you.