[FEATURE REQUEST] Claude Code - Make ToDoWrite a configurable option that allows the ability to specify other Task Management MCP solutions
The very first part of my root claude.md is an attempt to get Claude Code to manage and document everything in Linear Tasks. Sometimes it works, other times it starts to work, then goes off course and I get random .md files documenting tasks and code changes. When this happens, I have to remind CC to not use ToDoWrite, but I am not always successful.
It would be great if there was a way to overwrite the ToDoWrite and use a different task management or documentation solution as the default writer.
Thanks!
Hey! This is a great feature request, and a situation I've run into myself when trying to integrate specific workflows. It can be frustrating when Claude defaults back to a built-in tool despite instructions.
I did some digging through the documentation and the changelog, and I think I have a couple of solutions that might give you the behavior you're looking for without needing to wait for an official feature.
The core of the issue seems to be that TodoWrite is a default, non-permissioned tool (according to the claude-code/settings docs), which is likely why it's so persistent and sometimes overrides CLAUDE.md instructions.
Here are a couple of ways you could tackle this:
1. The Simple Solution: Explicitly Deny the Tool
The cleanest and most direct way to solve this is to use the permissions system to completely block the TodoWrite tool. By adding it to a deny list, Claude Code won't be able to use it at all, which should force it to find an alternative—in your case, the Linear MCP tool it already knows about.
You can do this by creating or editing your project's shared settings file at .claude/settings.json:
{
"permissions": {
"deny": [
"TodoWrite"
// You can add other tools to deny here as well
// "WebSearch"
]
}
}
Reference: en/docs/claude-code/settings > Permission settings
This should completely prevent Claude Code from using the TodoWrite tool, forcing it to rely on the tools you've provided and instructed it to use, like your Linear integration.
2. The Advanced Solution: Use a PreToolUse Hook
If you want more fine-grained control or want to provide a specific "feedback" message to Claude when it attempts to use TodoWrite, you could use a Hook.
The PreToolUse hook runs before a tool is executed and can block it. You could create a small script that:
- Matches on the
TodoWritetool. - Exits with a status code of
2, which signals a blocking error. - Prints a message to
stderrthat gets fed back to Claude, like: "Usage of TodoWrite is forbidden. All tasks must be managed via the Linear MCP tool."
This is more complex to set up but gives you a way to actively correct Claude's behavior in the moment. You can find more info on this in the en/docs/claude-code/hooks-guide documentation.
3. Reinforce with CLAUDE.md
I'd recommend combining the "deny" approach with a very explicit instruction in your CLAUDE.md file. The technical block in settings.json prevents the action, while the prompt guides the intention.
You could add something like this to the top of your CLAUDE.md:
# Core Directives
- **Task Management:** ALL tasks, plans, and documentation MUST be created and managed using the Linear MCP tool (`mcp__linear__...`). The built-in `TodoWrite` tool is disabled and MUST NOT be used.
By combining the hard block in settings.json with the clear instruction in your memory file, you should get much more consistent results and force Claude Code to use your preferred Linear workflow.
Hope this helps you get it working the way you want! Let me know how it goes.
This issue has been inactive for 30 days. If the issue is still occurring, please comment to let us know. Otherwise, this issue will be automatically closed in 30 days for housekeeping purposes.
This is also needed for optimal use with other tools like https://github.com/steveyegge/beads/. Autoclose bots are harmful to the health of software communities.