Skip to content

statespace-tech/toolfront

Repository files navigation

ToolFront

ToolFront

Turn your data into shareable LLM apps in minutes. All in pure Markdown. Zero boilerplate.

Test Suite Python 3.10+ PyPI package License Discord X


Documentation: docs.toolfront.ai

Source code: https://github.com/statespace-tech/toolfront


ToolFront is a declarative framework for building modular LLM applications in Markdown.

Example

Create it

Start with one file: README.md

---
tools:
  - [date]
---

# Instructions
- Run `date` to check today's date

Serve it

Run your app locally:

toolfront serve .

Note: Runs on http://127.0.0.1:8000

Ask it

Include the app URL in your prompts:

Claude Code
claude "Get today's date from http://127.0.0.1:8000"
GitHub Copilot
copilot "Get today's date from http://127.0.0.1:8000"
Codex
codex "Get today's date from http://127.0.0.1:8000"

For custom agents, add an HTTP request tool:

Python
import subprocess

@tool
def curl_tool(url: str, args: list[str]) -> str:
    """Execute curl commands to interact with Statespace apps."""
    result = subprocess.run(
        ['curl', *args, url],
        capture_output=True,
        text=True
    )
    return result.stdout
TypeScript
import { execFileSync } from 'child_process';

/**
 * Execute curl commands to interact with Statespace apps.
 */
function curlTool(url: string, args: string[]): string {
    const result = execFileSync('curl', [...args, url], {
        encoding: 'utf-8'
    });
    return result.toString();
}
Rust
use std::process::Command;

/// Execute curl commands to interact with HTTP endpoints.
fn curl_tool(url: &str, args: Vec<&str>) -> String {
    let output = Command::new("curl")
        .args(&args)
        .arg(url)
        .output()
        .unwrap();
    String::from_utf8_lossy(&output.stdout).to_string()
}

Complex example

Upgrade it

Your app can grow into a full project:

project/
├── README.md
├── data/
│   ├── log1.txt
│   ├── log2.txt
│   └── log3.txt
└── src/
    ├── agentic_rag.md
    ├── text2sql.md
    └── vector_search.md

3 directories, 9 files

Update README.md with CLI tools to progressively discover and read other files:

---
tools:
  - [date]
  - [ls]
  - [cat]
---

# Instructions
- Run `date` to check today's date
- Use `ls` and `cat` to discover and read other files

Compose it

Add pages and CLI tools for different workflows:

Vector Search
---
tools:
  - [curl, -X, POST, https://host.pinecone.io/records/namespaces/user/search]
---

# Vector search instructions:
- Query documents with your vector database API

Note: replace the API with your own (e.g., Pinecone, Weaviate, Qdrant)

Text-to-SQL
---
tools:
  - [psql, -U, $USER, -d, $DB, -c, { regex: "^SELECT\b.*" }]
---

# Text-to-SQL instructions:
- Use `psql` for read-only PostgreSQL queries

Note: use your own database CLI (e.g., mysql, sqlite3, mongosh).

Agentic RAG
---
tools:
  - [grep, -r, -i, { }, ../data/]
---

# Document search instructions:
- Use `grep` to search documents in `../data/`

Note: apps can include any file type (e.g. .csv, .sqlite, .json)

Deploy it

Create a free Statespace account to deploy authenticated private apps:

toolfront deploy . --private

Alternatively, share public apps with the community:

toolfront deploy . --public

Note Statespace gives you app URLs you can paste in prompts and instructions.

Installation

Install toolfront with your favorite PyPI package manager:

pip
pip install toolfront
uv
uv add toolfront
poetry
poetry add toolfront

Community & Contributing

License

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