Skip to content

Glob Tool

Find files by pattern.

Quick Example

from mamba_agents.tools import glob_search

# Find Python files
files = glob_search("**/*.py")

# In specific directory
files = glob_search("*.json", root_dir="/config")

# Multiple patterns
files = glob_search("**/*.{py,js,ts}")

Pattern Syntax

Pattern Matches
* Any characters in filename
** Any directories
? Single character
[abc] Character set
{a,b} Alternatives

API Reference

glob_search(
    pattern: str,
    root_dir: str = ".",
    recursive: bool = True,
    max_results: int = 1000,
    security: FilesystemSecurity | None = None,
) -> list[str]

Find files matching a glob pattern.

PARAMETER DESCRIPTION
pattern

Glob pattern to match (e.g., ".py", "/.txt").

TYPE: str

root_dir

Root directory to search from.

TYPE: str DEFAULT: '.'

recursive

Whether to search recursively (default: True).

TYPE: bool DEFAULT: True

max_results

Maximum number of results to return.

TYPE: int DEFAULT: 1000

security

Optional security context for path validation.

TYPE: FilesystemSecurity | None DEFAULT: None

RETURNS DESCRIPTION
list[str]

List of matching file paths.

RAISES DESCRIPTION
PermissionError

If access is denied or path is outside sandbox.

Source code in src/mamba_agents/tools/glob.py
def glob_search(
    pattern: str,
    root_dir: str = ".",
    recursive: bool = True,
    max_results: int = 1000,
    security: FilesystemSecurity | None = None,
) -> list[str]:
    """Find files matching a glob pattern.

    Args:
        pattern: Glob pattern to match (e.g., "*.py", "**/*.txt").
        root_dir: Root directory to search from.
        recursive: Whether to search recursively (default: True).
        max_results: Maximum number of results to return.
        security: Optional security context for path validation.

    Returns:
        List of matching file paths.

    Raises:
        PermissionError: If access is denied or path is outside sandbox.
    """
    root = security.validate_path(root_dir) if security is not None else Path(root_dir)

    if not root.exists():
        raise FileNotFoundError(f"Directory not found: {root_dir}")

    if not root.is_dir():
        raise NotADirectoryError(f"Not a directory: {root_dir}")

    # Use rglob for recursive, glob for non-recursive
    matches = root.rglob(pattern) if recursive else root.glob(pattern)

    results: list[str] = []
    for match in matches:
        if len(results) >= max_results:
            break
        results.append(str(match))

    return results