Three ways to install Estelle.

Estelle is the trust layer under the coding agent you already use. Pick one door. They share one account and one memory of your repository, so nothing is lost by starting with the simplest and moving later.

  • mcpAny MCP client. One URL, no key in the config, and you are signed in inside the client.
  • pluginClaude Code. Ships the same server plus the hooks, so grounding runs on every edit without being asked for.
  • cliYour terminal. Sweeps the working tree, so uncommitted work is in the memory too.

mcp

MCP server, hosted

Add one remote server to the client you already use. Your model and your plan keep doing the reasoning; Estelle adds grounded tools over your repository.

json
{
  "mcpServers": {
    "estelle": {
      "type": "http",
      "url": "https://api.fatelabs.ca/mcp"
    }
  }
}

That is the whole config. Two fields, and no third: type is http, url is the hosted endpoint. There is no API key here, because the server answers an unauthenticated request with an OAuth challenge and your client walks you through signing in.

Claude Code

Claude Code takes it as one command instead of a file.

terminal
claude mcp add --transport http estelle https://api.fatelabs.ca/mcp

plugin

Claude Code plugin

The plugin ships the MCP server and the hooks together. The hooks are the difference: grounding and the merge gate fire on every edit and every shell command, so an agent cannot skip the trust layer by not choosing to call it.

Inside a Claude Code session:

claude code
/plugin marketplace add uqeu/estelle-cli
/plugin install estelle@fatelabs

Or from a shell, before you start one:

terminal
claude plugin marketplace add uqeu/estelle-cli
claude plugin install estelle@fatelabs

uqeu/estelle-cli is the marketplace repository; estelle@fatelabs reads as plugin estelle from marketplace fatelabs. Restart the session once it is installed.

cli

The CLI

The native CLI works in any terminal, with or without an editor integration. It sweeps your working tree, so the memory includes work you have not committed.

Install

terminal
npm i -g @fatelabs/estelle

Or, on a machine without npm:

terminal
curl --proto '=https' --tlsv1.2 -fsSL \
  https://github.com/uqeu/estelle-cli/releases/latest/download/install.sh | sh

Sign in, then set up the repository

Run these from inside the repository you want Estelle to know.

terminal
estelle login
estelle setup

login stores and verifies your Estelle credential. setup is the whole first run in one command: it configures the repository, writes the standing brief your agent reads, sweeps the tree, then proves the result by answering a question about a real symbol from your own code.

Ask it something

terminal
estelle ask "how does the session server hand off a repo?"

Answers cite the file and line they came from. If Estelle cannot ground an answer in your code, it says so instead of inventing one.

If something looks wrong

terminal
estelle doctor
estelle upgrade

doctor checks your credential stores and provider readiness without printing any secret. upgrade reports whether this CLI is behind the newest published release, and prints the install command rather than running it.

After any of the three

Your agent gains grounded navigation over your repository: find_definition, find_references, blast_radius, verify and the merge gate. The memory outlives the session, so next week the context is still there.

Reference for every tool, the OpenAI-compatible API and the per-editor walkthroughs lives in the full docs. Plans and limits are on pricing. Stuck on any of the three doors, mail khai@fatelabs.ca.