mh-local
A self-contained local Agent assistant powered by minimal-harness. It bundles a FastAPI backend with a built-in Vue 3 SPA frontend — no database, no external service dependencies.
Latest version: 0.1.1
Features
- No cloud required — runs entirely on localhost, single-user
- Built-in web UI — chat interface with agent, scene, tool, and LLM provider management
- No database — file-based sessions and registries under
~/.config/mh-local/ - Auto-discovery — automatically creates a workspace scene from the current directory
- Custom tool scripts — drag-and-drop upload
.pyfiles; the gateway validates required metadata and the shebang interpreter, then runsexecute()in a child process with streamedToolProgressevents
Quick start
uv add mh-local
uv run mh
Your browser will open automatically to http://127.0.0.1:<port>.
On first run, you'll be prompted to configure an LLM provider (API key, base URL) via the web UI's Provider management page.
Usage
After starting, mh-local serves a full-featured chat UI at the local URL with:
- Chat — converse with AI agents with streaming responses
- Manage Agents — view and configure built-in agents (General Assistant
triage, Tool Makertool-maker) - Manage Tools — inspect built-in tools (
bash,handoff,discover_agents,local_file_operator) or upload custom tool scripts - Manage Scenes — workspace management for different projects (one auto-created per
cwdon first launch) - Manage Providers — configure LLM providers (OpenAI, Anthropic, etc.)
How it works
mh-local
├── FastAPI app (mh_gateway-based) — serves API + static files
├── Vue 3 SPA — chat UI served at /
├── File-based stores:
│ ├── sessions/ — conversation history
│ ├── providers.json — LLM provider config
│ └── registry.json — agents, tools, scenes
└── Local auth — auto-grants admin access
Configuration
All configuration is done through the web UI. Persistent data lives at:
| Path | Contents |
|---|---|
~/.config/mh-local/providers.json |
LLM provider credentials |
~/.config/mh-local/registry.json |
Agent/tool/scene registrations |
~/.config/mh-local/sessions/ |
Chat session files |
~/.config/mh-local/logs/ |
Runtime logs |
Development
# Build frontend (SPA + component UMD bundles)
powershell scripts/build-mh-local-frontend.ps1 # Windows
bash scripts/build-mh-local-frontend.sh # Linux/macOS
# Run
uv run mh
Metadata
Release files for mh-local 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mh_local-0.1.1.tar.gz | 202.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mh_local-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 421.6 kB
Release files / mh_local-0.1.1.tar.gz
| Download URL | mh_local-0.1.1.tar.gz |
|---|---|
| Size | 202.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
32a85554c1d210ae0a2c00f48cbc926097c800779bb8bf464fb8f5e74988ecaa
|
|
BLAKE2b-256 checksum How to use checksums |
c272debbd775341a5b1588cca47db659e6dd46fb12f9fbd0a11c572483b93c45
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / mh_local-0.1.1-py3-none-any.whl
| Download URL | mh_local-0.1.1-py3-none-any.whl |
|---|---|
| Size | 219.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
615d4aad534dfb8d46c8a166019823ef8a9cdf5ba8798613e5c51e0da6fcd0f5
|
|
BLAKE2b-256 checksum How to use checksums |
3c0f46df71dd6148aa1a3772876c2bf8e4facff579c43ef344fa13e34b8a6e74
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.11.28 {"installer":{"name":"uv","version":"0.11.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|