Taskset is a local-first task manager that stores project work as human-readable Markdown beside the code.
Tasks remain useful in editors, Git history, pull requests, scripts, and AI workflows without requiring a hosted project-management database.
Taskset is pre-alpha. The CLI supports repository initialization, validated task CRUD and lifecycle changes, repository diagnostics, queries, and file-impact analysis.
Documentation: taskset.false.foundation
- Work stays in the repository that it describes.
- Markdown remains readable without Taskset installed.
- Git supplies history, branches, review, and collaboration.
- Humans and AI agents inspect the same source of truth.
- CLI, editor, terminal, web, and automation interfaces can share one domain model.
Canonical project state lives under .taskset/. Generated views and caches are
disposable and rebuildable.
Install Taskset in the project that will own the work:
pnpm add --save-dev @taskset/cli
pnpm exec taskset initCreate and inspect work:
pnpm exec taskset task create --title "Add repository validation"
pnpm exec taskset task list
pnpm exec taskset task show <task-id>
pnpm exec taskset task status <task-id> doing
pnpm exec taskset doctorInitialization creates a root taskset.config.ts, the canonical
.taskset/tasks/ directory, and .taskset/.gitignore rules for disposable
cache, generated data, and non-authoritative safety snapshots.
import { defineConfig } from '@taskset/cli'
export default defineConfig({
schemaVersion: 1,
project: {
name: 'example',
},
tasks: {
defaults: {
status: 'todo',
priority: 'medium',
labels: ['example'],
},
priorities: ['low', 'medium', 'high', 'urgent'],
},
})Commands started in nested directories discover taskset.config.ts by walking
upward. Configuration controls validated behavior and defaults; it does not
relocate canonical .taskset/ data.
Each task combines YAML metadata with a Markdown body:
---
schemaVersion: 2
id: TS-01J00000000000000000000000
title: Add repository validation
status: todo
priority: high
owner: platform
assignees:
- maintainer
risk: medium
dueDate: 2026-06-30
createdAt: 2026-06-12
updatedAt: 2026-06-12 09:30 UTC
files:
- packages/core/src/index.ts
directories:
- packages/core
projects:
- taskset
---
## Context
Explain why the work exists.Task IDs are immutable TS- prefixed ULIDs. Taskset validates metadata,
normalizes serialization, and preserves the human-authored Markdown body.
Core owns deterministic graph, filtering, search, indexing, and file-impact semantics. The CLI exposes scriptable forms:
pnpm exec taskset task list --status doing --label core --json
pnpm exec taskset task list --file packages/core --impact --json
pnpm exec taskset task list --estimate-min 30 --estimate-max 120 --risk high
pnpm exec taskset doctor --json
pnpm exec taskset task update <task-id> --priority urgent
pnpm exec taskset task delete <task-id> --remove-dependencies --json
pnpm exec taskset generate
pnpm exec taskset snapshot create
pnpm exec taskset migrate --to 2doctor scans all task files without modifying them. Deletion is blocked when
other tasks depend on the target unless --remove-dependencies is selected to
repair those inbound relationships in the same failure-safe mutation.
Migration and snapshot restore are dry runs unless --apply is supplied.
Applying a schema migration first creates an immutable snapshot under
.taskset/snapshots/. Generated metadata indexes under .taskset/generated/
are disposable and refresh automatically after canonical mutations.
User documentation:
The website in apps/www renders the same docs/ files with Nextra.
Taskset is available under the MIT License.
Taskset is a FalseFoundation project, created by junkieshuffle.