Skip to main content

Agents Function Tools

agents-function-tools is a portable Python library of policy-friendly system function tools. It contains no business model, Agent routing, domain workflow, database adapter, or code-review logic. Its Python import name is function_tools.

Install

python -m pip install agents-function-tools

Included tools

Category Tools Recommended selector
Workspace read List, read UTF-8, inspect metadata, glob-style find, hash files, disk usage files.read
Workspace write Write text, create directories, copy a regular file, move a path, delete a path files.write
ZIP List archive entries; create and extract bounded ZIP archives files.read / files.write
Network Fetch bounded HTTPS text; optionally build search URLs, resolve configured hosts, and probe configured TCP ports network.read
Host Non-sensitive system info, UTC time, explicitly allowlisted environment variables host.inspect
Processes and commands Describe configured aliases; optionally inspect allowlisted process names; run one allowlisted executable with shell=False process.inspect / process.execute

Every tool returns the same JSON envelope with ok, tool, effect, data, and error fields. Paths are always relative to a configured workspace root.

Machine-readable contracts

Every returned bundle exposes contracts, a mapping from FunctionTool name to a ToolContract. The contract snapshots the SDK-derived input schema and declares the stable response schema, failure schema, capability permission, response effect, approval requirement, and retry safety. This lets an application build its own CLI, web approval screen, audit log, or policy check without binding this package to a particular Agent workflow.

from function_tools import create_tools

tools = create_tools("./workspace")
contract = tools.contracts["workspace_write_text"]

assert contract.permission == "workspace.write"
assert contract.needs_approval is True
assert contract.retry_safe is False
print(contract.to_dict())

needs_approval=True is enforced by the OpenAI Agents SDK. The host application receives the interruption, presents its own approval UI, then resumes the saved run state only after an explicit approval. This package deliberately does not impose a CLI or web interaction model.

Safety boundary

  • Path traversal and access outside the workspace root are rejected.
  • The workspace root cannot be deleted.
  • Recursive deletion must be explicit.
  • File reads, writes, hashes, and archive expansion have byte limits.
  • Every workspace mutation and local command requires the SDK approval gate in addition to the orchestration approval policy. File copy accepts regular, non-symlink source files only.
  • ZIP creation rejects symlinks; ZIP extraction rejects path traversal and symlink entries before writing files.
  • HTTPS fetching requires an exact host allowlist, rejects redirects, URL credentials, and non-default ports, accepts only text-like content types, and blocks resolved private or loopback addresses. No host is enabled by default. Deployment still needs an egress proxy or firewall: application-layer DNS checks do not replace network isolation.
  • Host diagnostics intentionally exclude user identities, network configuration, installed software, and environment variables except for names explicitly configured by the host. Process diagnostics are separate, disabled by default, and return only configured process names, PIDs, states, and start times.
  • Command execution accepts an argument array, never a shell string. Programs must be mapped by the host application, execution has a timeout, and output is truncated.
  • The local command runner is not an OS security sandbox. Production deployment must run the service or runner inside the company-approved container/sandbox with no production secrets and restricted network access.
  • Approval remains the orchestration layer's responsibility. Only attach tools.write or tools.execute after the matching approval policy has been validated.

This is a controlled operating-system capability adapter, not a general shell, process-management, credential, service-control, or unrestricted-network interface. Give each business Agent only the smallest subset of these tools it needs.

Example

from pathlib import Path

from agents import Agent

from function_tools import create_tools

tools = create_tools(Path("./workspace"))

agent = Agent(
    name="Workspace assistant",
    instructions="Use workspace tools when needed.",
    tools=list(tools.files.read),
)

Use the narrowest domain selector: tools.files, tools.network, tools.host, or tools.process. The v0.3-style tools.read, tools.write, and tools.execute selectors remain available for compatibility, but combine more capabilities. Every *.write and *.execute tool requires approval on every call. The SDK derives each FunctionTool's input schema from the Python signature and docstring.

Complete Example

OpenAI Agents workspace assistant is a runnable example with tools.files.read, tools.files.write, and per-call SDK approval. It is intentionally limited to one workspace; it does not attach network, host, process, command, MCP, or database tools.

Design specs

For configured commands, HTTPS hosts, or readable environment variables, use ToolConfig:

import sys
from pathlib import Path

from function_tools import ToolConfig, create_tools

tools = create_tools(
    ToolConfig(
        workspace_root=Path("./workspace"),
        command_programs={"python": sys.executable},
        http_allowed_hosts=frozenset({"api.example.internal"}),
        environment_variables=frozenset({"APP_ENV"}),
    )
)

Network diagnostics and process inspection are disabled until explicitly configured:

from function_tools import ToolConfig, create_tools

tools = create_tools(
    ToolConfig(
        workspace_root="./workspace",
        http_allowed_hosts=frozenset({"api.example.internal"}),
        search_engines={"bing": "https://www.bing.com/search"},
        network_allowed_ports=frozenset({443}),
        process_name_allowlist=frozenset({"python.exe"}),
    )
)

network_tools = tools.network.read
process_tools = tools.process.inspect

License

Apache-2.0. See LICENSE.

Development

Use Python 3.10 or newer:

uv sync --python 3.10
uv run --python 3.10 pytest

Tests do not call the OpenAI API and do not require OPENAI_API_KEY.

GitHub Actions runs formatting and linting, a Windows/Linux plus Python 3.10-3.12 test matrix, and the same package acceptance gate used before publishing. The suite includes public FunctionTool contracts and offline OpenAI Agents SDK integration tests using ScriptedModel, including approval interruption and resume behavior.

OpenAI Agents SDK compatibility

The package requires openai-agents>=0.22,<1; 0.22.0 is the current validated baseline. The weekly OpenAI Agents SDK latest workflow resolves the newest compatible SDK release from PyPI and runs the deterministic suite against it. It detects upstream compatibility changes without silently publishing or accepting a new SDK version.

Release acceptance

Before every PyPI release, run:

uv run python scripts/release_check.py

The gate checks the lockfile, formatting, linting, example compilation, tests, wheel and source-distribution contents, package metadata, a clean python -m pip install --no-deps <wheel>, and a separate clean runtime installation with dependencies.

Use the following command to run that gate and publish only when it passes:

uv run python scripts/publish.py

Metadata

Release files for agents-function-tools 0.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agents-function-tools 0.5.0
File Size Uploaded Provenance
agents_function_tools-0.5.0.tar.gz 35.7 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for agents-function-tools 0.5.0
File Interpreter ABI Platform
agents_function_tools-0.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 68.9 kB

Release files / agents_function_tools-0.5.0.tar.gz

Download URL agents_function_tools-0.5.0.tar.gz
Size 35.7 kB
Tags Source
SHA-256 checksum
How to use checksums
19736180fdcdee67a87359d0dbe7b84fa291e0bc6448542a5a6c17f880ab8e1a
BLAKE2b-256 checksum
How to use checksums
a4d644daa9311480105ed0beba78774587aff859e711529226027b69a62e7d48
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / agents_function_tools-0.5.0-py3-none-any.whl

Download URL agents_function_tools-0.5.0-py3-none-any.whl
Size 33.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c82452e036e9f4f6b944c82e7436b33958806781f0f0b72edcd05e1e95d1fc7b
BLAKE2b-256 checksum
How to use checksums
78e016c903d7489d297b979efdcebb2272dfbbd40f4ef3e9f557744639e08881
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for agents-function-tools 0.5.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page