Skip to content

FileSystemResolver

The FileSystemResolver provides agents with secure, configurable access to the file system. It creates an isolated filesystem view for each agent, ensuring separation of concerns and preventing agents from accessing files outside their designated areas.

Overview

  • Type: DependencyResolver[FileSystem]
  • Provided Dependency: fsspec.implementations.dirfs.DirFileSystem
  • Package: rustic_ai.core.guild.agent_ext.depends.filesystem.filesystem

Configuration

Parameter Type Description Default
path_base str Base path for files; agent directories will be created under this path Required
protocol str File system protocol to use (e.g., 'file', 's3', 'gcs') Required
storage_options dict Protocol-specific options for the underlying filesystem Required

Usage

Guild Configuration

from rustic_ai.core.guild.builders import GuildBuilder
from rustic_ai.core.guild.dsl import DependencySpec

guild_builder = (
    GuildBuilder("my_guild", "File System Guild", "Guild with file system access")
    .add_dependency_resolver(
        "filesystem",
        DependencySpec(
            class_name="rustic_ai.core.guild.agent_ext.depends.filesystem.filesystem.FileSystemResolver",
            properties={
                "path_base": "/tmp/rusticai/files",
                "protocol": "file",
                "storage_options": {}
            }
        )
    )
)

Agent Usage

from fsspec.implementations.dirfs import DirFileSystem
from rustic_ai.core.guild import Agent, agent

class FileAgent(Agent):
    @agent.processor(clz=FileRequest, depends_on=["filesystem"])
    def handle_file_request(self, ctx: agent.ProcessContext, filesystem: DirFileSystem):
        # Use filesystem to read/write files
        with filesystem.open("data.txt", "w") as f:
            f.write("Hello, World!")

        with filesystem.open("data.txt", "r") as f:
            content = f.read()

        ctx.send_dict({"content": content})

Path Isolation

The resolver creates agent-specific paths using the pattern:

{path_base}/{guild_id}/{agent_id}/

This ensures each agent has its own isolated file space, preventing one agent from accessing another's files.

Supported Backends

FileSystemResolver leverages fsspec, which supports multiple storage backends:

  • Local file system (file://)
  • Amazon S3 (s3://)
  • Google Cloud Storage (gcs://)
  • Azure Blob Storage (abfs://)
  • HDFS (hdfs://)
  • HTTP/HTTPS (http://, https://)
  • And many more

To use a particular backend, specify the appropriate protocol and include any authentication details in storage_options.

Example: S3 Configuration

DependencySpec(
    class_name="rustic_ai.core.guild.agent_ext.depends.filesystem.filesystem.FileSystemResolver",
    properties={
        "path_base": "my-bucket/agent-files",
        "protocol": "s3",
        "storage_options": {
            "key": "AWS_ACCESS_KEY",
            "secret": "AWS_SECRET_KEY",
            "client_kwargs": {"region_name": "us-west-2"}
        }
    }
)

Security Considerations

  • Ensure the path_base is in a safe location that doesn't contain sensitive system files
  • When using cloud storage, follow the principle of least privilege for access credentials
  • Consider implementing additional checks for sensitive operations in your agent code