Skip to content

Rust workspace · MIT

Tooling for AI-assisted development, in one workspace.

trusty-tools is one Cargo workspace for the trusty-* ecosystem: hybrid code search, a memory palace, and a code-analysis sidecar, each with an MCP server.

License
MIT
MSRV
Rust 1.94
Prebuilt for
macOS arm64, Linux x86_64, Linux arm64

What trusty-tools is

A single Cargo workspace holding the whole trusty-* family — shared libraries, daemons and MCP servers, a multi-agent platform, and an orchestrator. Everything is co-located under crates/, so a change spanning several of them is one commit against one lockfile.

Each crate versions, tags, and publishes independently, and everything is MIT licensed. Five of the six flagship tools below speak the Model Context Protocol, so they plug into Claude Code and any other MCP client without a bespoke integration; the sixth is a command-line analytics tool.

Six flagship tools

Each one has its own page — what it does, how it works, and how to install it.

UNIT 01

trusty-search

Hybrid code search

  • BM25, vector, and knowledge-graph retrieval fused with Reciprocal Rank Fusion
  • One machine-wide daemon, unlimited named project indexes
  • Query-intent routing across definition, usage, conceptual, and bug/debt lookups
  • Branch-aware ranking and caller/callee chain expansion

trusty-search →

What’s new

