Skip to main content

LLM Tool Maker

CI PyPI version Python versions License: MIT

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

Metadata

Release files for llm-tool-maker 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for llm-tool-maker 0.3.0
File Size Uploaded
llm_tool_maker-0.3.0.tar.gz 140.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for llm-tool-maker 0.3.0
File Interpreter ABI Platform
llm_tool_maker-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 228.6 kB

Release files / llm_tool_maker-0.3.0.tar.gz

Download URL llm_tool_maker-0.3.0.tar.gz
Size 140.4 kB
Tags Source
SHA-256 checksum
How to use checksums
fa40063e34cdf12c9d5f8e19fdc958b88ba229aa54a807980fa7aac9115d0240
BLAKE2b-256 checksum
How to use checksums
c33f05f58636cecc9d1e4acfe82650ba2abed6687eae6634dfdd95fbd40aa146
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 29, 2026.

Transparency log

Release files / llm_tool_maker-0.3.0-py3-none-any.whl

Download URL llm_tool_maker-0.3.0-py3-none-any.whl
Size 88.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0a5194b184f69170eab209c54a432c626e2b611d97e79ea2e510ec1bd325eb86
BLAKE2b-256 checksum
How to use checksums
a3dcbbe0db9d6869d3a9854221f63c0353fffee57ac09ba20a682d88f0e42330
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 29, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page