
Tremelay
io.github.CharitonMediaPublished by GitHub account CharitonMediav1.0.3Updated Oct 24, 2026
Local MCP broker: agents call credentials through a daemon without seeing secrets.
Overview
Local credential broker that lets AI agents use your API keys and SSH keys through scoped, expiring grants without ever seeing the secrets.
- What you can do
- List, describe and invoke the capabilities granted to an agent, so it can perform brokered HTTP requests with a stored credential
- Sign SSH operations through an ssh-agent socket that uses a key held inside the daemon
- Manage the vault, credentials, agents and grants from the command line, including issuing, rotating and revoking agent tokens
- Review and verify the hash-chained audit log of allowed and denied attempts
- When to use it
- Use it when you want an agent to call APIs or push over SSH with real credentials but do not want tokens pasted into config files, environment variables or MCP server settings, and you want each agent limited to narrow, revocable grants.
- Requirements
- Runs as a local process on the user's machine; the manifest lists MCP Bundle packages per platform, and the README describes installing with the pinned Go toolchain. Needs a local vault file, a daemon started with a vault path, and a passphrase (prompted at a terminal or supplied via TREMELAY_PASSPHRASE). Each agent needs its own bearer token file. No account, server or network transport.
Installation
In SourceWeft
- Open Tremelay in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
Tremelay
A local credential broker, so your AI agents can use your credentials without ever seeing them.
You already give agents real authority: read these issues, push this branch, call that API. Today that means pasting a token into a config file, an environment variable, or an MCP server, and hoping nothing logs it, echoes it, or wanders off to the wrong host with it.
Tremelay splits possession of a secret from authority to use it. You keep
credentials in a local encrypted vault. Each agent gets its own identity and its own
narrow, expiring, revocable grants — "GET anything under
https://api.github.com/repos/you/yourrepo with this token", "authenticate to
git.example.com as git with this SSH key". The agent asks Tremelay to perform
the operation; Tremelay performs it with the credential and returns only the result
the grant allows. The agent never receives the secret, there is no getSecret tool
to call, and every attempt — allowed or denied — lands in a hash-chained audit log.
The broker possesses secrets. Agents possess capabilities.
Agents connect over MCP (list_capabilities, describe_capability,
invoke_capability), or over an ssh-agent socket for SSH signing. Everything is
local: one SQLite vault file, one user-only socket or named pipe, no server, no account, no telemetry.
Demo
A real session against a throwaway vault. The secret is the literal string
dummy-demo-secret. Every command except vault create also writes one
vault_unlock id=… result=allowed line to stderr; those are trimmed here,
nothing else is.
Both denials exited non-zero, and no row carries a secret. The passphrase came
from TREMELAY_PASSPHRASE; interactively you get a no-echo prompt instead.
Install
Tremelay needs the pinned Go toolchain (1.26.9, see go.mod); go install
switches to it for you.
From a clone, make build or go build -o tremelay ./cmd/tremelay does the same
thing. Check the build with tremelay version (or tremelay --version).
The v1.0.3 release
carries per-platform archives named tremelay_<version>_<os>_<arch>.tar.gz (or
.zip on Windows). Each archive unpacks to a binary named tremelay
(tremelay.exe on Windows) plus LICENSE, along with a CycloneDX SBOM and a
SHA256SUMS file — a checksum detects a corrupt download, not a substituted
release. It also carries one MCP Bundle per platform,
tremelay-mcp_<version>_<os>_<arch>.mcpb, for clients that install MCP Bundles
(see the generic MCP quickstart).
Signed releases are not in v1. make release-dry builds those artifacts
locally; see ADR 0027. Download the archive
you want and SHA256SUMS into one directory, then check that archive by name:
On macOS, shasum -a 256 -c - in place of sha256sum -c -.
Name the file you downloaded. sha256sum -c --ignore-missing SHA256SUMS over
the whole list exits 0 when your archive is the one that failed to download
and some other listed file is present.
Quickstarts
Copy-paste setup from install to first successful call, one page per client: docs/quickstarts/ (Claude Code, Codex, Hermes, generic MCP).
The shape is the same everywhere. tremelay daemon --vault PATH prompts for
your passphrase at a terminal (non-empty TREMELAY_PASSPHRASE works without a
prompt but is not recommended; see passphrase from the
environment) and then
serves agents on a user-only local socket; tremelay agent create --token-file FILE gives each agent its own bearer
token file, and tremelay agent token issue|rotate|revoke manage it later without
recreating the agent; tremelay mcp --daemon --token-file FILE is the stdio command the
client launches. tremelay lock, the idle timeout, or losing the process
zeroises the key. See the headless daemon guide, or
local stdio MCP for the per-launch pinentry path
instead. For SSH, tremelay ssh-agent publishes an
SSH_AUTH_SOCK that signs with a key that never leaves the daemon.
What it does not do
Read this before you trust it with anything.
- One human. Single user, single vault. No multi-user, no orgs, no shared vaults, no team policy.
- One machine. A user-only Unix socket or Windows named pipe, and stdio;
there is no network or remote MCP transport.
tremelay ssh-agentis Linux and macOS only and fails closed on Windows. - The agent still reads broker responses. An
http_brokergrant returns the status code, an allowlisted set of response headers, and up to 32 KiB of the body with the credential redacted in its common encodings (raw, URL, base64, hex, JSON-escaped). The agent never sees the credential, but it does see the data that credential unlocks — and anything in that body can be prompt injection (H1). A hostile upstream that deliberately re-encodes or splits the credential is not caught; grant only origins you trust with the credential. - No file uploads through the broker. A brokered request with a multipart
body (
multipart/form-data, file uploads) is refused asdenied_malformed. Send JSON or a urlencoded form instead. - An unlocked daemon trusts your uid. While it is unlocked, any code running as you can use your agents' granted capabilities. It still cannot read a credential, change a grant, or learn your passphrase, and everything it does is audited — but that is the boundary.
- No OAuth refresh brokering, no database session brokering, no browser form fill, no TOTP, no provider-assisted rotation. These are in VISION.md and on the roadmap, not in v1.
- No third-party audit. No independent security review and no signed releases yet. The audit chain is tamper-evident to you; nobody else checkpoints it.
credential getprints the raw secret. That is the human control plane, by design — it is not reachable from any agent interface.- Legacy GitHub issue grants block unlock (H2). A vault that still holds a
pre-v1
github_issue_stategrant will not unlock until that grant is revoked with the pre-v1 binary.
Security
- SECURITY_INVARIANTS.md — the rules that outrank convenience.
- THREAT_MODEL.md — who the adversary is, including the agent.
- SECURITY.md — reporting a vulnerability.
Docs
ARCHITECTURE.md · VISION.md · ADRs · vault lifecycle · HTTP broker · SSH signing · measured client integrations · what is in v1 · milestone history
tremelay --help prints the full command list.
Contributing
CONTRIBUTING.md. Apache License 2.0; see LICENSE.
Source: README.md at commit 09d7216
Tools
0Version history
2- v1.0.3LatestOct 16, 2026
- v1.0.2Oct 16, 2026
Score
40% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts
Declare a license in the repository or the registry entry.