Metadata-Version: 2.4
Name: toolfront
Version: 0.3.3
Summary: ToolFront helps you organize AI workflows into independent tasks with environments.
Author-email: Esteban Safranchik <esteban@kruskal.ai>, Gavin Chan <gavin@kruskal.ai>
License: MIT
Project-URL: Homepage, https://github.com/statespace-tech/toolfront
Project-URL: Repository, https://github.com/statespace-tech/toolfront
Project-URL: Documentation, https://docs.toolfront.ai
Project-URL: Bug Tracker, https://github.com/statespace-tech/toolfront/issues
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Operating System :: OS Independent
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: click>=8.1.8
Requires-Dist: httpx>=0.28.1
Requires-Dist: mcp[cli]>=1.9.0
Requires-Dist: pydantic>=2.11.4
Requires-Dist: pytest>=8.3.5
Requires-Dist: pydantic-ai>=0.4.2
Requires-Dist: rich>=14.0.0
Requires-Dist: duckdb>=1.3.2
Requires-Dist: fsspec>=2025.7.0
Requires-Dist: ibis-framework>=10.8.0
Requires-Dist: tabulate>=0.9.0
Provides-Extra: test
Requires-Dist: pytest>=7.0.0; extra == "test"
Requires-Dist: pytest-asyncio>=0.21.0; extra == "test"
Provides-Extra: dev
Requires-Dist: pre-commit>=3.0.0; extra == "dev"
Requires-Dist: ruff>=0.1.0; extra == "dev"
Requires-Dist: mkdocs-material[imaging]>=9.6.16; extra == "dev"
Requires-Dist: mkdocstrings[python]>=0.30.0; extra == "dev"
Provides-Extra: bigquery
Requires-Dist: ibis-framework[bigquery]>=10.6.0; extra == "bigquery"
Provides-Extra: clickhouse
Requires-Dist: ibis-framework[clickhouse]>=10.6.0; extra == "clickhouse"
Provides-Extra: databricks
Requires-Dist: ibis-framework[databricks]>=10.6.0; extra == "databricks"
Provides-Extra: druid
Requires-Dist: ibis-framework[druid]>=10.6.0; extra == "druid"
Provides-Extra: duckdb
Requires-Dist: ibis-framework[duckdb]>=10.6.0; extra == "duckdb"
Provides-Extra: flink
Requires-Dist: ibis-framework[flink]>=10.6.0; extra == "flink"
Provides-Extra: mssql
Requires-Dist: ibis-framework[mssql]>=10.6.0; extra == "mssql"
Provides-Extra: mysql
Requires-Dist: ibis-framework[mysql]>=10.6.0; extra == "mysql"
Provides-Extra: oracle
Requires-Dist: ibis-framework[oracle]>=10.6.0; extra == "oracle"
Provides-Extra: postgres
Requires-Dist: ibis-framework[postgres]>=10.6.0; extra == "postgres"
Provides-Extra: risingwave
Requires-Dist: ibis-framework[risingwave]>=10.6.0; extra == "risingwave"
Provides-Extra: snowflake
Requires-Dist: ibis-framework[snowflake]>=10.6.0; extra == "snowflake"
Provides-Extra: sqlite
Requires-Dist: ibis-framework[sqlite]>=10.6.0; extra == "sqlite"
Provides-Extra: trino
Requires-Dist: ibis-framework[trino]>=10.6.0; extra == "trino"
Provides-Extra: pyspark
Requires-Dist: ibis-framework[pyspark]>=10.6.0; extra == "pyspark"
Provides-Extra: all
Requires-Dist: toolfront[bigquery]; extra == "all"
Requires-Dist: toolfront[clickhouse]; extra == "all"
Requires-Dist: toolfront[databricks]; extra == "all"
Requires-Dist: toolfront[druid]; extra == "all"
Requires-Dist: toolfront[duckdb]; extra == "all"
Requires-Dist: toolfront[mssql]; extra == "all"
Requires-Dist: toolfront[mysql]; extra == "all"
Requires-Dist: toolfront[oracle]; extra == "all"
Requires-Dist: toolfront[postgres]; extra == "all"
Requires-Dist: toolfront[pyspark]; extra == "all"
Requires-Dist: toolfront[risingwave]; extra == "all"
Requires-Dist: toolfront[snowflake]; extra == "all"
Requires-Dist: toolfront[sqlite]; extra == "all"
Requires-Dist: toolfront[trino]; extra == "all"
Dynamic: license-file

