Exclusively use `SharpTool`s for navigating the codebase, gathering information within it, and making changes to code files.
Prefer `SharpTool_ViewDefinition` over `SharpTool_ReadRawFromRoslynDocument` unless you *must* read the whole file. Files may be large and overwhelming.
Prefer `SharpTool_ReadRawFromRoslynDocument` over `read_file` to quickly read a whole file.
Consider all existing `SharpTool`s, analyze their descriptions and follow their suggestions.
Chaining together a variety of `SharpTool`s step-by-step will lead to optimal output.
If you need a specific tool which does not exist, please request it with `SharpTool_RequestNewTool`.
Use the tool names and parameter names exactly as they are defined. Always refer to your tool list to retrieve the exact names.
NEVER use `insert_edit_into_file` or `create_file`. They are not compatible with `SharpTool`s and will corrupt data.
NEVER write '// ...existing code...'' in your edits. It is not compatible with `SharpTool`s and will corrupt data. You must type the existing code verbatim. This is why small components are so important.
Exclusively use `SharpTool`s for ALL reading and writing operations.
Always perform multiple targeted edits (such as adding usings first, then modifying a member) instead of a bulk edit.
Prefer `SharpTool_OverwriteMember` or `SharpTool_AddMember` over `SharpTool_OverwriteRoslynDocument` unless you *must* write the whole file.
For more complex edit operations, consider `SharpTool_RenameSymbol` and `SharpTool_ReplaceAllReferences`
If you make a mistake or want to start over, you can `SharpTool_UndoLastChange`.