The agent skill

The MCP server gives an agent the tools. The skill tells it how to use them โ€” which read answers which question, what an empty result means, why it should never stop at the stack trace, and what not to do with a captured request body.

It also covers the other half of the job: adding Sentrinel to an app. The SDK shapes for Elysia, Express, Next.js, Bun, the browser tunnel, Django, FastAPI, Flutter and Dart, native mobile and Postgres; which key kind each one needs; and the two invariants that cause most silent failures โ€” the key lives in the environment, and env must match what the key was issued for. (The key decides the app: every part of a project โ€” backend, phone, web โ€” reports into one app, named apart by module.)

Tools without it get used badly. An agent that can call get_issue but does not know to follow it to get_request hands you the stack trace you already had.

It is one Markdown file with four reference pages โ€” the CLI surface, the database reads, integrating the SDKs, and the API keys โ€” it ships inside the CLI, and it installs wherever the agent in front of you reads from.

What it deliberately does not contain

The skill documents the product: SDKs, configuration, keys, the dashboard, the agent tools. Nothing about how Sentrinel itself is built, hosted or deployed, because using it needs none of that, and the file ends up published in the package repo, served from sentrinel.dev, and copied into whatever repository someone installs it in.

A test enforces it. The published skill may not mention the infrastructure by name, may not carry a raw IP, and may not contain a key-shaped string โ€” key prefixes are documented on purpose, whole keys never are. It also tells the agent, in the file itself, not to go looking for credentials or private repositories to answer a question, and to say "that is internal" instead of inferring internals from behaviour.

Install it

If you installed with the one-liner and Claude is on the machine, it is already there โ€” ~/.claude/skills/sentrinel/. Otherwise:

sentrinel skill install

Set SENTRINEL_SKILL=0 when installing if you manage your own skills and would rather it kept out of your home directory.

Every other agent

Agent Command Where it lands
Claude Code, Claude Desktop sentrinel skill install ~/.claude/skills/sentrinel/
Claude Code, one project only sentrinel skill install --dir .claude/skills/sentrinel in the repo
Cursor sentrinel skill install --cursor .cursor/rules/sentrinel.mdc
Codex sentrinel skill install --agents ./AGENTS.md
GitHub Copilot sentrinel skill install --agents ./AGENTS.md
Amp, Jules, and other AGENTS.md readers sentrinel skill install --agents ./AGENTS.md
Windsurf sentrinel skill install --dir .windsurf/rules .windsurf/rules/sentrinel.mdc
Zed sentrinel skill install --dir .rules .rules/sentrinel.md
Anything else sentrinel skill stdout โ€” pipe or paste it

--agents writes into a delimited block:

<!-- sentrinel:skill:start -->
## Sentrinel (production telemetry)
โ€ฆ
<!-- sentrinel:skill:end -->

Re-running replaces that block and nothing else, so upgrading never duplicates it and never touches a line you wrote. Everything above and below is yours.

Without the CLI

The file is served raw, so a hosted agent, a CI job or a harness with no shell can fetch it:

curl -fsSL https://sentrinel.dev/skill.md

The source is in the public package repo under mcp/skill/ โ€” read it before you install it, and copy it into whatever format your tool wants if none of the above fits.

What it actually says

The short version, so you know what your agent has been told:

Keeping it current

The skill travels inside the CLI bundle, so upgrading the CLI upgrades it:

curl -fsSL https://sentrinel.dev/install-mcp.sh | bash
sentrinel skill install        # and again for each place you put it

A test in the package fails if the bundled copy drifts from the source, so a skill that describes tools the server no longer has cannot ship.

Setup, the security model and the tool list: for coding agents.