0.44.0· 2026-08-10

  • Added Reindex now reports a per-stage wall-clock breakdown — hash-cache load, corpus carryover copy, batch pipeline, prune, HNSW commit, corpus commit, KG, and an explicit unattributed remainder — in the reindex phase timings log line and in the complete SSE event's timings object. This replaces the derived model_load_approx_ms residual, which folded five distinct stages into one number computed by subtraction, leaving the cost of a corpus carryover copy unmeasurable. Adds tests/reindex_stage_profile.rs, an #[ignore]d harness that prints cold and warm breakdowns against a throwaway temp corpus (#5024).
  • Fixed Updated doc comments, Cargo.toml, and CLAUDE.md that still named open-mpm as a consumer/orchestrator to say trusty-agents (renamed in #831), and removed an orphaned .open-mpm/agents/ fixture directory (2 stray .toml files, unreferenced by any code) that was left behind in the crate tree.
  • Fixed cargo test -p trusty-search compiles again. #5345 gave index_status and chunks a JSON body, changing their error type from StatusCode to (StatusCode, Json<Value>), but two assert_eq! calls in deleted_cold_parked_index_is_404_not_a_permanent_503 still compared the whole tuple against a bare StatusCode, so the lib-test target failed to build and took every gate on main with it. The three guards that test pins now destructure the response and assert both the 404 and the unknown index: <id> body, so a regression that returns 404 while still advertising restore_via is caught rather than passing on the code alone.

All changes →

UNIT 02

trusty-memory

Memory palace storage

  • Named palaces, one per project, with rooms and wings inside them
  • Hybrid BM25 + vector recall over an HNSW index and a redb store
  • A knowledge graph of subject/predicate/object triples alongside the prose
  • A dream cycle that consolidates near-duplicates instead of hoarding them

trusty-memory →

What’s new

0.22.0· 2026-07-27

  • Changed trusty-common requirement raised to ^0.27 (was ^0.26.2): 0.27.0 makes ChatEvent #[non_exhaustive], which a ^0.26 requirement cannot express. Because the re-exports above are public, this requirement change is itself the reason for the MINOR level.
  • Fixed Post-publish source drift — the SSE chat handler did not compile against the ChatEvent::Usage variant. src/chat/handler.rs gained its ChatEvent::Usage(_) arm in #4112, after 0.21.2 was published, so the published 0.21.2 artifact cannot build against any trusty-common carrying that variant. This release ships the arm. The match also gained a wildcard arm now that ChatEvent is #[non_exhaustive], so the next variant addition is no longer breaking here.

All changes →

UNIT 03

trusty-mpm

Multi-agent orchestration

  • One `tm` binary: daemon, CLI, TUI dashboard, and MCP server
  • Sessions and worktrees per project, tracked across restarts
  • Claude Code lifecycle hooks relayed into the daemon
  • Remote control from Telegram or Slack when you are away from the terminal

trusty-mpm →

What’s new

1.3.5· 2026-08-10

  • Added BASE-AGENT.md (synced to trusty-code) adds a "Never Directly Monitor a Declarative Process" rule: run gates in their quiet/filtered form (--quiet, tail/grep for the summary line, or tm compress --tool "<tool-name>"), re-run only the failing case with full output, and never gh pr checks --watch. Prompted by two agents burning 415k and 546k tokens streaming per-test and per-check-poll output directly. States explicitly that filtered output is still raw output — the evidence rule is unchanged
  • Added BASE-AGENT.md (synced to trusty-code) now states a "No Subagent Fan-Out" rule: a delegated agent does its own work or reports back to its dispatcher — it never spawns its own subagents. The Agent/Task tool is reserved for the top-level PM/orchestrator. Prompted by a rust-engineer spawning an untyped child agent that bypassed the roster entirely for routine documentation work
  • Added BASE-AGENT.md (synced to trusty-code) adds "Agent-Authored Prose", extending the PM's "Write Plainly" register (core.md, #4757) to the agent side: review verdicts, reports back to the PM, ticket/PR body text, and generated documentation — lead with the concrete referent, state cause then effect, show before-and-after, cut hedges and process narration, end options as a bare enumeration. Governs how, never whether: the evidence rule is unchanged

All changes →

UNIT 04

trusty-analyze

Code analysis sidecar

  • Cyclomatic and cognitive complexity per chunk, file, and index
  • Code-smell detection with configurable thresholds and named categories
  • Git-blame temporal decay, so stale complex code sorts to the top
  • Tree-sitter adapters for 14 languages, behind one HTTP API and one MCP server

trusty-analyze →

What’s new

0.9.0· 2026-08-10

  • Breaking POST /webhooks/github is retired and now returns 404 (#5181, ADR-0034). GitHub deliveries reach trusty-analyze only through trusty-console's POST /api/webhooks/{source}, which verifies the HMAC once, spools the payload durably, and relays over UDS to trusty-analyze webhook-listen. The route is deleted rather than stubbed, so a delivery still aimed at it fails visibly at GitHub instead of being acknowledged and dropped. Anyone with a GitHub webhook pointed at trusty-analyze directly must repoint it at the console. The analysis pipeline is unchanged — the route's handler already delegated to webhook_drain, which the UDS path uses.
  • Breaking Removed public API: service::handlers::review::github_webhook_handler, core::verify_webhook_signature (and core::github::verify_webhook_signature), and AnalyzerAppState::{webhook_secret, with_webhook_secret}. This crate no longer verifies a webhook signature at all; that is trusty-console's single implementation (ADR-0034 §3), so the hmac, sha2 and hex dependencies are dropped.
  • Breaking webhook_listener::run now takes a TrustySearchClient, which it needs to run the analysis pipeline. Callers must pass the client they already build from --search-url (#5192).

All changes →

UNIT 05

trusty-review

LLM code review

  • Reviews a GitHub PR, a git ref range, or a diff on stdin
  • Injects code context from trusty-search and metrics from trusty-analyze
  • A letter grade alongside an APPROVE / REQUEST_CHANGES / BLOCK verdict
  • Skips a review it cannot ground rather than issue a confident guess

trusty-review →

What’s new

0.15.0· 2026-08-12

  • Breaking report now always synthesizes, and a synthesis that produces no verified prose fails the run instead of writing a deterministic-only report (#5454).
  • Breaking --synthesize is accepted but ignored, and prints a deprecation line — the flag stays parseable so scripts and older tga invocations keep working.
  • Breaking report checks OPENROUTER_API_KEY before reading the manifest, so a missing credential costs nothing but the error.

All changes →

UNIT 06

trusty-git-analytics

Developer analytics from git

  • Walks local repositories into SQLite, then classifies every commit
  • A tiered classification cascade, with an optional LLM tier at the end
  • Per-author and per-week velocity, quality, and DORA reporting
  • CSV, JSON, and Markdown output from one `tga analyze` run

trusty-git-analytics →

What’s new

2.17.0· 2026-08-12

  • Changed audit now passes --synthesize to trusty-review report, so the due-diligence report carries a written executive summary, top-risk rationale, and RED/AMBER finding prose. Until now it passed only --analyze, and every audit report ever produced was fully deterministic (#5454).
  • Changed audit requires OPENROUTER_API_KEY and checks it before stage 1. An unset or blank key fails immediately, naming the variable and how to set it, rather than after a multi-minute sweep.
  • Changed A failed render now prints the exact command to re-run just the render; manifest.toml is written before the renderer is called, so nothing collected is lost.

All changes →

The rest of the lineup

What else you can install today, and what is still being built. Shared libraries and internal tooling are left out — the workspace glob in the root Cargo.toml is the authoritative list of everything under crates/.

Also shipped

  • trusty-installer

    The tctl install and upgrade control plane

  • trusty-console

    Web dashboard over the trusty services you run

  • trusty-code

    Per-project coding harness (tcode)

  • trusty-gworkspace

    Google Workspace MCP server

In development

  • trusty-agents

    Agentic harness with multi-model routing (tagent)

  • trusty-channels

    Chat-channel MCP servers, starting with Slack

  • trusty-kb

    Personal knowledge base as an MCP server

  • trusty-sld-lint

    Linter for spec-linked documentation

  • trusty-mpm-gui

    Desktop dashboard for trusty-mpm

  • trusty-code-gui

    Desktop shell for the tcode daemon

Install

A bare tctl install brings up the seven managed crates in dependency order. Name one to install just that crate and whatever it needs at runtime.

Bootstrap, then tctl

Recommended. No Rust toolchain needed on a supported platform. Resolves the runtime dependency graph, and keeps macOS signing grants stable across upgrades.

curl -sSf https://raw.githubusercontent.com/bobmatnyc/trusty-tools/main/install.sh | sh
tctl install

Homebrew

Ten formulae in the tap. Installs one binary, without the dependency resolution tctl does.

brew tap bobmatnyc/trusty
brew install bobmatnyc/trusty/trusty-search

From source

Requires Rust 1.94. cargo install writes atomically — never copy a built binary onto your PATH on macOS.

git clone https://github.com/bobmatnyc/trusty-tools
cd trusty-tools
cargo install --path crates/trusty-search --locked

Managed by tctl
trusty-search · trusty-memory · trusty-analyze · trusty-review · tga · trusty-console · trusty-mpm

The bootstrap installer verifies every downloaded tarball against its published SHA-256 checksum. The install script itself is unsigned — read it first if you need higher assurance.

Read the documentation

Guides, references, and architecture decisions for every crate.

Browse docs

trusty-tools

One Cargo workspace for the trusty-* tooling ecosystem. MIT licensed.

© 2026 · MIT · github.com/bobmatnyc/trusty-tools