一键导入
markdown-task-tracking
Track project tasks and epics in individual markdown files under docs/tasks/, with docs/PROJECT.md as the central index. Supports bootstrapping new projects and managing ongoing work.
菜单
Track project tasks and epics in individual markdown files under docs/tasks/, with docs/PROJECT.md as the central index. Supports bootstrapping new projects and managing ongoing work.
Generate a self-contained, human-friendly companion HTML report from a markdown AI-agent response (or any markdown document). The output is a single .html file with no external dependencies, an explicit light/dark mode toggle (with OS-preference default and persistence), and a layout chosen to fit the content type (explainer, comparison, decision doc, review feedback, status report, etc.).
Dispatch a code reviewer subagent to catch issues before they cascade. Use after completing features, fixing complex bugs, or before merging.
Create a new Linear ticket using the linear CLI
Configure a Hetzner Cloud Floating IP persistently on Ubuntu servers using Netplan. Ensures the floating IP survives reboots and is externally accessible.
Commit all changes, push to remote, and create a GitHub pull request with an auto-generated description if one doesn't already exist.
Initialize a fresh Hetzner Ubuntu server with a non-root user configured for Docker application deployment. Sets up secure SSH access, Docker permissions, and a dedicated data directory.
| name | markdown-task-tracking |
| description | Track project tasks and epics in individual markdown files under docs/tasks/, with docs/PROJECT.md as the central index. Supports bootstrapping new projects and managing ongoing work. |
| allowed-tools | ["Bash","Read","Write","Edit","Glob","Grep"] |
Track project tasks and epics using individual markdown files. Each task or epic
gets its own file under docs/tasks/, while docs/PROJECT.md serves as the central
index with a status table. This keeps tracking scalable — multiple workstreams
can be tracked simultaneously without a single file becoming unwieldy.
If docs/PROJECT.md does not exist yet, bootstrap it first (see Step 1).
Use this skill when you need to:
Each task or epic lives in its own file under docs/tasks/:
docs/tasks/{ID}-{TYPE}-{kebab-case-title}.md
{ID}: Zero-padded 3-digit number (e.g. 001, 002, 013){TYPE}: Either EPIC (multi-step, multi-session effort) or TASK (single deliverable){title}: Kebab-case descriptive titleExamples:
docs/tasks/001-EPIC-devnet-validator-deployment.mddocs/tasks/002-TASK-github-action-redeployment.mddocs/tasks/015-TASK-fix-login-redirect-bug.mdUse these status values consistently in both the index table and individual files:
The docs/PROJECT.md file contains a table with this structure:
| ID | Type | Title | Status | File |
|----|------|-------|--------|------|
| 001 | Epic | Example Epic | **🚧 In progress** | [001-EPIC-example-epic.md](tasks/001-EPIC-example-epic.md) |
| 002 | Task | Example Task | ⏳ Not started | [002-TASK-example-task.md](tasks/002-TASK-example-task.md) |
Bold the status when it is 🚧 In progress or ✅ Complete to make active/done items stand out.
Every status value in docs/PROJECT.md must include its emoji prefix. Never
write a plain-text-only status such as Not started, In progress, or
Complete in the index table.
docs/PROJECT.md does not exist)If the repository does not yet have a docs/PROJECT.md, create the directories
and index file:
mkdir -p docs/tasks
Create docs/PROJECT.md with this structure:
# <Project Name> — Project Tracking
This file is the main index for the project. It contains project context and a
table of all tracked epics and tasks. Read this file at the start of a session.
For detailed progress, notes, and history, see the individual epic/task files
linked in the table below.
## Context
| Key | Value |
|-----|-------|
| Repository | `<repo URL>` |
## Current Status
<brief summary of where things stand>
## Tasks & Epics
| ID | Type | Title | Status | File |
|----|------|-------|--------|------|
## How to Add a New Task or Epic
1. Find the next available ID by checking the table above.
2. Create a new file: `docs/tasks/{ID}-{EPIC|TASK}-{kebab-case-title}.md`
3. Use the epic/task file template.
4. Add a row to the **Tasks & Epics** table above.
Fill in the Context table with relevant project details (repository URL, environment, key config values, etc.).
cat docs/PROJECT.md
Read the index table to understand what epics/tasks exist and their current status. If you need detail on a specific item, read its individual file.
When a new task or epic is identified (by the user or discovered during work):
a) Determine the next ID:
# Look at the highest existing ID in the docs/tasks/ directory
ls docs/tasks/[0-9]*-{EPIC,TASK}-*.md 2>/dev/null | sort -t/ -k2 | tail -1
If the gh CLI is available, also check open GitHub pull requests before
assigning the ID:
# Check open PR titles and branch names for already-claimed task IDs
gh pr list --state open --json number,title,headRefName 2>/dev/null
Scan open PR titles and branch names for existing 3-digit task IDs, such as a
branch named 003-TASK-... or a PR title beginning with 003. Increment by 1,
zero-pad to 3 digits, and use the first ID that is not already present in
docs/tasks/ or claimed by an open PR.
b) Create the file at docs/tasks/{ID}-{TYPE}-{kebab-case-title}.md using the template:
# {ID} — {Title}
**Type:** Epic | Task
**Status:** ⏳ Not started
**Created:** YYYY-MM-DD
**Updated:** YYYY-MM-DD
## Goal
<1-2 sentence description of what this task/epic aims to accomplish>
## Progress
- [ ] Step 1
- [ ] Step 2
## Notes
<discoveries, known issues, context>
## Next Steps
<what remains to be done>
c) Add a row to the index table in docs/PROJECT.md:
| {ID} | {Type} | {Title} | ⏳ Not started | [{filename}](tasks/{filename}) |
When beginning work on an item:
docs/tasks/{ID}-{TYPE}-{title}.md**Status:** from ⏳ Not started to 🚧 In progress**Updated:** datedocs/PROJECT.md to **🚧 In progress**As you work, update the task/epic file:
- [ ] to - [x]**Updated:** dateWhen work is finished:
docs/tasks/{ID}-{TYPE}-{title}.md**Status:** to ✅ Complete**Updated:** datedocs/PROJECT.md to **✅ Complete**All changes to tracking files must be committed and pushed to the remote repository. Do not leave uncommitted tracking updates at the end of a session.
git add docs/PROJECT.md docs/tasks/{ID}-{TYPE}-*.md
git commit -m "docs: <describe tracking update>"
git push
docs/PROJECT.md index table.PROJECT.md — index status values must
include their emoji prefix (⏳, 🚧, ✅). Plain-text-only status is invalid.gh is available, inspect open
PR titles and branch names for claimed IDs before choosing a new task/epic
number.After using this skill, you should have:
docs/PROJECT.md index file with a table of all tracked itemsdocs/tasks/{ID}-{TYPE}-{title}.md files for each task/epicdocs/tasks/ directory existsRun the bootstrap step (Step 1) to create it.
Always check the existing files before assigning an ID. Use ls docs/tasks/[0-9]* to
see all existing IDs and pick the next one.
If the index table and individual file disagree on status, the individual file is the source of truth. Update the index to match.
If the index table grows very long, consider adding section headers to group related items (e.g. by epic or by area).