LocalFilesystem
Added in: @mastra/core@1.1.0
Stores files in a directory on the local filesystem. For interface details, see WorkspaceFilesystem Interface.
UsageUsage的直接链接
Add a LocalFilesystem to a workspace and assign it to an agent. The agent can then read, write, and manage files as part of its tasks:
import { Agent } from '@mastra/core/agent'
import { Workspace, LocalFilesystem } from '@mastra/core/workspace'
const workspace = new Workspace({
filesystem: new LocalFilesystem({
basePath: './workspace',
}),
})
const agent = new Agent({
id: 'file-agent',
model: 'openai/gpt-5.6-sol',
workspace,
})
// The agent now has filesystem tools available
const response = await agent.generate('List all files in the workspace')
Constructor parametersConstructor parameters的直接链接
basePath:
id?:
contained?:
allowedPaths?:
basePath.instructions?:
readOnly?:
PropertiesProperties的直接链接
id:
name:
provider:
basePath:
readOnly:
allowedPaths:
MethodsMethods的直接链接
init()init的直接链接
Initialize the filesystem. Creates the base directory if it doesn't exist.
await filesystem.init()
Called by workspace.init().
Lazy initializationLazy initialization的直接链接
LocalFilesystem initializes on first operation if not already initialized, creating the base directory automatically. Calling init() explicitly is optional but can be useful to pre-create directories before the first operation.
destroy()destroy的直接链接
Clean up filesystem resources.
await filesystem.destroy()
Called by workspace.destroy().
setAllowedPaths(pathsOrUpdater)setallowedpathspathsorupdater的直接链接
Update the allowed paths at runtime. Accepts a new paths array (replaces current) or an updater callback that receives the current paths and returns the new set.
// Set directly
filesystem.setAllowedPaths(['/home/user/.config'])
// Update with callback
filesystem.setAllowedPaths(prev => [...prev, '/home/user/documents'])
// Clear all allowed paths
filesystem.setAllowedPaths([])
Parameters:
pathsOrUpdater:
readFile(path, options?)readfilepath-options的直接链接
Read file contents.
const content = await filesystem.readFile('/docs/guide.md', { encoding: 'utf-8' })
const buffer = await filesystem.readFile('/image.png')
Parameters:
path:
options?:
encoding?:
writeFile(path, content, options?)writefilepath-content-options的直接链接
Write content to a file.
await filesystem.writeFile('/docs/new.md', '# New Document')
await filesystem.writeFile('/nested/path/file.md', content, { recursive: true })
Parameters:
path:
content:
options?:
recursive?:
overwrite?:
expectedMtime?:
appendFile(path, content)appendfilepath-content的直接链接
Append content to an existing file.
await filesystem.appendFile('/logs/app.log', 'New log entry\n')
Parameters:
path:
content:
deleteFile(path, options?)deletefilepath-options的直接链接
Delete a file.
await filesystem.deleteFile('/docs/old.md')
await filesystem.deleteFile('/docs/maybe.md', { force: true }) // Don't throw if missing
Parameters:
path:
options?:
force?:
copyFile(src, dest, options?)copyfilesrc-dest-options的直接链接
Copy a file to a new location.
await filesystem.copyFile('/docs/template.md', '/docs/new-doc.md')
await filesystem.copyFile('/src/config.json', '/backup/config.json', { overwrite: false })
Parameters:
src:
dest:
options?:
overwrite?:
moveFile(src, dest, options?)movefilesrc-dest-options的直接链接
Move or rename a file.
await filesystem.moveFile('/docs/draft.md', '/docs/final.md')
await filesystem.moveFile('/temp/upload.txt', '/files/document.txt')
Parameters:
src:
dest:
options?:
overwrite?:
mkdir(path, options?)mkdirpath-options的直接链接
Create a directory.
await filesystem.mkdir('/docs/api')
await filesystem.mkdir('/deeply/nested/path', { recursive: true })
Parameters:
path:
options?:
recursive?:
rmdir(path, options?)rmdirpath-options的直接链接
Remove a directory.
await filesystem.rmdir('/docs/old')
await filesystem.rmdir('/docs/nested', { recursive: true })
Parameters:
path:
options?:
recursive?:
force?:
readdir(path, options?)readdirpath-options的直接链接
List directory contents.
const entries = await filesystem.readdir('/docs')
// [{ name: 'guide.md', type: 'file' }, { name: 'api', type: 'directory' }]
exists(path)existspath的直接链接
Check if a path exists.
const exists = await filesystem.exists('/docs/guide.md')
stat(path)statpath的直接链接
Get file or directory metadata.
const stat = await filesystem.stat('/docs/guide.md')
// { type: 'file', size: 1234, modifiedAt: Date, createdAt: Date, path: '/docs/guide.md' }
getInfo()getinfo的直接链接
Returns metadata about this filesystem instance.
const info = filesystem.getInfo()
// { id: '...', name: 'LocalFilesystem', provider: 'local', basePath: '/workspace', readOnly: false }
getInstructions(opts?)getinstructionsopts的直接链接
Returns a description of how paths work in this filesystem. When assigned to an agent, this is injected into the agent's system message.
const instructions = filesystem.getInstructions()
// 'Local filesystem at "/workspace". Files at workspace path "/foo" are stored at "/workspace/foo" on disk.'
Pass requestContext to enable per-request customization when the instructions constructor option is a function:
const instructions = filesystem.getInstructions({ requestContext })
Parameters:
opts.requestContext?:
instructions function if one was provided in the constructor.Returns: string
To override the default output, pass an instructions option to the constructor. See constructor parameters.
Path resolutionPath resolution的直接链接
How basePath workshow-basepath-works的直接链接
The basePath option sets the root directory for all file operations. File paths passed to methods like readFile() are resolved relative to this base:
- Leading slashes are stripped:
/docs/guide.md→docs/guide.md - The path is normalized and joined with basePath
- Result:
./workspace+docs/guide.md→./workspace/docs/guide.md
const filesystem = new LocalFilesystem({
basePath: './workspace',
})
// These all resolve to ./workspace/docs/guide.md
await filesystem.readFile('/docs/guide.md')
await filesystem.readFile('docs/guide.md')
Relative paths and execution contextRelative paths and execution context的直接链接
When you use a relative path for basePath, it resolves from process.cwd(). In Mastra projects, the cwd changes based on how you run your code:
| Context | Working directory | ./workspace resolves to |
|---|---|---|
mastra dev | ./src/mastra/public/ | ./src/mastra/public/workspace |
mastra start | ./.mastra/output/ | ./.mastra/output/workspace |
| Direct script | Where you ran the command | Relative to that location |
This can cause confusion when the same relative path resolves to different locations.
Recommended: Use absolute pathsRecommended: Use absolute paths的直接链接
For consistent paths across all execution contexts, use an environment variable with an absolute path:
import { LocalFilesystem } from '@mastra/core/workspace'
const filesystem = new LocalFilesystem({
basePath: process.env.WORKSPACE_PATH!,
})
Set WORKSPACE_PATH in your environment to an absolute path like /home/user/my-project/workspace. It ensures the workspace path is consistent regardless of how you run your code.