Skip to main content

MechaHarness

MechaHarness

Python agent harness for hosts that compose inference safely — not a thin chat-client wrapper. Founding principles:

  1. Modular via dependency injection — pyiv MechaHarnessConfig; hosts subclass and compose (no forked enums / string registries)
  2. Multi-model / lanes native — reason, judge, and media lanes; Completion / Judgement / Generation outcomes
  3. Cost in the object model — CostAccountant on the harness path so runs cannot quietly go AWOL on spend
  4. EventLog telemetry built in — queryable lifecycle, inference, tools, cost, and access events on every run

Also: deny-by-default grants / CompoundPolicy, and host-extendable open identity. Docs: https://rl337.org/mechaharness/

Install

pip install mechaharness

Requires Python 3.9+. Unreleased main:

pip install git+https://github.com/rl337/mechaharness.git

Quick start

# List backends / harness families
mechaharness backends
mechaharness families

# Local LM Studio (OpenAI-compatible)
mechaharness run "What is 2+2?" \
  --backend lmstudio \
  --family tool_loop \
  --model local-model

# OpenAI
export MECHA_API_KEY=sk-...
mechaharness run "Hello" --backend openai --model gpt-4o-mini

# HTTP API
mechaharness serve --port 8080
curl -s http://127.0.0.1:8080/health

Environment variables use the MECHA_ prefix (MECHA_API_KEY, MECHA_INFERENCE_BACKEND, MECHA_MODEL, MECHA_BASE_URL, …).

Library usage

Non-DI (OpenAPI-shaped):

import asyncio
from mechaharness import RunRequest, run

async def main() -> None:
    result = await run(RunRequest(prompt="What is 19 + 23?", backend="lmstudio"))
    print(result.final_text)

asyncio.run(main())

DI (pyiv Config hooks):

from pyiv import get_injector

from mechaharness.di import MechaHarnessConfig
from mechaharness.harness.base import AbstractHarness
from mechaharness.harness.tool_loop import ToolLoopHarness
from mechaharness.inference.openai_compat import OpenAICompatStrategy


class MyConfig(MechaHarnessConfig):
    def get_inference_class(self):
        return OpenAICompatStrategy

    def get_harness_class(self):
        return ToolLoopHarness


injector = get_injector(MyConfig)
harness = injector.inject(AbstractHarness)

See Dependency injection.

Extending

Subclass InferenceStrategy (constructor takes Settings) and return it from get_inference_class(), or merge it into SettingsConfig.inference_classes(). Subclass AbstractHarness and return it from get_harness_class().

Development

python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev,docs]"
./run_checks.sh

run_checks.sh is what CI runs: ruff, mypy, pytest, Sphinx, and CLI smoke. EventLog + cost without a GPU:

mechaharness run "What is 2+2?" --backend mock --family pass_through --model mock --json

Design notes

Concern Pattern Why
Wiring pyiv Config hooks DI-first; hosts inject MechaHarness types
Provider I/O Strategy Swap cloud/local without touching agent logic
Agent loop Template method hierarchy Share turn accounting; specialize stop/tool rules per model family
Frontends OpenAPI RunRequest / run() Same contract for CLI, HTTP, and non-DI Python
Bindings later Pydantic + OpenAPI Types stay serializable; API is the first non-Python client surface

Release files for mechaharness 0.1.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 mechaharness 0.1.0
File Size Uploaded
mechaharness-0.1.0.tar.gz 61.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for mechaharness 0.1.0
File Interpreter ABI Platform
mechaharness-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 126.1 kB

Release files / mechaharness-0.1.0.tar.gz

Download URL mechaharness-0.1.0.tar.gz
Size 61.9 kB
Tags Source
SHA-256 checksum
How to use checksums
f940e582651ae5beabcf75e459a26caaaca0f726877399862b8f4882df3a2314
BLAKE2b-256 checksum
How to use checksums
b74d333cf87c57f0a82f3231785281bc68176669301fe8e510eedbf43dae5e50
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / mechaharness-0.1.0-py3-none-any.whl

Download URL mechaharness-0.1.0-py3-none-any.whl
Size 64.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6db22e6fe7911da18ecda1b9087266af7c5b94b57f788de817250c434c23cafc
BLAKE2b-256 checksum
How to use checksums
99c556b3de5d4fa8acc37e344b0098d5202ec0d0beb268b8c69cf549e62b7953
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

0.1.0 This release

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