file.md

File Tool

Status: Planned

Read and write files on the filesystem.

Capabilities

  • Read file contents
  • Write/create files
  • List directories
  • Search files by name/content
  • Move/copy/delete files
  • Watch for changes

Interface

typescript
interface FileTool extends Tool { name: "file"; actions: { // Read read(path: string, encoding?: string): Promise<string>; readBinary(path: string): Promise<Buffer>; exists(path: string): Promise<boolean>; stat(path: string): Promise<FileStat>; // Write write(path: string, content: string): Promise<void>; writeBinary(path: string, content: Buffer): Promise<void>; append(path: string, content: string): Promise<void>; // Directory list(path: string, options?: ListOptions): Promise<FileInfo[]>; mkdir(path: string, recursive?: boolean): Promise<void>; // Search glob(pattern: string, options?: GlobOptions): Promise<string[]>; grep(pattern: string, path: string): Promise<GrepResult[]>; // Modify copy(src: string, dest: string): Promise<void>; move(src: string, dest: string): Promise<void>; delete(path: string): Promise<void>; // Watch watch(path: string, callback: WatchCallback): Promise<Watcher>; }; } interface FileInfo { name: string; path: string; isDirectory: boolean; size: number; modified: Date; }

Example Usage

typescript
// Read a file const content = await file.read("/path/to/file.txt"); // Write a file await file.write("/path/to/output.md", "# Hello\n\nWorld"); // Find all TypeScript files const tsFiles = await file.glob("**/*.ts", { cwd: "/project" }); // Search for pattern in files const matches = await file.grep("TODO", "/project/src");

Security Considerations

Path Restrictions

Consider restricting to:

  • User's home directory
  • Specific project directories
  • Exclude system directories

Dangerous Operations

Require confirmation for:

  • Deleting files
  • Overwriting existing files
  • Writing to sensitive locations

Logging

Log all write operations for audit trail.

Open Questions

  1. Should we restrict to certain directories?
  2. How to handle large files?
  3. Support for file permissions (chmod)?