trusty-mpm 1.7.7

trusty-mpm: unified multi-agent orchestration platform (core, daemon, CLI, TUI, Telegram)
Documentation

trusty-mpm

Harness role: The Meta-Harness — PM-style multi-agent orchestration over coding work. Manages multi-project sessions, relays hooks, and exposes an MCP server to Claude Code sessions. Delegates coding tasks to trusty-code (tcode). See docs/architecture/harnesses.md for the full three-harness architecture and delegation graph.

Why: A single cargo install trusty-mpm should install all trusty-mpm tooling — the background daemon, the CLI, the TUI dashboard, and the Telegram bot — without requiring users to install eight separate packages and coordinate their versions.

What: Unified crate combining the formerly separate trusty-mpm-{core,client,mcp,daemon,cli,tui,telegram} sub-crates into one package with a single [[bin]] target (tm / trusty-mpm) that exposes all functionality via subcommands.

Installation

From GitHub Releases (recommended for binary users)

Prebuilt binaries are available for macOS (Apple Silicon) and Linux (x86_64).

  1. Open GitHub Releases, choose the newest trusty-mpm-v<version> release, and download the archive for your platform.

  2. Extract and install:

    tar xzf trusty-mpm-*.tar.gz
    chmod +x tm trusty-mpm
    sudo mv tm trusty-mpm /usr/local/bin/    # or ~/.local/bin/ if you prefer user install
    
  3. Verify the installation:

    tm --version
    

From Source with Cargo

Requires Rust 1.94 or later (install Rust).

cargo install --git https://github.com/bobmatnyc/trusty-tools trusty-mpm --locked

This builds from the latest commit on main and installs the binaries (tm and trusty-mpm) to ~/.cargo/bin/. Make sure ~/.cargo/bin/ is on your PATH.

To install a specific release, replace <version> with its tag version:

cargo install --git https://github.com/bobmatnyc/trusty-tools --tag trusty-mpm-vx.y.z trusty-mpm --locked

With Homebrew (recommended)

brew tap bobmatnyc/trusty
brew install trusty-mpm

Or install directly without tapping:

brew install bobmatnyc/trusty/trusty-mpm

Homebrew provides:

  • Automatic updates via brew upgrade trusty-mpm
  • Standard macOS / Linux PATH integration
  • Easy dependency management

The formula depends_on "rtk", so a Homebrew install pulls it in: tm compress routes tool output through the rtk binary and falls back to a slower native compressor when it is absent. cargo install users install it separately with brew install rtk. Do not run rtk init — it installs a competing PreToolUse hook, and tm invokes rtk directly.

Prerequisites & Special Cases

System Requirements

  • Node.js (optional): only needed if you plan to use the MPM JavaScript SDK or integrate with third-party JavaScript tooling. The daemon and CLI work independently of Node.
  • OS: macOS 12+ or Linux. Windows support is not yet available.

Binaries Installed

This crate installs two binaries with the same functionality:

  • tm — shorter alias for quick access
  • trusty-mpm — canonical name

Both are identical; choose whichever you prefer. The CLI (tm / trusty-mpm) discovers the running daemon automatically via the standard socket or HTTP port and requires no configuration beyond a running daemon.

Configuration

The daemon reads from ~/.config/trusty-mpm/config.yaml by default. See the trusty-mpm crate README for configuration examples and the full option reference.

tm daemon --config /path/to/config.yaml

Verify Installation

All installations can be verified by running:

tm --version

Expected output: the semantic version of the installed binary (e.g., tm 0.6.2).

Feature Flags

Feature Description Enables
default Common install: CLI + daemon cli, daemon
cli tm / trusty-mpm binary daemon, tui, telegram
daemon Daemon library module + daemon subcommand mcp
mcp MCP server library module —
tui TUI library module (tm tui) ratatui, crossterm
telegram Telegram bot library module (tm telegram) teloxide
gui tm gui subcommand (non-default; pulls in Tauri/WebKit) trusty-mpm-gui (Tauri)

Binary

There is a single binary with two install names: tm (short alias) and trusty-mpm (canonical name), both compiled from the same source.

Binary Feature Description
tm / trusty-mpm cli Unified CLI: daemon control, sessions, projects, TUI, Telegram, MCP

