andreconde212k downloadsDynamic Kanban board from frontmatter properties with calendar views, timers, and recurring tasks.
A dynamic Kanban board for Obsidian driven by frontmatter properties. Drag-and-drop updates files instantly. Includes calendar views, timers, recurring tasks, and a checklist editor.
status:, date:, label:, no-date)time_spent frontmatterF)CB-12) for every card, and a link that opens a card on the boardmain.js, manifest.json, and styles.css from the latest release<vault>/.obsidian/plugins/cockpit-board/Tasks)---
title: "My Task"
status: scheduled
due: 2026-04-15
time: "14:00"
completed:
project: "Project X"
labels: [Work, DEADLINE]
created: 2026-04-01
source: manual
---
# My Task
Task description here.
## Checklist: Steps
- [ ] Step one
- [ ] Step two
The board registers the obsidian://cockpit-board URL, so you can jump
straight to it without going through the command palette:
obsidian://cockpit-board?vault=MyVault&view=board
obsidian://cockpit-board?vault=MyVault&view=calendar
obsidian://cockpit-board?vault=MyVault&view=archive
Replace MyVault with your (URL-encoded) vault name. view is optional
and defaults to board. The link works on desktop too, and survives a
cold start (Obsidian opens first, then the board).
Android: open the URL once in Chrome, then ⋮ menu → Add to Home screen. Or use any shortcut-maker app with the URL above as the target.
iOS: create a Shortcut with Open URLs set to the link above, then Share → Add to Home Screen. Alternatively paste the link in Safari and use Share → Add to Home Screen.
obsidian://cockpit-board?vault=MyVault&quickadd=Buy%20milk&due=today&time=18:00
quickadd is the card title (required). Optional: due (today,
tomorrow, or YYYY-MM-DD), time (HH:MM), project, labels
(comma-separated), and open (board, calendar, archive, or none
— the default, which just shows a confirmation and leaves you where you
were). URL-encode the vault name and title: spaces as %20 (not +,
which can arrive as a literal plus), and &, #, ? as %26, %23,
%3F, or they cut the title short.
Test it first. Paste your link into a chat message or note to
yourself and tap it. If Android asks which app should open it, pick
Obsidian → Always. You should see ⚡ Added: … and the new card in
your tasks folder; once that works, turn it into a shortcut.
Phone recipes: on iOS, a Shortcut with Ask for Input → URL Encode →
Open URLs gives you dictation-to-task in seconds. On Android,
automation apps like MacroDroid or Tasker can prompt for text and open
the URL; URL-encode the typed text before inserting it, or titles with
& or # break. For recurring one-tap tasks, pin a static URL per task
straight to the home screen with a shortcut-maker app.
Right-click a card (on the board, in the calendar, or in the tab's "..." menu when the card is open) for:
id property, or its file name when it has noneWith several cards selected, the menu copies each card's ID or path, one per line. The same actions exist as commands, for the card that is open.
Short IDs. Turn on Settings > Card IDs > Assign card IDs and new cards
get id: CB-1, CB-2... (your prefix). Assign an ID to cards without one
numbers the existing ones, oldest first. Two devices creating cards while
offline can pick the same number; the plugin tells you, and the same command
renumbers the newer card.
Open a card by link:
obsidian://cockpit-board?vault=MyVault&card=CB-12
obsidian://cockpit-board?vault=MyVault&card=Tasks/fix-login.md
card is an ID, a file name, or a vault path.
Obsidian cannot raise phone notifications itself, and its timers stop once
the app is in the background. With phone reminders on, Cockpit hands each
reminder (a card due with a time, at each lead time) to an
ntfy server as a scheduled message. The ntfy app shows it
as a normal notification at the right time, even when Obsidian is closed, and
tapping it opens the card on the board.
Network use. Off by default; while off the plugin makes no network calls, except to cancel reminders this device scheduled before it was turned off (retried until the server confirms). When on, it sends the card's title, project, time and board link to the server you configure, nothing else. Use a server you trust: your own, or the public ntfy.sh with a hard-to-guess topic and access control.
Setup:
cockpit.ntfy user add, ntfy access <user> <topic> write-only,
ntfy token add <user>).The token is stored in the plugin's data.json, which syncs with your vault
(and may end up in git or a backup), so it must not be an admin or read
token: write-only, one topic. It is only ever sent over https:// (or to
localhost); with a plain http:// server, reminders pause.
How it behaves:
Off by default. Turn it on in Settings > Agents > Enable agent launcher.
When on, the plugin starts programs on your computer and, over SSH, on
other machines — only when you click Start. It reads card files into the
agent's prompt, and reads ~/.ssh/config and herdr machine list to offer
machines. It stores no passwords or keys; SSH uses your own.
Right-click a card:
The card popup has a Start agent button too, and both are commands.
Agents. Profiles for Claude Code, Codex, Gemini or any command, with
arguments and a prompt template ({{context}}, {{id}}, {{title}},
{{path}}, {{cardFile}}, {{boardLink}}...). Presets never add
permission-bypass flags.
Sessions.
| Session | What happens |
|---|---|
| herdr | A new herdr workspace in the folder, the agent started and given the prompt. Works on remote machines saved in herdr too. Shows up in sheprd |
| New terminal | A terminal window opens with the agent running (the first terminal found, or the command you set) |
| tmux | A new window in the cockpit session; optionally a terminal attached to it. On Windows, local tmux runs in WSL |
Machines. No list to maintain: herdr's saved machines and the hosts in your SSH config show up by themselves; add others by alias. Each machine can optionally have its own folder, agent, session and shared folder.
Getting the card to a remote machine:
~/.cache/cockpit-board/cards/<id>.md on that machine<shared folder>/cockpit/ and the agent reads it from the machine's
side of the folderEach start is logged on the card in agent_runs. A card can set its own local
working folder with an agent_cwd property.
The card text is never put into a command line or a script: it is written to a file and read from there, or handed to herdr as a single argument.
| Property | Type | Description |
|---|---|---|
title |
string | Card title (falls back to filename) |
status |
string | scheduled, in-progress, pending, done, or custom |
due |
date | Due date (YYYY-MM-DD) |
due_end |
date | End date for multi-day tasks |
time |
string | Time (HH:MM) — shows in calendar time grid |
completed |
date | Date marked as done |
project |
string | Project name — shown as [Project] Title |
labels |
list | Labels for filtering and color-coding |
order |
number | Custom sort order within a column |
time_spent |
number | Timer minutes tracked |
source |
string | manual, recurring, etc. |
created |
date | Creation date |
id |
string | Card ID (optional; see Card IDs) |
agent_cwd |
string | Folder a local agent starts in (optional) |
agent_runs |
list | Log of agents started on this card (written by the plugin) |
Rules determine which column a card belongs to. Evaluated in order: status rules first, then date/label rules.
| Rule | Matches |
|---|---|
status:done |
Cards with status: done |
status:in-progress |
Cards with status: in-progress |
status:pending |
Cards with status: pending |
date:today |
Due today or overdue |
date:tomorrow |
Due tomorrow |
date:future |
Due after tomorrow |
no-date |
No due date set |
label:Personal |
Has the "Personal" label |
NOT label:Work |
Does not have "Work" label |
no-date AND label:Personal |
Combine with AND |
Create a JSON file (e.g., Scripts/recurring.json) and set its path in Settings:
{
"tasks": [
{
"title": "Weekly review",
"cron": "0 7 * * 5",
"labels": ["Work"],
"project": ""
}
]
}
Cron format: minute hour dayOfMonth month dayOfWeek (standard cron).
Special frequencies: biweekly-2nd-sat, monthly-1st-mon.
One-way editable import: new Outlook events become cards in your tasks folder with the label you choose. Imported cards are never overwritten, so your edits are safe. Cancelled Outlook events do not delete cards. Skipped automatically: STATUS:CANCELLED, subjects starting with Canceled:/Cancelled:, and blocks with no title. A cancelled instance also suppresses that day's occurrence of its series, so no ghost card is left behind. Events deleted in Outlook leave no trace in the file — set "When events disappear" per calendar to keep the card (default), mark it done, or delete it. Only dates inside the sync window are ever touched, and cards you already marked done are left alone.
https:// or webcal:// both work)..ics file into your vault instead.Client Acme), paste the ICS URL (or .ics path: vault-relative like Calendars/client.ics, or on desktop an absolute path like ~/Downloads/client.ics), Label (e.g. ClientAcme), and optionally Project (e.g. ClientAcme — shown as a [Project] prefix).Sync external calendars now from the command palette. New events import with due, time, due_end, labels: [ClientAcme], source: external-calendar.Notes: syncs on startup, hourly, and every N minutes (configurable, min 5). Only new occurrences import — recurring Outlook series expand inside your days-back/ahead window. Filter the board by the label to see just that client.
Timezone: UTC times convert automatically. Times stamped with a zone (Outlook usually stamps its own, e.g. Swiss time) convert to your device time automatically. If the calendar has naive times in another zone, set the source timezone (IANA name, e.g. Europe/Zurich) and they convert too. Leave it empty when the calendar is already in your time.
| Key | Action |
|---|---|
F |
Toggle focus mode |
T |
Move selected cards to today |
D |
Mark selected cards as done |
N |
New card |
Delete |
Delete selected cards |
Escape |
Clear selection |
Ctrl+Click |
Toggle card selection |
Shift+Click |
Range select cards |
recurring.json15,1). Each lead fires once per card per day