Skip to main content

Markdown-file task manager for solo devs building with Claude Code

Project description

vault-tasks

Markdown-file task manager for solo devs building with Claude Code.

Tasks are plain markdown files with YAML frontmatter. They live in your repo (or Obsidian vault), are version-controlled with git, and are readable by humans and LLMs alike. Zero runtime dependencies.

Install

npm install -g vault-tasks

Or use without installing:

npx vault-tasks <command>

Requires Node.js >= 20.

Python projects (pip / uv)

If your project's lockfile is Python-based and you'd rather pin vault-tasks alongside your other dev dependencies:

pip install vault-tasks
# or
uv add --dev vault-tasks

The pip wheel is small (~100 KB) and bundles the same compiled JS that ships on npm. It still requires node (>= 20) on PATH — the wheel does not vendor a Node.js runtime.

Quick start

# Initialize in your repo/vault root
vt init

# Create a task
vt new "Fix login redirect bug" --priority high --tags auth,bug

# See what's open
vt list

# Start working on it
vt start 1

# Mark it done (auto-archives by default)
vt done 1

vt init creates a .vault-tasks.toml config and a backlog/ directory. Tasks are markdown files with ULID prefixes (e.g., 01HYX3KQPD7NG8RRGSSFQ9XNHY-fix-login-redirect-bug.md). Sequential numeric IDs (0001-...) are also supported via config.

Commands

Command Description
vt new <title> Create a task. Options: --priority, --tags, --source, --commit
vt list List open tasks. Options: --status, --priority, --tag, --all
vt search <keyword> Search titles and body text. --all includes archived
vt show <id> Print full task file
vt start <id> Set status to in-progress
vt done <id> Set status to done (auto-archives)
vt edit <id> Update fields: --status, --priority, --tags
vt stale List open tasks older than 14 days. --days to customize
vt archive Move all completed tasks to the archive directory
vt tags List all tags and their counts
vt lint Audit the vault: broken wikilinks, orphan evergreens, stale refs, drift. --only, --scope, --json, --quiet, --no-suggestions
vt init Initialize config and backlog directory
vt install-skills Install Claude Code skills and rules. --install, --list, --update

Task lookup (<id>) accepts a ULID prefix (e.g., vt done 01HYX), a numeric ID for sequential vaults (e.g., vt done 1), or a substring match against the filename (e.g., vt done login).

Task format

Each task is a markdown file with YAML frontmatter:

---
title: "Fix login redirect bug"
status: open
priority: high
tags:
  - auth
  - bug
created: 2026-04-02
source: "[[2026-04-02 Session Log]]"
---

# Fix login redirect bug

After OAuth callback, users are redirected to `/` instead of the page they came from.
  • Status: open, in-progress, done, wont-do
  • Priority: high, medium, low
  • Tags: freeform, filterable via vt list --tag
  • Source: where the task was noticed (supports [[wikilinks]])

Extra frontmatter fields (e.g. due, assignee) are preserved through all operations.

Configuration

vt init creates .vault-tasks.toml at your vault root:

[paths]
backlog_dir = "backlog"           # where task files live
archive_dir = "archive"           # relative to backlog_dir
# journal_dir = "journal"         # build logs and session notes
# projects_dir = "projects"       # project folders with CONTEXT.md
# evergreen_dir = "evergreen"     # evergreen/zettelkasten notes

[task]
# statuses = ["open", "in-progress", "done", "wont-do"]
# priorities = ["high", "medium", "low"]
# default_priority = "medium"
# default_status = "open"
# archive_statuses = ["done", "wont-do"]
# auto_archive = true

[id]
# strategy = "ulid"               # "ulid" | "sequential" | "timestamp"
# pad_width = 4                   # zero-pad width (only used with sequential)

[slugify]
# max_length = 60

The config file is discovered by walking up from the current directory, so it works from any subdirectory.

Claude Code skills

vault-tasks ships with skill templates that teach Claude Code how to work with your task backlog:

vt install-skills --install

This installs into .claude/skills/ and .claude/rules/:

Skill What it does
/brief Pre-session briefing: open tasks, last session context, stale threads
/build-log End-of-session log: what was built, learned, decided. Extracts tasks
/weekly-review Consolidates journal entries, creates evergreen notes, triages backlog
/task Quick task creation/management from within a session
/lint Vault health check: broken wikilinks, orphans, stale refs, convention drift

Skills reference configurable vault paths (journal_dir, projects_dir, evergreen_dir) which are substituted from your .vault-tasks.toml at install time. Customize any skill by creating a SKILL.local.md next to the installed SKILL.md -- local files are never overwritten.

An Obsidian Bases dashboard (backlog.base) is also installed for visual task management.

Library API

vault-tasks also exports a programmatic API:

import { loadConfig, TaskStore } from "vault-tasks";

const config = loadConfig();
const store = new TaskStore(config);

// Create
const task = store.create({ title: "My task", priority: "high", tags: ["api"] });

// Query
const all = store.loadAll();
const results = store.search("login");
const stale = store.stale(14);
const tags = store.allTags();

// Update
store.update(task, { status: "done", priority: "low", tags: ["api", "shipped"] });
store.archiveCompleted();

Exports

  • TaskStore -- all CRUD operations
  • loadConfig / findConfigFile -- config discovery and parsing
  • parseFrontmatter / writeFrontmatter -- YAML frontmatter utilities
  • slugify -- title to kebab-case filename
  • lintVault -- run all lint checks; returns a LintReport
  • Lower-level lint primitives: buildIndex, resolveTarget, collectWikilinks, findBrokenLinks, findOrphanEvergreens, findStaleReferences, findEvergreenDrift, attachSuggestions
  • Types: Task, CreateTaskOpts, Config, LintReport, LintOptions, WikiLink, VaultFile, BrokenEntry, Suggestion

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

vault_tasks-0.4.0.tar.gz (75.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

vault_tasks-0.4.0-py3-none-any.whl (131.5 kB view details)

Uploaded Python 3

File details

Details for the file vault_tasks-0.4.0.tar.gz.

File metadata

  • Download URL: vault_tasks-0.4.0.tar.gz
  • Upload date:
  • Size: 75.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vault_tasks-0.4.0.tar.gz
Algorithm Hash digest
SHA256 b1e75e79e9181ce3270cba88368c094b87fbc184e767a7633ebe8086dca82f1f
MD5 94c5ebb7eb0fc66021edd564e59d43ce
BLAKE2b-256 9ba797d5709af6503afdd62ed979fd059f285bcb90167bb4f200a555978ffa4c

See more details on using hashes here.

Provenance

The following attestation bundles were made for vault_tasks-0.4.0.tar.gz:

Publisher: publish.yml on adcoh/vault-tasks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file vault_tasks-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: vault_tasks-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 131.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for vault_tasks-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4fd0c66ff1b7b87bb7c38bbe64412a8961b145e994112b8d69695aab99fb7606
MD5 daa1634933dfaa60e5ade2a8837365bb
BLAKE2b-256 344d9746643cfe52da52341324a16c159196f3b327a29c59d31940d73885bead

See more details on using hashes here.

Provenance

The following attestation bundles were made for vault_tasks-0.4.0-py3-none-any.whl:

Publisher: publish.yml on adcoh/vault-tasks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page