✅ TODO Items
Scimax VS Code provides a comprehensive task management system built into your documents. TODO items are headlines with a special keyword that indicates their status.
✅ Basic TODO Functionality
✅ Creating TODO Items
Add TODO after the headline stars to create a task:
,* TODO Write documentation
,** TODO Complete first draft
,** TODO Review and edit
✅ Cycling TODO States
Press C-c C-t on a headline to cycle through TODO states:
(no keyword) → TODO → DONE → (no keyword)
Or use the command scimax.org.cycleTodo.
With speed commands enabled, press t at the beginning of a headline.
✅ TODO Keywords
The default TODO keywords are:
| Keyword | Meaning |
|---|---|
| TODO | Task that needs to be done |
| DONE | Completed task |
Additional states available:
| Keyword | Meaning |
|---|---|
| NEXT | Next action to take |
| WAITING | Waiting for external input |
| HOLD | On hold / paused |
| CANCELLED | Task cancelled (won't be done) |
✅ Logging Completion
When you mark a task as DONE, a CLOSED timestamp is automatically added:
,* DONE Write introduction
CLOSED: [2026-01-13 Mon 15:30]
✅ Priorities
Priorities help you identify the most important tasks.
✅ Setting Priorities
Add a priority cookie after the TODO keyword:
,* TODO [#A] Urgent and important task
,* TODO [#B] Important but not urgent
,* TODO [#C] Nice to have
✅ Priority Levels
| Priority | Meaning |
|---|---|
| [#A] | High priority - do first |
| [#B] | Medium priority - do soon |
| [#C] | Low priority - do when possible |
✅ Priority Commands
| Key/Command | Action |
|---|---|
| Speed key 1 | Set priority A |
| Speed key 2 | Set priority B |
| Speed key 3 | Set priority C |
| Speed key 0 | Remove priority |
| Speed key , | Increase priority (C→B→A) |
You can also set priority through the command palette: scimax.org.setPriority
✅ Progress Indicators
Track progress through subtasks using statistics cookies and checkboxes.
Shopping List
-
Milk
-
Bread
-
Eggs
-
Butter
✅ Checkbox States
| Syntax | State |
|---|---|
| [ ] | Unchecked / not done |
| [X] | Checked / done |
| [-] | Partially complete (has mixed children) |
✅ Toggling Checkboxes
Press C-c C-c with cursor on a checkbox line to toggle it.
Or use scimax.org.toggleCheckbox.
✅ Nested Checkboxes
Checkboxes can be nested. Parent checkboxes show aggregate state:
,* Packing List [1/2]
- [-] Clothes [2/3]
- [X] Shirts
- [X] Pants
- [ ] Socks
- [X] Toiletries [3/3]
- [X] Toothbrush
- [X] Soap
- [X] Towel
✅ Inserting Checkboxes
| Command | Description |
|---|---|
| scimax.org.insertCheckbox | Insert checkbox at cursor |
Type - [ ] followed by space to manually create a checkbox item.
✅ Extended TODO Keywords
Beyond TODO and DONE, use these states for workflow management:
✅ NEXT
Indicates the very next action to take:
,* NEXT Call client about project requirements
Use NEXT for tasks you're actively working on or will work on immediately.
✅ WAITING
Task is blocked waiting for someone or something:
,* WAITING Review from manager
:PROPERTIES:
:WAITING_ON: John Smith
:END:
✅ HOLD
Task is paused but not cancelled:
,* HOLD Website redesign
Paused until Q2 budget approval.
✅ CANCELLED
Task won't be done (but kept for records):
,* CANCELLED Old feature request
No longer relevant after product pivot.
✅ Workflow Example
A typical task progression:
TODO → NEXT → WAITING → NEXT → DONE
↓
HOLD → NEXT → DONE
↓
CANCELLED
✅ Custom TODO Keywords
You can define your own TODO workflow states for each file using the #+TODO: keyword. This is useful for project-specific workflows like code review, content publishing, or approval processes.
✅ Defining Custom States
Add #+TODO: at the top of your org file (before any headings):
,#+TODO: DRAFT REVIEW | PUBLISHED REJECTED
The | separates active (incomplete) states from done (complete) states. When you cycle TODO states, they will follow this sequence:
(none) → DRAFT → REVIEW → PUBLISHED → (none)
✅ Multiple TODO Lines
You can define multiple workflow sequences:
,#+TODO: TODO IN-PROGRESS | DONE
,#+TODO: BUG INVESTIGATING FIXING | FIXED WONTFIX
All states from all #+TODO: lines are recognized.
✅ Without Pipe Separator
If you omit the |, the last state is treated as done:
,#+TODO: IDEA DRAFT REVIEW PUBLISHED
This makes PUBLISHED the done state.
✅ Syntax Variants
These keywords are all equivalent:
| Keyword | Usage |
|---|---|
| #+TODO: | Standard TODO keyword definition |
| #+SEQTODO: | Sequential workflow (same as TODO) |
| #+TYPTODO: | Type-based workflow |
✅ Example Workflows
✅ Code Review Workflow
,#+TODO: DRAFT REVIEW APPROVED | MERGED REJECTED
,* DRAFT Implement new feature
,* REVIEW Fix login bug
,* APPROVED Update documentation
✅ Content Publishing Workflow
,#+TODO: IDEA OUTLINE WRITING EDITING | PUBLISHED ARCHIVED
,* WRITING Blog post about org-mode
,* EDITING Tutorial on source blocks
✅ Project Management Workflow
,#+TODO: BACKLOG SPRINT IN-PROGRESS TESTING | DONE CANCELLED
,* IN-PROGRESS User authentication
,* TESTING Payment integration
✅ Logging State Changes
Scimax VS Code can log when and how TODO states change.
✅ LOGBOOK Drawer
State changes are recorded in the LOGBOOK drawer:
,* DONE Complete documentation
CLOSED: [2026-01-13 Mon 16:00]
:LOGBOOK:
- State "DONE" from "TODO" [2026-01-13 Mon 16:00]
- State "TODO" from "WAITING" [2026-01-12 Sun 10:00]
- State "WAITING" from "TODO" [2026-01-10 Fri 14:30]
:END:
✅ Timestamps on State Changes
When enabled, each state change adds:
A timestamp showing when the change occurred
The previous state
This creates a complete history of task progress.
✅ Progress Logging for Repeating Tasks
When a repeating task cycles back to TODO (e.g., a task with DEADLINE: <2026-01-30 Fri +1w>),
you can optionally log the completion event with a timestamp and note.
✅ Enabling Progress Logging
Progress logging is off by default. Enable it with:
✅ Global Setting
{
"scimax.org.logRepeat": "time" // or "note" for note prompts
}
✅ File-Level Override
Add a #+STARTUP keyword at the top of your org file:
,#+STARTUP: logrepeat ;; Enable with timestamp
,#+STARTUP: lognoterepeat ;; Enable with note prompt
,#+STARTUP: nologrepeat ;; Disable
✅ Heading-Level Override
Add a :LOGGING: property to individual headings:
,* TODO Weekly review
:PROPERTIES:
:LOGGING: logrepeat
:END:
DEADLINE: <2026-01-30 Fri +1w>
✅ Priority Order
Settings are resolved in this priority order (highest to lowest):
Heading
:LOGGING:propertyFile
#+STARTUP:keywordsGlobal
scimax.org.logRepeatsetting
✅ Log Output Example
When you mark a repeating task as done with logging enabled:
,* TODO Weekly review
DEADLINE: <2026-02-06 Fri +1w>
:PROPERTIES:
:LAST_REPEAT: [2026-01-23 Fri 07:31]
:END:
- State "DONE" from "TODO" [2026-01-23 Fri 07:31]
The log shows:
LAST_REPEATproperty with when the task was last completedState change entry showing the transition from TODO to DONE
✅ Logging to Drawer
By default, log entries appear in the body text. To log into a drawer:
{
"scimax.org.logIntoDrawer": true // Use :LOGBOOK: drawer
// or
"scimax.org.logIntoDrawer": "MYLOG" // Use custom drawer name
}
Or use file-level #+STARTUP: logdrawer to enable.
With drawer logging, the output becomes:
,* TODO Weekly review
DEADLINE: <2026-02-06 Fri +1w>
:PROPERTIES:
:LAST_REPEAT: [2026-01-23 Fri 07:31]
:END:
:LOGBOOK:
- State "DONE" from "TODO" [2026-01-23 Fri 07:31]
:END:
✅ Note Prompts
When logRepeat is set to "note", you'll be prompted to enter a note when
completing a repeating task. The note is included in the log entry:
- State "DONE" from "TODO" [2026-01-23 Fri 07:31] \\
Completed early because of deadline change.
If you cancel or leave the note empty, the entry is logged without a note.
✅ Configuration Summary
| Setting | Values | Description |
|---|---|---|
| scimax.org.logRepeat | "false""time""note" | Enable/disable repeat logging |
| scimax.org.logIntoDrawer | boolean or string | Where to log (body or drawer) |
| #+STARTUP: logrepeat | - | File-level: log with timestamp |
| #+STARTUP: lognoterepeat | - | File-level: log with note prompt |
| #+STARTUP: nologrepeat | - | File-level: disable logging |
| #+STARTUP: logdrawer | - | File-level: use LOGBOOK drawer |
| :LOGGING: logrepeat | - | Heading-level: log with timestamp |
| :LOGGING: lognoterepeat | - | Heading-level: log with note prompt |
| :LOGGING: nologrepeat | - | Heading-level: disable logging |
| :LOGGING: nil | - | Heading-level: disable logging |
✅ Scheduling and Deadlines
Assign dates to tasks for planning.
✅ SCHEDULED
When you plan to start or work on a task:
,* TODO Write report
SCHEDULED: <2026-01-15 Wed>
✅ DEADLINE
When a task must be completed by:
,* TODO Submit proposal
DEADLINE: <2026-01-20 Mon>
✅ Both Together
,* TODO Complete project
SCHEDULED: <2026-01-15 Wed> DEADLINE: <2026-01-25 Sat>
✅ Adding Dates
| Speed Key | Action |
|---|---|
| s | Add/edit SCHEDULED date |
| d | Add/edit DEADLINE date |
| . | Insert timestamp |
Or use commands:
scimax.org.schedule
scimax.org.deadline
See Timestamps for more on date formats.
✅ Time Tracking
Track time spent on tasks using clock entries.
✅ Clocking In/Out
| Speed Key | Action |
|---|---|
| I | Clock in (start timing) |
| O | Clock out (stop timing) |
✅ Clock Entries
Clock entries are stored in the LOGBOOK drawer:
,* TODO Working on documentation
:LOGBOOK:
CLOCK: [2026-01-13 Mon 09:00]--[2026-01-13 Mon 10:30] => 1:30
CLOCK: [2026-01-12 Sun 14:00]--[2026-01-12 Sun 16:00] => 2:00
:END:
✅ Total Time
The total clocked time appears in the properties or can be calculated for reports.
✅ Effort Estimates
Estimate how long tasks will take.
✅ Setting Effort
Add an EFFORT property:
,* TODO Review document
:PROPERTIES:
:EFFORT: 1:30
:END:
| Speed Key | Action |
|---|---|
| e | Set effort estimate |
✅ Effort Format
Use H:MM format:
0:30 - 30 minutes
1:00 - 1 hour
2:30 - 2 hours 30 minutes
✅ Agenda Integration
TODO items appear in agenda views for planning and review.
✅ Viewing All TODOs
Use scimax.agenda.todoList or scimax.db.showTodos to see all tasks.
✅ Deadline View
Use scimax.agenda.deadlines to see upcoming and overdue deadlines.
✅ Filtering Options
By priority (A, B, C)
By tag
By date range
By TODO state
See Agenda for complete agenda documentation.
✅ Best Practices
✅ Task Granularity
Make tasks actionable:
,* TODO "Write documentation" ; Too vague
,* TODO Write introduction section ; Better - specific and actionable
✅ Use NEXT for Clarity
Always have at least one NEXT task to know what to work on:
,* Project: New Feature
,** DONE Design architecture
,** NEXT Implement core module ; ← Clear next step
,** TODO Write tests
,** TODO Deploy to staging
✅ Regular Review
Periodically review tasks to:
Move stale TODO items to HOLD or CANCELLED
Update WAITING items
Identify next actions
✅ Quick Reference
✅ Keybindings
| Key | Action |
|---|---|
| C-c C-t | Cycle TODO state |
| C-c C-c | Toggle checkbox |
✅ Speed Commands (at heading start)
| Key | Action |
|---|---|
| t | Cycle TODO state |
| 123 | Set priority A/B/C |
| 0 | Clear priority |
| , | Increase priority |
| s | Schedule |
| d | Deadline |
| e | Set effort |
| ; | Set tags |
| I | Clock in |
| O | Clock out |
✅ Commands
| Command | Description |
|---|---|
| scimax.org.cycleTodo | Cycle TODO state |
| scimax.org.toggleCheckbox | Toggle checkbox |
| scimax.org.insertCheckbox | Insert checkbox |
| scimax.org.schedule | Add SCHEDULED timestamp |
| scimax.org.deadline | Add DEADLINE timestamp |
| scimax.db.showTodos | Show all TODO items |
| scimax.agenda.todoList | Open TODO agenda view |