Package Manager for .agents
Declare skill dependencies in agents.toml, lock versions for reproducibility, and let every tool discover skills from one place.
Why dotagents?
One source of truth
Skills live in .agents/skills/ and symlink into .claude/, .cursor/, or wherever your tools expect them.
Reproducible
agents.lock pins exact commits and integrity hashes. --frozen in CI guarantees everyone runs the same skills.
Shareable
Skills are directories with a SKILL.md. Host them in any git repo, discover automatically, install with one command.
Multi-agent
Configure Claude, Cursor, Codex, VS Code, and OpenCode from a single agents.toml. Skills, MCP servers, and hooks.
Quick Start
Run init to set up a new project. The interactive TUI walks you through selecting agents, gitignore preference, and trust policy.
$ npx @sentry/dotagents initSupported Agents
The agents array tells dotagents which tools to configure. Each agent gets skill symlinks, MCP server configs, and hook configs.
agents = ["claude", "cursor"]| Agent | Config Dir | MCP Config | Hooks |
|---|---|---|---|
claude | .claude | .mcp.json | .claude/settings.json |
cursor | .cursor | .cursor/mcp.json | .cursor/hooks.json |
codex | .codex | .codex/config.toml | -- |
vscode | .vscode | .vscode/mcp.json | .claude/settings.json |
opencode | .claude | opencode.json | -- |
Adding Skills
Use dotagents add to install skills from GitHub repos, git URLs, or local directories.
# Add a single skill from a GitHub repo
dotagents add getsentry/skills --name find-bugs
# Add all skills from a repo
dotagents add getsentry/skills --all
# Pin to a specific version
dotagents add getsentry/warden@v1.0.0
# From a non-GitHub git server
dotagents add git:https://git.corp.dev/team/skills --name review
# From a local directory
dotagents add path:./my-skills/customWhen a repo has one skill, it is added automatically. When multiple are found, use --name to pick one or --all to add them all as a wildcard entry.
Source Formats
| Format | Example | Description |
|---|---|---|
| GitHub | getsentry/skills | Auto-discovers skills by name |
| Pinned | getsentry/skills@v1.0.0 | Locked to a specific ref |
| Git URL | git:https://git.corp.dev/repo | Non-GitHub git servers |
| Local | path:./my-skills/custom | Local directory, relative to project root |
Configuration
Full agents.toml example with skills, wildcards, MCP servers, and hooks:
version = 1
gitignore = false
agents = ["claude", "cursor"]
[trust]
github_orgs = ["getsentry"]
# Individual skill
[[skills]]
name = "find-bugs"
source = "getsentry/skills"
# Pinned to a ref
[[skills]]
name = "warden-skill"
source = "getsentry/warden@v1.0.0"
# Wildcard: all skills from a repo
[[skills]]
name = "*"
source = "myorg/skills"
exclude = ["deprecated-skill"]
# MCP server (stdio)
[[mcp]]
name = "github"
command = "npx"
args = ["-y", "@modelcontextprotocol/server-github"]
env = ["GITHUB_TOKEN"]
# MCP server (HTTP with OAuth)
[[mcp]]
name = "remote-api"
url = "https://mcp.example.com/sse"
# Hooks
[[hooks]]
event = "PreToolUse"
matcher = "Bash"
command = "my-lint-check"See the CLI reference for all commands and flags, or the Security page for trust configuration.