<p align="center">
  <a href="https://github.com/statespace-tech/toolfront">
    <img src="https://raw.githubusercontent.com/statespace-tech/toolfront/main/docs/assets/images/logo.png" width="150" alt="ToolFront Logo">
  </a>
</p>

<div align="center">

# ToolFront

*Data environments for AI agents*

[![Test Suite](https://github.com/statespace-tech/toolfront/actions/workflows/test.yml/badge.svg)](https://github.com/statespace-tech/toolfront/actions/workflows/test.yml)
[![PyPI package](https://img.shields.io/pypi/v/toolfront?color=%2334D058&label=pypi%20package)](https://pypi.org/project/toolfront/)
[![Discord](https://img.shields.io/discord/1323415085011701870?label=Discord&logo=discord&logoColor=white&style=flat-square)](https://discord.gg/rRyM7zkZTf)
[![X](https://img.shields.io/badge/Statespace-black?style=flat-square&logo=x&logoColor=white)](https://x.com/statespace_tech)

</div>

---

**Documentation: [docs.toolfront.ai](http://docs.toolfront.ai/)**

**Source code: [https://github.com/statespace-tech/toolfront](https://github.com/statespace-tech/toolfront)**

---

## Installation

Install `toolfront` with your favorite PyPI package manager.

```bash
pip install toolfront
```

## Quickstart

ToolFront helps you organize AI workflows into independent tasks with **environments**.

```bash
environment/
├── index.md
├── pages/
│   ├── text2sql.md
│   ├── document.md
│   └── api.md
└── data/
    ├── invoices/
    └── logs/

5 directories, 15 files
```

<details open>
<summary><b>Landing Page</b></summary>

Declare task instructions and tools in Markdown files.

```markdown
---
tools:
  - [date, +%Y-%m-%d]

---

# Landing Page

- Include links to [pages](./pages)
- Add tool commands to frontmatters
- Agents learn tools with `--help`
```

</details>

<details>
<summary><b>Text-to-SQL</b></summary>

Create text-to-SQL tasks with ToolFront's built-in [database CLI](https://docs.toolfront.ai/pages/database_cli/).

```markdown
---
tools:
  - [toolfront, database, $DB_URL]

---

# Text-to-SQL

- Add database metadata and context
- Agents can list and inspect tables
- All queries are read-only
```

</details>

<details>
<summary><b>Document RAG</b></summary>

Retrieve information from data files like `.txt`, `.csv`, and `.json`.

```markdown
---
tools:
  - [python, extract.py]

---

# Document RAG

- Add data files and descriptions
- Agents read and search documents
- Use custom tools to process data
```

</details>

<details>
<summary><b>API Integration</b></summary>

Fetch live data with calls to external APIs.

```markdown
---
tools:
  - [curl, "https://api.com/v1/user"]

---

# API Integration

- Define API endpoints as tools
- Pass env `$VARS` for secrets
- Agents fetch live external data
```

</details>

Agents browse environments to get work done, using tools and following instructions as needed.

<details open>
<summary><b>Python SDK</b></summary>

Run Python agents on environments with the [SDK](https://docs.toolfront.ai/pages/python_sdk/).

```python
from toolfront import Environment

env = Environment(url="file:///path/environment")

response = env.run("What's our average ticket size?", model="openai:gpt-5")
```

</details>

<details>
<summary><b>MCP Server</b></summary>

Connect your own agents to environments with the [MCP Server](https://docs.toolfront.ai/pages/mcp_server/).

```json
{
  "mcpServers": {
    "toolfront": {
      "command": "uvx",
      "args": ["toolfront", "mcp", "file:///path/environment"]
    }
  }
}
```

</details>

## Deploy with ToolFront Cloud

Instantly deploy your environments with [ToolFront Cloud](https://docs.toolfront.ai/pages/toolfront_cloud/).

```bash
toolfront deploy ./path/environment
```

This gives you a secure environment URL your agents can access from anywhere.

```python
Environment(url="https://cloud.toolfront.ai/user/environment", params={"API_KEY": ...})
```

ToolFront Cloud is in beta. To request access, join our [Discord](https://discord.gg/rRyM7zkZTf) or email `esteban[at]kruskal[dot]ai`.


## Community & Contributing

- **Discord**: Join our [community server](https://discord.gg/rRyM7zkZTf) for real-time help and discussions
- **X**: Follow us [@toolfront](https://x.com/toolfront) for updates and news
- **Issues**: Report bugs or request features on [GitHub Issues](https://github.com/statespace-tech/toolfront/issues)

## License

This project is licensed under the terms of the MIT license.
