Skip to main content

An intelligent tool-making package that leverages LLMs to analyze projects and generate tools

Project description

LLM Tool Maker

CI PyPI version Python versions License: MIT

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

llm_tool_maker-0.2.0.tar.gz (135.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

llm_tool_maker-0.2.0-py3-none-any.whl (82.9 kB view details)

Uploaded Python 3

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

Hashes for llm_tool_maker-0.2.0.tar.gz
Algorithm Hash digest
SHA256 28cdd60c6acda156685de8addebd7ddd8aba58075a94ac96a071d5f7b7d14863
MD5 0cefdb63b105284a287d4d1de49d5215
BLAKE2b-256 13057c95bc64ebb87a5be6295c0b1217a788cd69a7a429fe88a993b9119308b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for llm_tool_maker-0.2.0.tar.gz:

Publisher: release.yml on codewithwest/project_tool-maker

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

Hashes for llm_tool_maker-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 354083f189b3a77ea48165d73360f507f0e590db2647c122bd052e6e41a4ee33
MD5 a789196112dfcce8a24262aa1795813e
BLAKE2b-256 4072a4d5eeb461b495e4a0370e4aea3082b1324bcaf96e04e0563afecc941f72

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page