jingmengzhiyue616 downloadsManage OKRs inside your vault with a streamlined dashboard and built-in check-ins.
A local-first Obsidian plugin for planning weighted OKRs, monitoring execution health, recording check-ins, and running structured period reviews in Markdown.
中文文档 · Release notes · Features · Quick start · Health model · Review workflows · Storage

Vault OKR Manager keeps the complete OKR operating cycle inside an Obsidian vault: define objectives, weight key results, record progress, identify execution risk, conduct recurring reviews, close a period, and selectively roll unfinished work forward.
All durable data is stored as readable Markdown and YAML. The plugin uses no external database, cloud service, telemetry, or account, so the vault remains portable and suitable for Obsidian Sync, file backups, and Git-based workflows.
Version 1.4.0 replaces equal-only KR aggregation with relative weights, introduces a schedule-aware health assessment that is intentionally separate from completion progress, and adds weekly review, mid-cycle review, and cycle retrospective workflows.
| Area | Capability |
|---|---|
| Planning | Weekly, monthly, quarterly, and yearly periods; one Markdown file per Objective |
| Measurement | Numeric, percentage, score, and Boolean KRs; positive relative KR weights |
| Progress | Automatic KR calculation and weighted Objective aggregation |
| Health | On track, at risk, and off track assessments based on schedule, confidence, blockers, hold state, and overdue state |
| Check-ins | Multiple dated progress records, notes, deltas, and active blocker tracking |
| Reviews | Repeatable weekly reviews, one mid-cycle review, and one retrospective per period |
| Evidence | Immutable progress and health snapshot captured when each review is created |
| Lifecycle | Close, reopen, archive, read-only enforcement, and selective rollover |
| Reuse | Markdown-backed period templates that retain KR weights |
| Interface | Dashboard, Objective detail tables, drag-and-drop KR ordering, overdue reminders, and due-date postponement |
| Language | English and Simplified Chinese interface |
| Privacy | Local-only Markdown storage with no network dependency or telemetry |
| Item | Requirement |
|---|---|
| Obsidian | 1.7.2 or later |
| Platform | Windows, macOS, Linux, iOS, Android |
| Plugin ID | vault-okr-manager |
| Desktop-only | No |
If the plugin is available in Obsidian's community directory:
Vault OKR Manager.main.js, manifest.json, and styles.css from the latest release..obsidian/plugins/vault-okr-manager/ inside the vault.YourVault/
└── .obsidian/
└── plugins/
└── vault-okr-manager/
├── main.js
├── manifest.json
└── styles.css
Open Settings → Vault OKR Manager.
| Setting | Default | Purpose |
|---|---|---|
| Objective directory | OKR |
Root folder for periods, objectives, templates, and reviews |
| Default period type | quarter |
Initial period type in the new Objective form |
| Auto-calculate progress | Enabled | Derive KR progress from current and target values |
| Open dashboard on startup | Disabled | Open the dashboard after the workspace is ready |
1 is the default.Weights are relative, so 2, 1, 1 means 50%, 25%, and 25%. They do not need to total 100.
Run Record progress or use a KR action. A check-in records the date, progress, current value when applicable, note, blocker, delta, and timestamp. The blocker entered on the latest check-in becomes the KR's active blocker signal; a later check-in with an empty blocker clears it.
Open the dashboard from the ribbon or run Open dashboard. Objective cards and KR rows show completion, weights, normalized weight shares, confidence, and health. Hover a health badge to see the active risk reasons.
Run Period reviews or choose Period reviews from the period menu. Create weekly reviews during execution, a mid-cycle review when priorities need formal adjustment, and a retrospective before closing. Closing without a retrospective remains possible, but requires explicit confirmation.
Progress and health answer different questions:
Cancelled KRs are excluded. For all other KRs:
Objective progress = Σ(KR progress × KR weight) / Σ(KR weight)
The result is rounded and clamped to 0–100. Existing files without weight are treated as weight 1, preserving the earlier equal-average behavior until weights are changed.
Expected progress advances linearly from created to due and is clamped to 0–100. An active KR begins at 100 and receives these deductions:
| Signal | Effect |
|---|---|
| Behind schedule | expected progress − actual progress when positive |
| Medium confidence | −5 |
| Low confidence | −15 |
| Active blocker from latest check-in | −20 |
| On hold | −25 and maximum score 79 |
| Overdue and incomplete | Maximum score 59 |
Completed KRs score 100. Cancelled KRs are not applicable. Scores map to:
| Score | Status |
|---|---|
| 80–100 | On track |
| 60–79 | At risk |
| 0–59 | Off track |
Objective health is the weighted aggregation of eligible KR health scores, with Objective-level on-hold and overdue caps applied afterward. Health is a transparent operating signal, not a forecast or a substitute for review judgment.
Repeatable by date. The form includes summary, wins, blockers, and next steps. Summary and next steps are required.
One per period. The form includes summary, achievements, risks, adjustments, and decisions. Summary and decisions are required.
One per period. The form includes summary, outcomes, what worked, what did not work, lessons learned, and follow-up actions. Summary, lessons, and follow-up actions are required.
When a review is created, the plugin captures an immutable snapshot containing every Objective and KR's status, progress, weight, normalized share, health score, expected progress, and risk reasons. Editing the review changes only its narrative sections. It never changes Objectives, KRs, check-ins, or the captured snapshot.
Closed and archived periods are read-only: reviews can be opened but not created, edited, or deleted. Reopening a closed period restores write access.
Open → Closed → Archived
↑ ↓ ↓
└── Reopen Unarchive → Closed
With the default root directory, the vault uses this structure:
OKR/
├── 2026-Q3/
│ ├── _period.md
│ ├── O1.md
│ └── Reviews/
│ ├── weekly-2026-08-07.md
│ ├── weekly-2026-08-14.md
│ ├── mid-cycle.md
│ └── retrospective.md
└── Templates/
└── Product-quarter.md
Each Objective file contains Objective metadata and its KR array in YAML frontmatter. KR entries include weight and has-blocker. Human-readable check-ins remain in a managed Markdown section in the same file.
Review files contain:
Do not remove managed markers unless you intend to repair the file manually. Ordinary text outside those markers remains yours.
| Command | Purpose |
|---|---|
| New objective | Create an Objective in a selected period |
| New key result | Add a weighted KR to an Objective |
| Record progress | Append a check-in and update current progress/blocker state |
| Open dashboard | Open or reveal the OKR dashboard |
| Period reviews | Browse, create, edit, open, or delete period reviews |
| Migrate legacy progress records | Move legacy frontmatter check-ins into readable Markdown sections for open periods |
Additional lifecycle, template, review, edit, delete, reorder, and postpone actions are available from the dashboard and Objective detail view.
1; active blocker state is derived from the latest check-in when the field is absent.1.weight or has-blocker when rewriting an Objective.No. They are relative positive values. The plugin normalizes them for display and calculation.
Progress reports completion only. Health also considers how far through the schedule the KR should be, confidence, the latest blocker, hold state, and overdue state.
Yes. Keep the managed markers intact. Text inside structured section markers can be read back into the editor, and custom text outside managed blocks is preserved.
No. Review creation captures evidence; review editing only changes narrative content.
Yes, after a dedicated warning and explicit confirmation. This makes exceptions possible without making silent omission the default.
npm install
npm run dev
npm test
npm run lint
npm run build
The production release bundle consists of main.js, manifest.json, and styles.css. Node.js 20 or later is required for development.
Vault OKR Manager does not send vault content to external services and does not include telemetry. Review your own Obsidian Sync, backup, or Git configuration separately because those tools may copy vault files.
Released under the MIT License.