diff --git a/documentation/src/pages/recipes/data/recipes/smart-task-organizer.yaml b/documentation/src/pages/recipes/data/recipes/smart-task-organizer.yaml new file mode 100644 index 000000000000..eba4cde93102 --- /dev/null +++ b/documentation/src/pages/recipes/data/recipes/smart-task-organizer.yaml @@ -0,0 +1,235 @@ +version: 1.0.0 +title: Smart Task Organizer +author: + contact: research@aegntic.ai +description: Automatically organize and prioritize tasks from files, emails, and messages into an actionable todo list +instructions: | + You are an intelligent task organizer that helps users turn scattered information into organized, actionable task lists. Your job is to scan various sources (files, messages, notes) and extract, categorize, and prioritize tasks effectively. + + Focus on: + - Identifying concrete action items from text + - Categorizing tasks by urgency and importance + - Organizing tasks by project and context + - Providing clear next steps for each task +activities: + - Scan and parse text files for action items + - Extract tasks from emails and messages + - Categorize tasks by priority and project + - Generate organized todo lists with deadlines + - Create follow-up reminders +parameters: + - key: source_type + input_type: string + requirement: required + description: "Type of source to scan: files, emails, messages, notes, all" + - key: priority_level + input_type: string + requirement: optional + description: "Filter by priority: urgent, high, medium, low, all" + default: all + - key: project_filter + input_type: string + requirement: optional + description: "Filter tasks by specific project name" + default: "" +extensions: + - type: stdio + name: filesystem + cmd: npx + args: ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/directory"] + display_name: Filesystem + timeout: 300 + bundled: false +prompts: + # Phase 1: Discovery and Scanning + discovery_prompt: | + You are a Task Discovery Agent. Your job is to scan and identify potential tasks from various sources. + + {% if source_type == "files" or source_type == "all" %} + Scan the current directory and subdirectories for files that might contain tasks: + - Look for files with extensions: .txt, .md, .doc, .docx, .notes, .todo + - Check README files, meeting notes, and project files + - Search for task indicators: TODO, FIXME, ACTION ITEM, TASK, REMINDER, FOLLOW UP, NEED TO, SHOULD + + For each file found, extract: + - File path and name + - Raw task text + - Context surrounding the task + - Any deadline or priority mentions + {% endif %} + + {% if source_type == "emails" or source_type == "all" %} + Look for email files or export files (.eml, .msg, .txt) that might contain tasks: + - Search for action verbs: please, need to, should, must, review, complete, submit + - Look for deadline indicators: by, due, EOD, EOW, ASAP, urgent + - Extract sender/recipient context + {% endif %} + + {% if source_type == "messages" or source_type == "all" %} + Check for chat logs, message exports, or conversation files: + - Extract commitments and promises made + - Identify questions that need responses + - Find meeting follow-ups required + - Note conversation participants and context + {% endif %} + + {% if source_type == "notes" or source_type == "all" %} + Scan for note files and brain dumps: + - Convert random thoughts into actionable items + - Organize ideas into concrete tasks + - Identify dependencies between tasks + {% endif %} + + Return a structured list of raw task candidates with their source context. + + # Phase 2: Task Analysis and Prioritization + analysis_prompt: | + You are a Task Analysis Agent. Your job is to analyze raw task candidates and extract structured information. + + For each task candidate provided: + 1. Extract and standardize: + - Clear task description (what needs to be done) + - Priority level (urgent/high/medium/low) based on context + - Project or category affiliation + - Deadline (if mentioned, normalize to standard format) + - Dependencies (what needs to be done first) + - Estimated time to complete (if inferable) + - Source location and context + + 2. Apply prioritization rules: + - URGENT: Today deadlines, blocking others, explicit "urgent" markers + - HIGH: This week deadlines, important milestones, commitments to others + - MEDIUM: Important but flexible, personal goals, nice-to-have-soon + - LOW: Ideas, future considerations, optional improvements + + 3. Convert vague items to specific actions: + - "work on project" → "Review project requirements document and create task breakdown" + - "fix bugs" → "Identify and prioritize top 3 critical bugs in the backlog" + - "update documentation" → "Update API documentation for new endpoints added in v2.1" + + Return structured task objects with all extracted fields. + + # Phase 3: Organization and Structuring + organization_prompt: | + You are a Task Organization Agent. Your job is to organize analyzed tasks into a structured, actionable format. + + Organize the provided tasks into the following structure: + + ## 🚀 URGENT TASKS (Today) + [Tasks that must be completed today - include specific deadlines] + + ## 📅 HIGH PRIORITY (This Week) + [Important tasks with clear deadlines this week] + + ## 🎯 MEDIUM PRIORITY (This Sprint/Month) + [Important but less time-sensitive tasks] + + ## 📝 LOW PRIORITY (When Time Allows) + [Nice-to-have tasks and ideas] + + For each task, include: + - ✅ [Status] Task title (clear action verb + specific outcome) + - 📅 Deadline: [specific date or timeframe] + - 🎯 Project: [project/category] + - ⏱️ Estimate: [time estimate if available] + - 🔄 Dependencies: [what needs to be done first] + - 📍 Source: [where this task came from] + + Group related tasks together when possible and suggest logical workflows. + + # Phase 4: Summary and Action Planning + summary_prompt: | + You are an Action Planning Agent. Your job is to provide a comprehensive summary and immediate next steps. + + Based on the organized task list, provide: + + ## 📊 Task Summary + - Total tasks found: [number] + - Tasks by priority: Urgent: [X], High: [Y], Medium: [Z], Low: [W] + - Tasks by project: [breakdown] + - Estimated completion time: [total if available] + + ## 🎯 Immediate Next Steps (Top 3) + 1. [Most urgent task with clear first step] + 2. [Second priority task] + 3. [Third priority task] + + ## ⚠️ Potential Blockers + - [List any dependencies, resource constraints, or timing conflicts] + + ## 💡 Optimization Suggestions + - [Suggest ways to batch similar tasks, delegate, or streamline workflow] + + ## 🔄 Recommended Workflow + 1. [Suggested order of operations] + 2. [How to track progress] + 3. [When to review and update] + + Focus on actionable insights that help the user get started immediately. + +# Prompt Chain Definition +prompt_chain: + - step: discovery + prompt_ref: discovery_prompt + output_filter: "Extract raw task candidates with source context" + + - step: analysis + prompt_ref: analysis_prompt + input_from: discovery + output_filter: "Structured task objects with priority and metadata" + + - step: organization + prompt_ref: organization_prompt + input_from: analysis + output_filter: "Organized task list by priority categories" + + - step: summary + prompt_ref: summary_prompt + input_from: organization + output_filter: "Comprehensive summary and action plan" + +# Main execution prompt that ties it all together +prompt: | + You are an intelligent Smart Task Organizer using MCP filesystem capabilities. Execute the complete task organization workflow: + + {% if source_type == "files" or source_type == "all" %} + 📁 **File Scanning Phase:** + Use filesystem MCP to scan directories and read files containing potential tasks. + {% endif %} + + {% if source_type == "emails" or source_type == "all" %} + 📧 **Email Processing Phase:** + Locate and parse email files for task-related content. + {% endif %} + + {% if source_type == "messages" or source_type == "all" %} + 💬 **Message Analysis Phase:** + Process chat logs and conversation files for commitments and action items. + {% endif %} + + {% if source_type == "notes" or source_type == "all" %} + 📝 **Note Organization Phase:** + Extract and structure tasks from notes and brain dumps. + {% endif %} + + Execute the complete prompt chain: + 1. **Discovery**: Find all potential task sources + 2. **Analysis**: Extract and prioritize structured task data + 3. **Organization**: Create organized task lists by priority + 4. **Summary**: Generate actionable insights and next steps + + {% if priority_level != "all" %} + **Priority Filter**: Focus exclusively on {{ priority_level }} priority tasks + {% endif %} + + {% if project_filter %} + **Project Focus**: Specialize in tasks related to "{{ project_filter }}" + {% endif %} + + Use the filesystem MCP capabilities to: + - Read file contents efficiently + - Navigate directory structures + - Process multiple files in parallel when possible + - Maintain context across file operations + + Apply intelligent task extraction, prioritization, and organization to transform scattered information into actionable, prioritized task lists. \ No newline at end of file diff --git a/download_cli.sh b/download_cli.sh index 21319241aec0..30a142ef5bff 100755 --- a/download_cli.sh +++ b/download_cli.sh @@ -36,6 +36,20 @@ if ! command -v tar >/dev/null 2>&1 && ! command -v unzip >/dev/null 2>&1; then exit 1 fi +# Check for required extraction tools based on detected OS +if [ "${OS:-}" = "windows" ]; then + # Windows uses PowerShell's built-in Expand-Archive - check if PowerShell is available + if ! command -v powershell.exe >/dev/null 2>&1 && ! command -v pwsh >/dev/null 2>&1; then + echo "Warning: PowerShell is recommended to extract Windows packages but was not found." + echo "Falling back to unzip if available." + fi +else + if ! command -v tar >/dev/null 2>&1; then + echo "Error: 'tar' is required to extract packages for ${OS:-unknown}. Please install tar and try again." + exit 1 + fi +fi + # --- 2) Variables --- REPO="block/goose" @@ -58,12 +72,33 @@ else fi # --- 3) Detect OS/Architecture --- -OS=$(uname -s | tr '[:upper:]' '[:lower:]') +# Better OS detection for Windows environments +if [[ "${WINDIR:-}" ]] || [[ "${windir:-}" ]] || [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "cygwin" ]]; then + OS="windows" +elif [[ -f "/proc/version" ]] && grep -q "Microsoft\|WSL" /proc/version 2>/dev/null; then + # WSL detection + OS="windows" +elif [[ "$PWD" =~ ^/mnt/[a-zA-Z]/ ]]; then + # WSL mount point detection (like /mnt/c/) + OS="windows" +elif [[ "$OSTYPE" == "darwin"* ]]; then + OS="darwin" +elif command -v powershell.exe >/dev/null 2>&1 || command -v cmd.exe >/dev/null 2>&1; then + # Check if Windows executables are available (another Windows indicator) + OS="windows" +elif [[ "$PWD" =~ ^/[a-zA-Z]/ ]] && [[ -d "/c" || -d "/d" || -d "/e" ]]; then + # Check for Windows-style mount points (like in Git Bash) + OS="windows" +else + # Fallback to uname for other systems + OS=$(uname -s | tr '[:upper:]' '[:lower:]') +fi + ARCH=$(uname -m) # Handle Windows environments (MSYS2, Git Bash, Cygwin, WSL) case "$OS" in - linux|darwin) ;; + linux|darwin|windows) ;; mingw*|msys*|cygwin*) OS="windows" ;; @@ -87,6 +122,16 @@ case "$ARCH" in ;; esac +# Debug output (safely handle undefined variables) +echo "WINDIR: ${WINDIR:-}" +echo "OSTYPE: $OSTYPE" +echo "uname -s: $(uname -s)" +echo "uname -m: $(uname -m)" +echo "PWD: $PWD" + +# Output the detected OS +echo "Detected OS: $OS with ARCH $ARCH" + # Build the filename and URL for the stable release if [ "$OS" = "darwin" ]; then FILE="goose-$ARCH-apple-darwin.tar.bz2" @@ -237,12 +282,58 @@ else echo "Skipping 'goose configure', you may need to run this manually later" fi + + # --- 7) Check PATH and give instructions if needed --- if [[ ":$PATH:" != *":$GOOSE_BIN_DIR:"* ]]; then echo "" echo "Warning: goose installed, but $GOOSE_BIN_DIR is not in your PATH." - echo "Add it to your PATH by editing ~/.bashrc, ~/.zshrc, or similar:" - echo " export PATH=\"$GOOSE_BIN_DIR:\$PATH\"" - echo "Then reload your shell (e.g. 'source ~/.bashrc', 'source ~/.zshrc') to apply changes." + + if [ "$OS" = "windows" ]; then + echo "To add goose to your PATH in PowerShell:" + echo "" + echo "# Add to your PowerShell profile" + echo '$profilePath = $PROFILE' + echo 'if (!(Test-Path $profilePath)) { New-Item -Path $profilePath -ItemType File -Force }' + echo 'Add-Content -Path $profilePath -Value ''$env:PATH = "$env:USERPROFILE\.local\bin;$env:PATH"''' + echo "# Reload profile or restart PowerShell" + echo '. $PROFILE' + echo "" + echo "Alternatively, you can run:" + echo " goose configure" + echo "or rerun this install script after updating your PATH." + else + SHELL_NAME=$(basename "$SHELL") + + echo "" + echo "The \$GOOSE_BIN_DIR is not in your PATH." + echo "What would you like to do?" + echo "1) Add it for me" + echo "2) I'll add it myself, show instructions" + + read -p "Enter choice [1/2]: " choice + + case "$choice" in + 1) + RC_FILE="$HOME/.${SHELL_NAME}rc" + echo "Adding \$GOOSE_BIN_DIR to $RC_FILE..." + echo "export PATH=\"$GOOSE_BIN_DIR:\$PATH\"" >> "$RC_FILE" + echo "Done! Reload your shell or run 'source $RC_FILE' to apply changes." + ;; + 2) + echo "" + echo "Add it to your PATH by editing ~/.${SHELL_NAME}rc or similar:" + echo " export PATH=\"$GOOSE_BIN_DIR:\$PATH\"" + echo "Then reload your shell (e.g. 'source ~/.${SHELL_NAME}rc') to apply changes." + ;; + *) + echo "Invalid choice. Please add \$GOOSE_BIN_DIR to your PATH manually." + ;; + esac + fi + echo "" fi + + +