An intelligent tool-making package that leverages LLMs to analyze projects and generate tools
Project description
LLM Tool Maker
An intelligent tool-making system that uses local LLMs (via Ollama) to analyze projects, generate tools, and execute them in a sandboxed environment — all through a modern web dashboard or CLI.
Features
- Project Analysis — AST-based scanning of project structure, imports, and entry points
- LLM Tool Generation — generates Python tools from natural language descriptions using local LLMs
- Sandboxed Execution — subprocess runner with module whitelist, no network, and configurable timeout
- Autonomous Pipeline — 6-stage DB-backed pipeline: Analyse → Plan → Validate → Implement → Test → Review, with auto-fix loop
- Web Dashboard — 6-page glass-morphism UI (Dashboard, Pipeline, Execute, Analyze, Provider, Config, Docs)
- Dependency Management — auto-detects imports, maps to pip packages, auto-installs via
uv - PostgreSQL Persistence — saves tools, plans, executions, and reviews; migration system included
Installation
# Install globally
uv tool install llm-tool-maker
# Or add to a project
uv add llm-tool-maker
From source
git clone https://github.com/codewithwest/project_tool-maker.git
cd project_tool-maker
uv sync
Quick Start
1. Start Ollama
ollama pull llama3.2 # or any model you prefer
2. Launch the dashboard
tool-maker ui
Opens at http://localhost:5000.
3. Or use the CLI
# Analyze a project
tool-maker analyze /path/to/project
# Run the autonomous pipeline
tool-maker pipeline "Create a function to parse CSV files"
# Execute a saved tool
tool-maker run my-tool
Database Setup
By default, tools work in-memory. For persistence and the full pipeline, set up PostgreSQL:
# Install PostgreSQL (Ubuntu/Debian)
sudo apt install postgresql
sudo systemctl start postgresql
# Create a database
sudo -u postgres createdb tool_maker
# Set the connection string (or export it)
export DATABASE_URL="postgresql://postgres:postgres@localhost:5432/tool_maker"
Then start the dashboard — migrations run automatically on first connection.
Environment Variables
| Variable | Default | Description |
|---|---|---|
DATABASE_URL |
postgresql://postgres:postgres@localhost:5432/tool_maker |
PostgreSQL connection string |
OLLAMA_BASE_URL |
http://localhost:11434 |
Ollama server URL |
OLLAMA_MODEL |
llama3.2 |
Default LLM model |
SANDBOX_TIMEOUT |
30 |
Tool execution timeout in seconds |
MAX_FIX_ATTEMPTS |
3 |
Auto-fix loop retry limit |
TOOL_MAKER_CONFIG |
~/.config/tool-maker/config.toml |
Config file path |
Web Dashboard
Pages
- Dashboard — overview, live terminal, quick stats
- Pipeline — run the 6-stage autonomous pipeline with progress tracking
- Execute — edit and run tools in an IDE-style editor; browse saved tools in the sidebar
- Analyze — scan a project and inspect its structure
- Provider — configure Ollama model and test prompts
- Config — manage database, migrations, sandbox whitelist, dependency approvals
- Docs — view release notes and this README, rendered as formatted markdown
API Endpoints
20+ REST endpoints powering the dashboard:
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/pipeline |
Run the autonomous pipeline |
| GET | /api/analyze |
Analyze a project path |
| POST | /api/execute |
Execute a tool |
| POST | /api/fix |
Fix a broken tool via LLM |
| POST | /api/refine |
Refine a tool with instructions |
| POST | /api/explain |
Get an LLM explanation of execution |
| GET | /api/deps/check |
Check tool dependencies |
| POST | /api/deps/approve |
Approve a package for auto-install |
| GET | /api/db/migrations |
List migration status |
| POST | /api/db/migrate |
Run pending migrations |
Python API
from tool_maker import ToolMaker
tm = ToolMaker(
llm_provider="ollama",
base_url="http://localhost:11434",
model="llama3.2"
)
# Analyze a project
info = tm.analyze_project("/path/to/project")
# Generate and execute a tool
result = tm.create_and_execute_tool("Parse CSV files and return row count")
print(result)
# Or run the full pipeline
result = tm.run_pipeline("Build a CLI tool that counts lines of code")
print(result)
Project Structure
src/tool_maker/
├── __init__.py # ToolMaker orchestrator
├── analyzer/ # AST-based project scanner
├── cli/ # CLI argument parsing and handlers
├── config.py # Configuration loading
├── db/ # PostgreSQL models, connection, migrations
├── llm/ # Ollama provider (HTTPX-based)
├── planner/ # Planner, validator, executor, reviewer
├── tool/ # Generator, executor, sandbox, fixer, deps
└── ui/ # Flask web app (routes, templates, static)
Development
uv sync
uv run ruff check .
uv run pytest
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file llm_tool_maker-0.2.0.tar.gz.
File metadata
- Download URL: llm_tool_maker-0.2.0.tar.gz
- Upload date:
- Size: 135.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
28cdd60c6acda156685de8addebd7ddd8aba58075a94ac96a071d5f7b7d14863
|
|
| MD5 |
0cefdb63b105284a287d4d1de49d5215
|
|
| BLAKE2b-256 |
13057c95bc64ebb87a5be6295c0b1217a788cd69a7a429fe88a993b9119308b9
|
Provenance
The following attestation bundles were made for llm_tool_maker-0.2.0.tar.gz:
Publisher:
release.yml on codewithwest/project_tool-maker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
llm_tool_maker-0.2.0.tar.gz -
Subject digest:
28cdd60c6acda156685de8addebd7ddd8aba58075a94ac96a071d5f7b7d14863 - Sigstore transparency entry: 2007074045
- Sigstore integration time:
-
Permalink:
codewithwest/project_tool-maker@266b12f0f00782444835aeea34ffcb8e0946c869 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/codewithwest
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@266b12f0f00782444835aeea34ffcb8e0946c869 -
Trigger Event:
push
-
Statement type:
File details
Details for the file llm_tool_maker-0.2.0-py3-none-any.whl.
File metadata
- Download URL: llm_tool_maker-0.2.0-py3-none-any.whl
- Upload date:
- Size: 82.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
354083f189b3a77ea48165d73360f507f0e590db2647c122bd052e6e41a4ee33
|
|
| MD5 |
a789196112dfcce8a24262aa1795813e
|
|
| BLAKE2b-256 |
4072a4d5eeb461b495e4a0370e4aea3082b1324bcaf96e04e0563afecc941f72
|
Provenance
The following attestation bundles were made for llm_tool_maker-0.2.0-py3-none-any.whl:
Publisher:
release.yml on codewithwest/project_tool-maker
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
llm_tool_maker-0.2.0-py3-none-any.whl -
Subject digest:
354083f189b3a77ea48165d73360f507f0e590db2647c122bd052e6e41a4ee33 - Sigstore transparency entry: 2007074132
- Sigstore integration time:
-
Permalink:
codewithwest/project_tool-maker@266b12f0f00782444835aeea34ffcb8e0946c869 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/codewithwest
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@266b12f0f00782444835aeea34ffcb8e0946c869 -
Trigger Event:
push
-
Statement type: