You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Migrations (0068–0069) run automatically when the container starts.
Docker Compose: download the new docker-compose.yml. It passes the settings that are new in
this release to the app: voice notes' STT_PROVIDER, STT_MODEL, STT_BASE_URL, STT_API_KEY, STT_MAX_SECONDS, STT_MAX_MB and STT_TIMEOUT_SECONDS, and CONNECTION_OAUTH_CLIENTS; without it they stay unset in the container, voice notes stay hidden
and owners enter their own app for services that need one.
Apps reach the AI chat's memory. MCP apps someone connected can now read the notes the chat
keeps about them and keep new ones. Turn it off per person with Use memory in the Memory
dialog, or per workspace under Settings → General → AI → AI memory.
Event runs may add rows. An agent that a connection's events run may now add rows to
databases shared with it to edit; each row waits for an owner's approval in the inbox.
Added
A catalog of ready-made connections. Settings → Connections now opens on Browse: 147
services in 16 categories, as cards with each service's logo, from Linear, Atlassian, GitLab,
Sentry and Stripe to Intercom, Zapier and meeting recorders, with search by name or category. Connect on a card fills in its MCP address, how it signs in and, for GitHub, how its events are signed; Add another
server still takes any remote MCP server. Every listed address was checked to sign in a way
Leafdesk handles: OAuth metadata naming that address, an API key, or no sign-in at all.
The workspace's own connections are under Connected, and those to a listed service show its
logo instead of a plug.
Connections to services that sign in only registered apps. Slack, HubSpot, Asana, Box,
Discord, Front, PagerDuty and Xero are in the connection catalog (Slack, Discord and
their category Messaging & chat are new to it). Their servers don't let Leafdesk register
itself, so the form asks for the client ID and secret of an app you create at the service, links
to where it's made and shows the redirect URL to give it; the secret is sealed like a token,
never shown again, kept when signing out, and must be entered again for a new address. Any
other OAuth server can take an app the same way, folded under Sign in as an app registered
with the service. An instance can register one app per service for everyone in CONNECTION_OAUTH_CLIENTS (slack=CLIENT_ID:CLIENT_SECRET,…). A server that takes neither
registrations nor an app now says so instead of failing to sign in. ElevenLabs is listed too: it
takes Leafdesk's client metadata document (/api/connections/oauth/client) as its client ID,
from an instance on a public https address.
Voice notes. Speak, and AI writes what you said up as a clean note: a title, short paragraphs,
lists kept, filler words gone, and the transcript in a Transcript toggle under it. In the quick
note (and the installed app's new Voice note shortcut, which starts recording), the note fills
the fields to check before saving, on a private page or, with the new Save to, as a row of a
database, whose select and multi-select properties AI fills in from their options. In a page, /Voice note puts the note where you are. An audio file works too, where the browser can't
record. Speech to text is set up apart from the chat model: STT_PROVIDER (openai or openai-compatible, e.g. a local Whisper server), STT_MODEL, STT_BASE_URL, STT_API_KEY,
with STT_MAX_SECONDS, STT_MAX_MB and STT_TIMEOUT_SECONDS as limits; without them voice
notes stay hidden. The audio is never stored.
Quick notes go into databases.Save to in the quick note adds the note as a row of a
database you may edit, instead of a private page.
Voice notes from apps.POST /api/v1/voice-notes takes a recording as multipart form data
(audio, with workspace_id or database_id), writes it up like the quick note does and saves
it as a private page or a database row, answering with the note's id, title, transcript and the
values AI picked. It needs a pages:write token, speech to text on the server and AI on in the
workspace (else 409 voice_notes_unavailable), and takes files up to STT_MAX_MB. The API's
reference shows bodies with files as form data.
Apps you connect share the AI chat's memory of you. Over MCP, list_memory reads the notes
the chat keeps about you in a workspace (or in all of them), add_memory keeps one, update_memory changes one and delete_memory deletes some or all, with the chat's limits (30
notes of 300 characters, the same note kept once). The tools tell an app to read the notes at the
start of a conversation, to keep only what you say about yourself, never what pages or tool
results say, and to tell you what it kept. Memory shows which app kept or last changed a note
(Kept by …). With your Use memory switch or the workspace's AI memory switch off, an app
sees no notes and keeps none, but can still delete them for you.
Agents run on a schedule. An agent's new Schedules tab (Settings → Agents) sets it to run
on its own, every day, week (on chosen weekdays), month or year at a time of day in a time zone,
with a task and, optionally, a database it looks after: for example every day at 08:00, go
through the board, mark what is overdue and say what needs me. A run on a database reads it first
and may change and comment on any of its rows (up to 30 changes, where a run on a row makes 5);
without one it only reads and uses its connections' tools. Each run is held to the access of the
owner who set the schedule last as well as the agent's, and ends with a report in that owner's
inbox (and as a push notification, without the report's text). The run's history names the
schedule, who set it and its task. A schedule whose last run still waits skips a run; a paused
agent, a database in the trash or one not shared with the agent skips runs; and a schedule pauses
when the agent is archived or whoever set it is no longer an owner or can't open the database,
until an owner sets it again. The tab warns when the agent can't open or change the database (it
isn't shared on its own). A run over a database with rows no one in the workspace stands behind,
such as anonymous form answers, asks an owner before each connection tool and proposes no notes.
Up to 10 schedules per agent. The REST API has GET/POST /agents/{agent_id}/schedules and PATCH/DELETE /agents/{agent_id}/schedules/{schedule_id},
MCP has add_agent_schedule, update_agent_schedule and delete_agent_schedule, and get_agent lists an agent's schedules. Migration 0069_agent_schedules adds schedule.agent_id
and the agent_report notification. Covered in scripts/agent-schedule-e2e.ts.
Wins log template. The template gallery has a Wins log: a page with a dashboard (wins in
all, wins by month stacked by type, by area and by impact) above a database of wins with their
type, area, date, impact, source link and people, a board by type, a row template and a few
example rows. Built-in database templates can now bring views of any kind and a dashboard.
Wins logger agent. A built-in agent that a connection's events run rather than an
automation: it reads each event (a Slack message, a GitHub pull request, a CRM deal or an email
sent through a signed webhook) and adds a row to the wins log when it is a win or praise, and
nothing otherwise. Its setup picks the log, the connection and the event type, lists which of the
log's properties it fills, and says so when the workspace has no connection yet.
Agents add rows from events. A run a connection's event started may now add rows
(create_row) to databases shared with the agent to edit, within the run's limit of changes and
starting no automations. Each row waits for an owner's approval in the inbox and the agent's
runs, trusted trigger or not, as a connected service's writing tools do.
Changed
A page's icon sits beside its title. Pages show their icon at the start of the title's line,
as databases already did, so the content starts higher; Add icon and Add background show over
the title's right end on hover (on touch screens as icons after the title). Published pages and
printouts follow.
Pages with a dashboard use the whole width. Adding a dashboard, in the editor or with the MCP add_dashboard tool, turns on the page's Full width, so its widgets get the room; the page menu
turns it off again.
Dashboard widgets move by dragging. Editors pick a widget up by its title bar and drop it
beside another (or above or below one as wide as the dashboard); a line shows where it lands. The
widget's menu still moves it one place at a time.