Tools
Core
Base classes for tools.
- class folderbot.tools.base.ToolDefinition[source]
Bases:
objectA tool definition with its input model.
Central tool registry for folder tools.
- class folderbot.tools.registry.FolderServicesProtocol[source]
Bases:
ProtocolProtocol for folder tool services/dependencies.
- __init__(*args, **kwargs)
- class folderbot.tools.registry.FolderServices[source]
Bases:
objectConcrete implementation of folder services.
- validate_path(relative_path)[source]
Validate a relative path, ensuring it stays within root folder.
Returns the logical (un-resolved) path so that symlinks inside the root folder work transparently. Python’s pathlib follows symlinks automatically for I/O operations (read, write, exists, rglob, etc.). Security is enforced by rejecting
..components and absolute paths.
- folderbot.tools.registry.get_services(context)[source]
Extract FolderServices from context.
- Return type:
- Parameters:
context (BotContext | None)
- folderbot.tools.registry.get_tool_config(context, tool_name)[source]
Get configuration for a specific tool from context.
- folderbot.tools.registry.get_root(context)[source]
Get root folder from context services.
- Return type:
Path|None- Parameters:
context (BotContext | None)
- folderbot.tools.registry.validate_path(context, relative_path)[source]
Validate path using context services.
- folderbot.tools.registry.is_file_allowed(context, rel_path)[source]
Check if file is allowed using context services.
- folderbot.tools.registry.is_append_allowed(context, rel_path)[source]
Check if append is allowed using context services.
- async folderbot.tools.registry.execute_with_logging(tool_name, tool_input, context=None)[source]
Execute a tool with activity logging.
- Return type:
- Parameters:
FolderTools class for interacting with the configured folder.
- class folderbot.tools.folder_tools.FolderTools[source]
Bases:
objectTools for interacting with the configured folder.
This class serves as the main coordinator for tool execution. All tools (file tools, utility tools, web tools, scheduler tools) are registered on the single folder_bot instance and executed through this class.
- set_scheduler(scheduler)[source]
Set the scheduler reference for tool execution.
- Return type:
- Parameters:
scheduler (TaskScheduler)
- set_session_manager(session_manager)[source]
Set the session manager reference for user preferences.
- Return type:
- Parameters:
session_manager (SessionManager)
- set_upload_services(upload_services)[source]
Set the upload services for upload tools.
- Return type:
- Parameters:
upload_services (UploadServices)
- create_context(user_id=0, chat_id=0)[source]
Create a BotContext with services configured.
This is the preferred way to create a context for tool execution. The context includes FolderServices and SchedulerServices which provide access to folder operations and task scheduling.
- get_tools_requiring_confirmation()[source]
Return names of tools that require user confirmation before use.
- execute(tool_name, tool_input, user_id=0)[source]
Execute a tool synchronously (wraps async execute for compatibility).
- execute_direct(tool_name, tool_input, user_id=0)[source]
Execute a tool directly (alias for execute).
- async execute_async(tool_name, tool_input, context, chat_id=0)[source]
Execute a tool asynchronously with the given context.
- Parameters:
- Return type:
- Returns:
ToolResult with the execution result
- property activity_logger: ActivityLogger
Expose activity logger for external use.
File Tools
List files tool.
- class folderbot.tools.list_files.ListFilesRequest[source]
Bases:
BaseModelRequest for listing files in a directory.
- async folderbot.tools.list_files.list_files(request, _context=None)[source]
List files in the folder or a subfolder.
Returns file paths relative to the root folder. Use this to discover what files are available before reading them.
- Return type:
- Parameters:
request (ListFilesRequest)
_context (BotContext | None)
Read file tool.
- class folderbot.tools.read_file.ReadFileRequest[source]
Bases:
BaseModelRequest for reading a file.
- async folderbot.tools.read_file.read_file(request, _context=None)[source]
Read the contents of a specific file.
The path must be relative to the root folder. Use list_files first to discover available files.
- Return type:
- Parameters:
request (ReadFileRequest)
_context (BotContext | None)
Write file tool.
- class folderbot.tools.write_file.WriteMode[source]
-
Write mode for file operations.
- overwrite = 'overwrite'
- append = 'append'
- __new__(value)
- class folderbot.tools.write_file.WriteFileRequest[source]
Bases:
BaseModelRequest for writing a file.
- async folderbot.tools.write_file.write_file(request, _context=None)[source]
Create or update a file in the folder.
The file path must satisfy the configured include rules. Use this to help the user manage their notes, todos, and documentation.
- Return type:
- Parameters:
request (WriteFileRequest)
_context (BotContext | None)
Search files tool.
- class folderbot.tools.search_files.SearchFilesRequest[source]
Bases:
BaseModelRequest for searching files.
- async folderbot.tools.search_files.search_files(request, _context=None)[source]
Search for text content across all files in the folder.
Returns matching file paths and relevant excerpts. Useful for finding files containing specific keywords.
- Return type:
- Parameters:
request (SearchFilesRequest)
_context (BotContext | None)
Web Tools
Web search tool using Google Custom Search API.
- class folderbot.tools.web_search.WebSearchRequest[source]
Bases:
BaseModelRequest for searching the web.
- async folderbot.tools.web_search.web_search(request, _context=None)[source]
Search the web using Google.
Returns titles, URLs, and snippets for the top results. Use this to find information online.
- Return type:
- Parameters:
request (WebSearchRequest)
_context (BotContext | None)
- folderbot.tools.web_search.is_available()[source]
Check if web search is available (always True — uses httpx which is a core dep).
- Return type:
Web fetch tool.
- class folderbot.tools.web_fetch.WebFetchRequest[source]
Bases:
BaseModelRequest for fetching content from a URL.
- async folderbot.tools.web_fetch.web_fetch(request, _context=None)[source]
Fetch and extract text content from a URL.
Returns the main text content of the page, stripping HTML. Use this to read articles, documentation, or other web pages.
- Return type:
- Parameters:
request (WebFetchRequest)
_context (BotContext | None)
Weather forecast tool via Open-Meteo (free, no API key).
- class folderbot.tools.weather.GetWeatherRequest[source]
Bases:
BaseModelRequest for getting weather forecast.
- async folderbot.tools.weather.get_weather(request, _context=None)[source]
Get current weather and forecast for a location.
Requires latitude and longitude — use ask_user with input_type ‘location’ to get the user’s coordinates if not known.
- Return type:
- Parameters:
request (GetWeatherRequest)
_context (BotContext | None)
Scheduler Tools
Scheduler tools for scheduling and managing background tasks.
These tools are registered on the central folder_bot instance and executed asynchronously through SchedulerServices.
- class folderbot.tools.scheduler_tools.TaskStepInput[source]
Bases:
BaseModelA single tool call within a task.
- class folderbot.tools.scheduler_tools.ScheduleTaskRequest[source]
Bases:
BaseModelRequest for scheduling a new task.
- steps: list[TaskStepInput]
- class folderbot.tools.scheduler_tools.ListTasksRequest[source]
Bases:
BaseModelRequest for listing scheduled tasks.
- class folderbot.tools.scheduler_tools.CancelTaskRequest[source]
Bases:
BaseModelRequest for cancelling a scheduled task.
- class folderbot.tools.scheduler_tools.GetTaskResultsRequest[source]
Bases:
BaseModelRequest for getting results of a task.
- class folderbot.tools.scheduler_tools.SchedulerServices[source]
Bases:
objectServices for scheduler tool execution.
This class wraps the TaskScheduler and provides async handlers for scheduler tools. It’s stored in BotContext.services[“scheduler”].
- scheduler: TaskScheduler
- async schedule_task(request, context)[source]
Schedule a new task.
- Return type:
- Parameters:
request (ScheduleTaskRequest)
context (BotContext | None)
- async list_tasks(request, context)[source]
List scheduled tasks.
- Return type:
- Parameters:
request (ListTasksRequest)
context (BotContext | None)
- async cancel_task(request, context)[source]
Cancel a scheduled task.
- Return type:
- Parameters:
request (CancelTaskRequest)
context (BotContext | None)
- async get_task_results(request, context)[source]
Get results of a scheduled task.
- Return type:
- Parameters:
request (GetTaskResultsRequest)
context (BotContext | None)
- __init__(scheduler, chat_id=0)
- Parameters:
scheduler (TaskScheduler)
chat_id (int)
- Return type:
None
- async folderbot.tools.scheduler_tools.schedule_task(request, _context=None)[source]
Schedule a task to be executed later or repeatedly.
- Return type:
- Parameters:
request (ScheduleTaskRequest)
_context (BotContext | None)
- async folderbot.tools.scheduler_tools.list_tasks(request, _context=None)[source]
List all scheduled tasks.
- Return type:
- Parameters:
request (ListTasksRequest)
_context (BotContext | None)
- async folderbot.tools.scheduler_tools.cancel_task(request, _context=None)[source]
Cancel a scheduled task.
- Return type:
- Parameters:
request (CancelTaskRequest)
_context (BotContext | None)
- async folderbot.tools.scheduler_tools.get_task_results(request, _context=None)[source]
Get results of a scheduled task.
- Return type:
- Parameters:
request (GetTaskResultsRequest)
_context (BotContext | None)
Upload Tools
Upload management tools for listing, deleting, and resending uploaded files.
- class folderbot.tools.upload_tools.UploadServices[source]
Bases:
objectServices for upload tools.
- session_manager: SessionManager
- class folderbot.tools.upload_tools.ListUploadsRequest[source]
Bases:
BaseModelRequest for listing uploaded files.
- async folderbot.tools.upload_tools.list_uploads(request, _context=None)[source]
List all files the user has uploaded.
Returns a list of uploaded files with their ID, original filename, size, and upload date.
- Return type:
- Parameters:
request (ListUploadsRequest)
_context (BotContext | None)
- class folderbot.tools.upload_tools.DeleteUploadRequest[source]
Bases:
BaseModelRequest for deleting an uploaded file.
- async folderbot.tools.upload_tools.delete_upload(request, _context=None)[source]
Delete an uploaded file by its ID.
Removes the file from disk and the database record. Use list_uploads first to find the upload ID.
- Return type:
- Parameters:
request (DeleteUploadRequest)
_context (BotContext | None)
- class folderbot.tools.upload_tools.SendUploadRequest[source]
Bases:
BaseModelRequest for sending an uploaded file back to the user.
- async folderbot.tools.upload_tools.send_upload(request, _context=None)[source]
Send an uploaded file back to the user in the chat.
Use list_uploads first to find the upload ID.
- Return type:
- Parameters:
request (SendUploadRequest)
_context (BotContext | None)
Topic Tools
Topic reorganization tools.
- class folderbot.tools.topic_tools.TopicAssignment[source]
Bases:
BaseModelA single message-to-topic assignment.
- class folderbot.tools.topic_tools.GetFullHistoryRequest[source]
Bases:
BaseModelRequest to get the full conversation history with message indices.
- async folderbot.tools.topic_tools.get_full_history(request, _context=None)[source]
Get the full conversation history with message indices and current topics.
Returns all messages numbered by index. Use this before calling reorganize_topics to see what needs to be reassigned.
- Return type:
- Parameters:
request (GetFullHistoryRequest)
_context (BotContext | None)
- class folderbot.tools.topic_tools.ReorganizeTopicsRequest[source]
Bases:
BaseModelRequest to reassign topic labels on conversation messages.
- assignments: list[TopicAssignment]
- async folderbot.tools.topic_tools.reorganize_topics(request, _context=None)[source]
Reassign topic labels on conversation messages.
Use this when the user asks to re-split, reorganize, or rename their conversation topics. First use get_full_history to see all messages with their indices, then call this tool with the new assignments.
- Return type:
- Parameters:
request (ReorganizeTopicsRequest)
_context (BotContext | None)
Utility Tools
Utility tools for common operations.
- class folderbot.tools.utils.GetTimeRequest[source]
Bases:
BaseModelRequest for getting current time.
- async folderbot.tools.utils.get_time(request, _context=None)[source]
Get the current date and time. Useful for knowing what day/time it is.
- Return type:
- Parameters:
request (GetTimeRequest)
_context (BotContext | None)
- class folderbot.tools.utils.CompareNumbersRequest[source]
Bases:
BaseModelRequest for comparing two numbers.
- async folderbot.tools.utils.compare_numbers(request, _context=None)[source]
Compare two numbers. Returns which is greater, lesser, or if equal.
- Return type:
- Parameters:
request (CompareNumbersRequest)
_context (BotContext | None)
- class folderbot.tools.utils.ShuffleListRequest[source]
Bases:
BaseModelRequest for shuffling a list.
- async folderbot.tools.utils.shuffle_list(request, _context=None)[source]
Randomly shuffle a list of items.
- Return type:
- Parameters:
request (ShuffleListRequest)
_context (BotContext | None)
- async folderbot.tools.utils.sort_list(request, _context=None)[source]
Sort a list of items alphabetically or numerically.
- Return type:
- Parameters:
request (SortListRequest)
_context (BotContext | None)
- class folderbot.tools.utils.RandomChoiceRequest[source]
Bases:
BaseModelRequest for picking random items.
- async folderbot.tools.utils.random_choice(request, _context=None)[source]
Pick random item(s) from a list.
- Return type:
- Parameters:
request (RandomChoiceRequest)
_context (BotContext | None)
- class folderbot.tools.utils.RandomNumberRequest[source]
Bases:
BaseModelRequest for generating a random number.
- async folderbot.tools.utils.random_number(request, _context=None)[source]
Generate a random number within a range.
- Return type:
- Parameters:
request (RandomNumberRequest)
_context (BotContext | None)
- class folderbot.tools.utils.SendMessageRequest[source]
Bases:
BaseModelRequest for sending a message to the user.
- async folderbot.tools.utils.send_message(request, _context=None)[source]
Send a message directly to the user via Telegram.
Use this in scheduled tasks to send notifications, greetings, reminders, or any other message to the user. The message is sent exactly as provided — no template interpolation.
- Return type:
- Parameters:
request (SendMessageRequest)
_context (BotContext | None)
- class folderbot.tools.utils.ListTopicsRequest[source]
Bases:
BaseModelRequest for listing conversation topics.
- async folderbot.tools.utils.list_topics(request, _context=None)[source]
List active conversation topics for the current user.
Shows all topics with message counts and last activity. Use this when the user asks about their active conversations or threads.
- Return type:
- Parameters:
request (ListTopicsRequest)
_context (BotContext | None)
Activity Log
Activity logging with structured entries and rotation.
- class folderbot.tools.activity_log.ReadActivityLogRequest[source]
Bases:
BaseModelRequest for reading the activity log.
- async folderbot.tools.activity_log.read_activity_log(request, _context=None)[source]
Read the bot’s activity log to see what tools were actually used.
Shows when tasks were scheduled, and message history. Use this to verify whether actions were actually performed or to debug issues.
- Return type:
- Parameters:
request (ReadActivityLogRequest)
_context (BotContext | None)
- class folderbot.tools.activity_log.ActivityLogger[source]
Bases:
objectLogs tool activity to structured JSON files with rotation.
- MAX_DAYS_TO_KEEP = 30
- log_tool_call(tool_name, tool_input, result, is_error, user_id, duration_ms=0)[source]
Log a tool call with structured data.
- log_task_event(event, task_id, description, user_id, details=None)[source]
Log a scheduler task event.