The failure this targets is specific: an agent installs `moment` in a project that standardised on `date-fns`, or drops an Express server inside a Next.js app. Putting those decisions in a config file gives it something to check against instead of a habit to guess from. The decision ledger is the other half — structural choices land in `DECISIONS.md` with a timestamp, so next month's session can read what this month decided.
A Node MCP server that reads a `tether.config.json` in your repository and answers the agent's questions from it. `npx tether-mcp init` scans your project manifest, detects the framework and writes a first config with defaults that fit.
- Your tech stack, architecture rules and dependency policy handed to the agent before any structural work — `get_project_invariants`
- A package checked against your policy before installation, coming back as blocked, warned, allowed or needing review, with the alternatives you named — `verify_dependency_addition`
- A proposed file path validated against your conventions — `check_file_structure`
- A coding approach checked against approved patterns and invariants — `verify_code_pattern`
- A timestamped entry appended to `DECISIONS.md` when the agent creates a component or changes a data flow — `log_architectural_decision`
- Server status, registered tools and session telemetry — `health_check`
- Three MCP resources a client can subscribe to: `tether://config`, `tether://architecture` and `tether://decisions`
Node 18 or newer. No account, no key, nothing leaves your machine. Run `npx tether-mcp init` in the project — it reads `package.json`, `pubspec.yaml`, `.csproj`, `pyproject.toml`, `go.mod`, `Cargo.toml`, `build.gradle`, `pom.xml` or `Package.swift`, auto-detects the framework across 8 ecosystems and 90 frameworks, and writes `tether.config.json`. Then wire the client to `npx` with `-y` and `tether-mcp`. The CLI also offers `serve`, `status` and `validate`.
One command — npx tether-mcp init
