diff --git a/.cursor/rules/dev_workflow.mdc b/.cursor/rules/dev_workflow.mdc index 29f1f4c8..757db073 100644 --- a/.cursor/rules/dev_workflow.mdc +++ b/.cursor/rules/dev_workflow.mdc @@ -104,7 +104,7 @@ Task Master offers two primary ways to interact: Taskmaster configuration is managed through two main mechanisms: -1. **`.taskmasterconfig` File (Primary):** +1. **`.taskmaster/config.json` File (Primary):** * Located in the project root directory. * Stores most configuration settings: AI model selections (main, research, fallback), parameters (max tokens, temperature), logging level, default subtasks/priority, project name, etc. * **Managed via `task-master models --setup` command.** Do not edit manually unless you know what you are doing. diff --git a/.cursor/rules/taskmaster.mdc b/.cursor/rules/taskmaster.mdc index edb4d58e..767f5f58 100644 --- a/.cursor/rules/taskmaster.mdc +++ b/.cursor/rules/taskmaster.mdc @@ -36,7 +36,7 @@ This document provides a detailed reference for interacting with Taskmaster, cov * `addAliases`: `Add shell aliases tm and taskmaster. Default is false.` (CLI: `--aliases`) * `yes`: `Skip prompts and use defaults/provided arguments. Default is false.` (CLI: `-y, --yes`) * **Usage:** Run this once at the beginning of a new project, typically via an integrated tool like Cursor. Operates on the current working directory of the MCP server. -* **Important:** Once complete, you *MUST* parse a prd in order to generate tasks. There will be no tasks files until then. The next step after initializing should be to create a PRD using the example PRD in scripts/example_prd.txt. +* **Important:** Once complete, you *MUST* parse a prd in order to generate tasks. There will be no tasks files until then. The next step after initializing should be to create a PRD using the example PRD in .taskmaster/templates/example_prd.txt. ### 2. Parse PRD (`parse_prd`) @@ -50,7 +50,7 @@ This document provides a detailed reference for interacting with Taskmaster, cov * `force`: `Use this to allow Taskmaster to overwrite an existing 'tasks.json' without asking for confirmation.` (CLI: `-f, --force`) * **Usage:** Useful for bootstrapping a project from an existing requirements document. * **Notes:** Task Master will strictly adhere to any specific requirements mentioned in the PRD, such as libraries, database schemas, frameworks, tech stacks, etc., while filling in any gaps where the PRD isn't fully specified. Tasks are designed to provide the most direct implementation path while avoiding over-engineering. -* **Important:** This MCP tool makes AI calls and can take up to a minute to complete. Please inform users to hang tight while the operation is in progress. If the user does not have a PRD, suggest discussing their idea and then use the example PRD in `scripts/example_prd.txt` as a template for creating the PRD based on their idea, for use with `parse-prd`. +* **Important:** This MCP tool makes AI calls and can take up to a minute to complete. Please inform users to hang tight while the operation is in progress. If the user does not have a PRD, suggest discussing their idea and then use the example PRD in `.taskmaster/templates/example_prd.txt` as a template for creating the PRD based on their idea, for use with `parse-prd`. --- @@ -77,10 +77,10 @@ This document provides a detailed reference for interacting with Taskmaster, cov * `--setup`: `Run interactive setup to configure models, including custom Ollama/OpenRouter IDs.` * **Usage (MCP):** Call without set flags to get current config. Use `setMain`, `setResearch`, or `setFallback` with a valid model ID to update the configuration. Use `listAvailableModels: true` to get a list of unassigned models. To set a custom model, provide the model ID and set `ollama: true` or `openrouter: true`. * **Usage (CLI):** Run without flags to view current configuration and available models. Use set flags to update specific roles. Use `--setup` for guided configuration, including custom models. To set a custom model via flags, use `--set-=` along with either `--ollama` or `--openrouter`. -* **Notes:** Configuration is stored in `.taskmasterconfig` in the project root. This command/tool modifies that file. Use `listAvailableModels` or `task-master models` to see internally supported models. OpenRouter custom models are validated against their live API. Ollama custom models are not validated live. +* **Notes:** Configuration is stored in `.taskmaster/config.json` in the project root. This command/tool modifies that file. Use `listAvailableModels` or `task-master models` to see internally supported models. OpenRouter custom models are validated against their live API. Ollama custom models are not validated live. * **API note:** API keys for selected AI providers (based on their model) need to exist in the mcp.json file to be accessible in MCP context. The API keys must be present in the local .env file for the CLI to be able to read them. * **Model costs:** The costs in supported models are expressed in dollars. An input/output value of 3 is $3.00. A value of 0.8 is $0.80. -* **Warning:** DO NOT MANUALLY EDIT THE .taskmasterconfig FILE. Use the included commands either in the MCP or CLI format as needed. Always prioritize MCP tools when available and use the CLI as a fallback. +* **Warning:** DO NOT MANUALLY EDIT THE .taskmaster/config.json FILE. Use the included commands either in the MCP or CLI format as needed. Always prioritize MCP tools when available and use the CLI as a fallback. --- @@ -348,7 +348,7 @@ This document provides a detailed reference for interacting with Taskmaster, cov * **CLI Command:** `task-master analyze-complexity [options]` * **Description:** `Have Taskmaster analyze your tasks to determine their complexity and suggest which ones need to be broken down further.` * **Key Parameters/Options:** - * `output`: `Where to save the complexity analysis report (default: 'scripts/task-complexity-report.json').` (CLI: `-o, --output `) + * `output`: `Where to save the complexity analysis report (default: '.taskmaster/reports/task-complexity-report.json').` (CLI: `-o, --output `) * `threshold`: `The minimum complexity score (1-10) that should trigger a recommendation to expand a task.` (CLI: `-t, --threshold `) * `research`: `Enable research role for more accurate complexity analysis. Requires appropriate API key.` (CLI: `-r, --research`) * `file`: `Path to your Taskmaster 'tasks.json' file. Default relies on auto-detection.` (CLI: `-f, --file `) @@ -361,7 +361,7 @@ This document provides a detailed reference for interacting with Taskmaster, cov * **CLI Command:** `task-master complexity-report [options]` * **Description:** `Display the task complexity analysis report in a readable format.` * **Key Parameters/Options:** - * `file`: `Path to the complexity report (default: 'scripts/task-complexity-report.json').` (CLI: `-f, --file `) + * `file`: `Path to the complexity report (default: '.taskmaster/reports/task-complexity-report.json').` (CLI: `-f, --file `) * **Usage:** Review and understand the complexity analysis results after running analyze-complexity. --- @@ -382,7 +382,7 @@ This document provides a detailed reference for interacting with Taskmaster, cov ## Environment Variables Configuration (Updated) -Taskmaster primarily uses the **`.taskmasterconfig`** file (in project root) for configuration (models, parameters, logging level, etc.), managed via `task-master models --setup`. +Taskmaster primarily uses the **`.taskmaster/config.json`** file (in project root) for configuration (models, parameters, logging level, etc.), managed via `task-master models --setup`. Environment variables are used **only** for sensitive API keys related to AI providers and specific overrides like the Ollama base URL: @@ -396,11 +396,11 @@ Environment variables are used **only** for sensitive API keys related to AI pro * `OPENROUTER_API_KEY` * `XAI_API_KEY` * `OLLANA_API_KEY` (Requires `OLLAMA_BASE_URL` too) -* **Endpoints (Optional/Provider Specific inside .taskmasterconfig):** +* **Endpoints (Optional/Provider Specific inside .taskmaster/config.json):** * `AZURE_OPENAI_ENDPOINT` * `OLLAMA_BASE_URL` (Default: `http://localhost:11434/api`) -**Set API keys** in your **`.env`** file in the project root (for CLI use) or within the `env` section of your **`.cursor/mcp.json`** file (for MCP/Cursor integration). All other settings (model choice, max tokens, temperature, log level, custom endpoints) are managed in `.taskmasterconfig` via `task-master models` command or `models` MCP tool. +**Set API keys** in your **`.env`** file in the project root (for CLI use) or within the `env` section of your **`.cursor/mcp.json`** file (for MCP/Cursor integration). All other settings (model choice, max tokens, temperature, log level, custom endpoints) are managed in `.taskmaster/config.json` via `task-master models` command or `models` MCP tool. --- diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7ca91698..02b0ec2f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -170,7 +170,7 @@ Example: ### Prerequisites -- Node.js 14+ +- Node.js 18+ - npm or yarn ### Environment Setup diff --git a/README.md b/README.md index a2e2ed56..d730ddbf 100644 --- a/README.md +++ b/README.md @@ -115,13 +115,16 @@ In your editor's AI chat pane, say: Initialize taskmaster-ai in my project ``` -#### 5. Make sure you have a PRD +#### 5. Make sure you have a PRD (Recommended) For **new projects**: Create your PRD at `.taskmaster/docs/prd.txt` For **existing projects**: You can use `scripts/prd.txt` or migrate with `task-master migrate` An example PRD template is available after initialization in `.taskmaster/templates/example_prd.txt`. +> [!NOTE] +> While a PRD is recommended for complex projects, you can always create individual tasks by asking "Can you help me implement [description of what you want to do]?" in chat. + **Always start with a detailed PRD.** The more detailed your PRD, the better the generated tasks will be. diff --git a/mcp-server/src/core/direct-functions/initialize-project.js b/mcp-server/src/core/direct-functions/initialize-project.js index b6e7618e..a382837c 100644 --- a/mcp-server/src/core/direct-functions/initialize-project.js +++ b/mcp-server/src/core/direct-functions/initialize-project.js @@ -75,7 +75,7 @@ export async function initializeProjectDirect(args, log, context = {}) { resultData = { message: 'Project initialized successfully.', next_step: - 'Now that the project is initialized, the next step is to create the tasks by parsing a PRD. This will create the tasks folder and the initial task files (tasks folder will be created when parse-prd is run). The parse-prd tool will require a prd.txt file as input (typically found in the project root directory, .taskmaster/docs directory). You can create a prd.txt file by asking the user about their idea, and then using the scripts/example_prd.txt file as a template to genrate a prd.txt file in scripts/. You may skip all of this if the user already has a prd.txt file. You can THEN use the parse-prd tool to create the tasks. So: step 1 after initialization is to create a prd.txt file in .taskmaster/docs/prd.txt or confirm the user already has one. Step 2 is to use the parse-prd tool to create the tasks. Do not bother looking for tasks after initialization, just use the parse-prd tool to create the tasks after creating a prd.txt from which to parse the tasks. You do NOT need to reinitialize the project to parse-prd.', + 'Now that the project is initialized, the next step is to create the tasks by parsing a PRD. This will create the tasks folder and the initial task files (tasks folder will be created when parse-prd is run). The parse-prd tool will require a prd.txt file as input (typically found in .taskmaster/docs/ directory). You can create a prd.txt file by asking the user about their idea, and then using the .taskmaster/templates/example_prd.txt file as a template to generate a prd.txt file in .taskmaster/docs/. You may skip all of this if the user already has a prd.txt file. You can THEN use the parse-prd tool to create the tasks. So: step 1 after initialization is to create a prd.txt file in .taskmaster/docs/prd.txt or confirm the user already has one. Step 2 is to use the parse-prd tool to create the tasks. Do not bother looking for tasks after initialization, just use the parse-prd tool to create the tasks after creating a prd.txt from which to parse the tasks. You do NOT need to reinitialize the project to parse-prd.', ...result }; success = true; diff --git a/scripts/init.js b/scripts/init.js index 08c02d18..4cb3b272 100755 --- a/scripts/init.js +++ b/scripts/init.js @@ -297,7 +297,7 @@ function copyTemplateFile(templateName, targetPath, replacements = {}) { if (newLines.length > 0) { // Add a comment to separate the original content from our additions - const updatedContent = `${existingContent.trim()}\n\n# Added by Claude Task Master\n${newLines.join('\n')}`; + const updatedContent = `${existingContent.trim()}\n\n# Added by Task Master AI\n${newLines.join('\n')}`; fs.writeFileSync(targetPath, updatedContent); log('success', `Updated ${targetPath} with additional entries`); } else { @@ -636,7 +636,7 @@ function createProjectStructure(addAliases, dryRun, options) { log('info', 'Skipping interactive model setup due to --yes flag.'); log( 'info', - 'You can configure AI models later using "task-master models --setup" or "task-master models --set-..." commands.' + 'Default AI models will be used. You can configure different models later using "task-master models --setup" or "task-master models --set-..." commands.' ); } // ==================================== @@ -675,10 +675,12 @@ function createProjectStructure(addAliases, dryRun, options) { )}\n${chalk.white(' └─ ')}${chalk.dim('MCP Tool: ')}${chalk.cyan('analyze_project_complexity')}${chalk.dim(' | CLI: ')}${chalk.cyan('task-master analyze-complexity')}\n${chalk.white('5. ')}${chalk.yellow( 'Ask Cursor to expand all of your tasks using the complexity analysis' )}\n${chalk.white('6. ')}${chalk.yellow('Ask Cursor to begin working on the next task')}\n${chalk.white('7. ')}${chalk.yellow( - 'Ask Cursor to set the status of one or many tasks/subtasks at a time. Use the task id from the task lists.' + 'Add new tasks anytime using the add-task command or MCP tool' )}\n${chalk.white('8. ')}${chalk.yellow( + 'Ask Cursor to set the status of one or many tasks/subtasks at a time. Use the task id from the task lists.' + )}\n${chalk.white('9. ')}${chalk.yellow( 'Ask Cursor to update all tasks from a specific task id based on new learnings or pivots in your project.' - )}\n${chalk.white('9. ')}${chalk.green.bold('Ship it!')}\n\n${chalk.dim( + )}\n${chalk.white('10. ')}${chalk.green.bold('Ship it!')}\n\n${chalk.dim( '* Review the README.md file to learn how to use other commands via Cursor Agent.' )}\n${chalk.dim( '* Use the task-master command without arguments to see all available commands.'