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 LLMs to analyze projects, generate tools, and execute them in a sandboxed environment — all through a modern web dashboard or CLI.
Quick Start
# 1. Install
pip install llm-tool-maker
# 2. Initialize (detects Ollama, creates DB, writes .env)
llm-tool-maker init
# 3. Launch the dashboard
llm-tool-maker ui
That's it. No PostgreSQL, no external services — just your local Ollama instance. The dashboard opens at http://localhost:5000.
Features
| Feature | Description |
|---|---|
| Zero-setup persistence | SQLite by default (stdlib, no dependencies). Opt-in PostgreSQL for production. |
| Pluggable LLMs | Ollama (local), OpenAI, or Anthropic — swap via --provider |
| Sandboxed execution | Subprocess runner with module whitelist, no network, configurable timeout, auto-retry with dep install |
| 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 | AST-based import scanning, 200+ stdlib modules, 50+ module→package mappings, auto-install |
| Remote API client | ToolMakerClient lets you consume Tool Maker as a REST service |
| Docker Compose | One-command deployment with Ollama + PostgreSQL + the app |
Installation
# From PyPI
pip install llm-tool-maker
# With PostgreSQL support (optional)
pip install 'llm-tool-maker[postgres]'
# All extras
pip install 'llm-tool-maker[all]'
# From source
git clone https://github.com/codewithwest/project_tool-maker.git
cd project_tool-maker
uv sync
Usage
CLI
llm-tool-maker init # One-time setup (checks Ollama, creates DB, writes .env)
llm-tool-maker ui # Launch web dashboard
llm-tool-maker analyze <path> # Scan a project
llm-tool-maker pipeline <goal> # Run full autonomous pipeline
llm-tool-maker run <file> # Execute a tool file
llm-tool-maker config show # View configuration
llm-tool-maker migrate up # Run DB migrations
llm-tool-maker --help # All commands
Python API
from tool_maker import ToolMaker
# Use local Ollama (default)
tm = ToolMaker(llm_provider="ollama", model="llama3.2")
# Or OpenAI
tm = ToolMaker(llm_provider="openai", api_key="sk-...", model="gpt-4o-mini")
# Or Anthropic
tm = ToolMaker(llm_provider="anthropic", api_key="sk-...", model="claude-sonnet-4-20250514")
# Analyze, generate, execute
info = tm.analyze_project("/path/to/project")
result = tm.create_and_execute_tool("Parse CSV files and return row count")
Remote API Client
Use Tool Maker as a remote service from any Python project:
from tool_maker import ToolMakerClient
client = ToolMakerClient("http://localhost:5000")
tools = client.list_tools()
result = client.execute("print('hello world')")
client.run_pipeline("Build a CLI tool that counts lines of code")
API-only Mode
Serve just the REST API (no Jinja templates):
llm-tool-maker ui --api-only
Database
Zero-config: SQLite is used automatically when no TOOLMAKER_DB_DSN is set. The database file lives at ~/.config/tool-maker/data.db.
PostgreSQL (for production):
export TOOLMAKER_DB_DSN="postgresql://user:pass@localhost:5432/toolmaker"
llm-tool-maker ui
Migrations run automatically on startup.
Docker
docker compose up
This starts Ollama, PostgreSQL, and the app — reachable at http://localhost:5000.
Environment Variables
| Variable | Default | Description |
|---|---|---|
TOOLMAKER_DB_DSN |
"" (SQLite) |
PostgreSQL DSN. Empty = SQLite backend. |
TOOLMAKER_DB_PATH |
~/.config/tool-maker/data.db |
SQLite database file path |
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 — IDE-style editor with sidebar (Saved + Database tools), command bar, tabbed results
- Analyze — scan a project and inspect its structure
- Provider — configure LLM provider and test prompts
- Config — manage database, migrations, sandbox whitelist, dependency approvals
- Docs — view release notes and README, rendered as formatted markdown
Project Structure
src/tool_maker/
├── __init__.py # Public API exports
├── client.py # ToolMakerClient (remote HTTP client)
├── config.py # ToolMakerConfigFile
├── tool_maker.py # Main orchestrator
├── tool_fixer.py # LLM-driven tool fixer
├── analyzer/ # AST-based project scanner
├── cli/ # CLI argument parsing and handlers
├── db/ # SQLite + PostgreSQL backends, models, migrations
├── llm/ # Ollama, OpenAI, Anthropic providers
├── 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.3.0.tar.gz.
File metadata
- Download URL: llm_tool_maker-0.3.0.tar.gz
- Upload date:
- Size: 140.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fa40063e34cdf12c9d5f8e19fdc958b88ba229aa54a807980fa7aac9115d0240
|
|
| MD5 |
ce3f73a7a37543141b7f1bd316dfb281
|
|
| BLAKE2b-256 |
c33f05f58636cecc9d1e4acfe82650ba2abed6687eae6634dfdd95fbd40aa146
|
Provenance
The following attestation bundles were made for llm_tool_maker-0.3.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.3.0.tar.gz -
Subject digest:
fa40063e34cdf12c9d5f8e19fdc958b88ba229aa54a807980fa7aac9115d0240 - Sigstore transparency entry: 2009545780
- Sigstore integration time:
-
Permalink:
codewithwest/project_tool-maker@ab52816e86b67c767302cdf5e71047aeec9d9cb4 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/codewithwest
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ab52816e86b67c767302cdf5e71047aeec9d9cb4 -
Trigger Event:
push
-
Statement type:
File details
Details for the file llm_tool_maker-0.3.0-py3-none-any.whl.
File metadata
- Download URL: llm_tool_maker-0.3.0-py3-none-any.whl
- Upload date:
- Size: 88.2 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 |
0a5194b184f69170eab209c54a432c626e2b611d97e79ea2e510ec1bd325eb86
|
|
| MD5 |
b8025dbf8ab451bd51865419162e4d4d
|
|
| BLAKE2b-256 |
a3dcbbe0db9d6869d3a9854221f63c0353fffee57ac09ba20a682d88f0e42330
|
Provenance
The following attestation bundles were made for llm_tool_maker-0.3.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.3.0-py3-none-any.whl -
Subject digest:
0a5194b184f69170eab209c54a432c626e2b611d97e79ea2e510ec1bd325eb86 - Sigstore transparency entry: 2009545834
- Sigstore integration time:
-
Permalink:
codewithwest/project_tool-maker@ab52816e86b67c767302cdf5e71047aeec9d9cb4 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/codewithwest
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@ab52816e86b67c767302cdf5e71047aeec9d9cb4 -
Trigger Event:
push
-
Statement type: