MCPcopy
hub / github.com/callumalpass/tasknotes

github.com/callumalpass/tasknotes @4.11.1 sqlite

repository ↗ · DeepWiki ↗ · release 4.11.1 ↗
7,627 symbols 24,749 edges 1,287 files 1,157 documented · 15%
README

TaskNotes for Obsidian

A task management plugin where each task is a separate Markdown note, and all views are powered by Obsidian Bases.

Overview

Each task is a Markdown note with YAML frontmatter. Every view is a Bases query.

Bases is Obsidian's core plugin for turning notes into databases—it reads properties from your notes and lets you filter, sort, and group them without writing code. TaskNotes stores tasks as notes with structured frontmatter, then uses Bases to query and display them. The Task List, Kanban, Calendar, and Agenda views are all .base files.

This keeps your data portable. Tasks are just Markdown files with YAML, so you can read them with any tool, transform them with scripts, or migrate them elsewhere. There's no plugin-specific database.

The frontmatter is extensible—add fields like energy-level or client and they're immediately available in Bases for filtering and grouping. The .base files are plain text too, so you can edit filters and sorting directly or duplicate them to create new views.

Screenshot of TaskNotes plugin

Full Documentation

Quick start

Create a task with TaskNotes: Create new task. The plugin parses natural language—type "Buy groceries tomorrow #errands" and it extracts the due date and context automatically.

Tasks are stored as Markdown files in your vault. Open them directly, edit the frontmatter, or use the plugin's views to manage them.

Open a view with commands like TaskNotes: Open tasks view or TaskNotes: Open kanban board. These open the corresponding .base files from TaskNotes/Views/.

How it works with Bases

TaskNotes registers as a Bases data source and provides custom view types: tasknotesTaskList, tasknotesKanban, tasknotesCalendar, and tasknotesMiniCalendar. The default Agenda file is a preconfigured tasknotesCalendar list view (listWeek). Your task notes become rows; frontmatter properties become columns.

The default .base files include formula properties for computed values:

formulas:
  daysUntilDue: if(due, ((number(date(due)) - number(today())) / 86400000).floor(), null)
  isOverdue: due && date(due) < today() && status != "done"
  urgencyScore: formula.priorityWeight + max(0, 10 - formula.daysUntilDue)
  efficiencyRatio: (timeTracked / timeEstimate * 100).round()

You can sort by urgencyScore, filter to show only isOverdue tasks, or add these as columns. Edit the .base files directly or use the Bases UI. See default base templates for the full list of included formulas.

Task structure

title: "Complete documentation"
status: "in-progress"
due: "2024-01-20"
priority: "high"
contexts: ["work"]
projects: ["[[Website Redesign]]"]
timeEstimate: 120
timeEntries:
  - startTime: "2024-01-15T10:30:00Z"
    endTime: "2024-01-15T11:15:00Z"

Recurring tasks use RRULE format with per-instance completion tracking:

title: "Weekly meeting"
recurrence: "FREQ=WEEKLY;BYDAY=MO"
complete_instances: ["2024-01-08"]

When an individual recurrence needs its own note, TaskNotes can materialize that occurrence as a normal task. Calendar views show the note-backed occurrence in place of the matching virtual recurrence instance:

title: "Weekly meeting"
recurrence_parent: "[[Tasks/Weekly meeting]]"
occurrence_date: "2024-01-15"
scheduled: "2024-01-15T09:30"
timeEstimate: 60

Occurrence notes inherit planning metadata from the recurring parent, such as scheduled time, due offset, tags, contexts, projects, reminders, details, and time estimate. They do not copy the parent's recurrence rule, completion history, or time entries.

All property names are configurable. If you already use deadline instead of due, remap it in settings.

Other features

Calendar sync with Google and Microsoft (OAuth) or any ICS feed. Time tracking with start/stop per task, Pomodoro timer, and session history. Recurring tasks with fixed or flexible schedules, per-instance completion tracking, and optional materialized occurrence notes. Dependencies between tasks. Natural language parsing for task creation. Custom statuses, priorities, and user-defined fields.

Integrations

TaskNotes has an optional HTTP API. There's a browser extension and a CLI. Webhooks can notify external services on task changes. See HTTP API docs and Webhooks docs.

Language support

UI: English, German, Spanish, French, Japanese, Russian, Chinese, Portuguese, Korean.

Natural language parsing: English, German, Spanish, French, Italian, Japanese, Dutch, Portuguese, Russian, Swedish, Ukrainian, Chinese.

Screenshots

View screenshots

Screenshots are generated from the Playwright documentation suite (npm run e2e:docs).

Calendar

Month

Week

Day

Year

Task views

Tasks

Kanban

Agenda

Mini Calendar

Features

Task Modal

Pomodoro

Stats

Settings

Credits

Calendar components by FullCalendar.io.

License

MIT—see LICENSE.

Extension points exported contracts — how you extend this code

ProjectSuggestion (Interface)
* Auto-suggestion provider for NLP textarea with @, #, and + triggers * @ = contexts, # = tags, + = wikilinks to vault [8 …
src/modals/taskCreationSuggest.ts
BatchContextMenuAdapter (Interface)
(no doc) [13 implementers]
src/utils/clickHandlers.ts
UserNoticeEmitter (Interface)
(no doc) [6 implementers]
src/core/userNotices.ts
TaskUpdateEmitter (Interface)
(no doc) [6 implementers]
src/services/task-service/TaskUpdateService.ts
HTTPRequestLike (Interface)
(no doc) [9 implementers]
src/api/httpTypes.ts
JournalProvider (Interface)
(no doc) [6 implementers]
tests/unit/issues/issue-1333-external-journal-plugins.test.ts
IWebhookNotifier (Interface)
(no doc) [3 implementers]
src/types.ts
EventIterator (Interface)
(no doc) [2 implementers]
src/types/ical.d.ts

Core symbols most depended-on inside this repo

runCommand
called by 1022
e2e/obsidian.ts
createTask
called by 596
src/api/runtime-api.ts
error
called by 509
src/utils/tasknotesLogger.ts
translate
called by 472
src/i18n/types.ts
has
called by 403
src/api/runtime-api.ts
formatDateForStorage
called by 398
src/utils/dateUtils.ts
parseInput
called by 395
src/modals/DateTimePickerModal.ts
contains
called by 333
src/utils/FilterUtils.ts

Shape

Method 3,302
Function 3,130
Interface 669
Class 525
Enum 1

Languages

TypeScript100%

Modules by API surface

src/api/runtime-api.ts186 symbols
tests/__mocks__/obsidian.ts184 symbols
src/api/TaskNotesAPI.ts151 symbols
src/bases/KanbanView.ts130 symbols
src/bases/TaskListView.ts112 symbols
src/services/TaskCalendarSyncService.ts111 symbols
src/modals/TaskModal.ts101 symbols
src/bases/CalendarView.ts98 symbols
src/main.ts94 symbols
tests/helpers/integration-helpers.ts82 symbols
src/utils/TaskManager.ts76 symbols
src/services/PomodoroService.ts70 symbols

Dependencies from manifests, versioned

@codemirror/autocomplete6.19.1 · 1×
@codemirror/state6.5.0 · 1×
@codemirror/view6.38.6 · 1×
@electron/asar3.4.1 · 1×
@eslint/js9.39.4 · 1×
@fullcalendar/core6.1.17 · 1×
@fullcalendar/daygrid6.1.17 · 1×
@fullcalendar/interaction6.1.17 · 1×
@fullcalendar/list6.1.17 · 1×
@fullcalendar/multimonth6.1.17 · 1×
@fullcalendar/timegrid6.1.17 · 1×
@modelcontextprotocol/sdk1.12.1 · 1×

For agents

$ claude mcp add tasknotes \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact