Skip to content

desk.md, personal work management in plain Markdown

License: GPL-3.0-or-later Built with Tauri React 19

desk.md is a personal workspace for projects, tasks, documents, and meetings. It combines a calm interface for daily work with a plain-Markdown source of truth that remains accessible to both people and agents.

I built it for my own freelance and personal work, and I use it every day.

Two jobs, one source of truth

A calm place to run your work

Workspaces, project overviews, task boards, documents, meetings, quick capture, and a weekly planner live in one coherent app. The work model is built in rather than assembled and maintained from plugins.

A source of truth agents can use

Work content is stored as Markdown with readable YAML frontmatter. Local agents can work with the folder directly; a self-hosted Desk server exposes the same information through an OAuth-protected MCP endpoint.

The desk.md Kanban task board

Built for one person running real work

Desk is especially useful for freelancers, consultants, developers, makers, and other independent people who manage several streams of work and care about owning their data.

  • Projects with orientation. Every workspace and project has a user-owned Markdown overview, plus its tasks, documents, meetings, and recent activity.
  • Tasks and planning. Kanban and list views, priorities, due dates, quick capture, status filters, and a weekly time-block planner.
  • Documents and meetings. A WYSIWYG Markdown editor, nested folders, meeting notes, and drag-and-drop conversion from Word, PDF, Excel, CSV, and HTML.
  • A focused daily UI. Workspace switching, persistent editor tabs, global search, keyboard shortcuts, and protection for unsaved work.
  • Files that remain files. Ordinary filesystem tools can open, back up, sync, search, and version the workspace. Hosted authentication uses SQLite; work content remains in Markdown.

Desk is intentionally a single-user product today. It is not a team PM system with assignments, permissions, or real-time collaboration.

Agents without an AI workspace takeover

Desk has no in-app chatbot. It organizes durable source material for external AI tools.

  • Local filesystem access. Desk can generate CLAUDE.md, AGENTS.md, GEMINI.md, and per-workspace WORKSPACE_INDEX.md files so local agents understand the structure and read the right overview first.
  • Hosted MCP access. A self-hosted server lets Claude, ChatGPT, Claude Code, and other MCP clients browse, search, and read the workspace over OAuth. MCP tools are read-only for now.
  • Optional Smart Index. An Anthropic or OpenAI API key enables a summarized catalog that helps agents find relevant files quickly.
  • Explicit boundaries. .aiignore excludes content from the Smart Index and Desk's agent read layer, while generated local guidance carries the same boundary. author: ai records provenance without creating a separate AI content system.

Local or self-hosted

Both modes use the same Markdown structure. The difference is where the files live and how they are reached.

Local desktop Self-hosted server
Use it from Native app on macOS, Windows, or Linux Hosted web app, or the native app connected to the server
Data location A folder on the local machine A bind-mounted folder on the server
Network and login Fully offline, no account Account-protected, available across devices
Multi-device access External sync if needed One shared server-side copy
Agent connection Filesystem plus generated agent files OAuth-protected, read-only MCP
Smart Index key Operating-system keychain Server environment variable

Moving between the two does not require a content migration. Hosting adds .desk/auth.sqlite for accounts and sessions; workspaces remain Markdown files.

Get started

Install the desktop app

Desktop builds are available from the latest release. Desk keeps itself up to date after installation.

Desk is developed and tested primarily on macOS. Windows and Linux builds are beta, and the desktop builds are not code-signed yet.

Unsigned build notes
  • macOS: Download Desk_*.dmg and drag Desk into Applications. If macOS says the app is damaged, run xattr -dr com.apple.quarantine /Applications/Desk.app once.
  • Windows: Download the .exe installer. In the SmartScreen warning, choose More info → Run anyway.
  • Linux: Use the .AppImage, .deb, or .rpm. Make an AppImage executable with chmod +x Desk_*.AppImage. AI keys require a desktop secret service such as GNOME Keyring or KWallet.

Self-host

One Docker container serves the web app, domain API, OAuth server, and MCP endpoint while keeping work content as Markdown on the server:

cd deploy
cp .env.example .env
# set BETTER_AUTH_SECRET
docker compose up -d

See the self-hosting guide for HTTPS, reverse-proxy, AI, and MCP setup.

More of the app

Project home with its overview and recent activity

Project home

Weekly planner

Weekly planner

Document tree and Markdown editor

Documents

Meeting notes

Meetings

Roadmap

Ideas being explored:

  • MCP write tools for explicitly requested notes and tasks
  • Local-model support for the Smart Index
  • Better mobile-web capture and review
  • Lightweight project timelines, milestones, and task dependencies

Run from source

Desk is an npm-workspaces monorepo: @desk/core contains the shared domain, @desk/app contains the React/Tauri client, and @desk/server provides the self-hosted web, API, OAuth, and MCP services.

npm install
npm run dev          # browser with mock data
npm run tauri:dev    # desktop app with the real filesystem

Use Node 22. See CONTRIBUTING.md for the complete setup and project guidelines.

Contributing

Bug reports, feature ideas, documentation improvements, and pull requests are welcome. See CONTRIBUTING.md.

License

GPL-3.0-or-later. Desk may be used, modified, and shared; distributed forks and derivatives must remain open source under the GPL.

Releases

Packages

Used by

Contributors

Languages