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.
# 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 uiThat's it. No PostgreSQL, no external services — just your local Ollama instance. The dashboard opens at http://localhost:5000.
| 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 |
# 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 syncllm-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 commandsfrom 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")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")Serve just the REST API (no Jinja templates):
llm-tool-maker ui --api-onlyZero-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 uiMigrations run automatically on startup.
docker compose upThis starts Ollama, PostgreSQL, and the app — reachable at http://localhost:5000.
| 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 |
- 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
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)
uv sync
uv run ruff check .
uv run pytestMIT