brain_dump_tasks
Convert natural language task lists into organized todos by parsing priorities, timeframes, and categories for ADHD-friendly productivity management.
Instructions
ADHD-friendly brain dump: paste a list of tasks and get them into the system.
Workflow:
Parse natural language task list
Optionally create all todos in batch
Return summary with suggestions
Supports multiple formats:
Bullet points: "- Task 1"
Numbered lists: "1. Task 2"
Checkboxes: "[ ] Task 3"
Section headers: "Sprint work:\n- Task 4"
Smart extraction:
Priority: "#high", "URGENT:", "!!"
Timeframe: "this week", "(this month)", "someday"
Time: "(30min)", "~2h"
Energy: "[high energy]", "[low effort]"
Theme: "#sprint", "@admin"
Example:
brain_dump_tasks('''
Sprint work (due 11/18):
- URGENT: Smoke test GPU endpoints (2h)
- Deploy to UTest environment
Strategic (this month):
- Draft platform pitch outline (30min) [low effort]
- Research Platform One examples
Quick wins:
- Check ADO board
- Reply to emails
''')Args: text: Natural language task list auto_create: Create todos immediately (default: True) default_priority: Default priority for unparsed tasks default_timeframe: Default timeframe for unparsed tasks
Returns: Summary of created tasks with suggestions
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| auto_create | No | ||
| default_priority | No | medium | |
| default_timeframe | No |
Implementation Reference
- src/coach_ai/server.py:219-346 (handler)The 'brain_dump_tasks' tool handles parsing natural language task lists and optionally batch adding them to the system.
async def brain_dump_tasks( text: str, auto_create: bool = True, default_priority: str = "medium", default_timeframe: Optional[str] = None, ) -> str: """ADHD-friendly brain dump: paste a list of tasks and get them into the system. Workflow: 1. Parse natural language task list 2. Optionally create all todos in batch 3. Return summary with suggestions Supports multiple formats: - Bullet points: "- Task 1" - Numbered lists: "1. Task 2" - Checkboxes: "[ ] Task 3" - Section headers: "Sprint work:\\n- Task 4" Smart extraction: - Priority: "#high", "URGENT:", "!!" - Timeframe: "this week", "(this month)", "someday" - Time: "(30min)", "~2h" - Energy: "[high energy]", "[low effort]" - Theme: "#sprint", "@admin" Example: ``` brain_dump_tasks(''' Sprint work (due 11/18): - URGENT: Smoke test GPU endpoints (2h) - Deploy to UTest environment Strategic (this month): - Draft platform pitch outline (30min) [low effort] - Research Platform One examples Quick wins: - Check ADO board - Reply to emails ''') ``` Args: text: Natural language task list auto_create: Create todos immediately (default: True) default_priority: Default priority for unparsed tasks default_timeframe: Default timeframe for unparsed tasks Returns: Summary of created tasks with suggestions """ db = await storage.get_db() # Parse the text parse_result = parse_natural_language_task_list( text, default_priority, default_timeframe ) parsed_todos = parse_result["parsed_todos"] if not auto_create: # Preview mode response = f"PREVIEW MODE - {parse_result['parse_summary']}\n\n" response += f"Would create {len(parsed_todos)} todos:\n" for todo in parsed_todos[:10]: # Show first 10 response += f" • {todo['title']}" if todo.get('priority') != 'medium': response += f" ({todo['priority']} priority)" if todo.get('timeframe'): response += f" [{todo['timeframe']}]" response += "\n" if len(parsed_todos) > 10: response += f" ... and {len(parsed_todos) - 10} more\n" response += "\nCall again with auto_create=True to create these todos." return response # Create todos in batch if parsed_todos: create_result = await add_todos_batch(parsed_todos, db, auto_categorize=True) created_todos = create_result["created_todos"] suggestions = create_result["suggestions"] else: return "No tasks parsed. Check formatting." # Build response response = f"✓ Created {len(created_todos)} tasks from brain dump\n\n" # Show created tasks by category by_priority = {"high": [], "medium": [], "low": []} quick_wins = [] for todo in created_todos: if todo.get('quick') or (todo.get('time_estimate', 999) <= 30): quick_wins.append(todo) by_priority[todo.get('priority', 'medium')].append(todo) if by_priority['high']: response += f"High priority: {len(by_priority['high'])} tasks\n" if quick_wins: response += f"Quick wins: {len(quick_wins)} tasks\n" # Show suggestions if suggestions: response += "\nAuto-categorization:\n" for suggestion in suggestions[:5]: # Limit to 5 response += f" • {suggestion}\n" # Identify tasks needing review needs_review = [] for todo in created_todos: if not todo.get('timeframe'): needs_review.append(f"#{todo['id']}: {todo['title']} - no timeframe assigned") elif todo.get('time_estimate', 0) > 120: needs_review.append( f"#{todo['id']}: {todo['title']} - large task ({todo['time_estimate']}min), consider breaking down" ) if needs_review: response += f"\n⚠️ {len(needs_review)} tasks need review:\n" for review in needs_review[:3]: # Show first 3 response += f" • {review}\n" response += f"\nRun 'start_my_day' to see which tasks are selected for today." return response