Skip to content

Leafdesk 0.5.3

Choose a tag to compare

@erhanerbas erhanerbas released this 15 Oct 22:32

Upgrading from 0.5.2

  • 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.