Repository navigation
Oleafly v0.4.9
What's new in 0.4.9
Added
- The interface speaks Vietnamese. Choose Tiếng Việt under
Settings > General > Language, or leave the language on System default and
Oleafly follows your computer. The collaboration server, the browser
project page, the sign-in pages it serves and the file manager's
Open with Oleafly action are translated as well. - Cloud sync works with Google Drive and S3-compatible storage as well as
Dropbox (#317). Choose one under Settings > Data storage > Cloud sync.
Google Drive keeps your projects in an Oleafly folder in My Drive. Files you
delete go to Google Drive's trash, and Oleafly checks Drive for changes from
your other computers once a minute. For S3 you enter the endpoint, the
bucket and your keys. Amazon S3, Google Cloud Storage with HMAC keys and
MinIO all work. Before it connects, Oleafly tries a few writes in the
bucket. A service that ignores conditional writes is turned down, because
without them two computers syncing at once could overwrite each other. When
two computers change the same file at the same moment, the one that syncs
second keeps both versions. - Storage usage has a bar of everything in the Oleafly data folder, split by
what takes the space. Below it, each part has its size: documents and code,
images, PDFs, Git history, build cache, the TeX distribution, tools Oleafly
downloaded such as Typst and Quarto, AI agents, research tasks, checkpoints
and the rest. - Cut, Copy, Paste and Select all in the editor's right-click menu (#319).
Formatting, inserting, and import and export each moved into a submenu, so
the menu is much shorter. In Markdown files, type/tableor/equation
to insert one, as LaTeX and Typst files already allowed. The Ask AI popup
also takes your own request next to the preset actions. - Oleafly's MCP server is in the MCP Registry as
io.github.Oleafly/oleafly.
Each release carriesoleafly.mcpb, which installs it in Claude Desktop
when you open it. It runs theoleaflycommand the app installs, so you
need the app with Settings > Integrations > Oleafly MCP turned on. - A CLI agent that is still starting has a Cancel button.
- Suggesting mode for shared projects. Switch the editor from Editing to
Suggesting and your edits become tracked changes: added text is
highlighted, and deleted text stays visible, struck through. Owners and
editors accept or reject each suggestion, or every suggestion in a file at
once, and whoever suggested a change can withdraw it. The Comments pane
lists suggestions next to the comments, and you can reply to one like a
comment.
AI edits and inserted citations made while suggesting become suggestions
too. A compile or export with suggestions waiting tells you how many. One
suggested deletion can be up to 20,000 characters. Delete more than that at
once and the text comes back, with a note that says why. - Reviewer and Commenter roles for shared projects. A reviewer comments and
suggests changes, and every edit they make is a suggestion. A commenter
reads and comments. Both can use the chat. You can give these roles to
people you add, to guests and to the project's link. The server checks
every change a reviewer or commenter sends, so an edit their role doesn't
allow never reaches anyone. - A chat for each shared project, in a Chat tab next to Comments. Everyone
but viewers can post, people can delete their own messages, and the owner can
clear the chat. - History for shared projects, in the collaboration pane. It lists changes by
time and person. Open any version to read it, compare two versions, restore
one file or the whole project, or give a version a name such as "Sent to
the reviewers". Owners and editors restore and name versions. Restoring the
whole project brings back every file's text and the files deleted since.
Renamed files keep their new names, figures and files added later stay as
they are, and suggestions made after that version are dropped. A restore is
a new change, so the text it replaces stays in the history. - Add server now offers the Oleafly server as a one-click choice above the
address field. Any other server's address still works as before. - Co-authors can open a shared project in their browser when the
collaboration server has browser access turned on. Without installing
Oleafly, they can edit as their role allows, comment, handle suggestions,
chat and read the latest PDF, and the project's web page gets an Open in
browser button. Whoever runs the server turns it on with
OLEAFLY_WEB=true, and the published server image already includes the
browser app. - After a successful compile of a shared project's main document, an owner's
or editor's app uploads the PDF and its SyncTeX file to the server, at most
once a minute, so people reading the project in a browser see the newest
PDF and who compiled it. The uploaded SyncTeX file names files only by
their place in the project. A build that read files you keep out of the
shared project isn't uploaded. - In the browser, click a word in the compiled PDF to open the source line
it came from, or press Show in PDF (Ctrl+Shift+J, or Cmd+Shift+J on a Mac)
to find the line you're on in the PDF. It works with the PDF and SyncTeX
file the app uploads, whichever computer compiled them. - Oleafly Server's
OLEAFLY_WEB_CONNECT_SRClists the other sites the
browser app may connect to, by defaulthttps://mirrors.oleafly.com. - Oleafly Server can let anyone sign up. With
OLEAFLY_OPEN_SIGNUP=true,
anyone who signs in with one of the server's sign-in options gets an
account, and each account gets 100 MB of storage, 50 shared projects and
300 uploads an hour.OLEAFLY_ACCOUNT_STORAGE_MB,
OLEAFLY_MAX_PROJECTS_PER_ACCOUNTandOLEAFLY_UPLOADS_PER_HOURchange
those limits, and also work without open sign-up. Compiled PDFs count
toward storage but not toward uploads. - Quarto and Calepin engines. Quarto turns
.qmdand.Rmddocuments into a
PDF, a web page or slides, and Calepin runs the code in a Typst document
and puts the results in the PDF. Oleafly uses the copy on your computer, or
downloads a pinned, checksum-verified one from Settings > Engines when you
ask. Code runs with your own R, Python or Julia, and only after you allow
code for that project in the Compile menu. Until then Quarto shows the code
without running it, and Calepin shows the results from its last run. New
templates: Quarto article, Quarto slides and Calepin report. Quarto's
working folders (.quartoand a document's_filesfolder) stay out of
cloud sync, shared projects and checkpoints. Calepin's.calepinfolder is
shared and synced like any other, so co-authors who haven't allowed code
still see its stored results. - When a Typst document has Chinese, Japanese or Korean text that no font on
this computer can show, Oleafly says so and offers to download the free
font pack that covers it. - Add custom provider in Settings > AI has presets for Qwen (DashScope),
Kimi (Moonshot), Zhipu GLM, SiliconFlow and Volcengine Ark. Pick one and it
fills in the name and base URL, so you only add your API key. - App icon, a section below Theme customization in Settings > Appearance,
offers eleven icons for the Dock or taskbar while Oleafly is open: classic,
pastel, blue, light, prism, iridescent, ocean, mint, aurora, sunset and
coral. Classic, the green quill, is still the default. The quill next to the
Oleafly name and the one on the startup screen take on the colours of the
icon you pick. - Template authors can give their own Typst functions a form. Describe the
arguments in[tool.oleafly]in a package'stypst.toml, or in
oleafly-forms.tomlat the project root, and Visual mode shows each call as
a card with labelled fields. Inside a paragraph, the call is a chip that
opens the same fields. Changing a field rewrites only that argument. A field
can hold text, Typst markup, a choice from a list, a number or an on/off
switch. Mistakes inoleafly-forms.toml, or in thetypst.tomlof a
package vendored into the project, show as markers when you open the file.
Changed
- Document settings reads Typst strings the way Typst does: an unknown escape
such as\q, or a\u{..}that names no character, stays as written. - CLI agents are no longer marked beta.
- Errors from CLI agents, such as a disconnect, a timeout, a missing Node.js
or a refused file request, now show in your interface language instead of
English, with the agent's own last output kept as it was. - DeepSeek thinks during assistant runs again. Oleafly now keeps each reply's
reasoning and sends it back, which DeepSeek requires once tools are in use,
and the effort menu offers Off, Low, High and Max for DeepSeek models.
Chats saved before this change keep thinking off for tool runs. - Cost estimates, budgets and research task spending limits count DeepSeek's
peak rates, which are double the off-peak rates on weekdays from 01:00 to
04:00 and 06:00 to 10:00 UTC. - Agents started from the Dock, Finder or Start menu get the proxy settings,
API keys and endpoints you set in your shell profile, such as
HTTPS_PROXY,ANTHROPIC_BASE_URLorDEEPSEEK_API_KEY. A value Oleafly
already has wins, keys are hidden in transcripts and errors, and traffic to
Oleafly's own tool servers skips the proxy. Research tasks get the proxy
settings but not the keys. - Installing an agent bridge uses the registry, proxy and certificate
settings from your.npmrc. An unreachable registry fails within about a
minute and the message names it, and large bridges get 15 minutes to
download. - Claude Code's bridge is now 0.95.0.
- "Let agents use my Oleafly API keys" can send Claude Code through a
DeepSeek or Z.ai key, using their Anthropic-compatible endpoints. Codex is
only offered your OpenAI key, the only kind it accepts. - Codex can use your own Codex CLI when it is at least as new as the one its
bridge bundles, and starts in the mode you last picked. - Oleafly loads less code when it starts. Settings, the tour guide, the
diagram composer and most dialogs load the first time you open them. PDF
page rendering loads when something first needs it, and KaTeX when you
first open a LaTeX or Markdown file. Once you've finished the tours, the
library screen loads about 2 MB less. Mermaid diagrams in chat use the
app's KaTeX instead of bundling an older copy. Cloud sync only loads its
background code on a computer connected to Dropbox, Google Drive or an S3
bucket, or once you open Settings. - GitLab, Codeberg, Gitea and Forgejo accounts show their real logos, GitLab's
and Codeberg's in their own colours: in the add-account choices, in
Settings, in the remote menu, in the publish dialog and beside each
repository. The publish dialog's account picker moved to
the bottom left, beside the button. - In Settings, each Git hosting account keeps its actions on the right and
signs out with an icon button. The server name shows only when it differs
from the badge. - Live collaboration is no longer an experiment and is always on. Settings >
Collaboration is there from the start, and the switch under Settings >
Experimentation is gone. - With Oleafly in Chinese, DeepSeek is the suggested AI provider. It comes
first in the provider list and is preselected until you set up a provider. - Desktop apps is now called Computer Use. Its tab in Settings > Integrations
has a cursor icon and comes after Oleafly MCP, and the app picker shows
each app's icon. - Computer Use doesn't ask before each action anymore. Agents still reach
only the apps and websites you list, and when you turn Computer Use on,
Oleafly first tells you that actions will run without asking. To approve
each click, keystroke, page change and script, turn on Ask before each
action in Settings > Integrations > Computer Use. If Computer Use was
already on when you updated, Ask before each action stays on until you turn
it off. - Choosing Full access in the chat's approval menu applies right away,
without a confirmation dialog.
Fixed
- Scrolling the new project gallery after downloading a template from a pack
no longer crashes the app (#359). If a dialog or panel does run into an
error, only that part closes now and the details go to the log. Before, the
whole window switched to the crash screen. - PubMed ID lookups and PubMed literature search keep working when PubMed's
summary service is down. Oleafly then gets the records from NCBI's
citation exporter. Before, Add citation andoleaflyc citesaid PubMed had
no record for a real paper, and search showed no PubMed results. - Computer Use works with Cua Driver 0.38, the version its installer gives
you now. Oleafly refused to start every 0.38 driver, saying it wasn't
running with Oleafly's limits, because 0.38 words that check's answer
differently. - Computer Use can find the windows of the apps you allowed again. Cua
Driver 0.38 refuses to list every app or window, so agents saw nothing and
were told the app wasn't allowed. Oleafly now finds the allowed apps that
run and asks for their windows one app at a time. - Computer Use only opens apps on your list. Cua Driver 0.38 opens any app
it's asked to, so Oleafly now checks the app first. - Clicks and typing in an allowed app work again. Cua Driver 0.38 refuses
them unless the call names the app's process, and agents usually name only
the window or element they saw, so you could approve an action and then
watch it fail. Oleafly now adds the process the driver reported for that
window. - Websites in Computer Use work with Cua Driver 0.38. The driver now acts
in a tab only after it binds the browser's window, and agents had no way
to do that, so every page change was refused. Oleafly now connects to the
browser it opened, fills in the tab on later calls and passes the page's
text to the agent. A site that isn't on your list is turned down before
you're asked. - An agent on a model that reads only text, such as GLM-5.3, no longer
fails when a tool returns a picture, for example a Computer Use
screenshot. The provider turned the whole request down. Now the picture is
left out and the model works from the text. - More code editors can't be added to Computer Use, because they run code
or commands without asking you: Sublime Text, BBEdit, Nova, Xcode,
Antigravity, Kiro, MacVim and Emacs. - Computer Use's setup is clearer. Settings asks for the macOS permissions
only once Cua Driver is installed and new enough, says when Cua Driver
hasn't checked them yet instead of "couldn't read", and shows the grant
command to copy when no project is open. After you run a step in the
terminal, Settings opens on Computer Use again, and the command in the
terminal's confirmation wraps instead of running off the edge. A Cua Driver
start that stops at its own permissions prompt says so. - The Oleafly icon no longer looks bigger than other apps' icons in the Dock
and Finder on macOS 15 and earlier. The bundled icon now leaves the margin
macOS expects around an app icon. - Deleting a file or folder in the file tree asks first again, and so do
restoring an earlier chat checkpoint and replacing an equation or diagram
file. The question never showed up in the app, so all of these went ahead
without asking. That included the permanent delete on a system with no
trash. - CLI agents and research tasks keep your NO_PROXY list when you set only one
spelling of it. On Linux and macOS the other spelling held only the local
addresses, and agents that read it sent internal hosts through your proxy. - In Typst document settings, clearing two values of one
#setrule, or
clearing one and setting another, could leave a broken rule such as
#set par(without its closing parenthesis. Clearing a value on the line
after a//comment, or in a rule written with its commas first, could
break the rule too. - In a Typst table cell, one bracket without its pair turned every bracket in
the cell into plain text, and a cell that ended in\broke the table. A
$without its pair, as in a price like$5, a//or/*, or a lone
backtick broke the table too, and did the same to a figure caption. Now
only what has no pair is escaped. No borders also works when the table's
strokevalue comes after a comment. - In a Visual mode table cell, Ctrl+Z (Cmd+Z on macOS) undid the document
instead of your typing in the cell, and Ctrl+B or Ctrl+I added bold or
italic markup somewhere else in the text. - Vendor packages skipped a package whose name has capital letters or other
letters Typst allows, such as@local/AcmeReport:1.0.0. - Custom providers that need no API key, such as a local Lemonade, LM Studio
or llama.cpp server, stopped working after the first save. Oleafly lost the
"no key needed" setting when it saved, so every request failed with "No API
key is set". It now keeps the setting and repairs providers saved by
earlier versions. - With a key-less custom provider selected, the assistant showed "Connect a
provider", and picking one of its models in the chat hid the message box. - Adding a custom provider now fetches its model list first and tells you
what went wrong if that fails, for example that the server isn't running or
the key was refused. An address entered without /v1, like
http://localhost:13305, is saved ashttp://localhost:13305/v1when that
is where the models are. You can still add a provider that lists no models
and type the model names yourself. - The custom provider dialog turns down a base URL that has your key or a
?
in it, and tells you to put the key in the API key field (#344). - When a custom provider had no models, requests went to another provider you
had set up, which could be a cloud one, without any sign. Now the assistant
says the provider needs a model. - A model that took a while to load on its first request, or a server that
was briefly unreachable, got marked as unable to use tools until you
checked it again. Now only the model's actual answer decides that. Local
and custom servers get two minutes to answer the check, and models that
were blocked this way get checked again. - A model that failed the tool check is still used for requests that need no
tools. Before, Oleafly refused those too (#344). - When you changed a custom provider's address, the dialog said the saved key
would be sent to the new one, but Oleafly removed it. The dialog now says
the key stays behind: enter it again, or leave it blank for a server that
needs no key. - Custom providers now appear in the inline edit model picker. Research tasks
and the Tools converters work with custom providers that need no key, and
Image to LaTeX works offline with one running on your computer. - If a local server sends an error partway through a reply, Oleafly shows
that error instead of "The connection closed". - The single API key from early versions is no longer sent to a custom
provider. - A base URL pasted with /chat/completions or /models on the end is trimmed.
- Some local models, such as Bonsai-4B on Lemonade, write a tool call into
the reply as plain text, like{"name": "ping", "arguments": {}} </tool_call>.
Oleafly showed that text as the answer, and the tool check said the model
couldn't use tools. It now runs a call written this way when the call names
a tool Oleafly offered and has valid JSON arguments. Any other reply stays
text. A reply that starts like a tool call appears once it is finished
instead of word by word. - DeepSeek Harness couldn't open a conversation and said "The agent
disconnected." It prints a log line on its output while a session starts,
and Oleafly closed the connection at the first line that wasn't a protocol
message. Oleafly now skips such lines and shows them with the agent's other
output if something goes wrong. - DeepSeek Harness is found in its usual install folder on macOS and Windows
whendshisn't on your PATH, and a missing or rejected DeepSeek key now
shows its sign-in steps. - Pressing Enter or New conversation while an agent was starting launched a
second copy and left the first one running. Messages sent during a start
now wait for it. - Hermes with no model provider set up said only "Internal error". Oleafly
shows Hermes's own message and its setup steps. Picking a model no longer
removes Oleafly's research tools from Hermes, a conversation from another
Hermes profile says so when you reopen it, and Settings shows the installed
Hermes version even when GitHub is slow or unreachable. - Pi gave a blank reply when its model provider failed. Oleafly now shows
the provider's error, and any agent that ends a turn without replying says
so. Pi no longer shows two pickers with the same choices, and an older
pi-acpon your PATH isn't used. - Claude Code disconnected when it asked to write a file larger than about
half a megabyte. The permission card now opens without the preview. - Reopening a conversation that never got a message failed with Claude Code
and DeepSeek Harness. It now starts again. - After reconnecting, Codex went back to its default mode and model, and
Claude Code to its default effort. Oleafly now restores the model, mode
and effort the conversation had, and remembers the model you pick. - Codex asked you to sign in when the real problem was its
config.tomlor
a rejected key from another provider. Oleafly now shows Codex's own error
or names the provider and its key variable. Failed Codex turns no longer
look like normal replies. - Claude Code users with their own API endpoint were told to sign in to
Anthropic, and the account line read "Signed in with Not logged in". - A CLI agent that crashed while starting, for example on a network
timeout, asked you to sign in when its error output happened to contain a
word like "OAuth" or "unauthorized", as file paths in a stack trace often
do. Oleafly now shows the crash, and asks you to sign in only when the
agent itself says so. - Permission requests expired after two minutes. They now wait for you, and
a request for a file outside the project is refused with a note naming it. - A failed start left an empty conversation in History.
- Hermes couldn't reach Oleafly's research tools behind an HTTP proxy, and a
stalled tool server could hold up a start for minutes. - Agent errors on Windows set to a language without UTF-8 output came out
garbled, Node.js warnings could hide the real error, and a timed-out start
dropped the agent's last output. - Some agent errors, such as asking you to trust the folder, showed as raw
codes. - On DeepSeek, a reply cut short when DeepSeek ran out of capacity now
retries or shows an error, and long tool calls are no longer cut off at
about 8,000 tokens. DeepSeek Flash is treated as reading images. - When the assistant's request times out, the provider has a server error,
the request is turned down or the reply comes back empty, the error now
tells you what to try next. This works with every provider (#338). - When Tectonic crashed while looking for a font that isn't installed, the
build failed with nothing in the error list, and only the last line of the
log said the compiler had crashed. Tectonic 0.17 does this on some
documents instead of reporting the missing font. The error list now names
the font and the line Tectonic had reached, and suggests installing the
font or switching to XeLaTeX or LuaLaTeX. Other compiler crashes show an error
too, in the app and from theoleaflycommand. - The assistant saw only the start of a long command's output, without the
exit code, and missed the error at the end. It now gets the exit code and
the start and end of the output, and an error printed after a long log is
kept. - Open files in a library project reload when a terminal, an agent or
another app changes them, as files in an opened folder already did. If you
have unsaved edits, a bar above the editor lets you compare both versions,
keep yours, or reload. When a save stops because the file changed on disk,
you get the same bar instead of a separate message (#339). - Some PDFs showed pages with images or text missing, or with colours a
little off, because Oleafly didn't ship the extra files the PDF viewer
needs for them. It now includes the standard fonts for PDFs that don't
embed their own, decoders for the JPEG 2000 and JBIG2 images common in
scans, the character maps some Chinese, Japanese and Korean fonts rely on,
and the CMYK colour profile. The preview, presentation mode, PDF to
LaTeX and PDFs you attach in the assistant all use them. - On macOS and Windows, when
\inputspelled a file's name with other
capitals than the file has, such as\input{Chapters/Intro}for
chapters/intro.tex, Show in PDF and clicks in the PDF did nothing for
that file, and its compile errors weren't marked in the editor. Oleafly now
falls back to a match that ignores case when only one file fits. - A Typst equation preview that failed for a reason outside the equation,
such as a render that timed out during a long compile, kept showing that
error until you changed the equation. It now tries again the next time the
equation is drawn. - App font size in Settings > Appearance now also sizes the editor's search
bar buttons, the cards that open when you point at a label or command, and
the Visual mode table's toolbar and dialogs. Their text used to stay the
same size. - In the Linux AppImage, the programs a build starts, such as a TeX Live
installed on your system or Pandoc, still inherited the AppImage's
library paths, which Git and the terminal stopped doing in 0.4.8. They now
start without them. - If getting Pandoc ready for a Markdown build failed after you had already
switched to another project, that project's preview showed the Pandoc
error instead of its own build. - Disconnecting cloud sync during a long sync and then connecting another
account within a few minutes could let the old sync keep going. It could
bring back files you had deleted and add conflict copies, which the new
account then uploaded, and an error from it could mark the new account as
disconnected. Connecting now stops a running sync first, and a sync stops
when the account changes. - Clicking Apply again in a research task's details while its changes were
being applied started a second apply. It now applies once.
Security
- Updated zip, the library that reads and writes ZIP files, from 4.6.1 to
9.1.3. Oleafly unpacks ZIP files you import and ones it downloads, such as
TinyTeX, language servers, agent bridges and projects from an online LaTeX
service. The update fixes several GitHub security advisories in zip. One is
critical: zip could read an archive differently from other ZIP tools.
Another, rated high, is about where a symbolic link in an archive points.
The updater, tauri-plugin-updater, moved from 2.11.0 to 2.14.1 so it uses
the new zip as well. - Math in the assistant's replies now uses only KaTeX 0.18.7, the version the
rest of the app uses. A Markdown math package still brought in KaTeX
0.16.47, which has a security advisory (GHSA-238p-pmpm-9mq7). - Updated zstd, the compression library behind file history and the file
snapshots taken during agent turns, from 0.13.3 to 0.14.3. It fixes four
security advisories in how zstd handles memory (RUSTSEC-2026-0391,
RUSTSEC-2026-0398, RUSTSEC-2026-0403 and RUSTSEC-2026-0410). - Updated pulldown-cmark, the Markdown parser behind spelling and grammar in
oleafly lint, from 0.13.4 to 0.13.5 (#348). It fixes a security advisory
where a small Markdown file with crafted wiki links could use up all
memory (RUSTSEC-2026-0414). - Saving an MCP server that runs a program on this computer asks first, in a
system dialog that shows the command and names any environment variables
it sets. It asks again when you change the program, its arguments or its
environment. If you say no, the server isn't saved (#336). - Each Oleafly window can only use the app commands it needs, and web pages
shown inside Oleafly can use none. Exports, imports, checkpoint archives,
skills, templates and other files outside a project only work with a file
or folder you picked in a file dialog, or on Linux one you just dropped on
the window. Saved connector keys, such as an alphaXiv key, no longer reach
the app window (#336). - With code off, Quarto reads all of a document's settings before it builds:
every YAML block,_quarto.yml,_metadata.ymland any metadata files
they name. If anything there could run a program, such as a Lua filter, a
pre- or post-render script, an unusual PDF engine, an engine option like
-shell-escapeor a shortcode Quarto doesn't ship, Oleafly doesn't build
and asks you to allow code. Inline R anywhere in the document or the files
it includes counts as code too. Included files and metadata files must be
inside the project. - Oleafly Server checks comments and chat messages from reviewers and
commenters whatever app they use, not only in the browser. They can add
comments, replies and messages and change or delete their own, but they
can't delete other people's or clear the chat. - On a server that runs over https without a path prefix, the browser app's
session cookie is now__Host-oleafly_web, so a site on another subdomain
can't slip in a session of its own. If you already used the browser app on
such a server, you sign in again once. Behind a path prefix, a browser that
sends two different session cookies is treated as signed out. - A browser app session closes its open connection the moment it expires,
and the page asks you to sign in again.
Downloads: grab your platform's installer below (macOS Apple Silicon .dmg, Windows x86_64 .msi / -setup.exe, Linux x86_64 or ARM64 .AppImage / .deb / .rpm).