UniKit TODO — Task List Manager
Manage a lightweight TODO checklist stored in .unikit/TODO.md.
Language Awareness — BLOCKING PRE-REQUISITE
BEFORE producing ANY output, silently read .unikit/system/LANGUAGE_RULES.md
and apply its rules to ALL subsequent output.
If the file is missing or unreadable, fall back to English.
Do not produce any user-facing output until language rules are loaded.
Do not announce, confirm, or mention the language setting.
File Location
The TODO file is always .unikit/TODO.md.
Workflow
Step 0: Load Skill Context
Read .unikit/skill-context/unikit-todo/SKILL.md if it exists. Treat it as project-level overrides — when it conflicts with this SKILL.md, the skill-context wins.
Step 1: Determine Mode
Parse the arguments to determine the operating mode:
├── No arguments? → Mode: Interactive (ask what to add)
├── Exactly "complete" (no description) → Mode: Complete (Auto-Verify)
├── "complete <description>" → Mode: Complete (Manual)
├── Starts with "list" → Mode: List
├── Starts with "purge" → Mode: Purge
└── Otherwise → Mode: Add
Step 2: Resolve File Path
- The file path is always
.unikit/TODO.md
- Check if the file exists. If not, create it using the template from
{{skills_dir}}/{{self_name}}/assets/todo-template.md
Step 3: Execute Mode
Mode: Add
The user provided a task description. Your job is to refine it into a concise, actionable task entry while preserving all important details and meaning.
Refinement guidelines:
- Shorten verbose descriptions to 1-2 clear sentences
- Keep technical details, file paths, class names, and specifics intact
- Use imperative form ("Add...", "Fix...", "Refactor...", "Investigate...")
- Remove filler words and conversational tone
- If the description mentions multiple distinct tasks, split them into separate entries
Adding the task:
- Read the TODO file
- Duplicate check: Compare the refined description against all existing tasks (both
- [ ] and - [x]) by semantic similarity. If a task with the same meaning already exists, do NOT add it — instead show the user the existing task with its date and status:⚠️ Task already exists:
- [x] Fix item duplication in inventory on rapid sell button clicks `2026-03-10` (completed)
or:⚠️ Task already exists:
- [ ] Fix item duplication in inventory on rapid sell button clicks `2026-03-10` (pending)
Then stop — do not add a duplicate.
- Read the task entry template from
{{skills_dir}}/{{self_name}}/assets/task-entry-template.md
- Fill in the template:
{{date}} → current date in YYYY-MM-DD format
{{description}} → the refined task description (written in the language from .unikit/config.yaml, language.artifacts)
- Append the entry to the end of the TODO file (before any closing markers if present)
- Confirm to the user what was added
Example:
User input: "надо бы потом не забыть поправить тот баг с инвентарём, когда предметы дублируются при быстром нажатии на кнопку продажи"
Refined (if language is ru): Исправить дублирование предметов в инвентаре при быстром нажатии кнопки продажи
Refined (if language is en): Fix item duplication in inventory on rapid sell button clicks
Mode: Complete (Manual)
The user wants to mark tasks as done. The argument after complete is a description of what was completed.
- Read the TODO file
- Find all unchecked tasks (
- [ ]) that are relevant to the description — match by semantic similarity, not exact string match. A task about "fix inventory duplication" should match "completed the inventory bug fix"
- If exactly one match is found, mark it done: change
- [ ] to - [x]
- If multiple matches are found, show them to the user and ask which to complete (or offer to complete all)
- If no matches are found, tell the user no relevant tasks were found
- Confirm what was completed
Mode: Complete (Auto-Verify)
The user typed complete with no description. Instead of asking what to complete, proactively scan the codebase to check whether any open tasks have already been resolved.
Process each task one at a time — do not skip ahead or batch them.
Read the TODO file and collect all unchecked tasks (- [ ])
If there are no unchecked tasks, tell the user everything is already done
Take the first unchecked task and analyze it:
a. Extract code references from the task text — file names, class names, method names, line numbers, variable names, or any identifiable code artifacts
b. If the task has no recognizable code references (e.g., it's a pure process/design task like "discuss architecture with team"), skip it and move to the next task
c. Use Grep and Glob to locate the relevant code in the codebase
d. Read the relevant files and assess whether the issue described in the task has been resolved
Evaluation criteria — consider a task resolved if:
- The specific code issue mentioned no longer exists (e.g., hardcoded value was replaced, missing feature was added)
- The file/method mentioned was refactored and the problem described is no longer present
- The code now implements what the task asked for
If the task appears resolved:
- Show the task text to the user
- Briefly explain what you found in the code that indicates the task is done (include file path and relevant code snippet)
- Ask: should this task be marked as complete? Wait for the user's response
- If the user confirms → mark it done (
- [ ] → - [x]) and proceed to the next unchecked task
- If the user declines → leave it open and proceed to the next unchecked task
If the task appears NOT resolved:
- Show the task text to the user
- Briefly explain what you found (or didn't find) and why the task still seems open
- Ask: should this task be marked as complete anyway, or keep it open? Wait for the user's response
- Act on the user's decision, then proceed to the next task
If the relevant code cannot be found (file deleted, renamed, etc.):
- Show the task text and explain that the referenced code couldn't be located
- Ask the user what to do: mark complete, keep open, or remove the task entirely
Repeat steps 3–7 for each remaining unchecked task. Always wait for the user's response before moving to the next task.
After all tasks have been reviewed, show a summary of what changed (how many marked complete, how many kept open, how many skipped)
Mode: List
Show all tasks grouped by status:
- Read the TODO file
- Display unchecked tasks (
- [ ]) under a "Pending" header
- Display checked tasks (
- [x]) under a "Completed" header
- Show total counts
Mode: Purge
Remove all completed tasks (- [x]) from the TODO file to keep it clean.
- Read the TODO file
- Collect all completed tasks (
- [x])
- If no completed tasks exist, tell the user there's nothing to purge
- Show the list of completed tasks that will be removed and ask for confirmation
- On confirmation, read the entire file, filter out all
- [x] lines, collapse any resulting consecutive blank lines into a single blank line, and write the cleaned content back using Write
- Confirm how many tasks were purged
Mode: Interactive
No arguments were provided. Ask the user what task they'd like to add. Then proceed as Mode: Add.
Date Handling
Always use the current date. Get it from the system. Format: YYYY-MM-DD.
1---2name: unikit-todo3description: Manage project TODO list in .unikit/TODO.md. Add tasks, mark tasks complete, and view task status. Use when the user says "add todo", "todo", "task", "add task", "complete task", "mark done", "what's left to do", or wants to track work items, reminders, or notes for later. Also trigger when user says things like "remind me to...", "don't forget to...", "we need to...", "later we should...".4---5
6# UniKit TODO — Task List Manager
7
8Manage a lightweight TODO checklist stored in `.unikit/TODO.md`.
9
10## Language Awareness — BLOCKING PRE-REQUISITE
11
12**BEFORE producing ANY output**, silently read `.unikit/system/LANGUAGE_RULES.md`
13and apply its rules to ALL subsequent output.
14If the file is missing or unreadable, fall back to English.
15Do not produce any user-facing output until language rules are loaded.
16Do not announce, confirm, or mention the language setting.
17
18## File Location
19
20The TODO file is always `.unikit/TODO.md`.
21
22## Workflow
23
24### Step 0: Load Skill Context
25
26Read `.unikit/skill-context/unikit-todo/SKILL.md` if it exists. Treat it as project-level overrides — when it conflicts with this SKILL.md, the skill-context wins.
27
28### Step 1: Determine Mode
29
30Parse the arguments to determine the operating mode:
31
32```
33├── No arguments? → Mode: Interactive (ask what to add)
34├── Exactly "complete" (no description) → Mode: Complete (Auto-Verify)
35├── "complete <description>" → Mode: Complete (Manual)
36├── Starts with "list" → Mode: List
37├── Starts with "purge" → Mode: Purge
38└── Otherwise → Mode: Add
39```
40
41### Step 2: Resolve File Path
42
431. The file path is always `.unikit/TODO.md`
442. Check if the file exists. If not, create it using the template from `{{skills_dir}}/{{self_name}}/assets/todo-template.md`
45
46### Step 3: Execute Mode
47
48#### Mode: Add
49
50The user provided a task description. Your job is to refine it into a concise, actionable task entry while preserving all important details and meaning.
51
52**Refinement guidelines:**
53- Shorten verbose descriptions to 1-2 clear sentences
54- Keep technical details, file paths, class names, and specifics intact
55- Use imperative form ("Add...", "Fix...", "Refactor...", "Investigate...")
56- Remove filler words and conversational tone
57- If the description mentions multiple distinct tasks, split them into separate entries
58
59**Adding the task:**
601. Read the TODO file
612. **Duplicate check:** Compare the refined description against all existing tasks (both `- [ ]` and `- [x]`) by semantic similarity. If a task with the same meaning already exists, do NOT add it — instead show the user the existing task with its date and status:
62 ```
63 ⚠️ Task already exists:
64 - [x] Fix item duplication in inventory on rapid sell button clicks `2026-03-10` (completed)
65 ```
66 or:
67 ```
68 ⚠️ Task already exists:
69 - [ ] Fix item duplication in inventory on rapid sell button clicks `2026-03-10` (pending)
70 ```
71 Then stop — do not add a duplicate.
723. Read the task entry template from `{{skills_dir}}/{{self_name}}/assets/task-entry-template.md`
734. Fill in the template:
74 - `{{date}}` → current date in `YYYY-MM-DD` format
75 - `{{description}}` → the refined task description (written in the language from `.unikit/config.yaml`, `language.artifacts`)
765. Append the entry to the end of the TODO file (before any closing markers if present)
776. Confirm to the user what was added
78
79**Example:**
80
81User input: "надо бы потом не забыть поправить тот баг с инвентарём, когда предметы дублируются при быстром нажатии на кнопку продажи"
82
83Refined (if language is `ru`): `Исправить дублирование предметов в инвентаре при быстром нажатии кнопки продажи`
84
85Refined (if language is `en`): `Fix item duplication in inventory on rapid sell button clicks`
86
87#### Mode: Complete (Manual)
88
89The user wants to mark tasks as done. The argument after `complete` is a description of what was completed.
90
911. Read the TODO file
922. Find all unchecked tasks (`- [ ]`) that are relevant to the description — match by semantic similarity, not exact string match. A task about "fix inventory duplication" should match "completed the inventory bug fix"
933. If exactly one match is found, mark it done: change `- [ ]` to `- [x]`
944. If multiple matches are found, show them to the user and ask which to complete (or offer to complete all)
955. If no matches are found, tell the user no relevant tasks were found
966. Confirm what was completed
97
98#### Mode: Complete (Auto-Verify)
99
100The user typed `complete` with no description. Instead of asking what to complete, proactively scan the codebase to check whether any open tasks have already been resolved.
101
102**Process each task one at a time — do not skip ahead or batch them.**
103
1041. Read the TODO file and collect all unchecked tasks (`- [ ]`)
1052. If there are no unchecked tasks, tell the user everything is already done
1063. Take the **first** unchecked task and analyze it:
107 a. Extract code references from the task text — file names, class names, method names, line numbers, variable names, or any identifiable code artifacts
108 b. If the task has no recognizable code references (e.g., it's a pure process/design task like "discuss architecture with team"), skip it and move to the next task
109 c. Use `Grep` and `Glob` to locate the relevant code in the codebase
110 d. Read the relevant files and assess whether the issue described in the task has been resolved
111
1124. **Evaluation criteria** — consider a task resolved if:
113 - The specific code issue mentioned no longer exists (e.g., hardcoded value was replaced, missing feature was added)
114 - The file/method mentioned was refactored and the problem described is no longer present
115 - The code now implements what the task asked for
116
1175. **If the task appears resolved:**
118 - Show the task text to the user
119 - Briefly explain what you found in the code that indicates the task is done (include file path and relevant code snippet)
120 - Ask: should this task be marked as complete? Wait for the user's response
121 - If the user confirms → mark it done (`- [ ]` → `- [x]`) and proceed to the next unchecked task
122 - If the user declines → leave it open and proceed to the next unchecked task
123
1246. **If the task appears NOT resolved:**
125 - Show the task text to the user
126 - Briefly explain what you found (or didn't find) and why the task still seems open
127 - Ask: should this task be marked as complete anyway, or keep it open? Wait for the user's response
128 - Act on the user's decision, then proceed to the next task
129
1307. **If the relevant code cannot be found** (file deleted, renamed, etc.):
131 - Show the task text and explain that the referenced code couldn't be located
132 - Ask the user what to do: mark complete, keep open, or remove the task entirely
133
1348. Repeat steps 3–7 for each remaining unchecked task. **Always wait for the user's response before moving to the next task.**
135
1369. After all tasks have been reviewed, show a summary of what changed (how many marked complete, how many kept open, how many skipped)
137
138#### Mode: List
139
140Show all tasks grouped by status:
141
1421. Read the TODO file
1432. Display unchecked tasks (`- [ ]`) under a "Pending" header
1443. Display checked tasks (`- [x]`) under a "Completed" header
1454. Show total counts
146
147#### Mode: Purge
148
149Remove all completed tasks (`- [x]`) from the TODO file to keep it clean.
150
1511. Read the TODO file
1522. Collect all completed tasks (`- [x]`)
1533. If no completed tasks exist, tell the user there's nothing to purge
1544. Show the list of completed tasks that will be removed and ask for confirmation
1555. On confirmation, read the entire file, filter out all `- [x]` lines, collapse any resulting consecutive blank lines into a single blank line, and write the cleaned content back using `Write`
1566. Confirm how many tasks were purged
157
158#### Mode: Interactive
159
160No arguments were provided. Ask the user what task they'd like to add. Then proceed as Mode: Add.
161
162## Date Handling
163
164Always use the current date. Get it from the system. Format: `YYYY-MM-DD`.