All functionality previously in standalone shim binaries (trusty-mpmd, trusty-mpm-tui, trusty-mpm-telegram, trusty-mpm-gui) is now accessed through subcommands: trusty-mpm daemon, trusty-mpm tui, trusty-mpm telegram, trusty-mpm gui.

Library Modules

trusty_mpm::core       // Domain types: agents, sessions, hooks, IPC protocol
trusty_mpm::client     // Daemon HTTP client, command model, executor
trusty_mpm::mcp        // MCP server: OrchestratorBackend trait + dispatch  (feature: mcp)
trusty_mpm::daemon     // Daemon library: API router, DaemonState, serve_http  (feature: daemon)
trusty_mpm::tui        // ratatui coordinator dashboard  (feature: tui)
trusty_mpm::telegram   // Telegram bot library  (feature: telegram)

Quick Start

# Start the daemon
tm start

# Check status
tm status

# Launch a Claude Code session in the current directory
tm launch

# Open the TUI dashboard
tm tui

# Pair a Telegram bot
tm telegram pair

Token savings on the statusline

The tm statusline bar ends with a 💸 segment showing two whole-number percents: 💸34%/29% is the latest savings row's own reduction, then the mean across every savings row this session recorded (owner ruling 2026-09-15, #8063). Each row's percent is tokens_saved / tokens_before for that row alone, so the badge reports what the last tool call actually saved instead of diluting it across everything the session sent. With one row recorded, both figures are that row's. Three producers write the saved side to a ledger: instruction sources folded into one compiled prompt, bulk reads diverted to a cheap worker, and bash or gate output shrunk by tm compress — the segment itself folds the last two (#7867). A divert row's tokens are the diverted files' count minus the returned summary's; a compress row's are the input's minus the compressed form's, and a run that returned its input unchanged writes none. The segment reads 💸— when nothing has been recorded for the session, and it never renders 0%.

Rows live in ~/.trusty-mpm/usage/savings.jsonl and are folded at read time. The figure is an estimate, and it is NOT subtractable from the cost segment beside it. Mechanism, per-technique basis, and how to read the ledger: docs/trusty-mpm/statusline-savings.md.

GUI Note

The Tauri desktop GUI lives in the separate trusty-mpm-gui crate (it owns build.rs + tauri.conf.json which require Tauri's build system). The gui feature of this crate wraps it as an optional dependency. Building the GUI requires the Tauri prerequisites: xcode-select, rustup, pnpm.

Upgrading / Migration

The standalone shim binaries trusty-mpmd, trusty-mpm-tui, trusty-mpm-telegram, and trusty-mpm-gui have been removed. Their functionality is now exposed through subcommands of the single trusty-mpm (or tm) binary:

Old binary New command
trusty-mpmd [--addr <addr>] trusty-mpm daemon [--addr <addr>]
trusty-mpm-tui trusty-mpm tui
trusty-mpm-telegram trusty-mpm telegram
trusty-mpm-gui trusty-mpm gui (requires --features gui)

Update any external references (launchd LaunchAgent plists, systemd units, Docker CMD, shell aliases, CI scripts) that reference trusty-mpmd to use trusty-mpm daemon --addr <addr> instead. No symlink or wrapper shim is provided — this is a clean break with a documented migration path.

Example launchd plist update:

<!-- Before -->
<string>/Users/you/.cargo/bin/trusty-mpmd</string>

<!-- After -->
<string>/Users/you/.cargo/bin/trusty-mpm</string>
<string>daemon</string>
<string>--addr</string>
<string>127.0.0.1:7880</string>

Architecture

crates/trusty-mpm/
├── src/
│   ├── lib.rs           # Re-exports core::* and client::*
│   ├── core/            # Domain types (agents, sessions, hooks, IPC)
│   ├── client/          # HTTP client + command model
│   ├── mcp/             # MCP server protocol (feature: mcp)
│   ├── daemon/          # HTTP daemon (feature: daemon)
│   ├── tui/             # ratatui dashboard (feature: tui)
│   ├── telegram/        # Telegram bot (feature: telegram)
│   └── bin/
│       └── tm/          # Single CLI entry point (compiled as both `tm` and `trusty-mpm`)
│           ├── main.rs
│           ├── cli.rs
│           ├── commands/
│           ├── formatters/
│           └── types.rs
└── tests/
    ├── e2e/             # HTTP-level daemon integration tests
    └── test_session_lifecycle.rs