Turn your data into shareable LLM apps in minutes. All in pure Markdown. Zero boilerplate.
Documentation: docs.toolfront.ai
Source code: https://github.com/statespace-tech/toolfront
ToolFront is a declarative framework for building modular LLM applications in Markdown.
Start with one file: README.md
---
tools:
- [date]
---
# Instructions
- Run `date` to check today's dateRun your app locally:
toolfront serve .Note: Runs on
http://127.0.0.1:8000
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.stdoutTypeScript
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()
}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 filesUpdate 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 filesAdd 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 APINote: 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 queriesNote: 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)
Create a free Statespace account to deploy authenticated private apps:
toolfront deploy . --privateAlternatively, share public apps with the community:
toolfront deploy . --publicNote Statespace gives you app URLs you can paste in prompts and instructions.
Install toolfront with your favorite PyPI package manager:
pip
pip install toolfrontuv
uv add toolfrontpoetry
poetry add toolfront- Discord: Join our community server for real-time help and discussions
- X: Follow us @statespace_tech for updates and news
- Issues: Report bugs or request features on GitHub Issues
This project is licensed under the terms of the MIT license.