A Ruby-based Google Tasks client implementing Getting Things Done (GTD) methodology with comprehensive task management features, interactive mode, and automated workflows.
- Full GTD Implementation - Complete Getting Things Done workflow with grooming, review, and planning
- Daily Time-Blocking - Agenda feature schedules today's tasks in 30-minute focused work slots
- Interactive Mode - Context-aware shell for efficient task management
- Smart Scheduling - Quick date selection (today, tomorrow, next week)
- Task Classification - Priority and department-based organization
- Search & Filter - Find tasks across all content
- OAuth Authentication - Secure Google account integration
- Automatic Pagination - Handles thousands of tasks seamlessly
bundle install- Go to Google Cloud Console
- Create/select project and enable Google Tasks API
- Create OAuth client ID credentials (Desktop application)
- Add
http://localhost:9090/oauth2callbackas redirect URI - Download JSON file as
oauth_credentials.jsonin project root
# First-time login (opens browser)
./bin/tasker login
# All subsequent commands use stored tokens automatically
./bin/tasker listsThe grooming command is the centerpiece of the GTD implementation, automatically organizing your task backlog.
What it does:
- Finds tasks needing attention - All uncompleted tasks that are overdue or have no due date
- Review Phase - Forces classification of unreviewed tasks with priority/department
- Planning Phase - Schedules all tasks with quick date selection
./bin/tasker interactive
> use "My Tasks"
> grooming./bin/tasker grooming LIST_IDπ§Ή Starting GTD Grooming Workflow
List: βοΈ CEO Tasks
============================================================
π Gathering tasks for grooming...
Found 8 tasks needing grooming:
1. Prepare quarterly report (No due date)
2. Call client about project (Overdue)
3. Review team feedback (No due date)
...
π REVIEW PHASE: 3 tasks need review first
----------------------------------------
π Reviewing task 1 of 3:
Title: Prepare quarterly report
Notes: (empty)
Select Priority:
1. π₯ Hot - Urgent/critical tasks
2. π’ Must - Important/required tasks
3. π Nice - Nice to have/optional tasks
4. π΄ NotNow - Deferred/not current priority
Enter priority number (1-4): 2
Select Department:
1. π§© Product - Product development tasks
2. π Business - Business operations/strategy
3. π’ Marketing - Marketing and promotion
4. π Security - Security/compliance tasks
5. π©βπΌ Others - General/administrative tasks
6. None - Skip department classification
Enter department number (1-6): 2
β
Review completed for: Prepare quarterly report
π
PLANNING PHASE: Scheduling 8 tasks
----------------------------------------
π Planning task 1 of 8:
Title: Prepare quarterly report
Classification: π’Must πBusiness
Current due date: (none)
Select when to schedule this task:
1. Today
2. Tomorrow
3. Next Monday
4. Next Tuesday
5. Next Wednesday
6. Next Thursday
7. Next Friday
8. Remove current date
9. Skip this task
Enter your choice (1-9): 5
β
Scheduled for: Wednesday, August 27, 2025 at 09:00
π GTD Grooming completed!
All 8 tasks have been processed.
The agenda command transforms your daily task list into a focused work schedule using time-blocking methodology.
What it does:
- Finds today's tasks - All uncompleted tasks with due date = today
- Priority sorting - Orders by priority: π₯Hot β π’Must β π Nice β π΄NotNow β Unclassified
- 30-minute time slots - Creates focused work blocks starting from current time (rounded to next 30-min)
- Interactive scheduling - Confirm each time slot or skip tasks
- Daily agenda summary - Final schedule for focused execution
./bin/tasker interactive
> use "My Tasks"
> agenda./bin/tasker agenda LIST_IDπ
Starting Daily Agenda Time-Blocking
List: πΌ Work Tasks
============================================================
π Gathering today's tasks...
Found 4 tasks for today:
1. β Review quarterly report
2. π₯Hot Prepare client presentation
3. π’Must Schedule team meeting
4. π Nice Update project documentation
π Tasks ordered by priority:
1. π₯Hot Prepare client presentation
2. π’Must Schedule team meeting
3. β Review quarterly report
4. π Nice Update project documentation
β° Scheduling tasks in 30-minute time blocks starting from 14:30
------------------------------------------------------------
π Time Slot 1: 14:30-15:00
Task: π₯Hot Prepare client presentation
Classification: π₯Hot πBusiness
Schedule this task for 14:30-15:00? (y/n/s=skip): y
β
Scheduled: Prepare client presentation
Time: 14:30-15:00
π Time Slot 2: 15:00-15:30
Task: π’Must Schedule team meeting
Schedule this task for 15:00-15:30? (y/n/s=skip): y
β
Scheduled: Schedule team meeting
Time: 15:00-15:30
============================================================
π
TODAY'S AGENDA SUMMARY
============================================================
14:30-15:00 | π₯Hot Prepare client presentation
15:00-15:30 | π’Must Schedule team meeting
16:00-16:30 | β Review quarterly report
π― Ready for focused work! 3 tasks scheduled.
π‘ Tip: Use 30-minute focused work sessions with 5-minute breaks between tasks.
Launch interactive mode for the best task management experience:
./bin/tasker interactive| Command | Description | Example |
|---|---|---|
help |
Show available commands | help |
lists |
List all task lists | lists |
use <list_name/number> |
Switch to list context | use "My Tasks" or use 1 |
exit-list |
Exit current list context | exit-list |
exit / quit |
Exit interactive mode | exit |
Available when you've selected a list with use
| Command | Description | Example |
|---|---|---|
tasks [--completed] [--limit N] |
Show tasks in current list | tasks --limit 10 |
create <title> |
Create new task | create "Review documentation" |
complete <task_id/number> |
Mark task completed | complete 1 |
delete <task_id/number> |
Delete task | delete 2 |
show <task_id/number> |
Show full task details | show 1 |
edit <task_id/number> |
Edit task (title, notes, due date) | edit 3 |
search <text> |
Search uncompleted tasks | search "report" |
plan <task_id/number> |
Quick schedule task | plan 1 |
review <task_id/number> |
Classify task priority/department | review 2 |
agenda |
Time-blocking - schedule today's tasks in 30-min slots | agenda |
grooming |
GTD workflow - review & schedule tasks | grooming |
> lists
Available task lists:
1. π Personal Tasks
2. πΌ Work Projects
3. π Shopping List
> use 2
Switched to list context: πΌ Work Projects
[πΌ Work Projects] > tasks
Tasks in πΌ Work Projects: (12 total)
1. β Finish project proposal
2. β Schedule team meeting
3. β Update documentation
[πΌ Work Projects] > create "Prepare presentation slides"
Created task: Prepare presentation slides (ID: abc123)
[πΌ Work Projects] > plan 4
Planning task: Prepare presentation slides
Current due date: (none)
Select when to schedule this task:
1. Today
2. Tomorrow
3. Next Monday
...
Enter your choice (1-9): 7
Task scheduled for: Friday, August 29, 2025 at 09:00[πΌ Work Projects] > review 1
Reviewing task: Finish project proposal
Select Priority:
1. π₯ Hot - Urgent/critical tasks
2. π’ Must - Important/required tasks
...
Enter priority number (1-4): 1
Select Department:
1. π§© Product - Product development
2. π Business - Business operations
...
Enter department number (1-6): 1
Task classification updated:
Priority: π₯Hot
Department: π§©Product
Task updated successfully![πΌ Work Projects] > search "presentation"
Searching for tasks containing: "presentation"
List: πΌ Work Projects
Found 2 matching tasks:
1. Prepare presentation slides
ID: abc123
2. Review presentation feedback
ID: def456
[πΌ Work Projects] > edit 1
Editing task: Prepare presentation slides
Current values:
Title: Prepare presentation slides
Notes: (none)
Due: 2025-08-29 09:00
Status: needsAction
Title [Prepare presentation slides]: Prepare Q3 presentation slides
Notes [(none)]: Include budget analysis and team metrics
Due date (YYYY-MM-DD HH:MM or 'clear') [2025-08-29 09:00]:
Task updated successfully!All commands support --credentials path/to/file.json for custom OAuth files.
# Authentication
./bin/tasker login # First-time OAuth login
./bin/tasker logout # Clear stored tokens
# Task Lists
./bin/tasker lists # List all task lists
./bin/tasker lists --limit 5 # Show first 5 lists
./bin/tasker create-list "New List" # Create task list
./bin/tasker delete-list LIST_ID # Delete task list
# Tasks
./bin/tasker tasks LIST_ID # Show all tasks
./bin/tasker tasks LIST_ID --completed # Include completed
./bin/tasker tasks LIST_ID --limit 20 # Limit results
# Task Management
./bin/tasker create-task LIST_ID "Task title"
./bin/tasker create-task LIST_ID "Task title" --notes "Details" --due "2025-01-15"
./bin/tasker complete-task LIST_ID TASK_ID
./bin/tasker update-task LIST_ID TASK_ID --title "New title" --notes "Updated"
./bin/tasker delete-task LIST_ID TASK_ID
# GTD Workflow
./bin/tasker agenda LIST_ID # Time-block today's tasks in 30-minute slots
./bin/tasker grooming LIST_ID # Complete GTD grooming workflow
./bin/tasker interactive # Launch interactive moderequire_relative 'lib/google_tasks_client'
# Initialize
client = GoogleTasksClient.new
# or: client = GoogleTasksClient.new('custom_credentials.json')
# Task Lists
task_lists = client.list_task_lists
new_list = client.create_task_list('My List')
client.delete_task_list(list_id)
# Tasks
tasks = client.list_tasks(list_id)
tasks_with_completed = client.list_tasks(list_id, show_completed: true)
# Task Operations
task = client.create_task(list_id, 'Title', notes: 'Notes', due: '2025-01-15T10:00:00.000Z')
client.update_task(list_id, task_id, title: 'New Title', notes: 'Updated')
client.complete_task(list_id, task_id)
client.delete_task(list_id, task_id)
# Get specific task
task = client.get_task(list_id, task_id)- π₯ Hot - Urgent/critical tasks requiring immediate attention
- π’ Must - Important/required tasks that must be completed
- π Nice - Nice to have/optional tasks when time permits
- π΄ NotNow - Deferred tasks not currently prioritized
- π§© Product - Product development and feature work
- π Business - Business operations, strategy, and growth
- π’ Marketing - Marketing, promotion, and outreach
- π Security - Security, compliance, and risk management
- π©βπΌ Others - General administrative and miscellaneous tasks
When using plan or during grooming, choose from:
- Today - Schedule for today at 9:00 AM
- Tomorrow - Schedule for tomorrow at 9:00 AM
- Next Monday-Friday - Schedule for next occurrence at 9:00 AM
- Remove current date - Clear existing due date
- Skip - Leave unchanged (grooming only)
Smart weekday logic: If it's already the target weekday after 9 AM, schedules for the following week.
tasker/
βββ oauth_credentials.json # Google OAuth credentials (you provide)
βββ token.yaml # Stored access tokens (auto-created)
βββ CLAUDE.md # Development instructions
βββ lib/
β βββ google_tasks_client.rb # Google Tasks API wrapper
β βββ interactive_mode.rb # Interactive shell & GTD workflows
βββ bin/
βββ tasker # Main CLI executable
Enable detailed logging for troubleshooting:
DEBUG=1 ./bin/tasker interactive
DEBUG=1 ./bin/tasker grooming LIST_ID- google-apis-tasks_v1 - Google Tasks API client
- googleauth - Google OAuth 2.0 authentication
- thor - CLI framework for console commands
- launchy - Browser automation for OAuth flow
This application implements core Getting Things Done principles:
- Capture - Quickly create tasks with
createcommand - Clarify - Use
reviewto classify tasks with priority/department - Organize -
groomingworkflow systematically processes backlogs - Reflect -
searchand filteredtasksviews for regular review - Engage -
plancommand for quick scheduling and execution
The grooming workflow ensures no task falls through the cracks by forcing review of unclassified items and scheduling of all overdue/unscheduled tasks in a single session.
Happy Task Management! π