Using .rooignore to Control File Access
The .rooignore
file is a key feature for managing Roo Code's interaction with your project files. It allows you to specify files and directories that Roo should not access or modify, similar to how .gitignore
works for Git.
What is .rooignore
?
- Purpose: To protect sensitive information, prevent accidental changes to build artifacts or large assets, and generally define Roo's operational scope within your workspace.
- How to Use: Create a file named
.rooignore
in the root directory of your VS Code workspace. List patterns in this file to tell Roo which files and directories to ignore.
Roo actively monitors the .rooignore
file. Any changes you make are reloaded automatically, ensuring Roo always uses the most current rules. The .rooignore
file itself is always implicitly ignored, so Roo cannot change its own access rules.
Pattern Syntax
The syntax for .rooignore
is identical to .gitignore
. Here are common examples:
node_modules/
: Ignores the entirenode_modules
directory.*.log
: Ignores all files ending in.log
.config/secrets.json
: Ignores a specific file.!important.log
: An exception; Roo will not ignore this specific file, even if a broader pattern like*.log
exists.build/
: Ignores thebuild
directory.docs/**/*.md
: Ignores all Markdown files in thedocs
directory and its subdirectories.
For a comprehensive guide on syntax, refer to the official Git documentation on .gitignore.
How Roo Tools Interact with .rooignore
.rooignore
rules are enforced across various Roo tools:
Strict Enforcement (Reads & Writes)
These tools directly check .rooignore
before any file operation. If a file is ignored, the operation is blocked:
read_file
: Will not read ignored files.write_to_file
: Will not write to or create new ignored files.apply_diff
: Will not apply diffs to ignored files.list_code_definition_names
: Will not parse ignored files for code symbols.
File Editing Tools (Potential Write Bypass)
The insert_content
and search_and_replace
tools use an internal component for managing changes.
Important: Currently, the final write operation performed by these tools might bypass .rooignore
rules. While initial read attempts might be blocked, the save action itself does not have an explicit check.
File Discovery and Listing
list_files
Tool: When Roo lists files, ignored files are typically omitted or marked with a 🔒 symbol (see "User Experience" below).- Environment Details: Information about your workspace (like open tabs and project structure) provided to Roo is filtered to exclude or mark ignored items.
Command Execution
execute_command
Tool: This tool checks if a command (from a predefined list likecat
orgrep
) targets an ignored file. If so, execution is blocked.
Key Limitations and Scope
- Workspace-Centric:
.rooignore
rules apply only to files and directories within the current VS Code workspace root. Files outside this scope are not affected. execute_command
Specificity: Protection forexecute_command
is limited to a predefined list of file-reading commands. Custom scripts or uncommon utilities might not be caught.- Write Operations via
insert_content
&search_and_replace
: As noted, these tools might be able to write to ignored files due to current limitations in their save mechanism. - Not a Full Sandbox:
.rooignore
is a powerful tool for controlling Roo's file access via its tools, but it does not create a system-level sandbox.
User Experience and Notifications
- Visual Cue (🔒): In file listings, files ignored by
.rooignore
may be marked with a lock symbol (🔒), depending on theshowRooIgnoredFiles
setting (defaults totrue
). - Error Messages: If a tool operation is blocked, Roo receives an error:
"Access to [file_path] is blocked by the .rooignore file settings. You must try to continue in the task without using this file, or ask the user to update the .rooignore file."
- Chat Notifications: You will typically see a notification in the Roo chat interface when an action is blocked due to
.rooignore
.
This guide helps you understand the .rooignore
feature, its capabilities, and its current limitations, so you can effectively manage Roo's interaction with your codebase.