Logfire Instrumentation
pydantic/skills
Add Pydantic Logfire observability to application code — traces, logs, metrics, and AI/agent spans.
Finds secrets, tokens, passwords, and API keys that can leak through generated serialization: Python dataclass repr and asdict, attrs, pydantic modeldump, NamedTuple, JavaScript JSON.stringify and…
$ npx skills add getsentry/skills --skill secret-serialization -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install getsentry/skills secret-serialization --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/getsentry/skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/secret-serialization .claude/skills/secret-serialization && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "secret-serialization" agent skill from https://github.com/getsentry/skills/tree/main/skills/secret-serialization into .claude/skills/secret-serialization/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "secret-serialization", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/getsentry/skills/tree/main/skills/secret-serializationType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add getsentry/skills --skill secret-serialization -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install getsentry/skills secret-serialization --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getsentry/skills.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/secret-serialization .agents/skills/secret-serialization && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "secret-serialization" agent skill from https://github.com/getsentry/skills/tree/main/skills/secret-serialization into .agents/skills/secret-serialization/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "secret-serialization", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add getsentry/skills --skill secret-serialization -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install getsentry/skills secret-serialization --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getsentry/skills.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/secret-serialization .cursor/skills/secret-serialization && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "secret-serialization" agent skill from https://github.com/getsentry/skills/tree/main/skills/secret-serialization into .cursor/skills/secret-serialization/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "secret-serialization", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/getsentry/skills.git --path skills/secret-serialization--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add getsentry/skills --skill secret-serialization -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install getsentry/skills secret-serialization --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getsentry/skills.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/secret-serialization .gemini/skills/secret-serialization && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "secret-serialization" agent skill from https://github.com/getsentry/skills/tree/main/skills/secret-serialization into .gemini/skills/secret-serialization/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "secret-serialization", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install getsentry/skills secret-serializationInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add getsentry/skills --skill secret-serialization -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/getsentry/skills.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/secret-serialization .github/skills/secret-serialization && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "secret-serialization" agent skill from https://github.com/getsentry/skills/tree/main/skills/secret-serialization into .github/skills/secret-serialization/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "secret-serialization", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add getsentry/skills --skill secret-serialization -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install getsentry/skills secret-serialization --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/getsentry/skills.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/secret-serialization .opencode/skills/secret-serialization && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "secret-serialization" agent skill from https://github.com/getsentry/skills/tree/main/skills/secret-serialization into .opencode/skills/secret-serialization/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "secret-serialization", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
secret-serializationFinds secrets, tokens, passwords, and API keys that can leak through generated serialization: Python dataclass repr and asdict, attrs, pydantic modeldump, NamedTuple, JavaScript JSON.stringify and…
Secret Serialization is an agent skill from getsentry/skills, published by the product's own GitHub organization. Finds secrets, tokens, passwords, and API keys that can leak through generated serialization: Python dataclass repr and asdict, attrs, pydantic modeldump, NamedTuple, JavaScript JSON.stringify and util.inspect, structured logs, tracing spans, and error reports. Use when asked to "check for secret serialization", "credential in repr", "repr=False audit", "secret in spans", "token in logs", or when a change adds a credential field to a dataclass, model, or config object, or adds code that stringifies whole objects…
Its SKILL.md is about 2.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 5 other files, including reference files (for example `SOURCES.md`, `SPEC.md` and `references/javascript-typescript.md`).
It sits in DevOps & Cloud, covering Observability. It works with JavaScript, Python, Sentry and Pydantic. The repository describes itself as: Agent Skills used by the Sentry team for development. The licence is Apache-2.0.
2 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit d18b7aa. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadGrepGlobFrom allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Secret Serialization loads about 2.6k tokens when it runs, and up to ~6.4k if it reads all its reference files. Until then it costs about 143 tokens; SKILL.md has 1,310 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
Hardcoded secret literals and committed `.env` files are out of scope.Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from getsentry/skills at commit d18b7aa, republished under its Apache-2.0 licence (© getsentry). 1,310 words, ~2,606 tokens.
.claude/skills/secret-serialization/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Find credentials that can leak because a type serializes itself and something upstream serializes whole objects.
A leak usually needs two changes that each look safe alone:
repr, str, asdict, model_dump, toJSON, or property enumeration.str(value), span.set_data(key, obj), logger.info("%s", obj), JSON.stringify(args)).The two sides are often written months apart by different authors. Report either side on its own. Always search the existing tree for the other side, because it is frequently already on the default branch and absent from the diff.
security-review. Report them here only when they come from a changed wholesale sink..env files are out of scope.| Reference | Read When |
|---|---|
references/python.md | Reviewing Python dataclasses, attrs, pydantic, NamedTuple, msgspec, logging, Sentry SDK, or OpenTelemetry code |
references/javascript-typescript.md | Reviewing JavaScript or TypeScript classes, config objects, JSON.stringify, util.inspect, pino or winston, or Sentry and OpenTelemetry spans |
Treat a field as credential-bearing when its name, type, or source says so:
secret, token, password, passwd, pwd, api_key, apikey, access_key, private_key, signing_key, client_secret, bearer, credential, authorization, auth_header, cookie, session_key, dsn, connection_string, webhook_secret, hmac, or refresh_token.SecretStr, SecretBytes, or wrappers around them.Separate two kinds of path:
__repr__ and __str__, asdict, model_dump, toJSON, and own-enumerable-property walks (JSON.stringify, util.inspect, spread). They are the holder's responsibility.vars(obj), obj.__dict__, pickle, json.dumps(obj, default=vars). Every stored attribute is exposed this way, whatever flags the field has. Treat these only as sinks: report them when a sink in the repository applies one to a credential-bearing instance.A field is fully excluded when every generated path its type has is blocked, whether by one mechanism or several together. A field is partially excluded when at least one generated path still includes it. No field-level mechanism defeats raw attribute access. Only not storing the value does, so fix raw attribute findings at the sink.
| Mechanism | Blocks | Still includes the field |
|---|---|---|
dataclasses.field(repr=False), attrs.field(repr=False) | __repr__, __str__ | asdict, astuple, raw access |
Pydantic Field(repr=False) | __repr__, __str__ | model_dump, model_dump_json, response serialization, raw access |
Pydantic Field(exclude=True) | model_dump, model_dump_json, response serialization | __repr__, __str__, raw access |
Pydantic Field(repr=False, exclude=True) | Every generated path | Raw access |
JavaScript #private field | Every generated path | Nothing outside the class body |
Object.defineProperty(..., { enumerable: false }) | Every generated path | Explicit property reads, Object.getOwnPropertyNames |
Hand-written __repr__, __str__, toJSON, or [util.inspect.custom] that omits the field | Only the path it overrides (a __repr__ also serves str() when there is no __str__) | Every other generated path, raw access |
Redacting wrapper: SecretStr, SecretBytes, a project Redacted[T] | Every generated path | pickle and recursive __dict__ walks such as default=vars, which reach the value stored inside the wrapper |
| Not stored on the object: read inside the method, or held in a closure | Everything | Nothing |
Do not treat underscore naming, TypeScript private, __slots__, type annotations, comments, dataclass(init=False), or a custom __init__ that still assigns the field as blocking any path.
**kwargs, tool call arguments, task payloads, or middleware reach generic sinks.str(value), repr(, asdict(, model_dump(, set_data(, set_attribute(, set_context(, set_extra(, JSON.stringify(, util.inspect(, loggers called with objects, and raw attribute access (vars(, __dict__, pickle.dumps(, default=vars).| Category | Report When |
|---|---|
| Unexcluded credential field | A credential field is added or moved onto a type with generated serialization, and no mechanism blocks any of its generated paths. |
| Partial exclusion | At least one generated path still includes the field, and a sink in the repository uses that path on instances of the type. |
| Raw attribute sink | A sink applies vars, __dict__, pickle, or default=vars to an instance that stores a credential, even if the field is fully excluded or wrapped. |
| Credential moved onto a holder | A refactor moves a credential from a lazy read or closure onto an object field. |
| Wholesale serialization sink | New or changed telemetry, logging, error-context, cache, or response code serializes every kwarg, every attribute, or whole objects without an allowlist or redaction. |
| Sink loses its filter | A change removes or weakens redaction, an allowlist, or object-to-type-name replacement in an existing sink. |
| Object passed to telemetry | A client, config, or settings object is passed to a span, log, or error-context call that stringifies it. |
| Level | Use For |
|---|---|
| high | The credential reaches a sink anywhere in the repository: log line, span attribute, error event, cache entry, persisted row, queue payload, or API response. The other side may predate the diff. Also a new wholesale sink whose existing callers pass credential-bearing objects. |
| medium | An unexcluded credential field whose instances leave the constructing module, after a repository search found no sink. Also a wholesale sink with no allowlist and no traced credential-bearing caller. |
| low | An unexcluded credential field whose instances never leave the constructing scope. |
__dict__ or enumeration sink.Include one concrete fix per finding:
type(value).__name__ instead of str(value) for non-scalar values.sentry_sdk.serializer.serialize, json.dumps(asdict(obj)), JSON.stringify(obj), util.inspect(obj)) and assert the credential string is absent._shared_secret included in RpcClient dataclass repr".© getsentry, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (references) in skills/secret-serialization of getsentry/skills.
Open the folder on GitHubat commit d18b7aa
Secret Serialization next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Secret Serialization this skillgetsentry/skills | 1k | — | ~2.6k | Automated safety check: Notes | Apache-2.0 | |
| Logfire Instrumentationpydantic/skills | 140 | — | ~6.1k | Automated safety check: Pass | MIT | |
| Logfire Instrumentationbasicmachines-co/basic-memory | 4.1k | — | ~2.3k | Automated safety check: Pass | AGPL-3.0 | |
| Bump Sentry Dependencygetsentry/sentry | 45k | — | ~815 | Automated safety check: Pass | Custom licence | |
| Inngest MiddlewareAsymmetric-al/core | 382 | — | ~2.9k | Automated safety check: Pass | AGPL-3.0 | |
| Olore Sentry Latestolorehq/olore | 103 | — | ~523 | Automated safety check: Pass | MIT |
pydantic/skills
Add Pydantic Logfire observability to application code — traces, logs, metrics, and AI/agent spans.
basicmachines-co/basic-memory
Adds Pydantic Logfire tracing, logging and metrics to Python, JavaScript or TypeScript and Rust projects, with the correct setup order and library extras.
getsentry/sentry
Bumps an existing Python dependency in getsentry/sentry through the repository's self-serve GitHub Actions workflow.
Asymmetric-al/core
A skill your agent uses when adding cross-cutting concerns to durable functions — structured logging or tracing across all functions, error tracking with Sentry, payload encryption for sensitive…
olorehq/olore
Local Sentry documentation reference (latest). An agent skill from olorehq/olore.
ArabelaTso/Skills-4-SE
Instruments authentication, authorization, and input-handling code paths to monitor security-relevant events and states at runtime.
getsentry/skills
Scan agent skills for security issues. An agent skill from getsentry/skills.
getsentry/skills
Fetch unread GitHub notifications for open PRs where review is requested from a specified team or opened by a team member.
getsentry/skills
Security code review for vulnerabilities. An agent skill from getsentry/skills.
getsentry/skills
Create, synthesize, and iteratively improve agent skills following the Agent Skills specification.
getsentry/skills
Django access control and IDOR security review. An agent skill from getsentry/skills.
getsentry/skills
GitHub Actions security review for workflow exploitation vulnerabilities.
Works with
Categories
Finds secrets, tokens, passwords, and API keys that can leak through generated serialization: Python dataclass repr and asdict, attrs, pydantic modeldump, NamedTuple, JavaScript JSON.stringify and…. Secret Serialization is an agent skill from getsentry/skills, published by the product's own GitHub organization.inspect, structured logs, tracing spans, and error reports.
Secret Serialization fits situations like: asked to check for secret serialization; credential in repr; repr=False audit; secret in spans.
Run `npx skills add getsentry/skills --skill secret-serialization -a claude-code`. Or copy the skill folder (skills/secret-serialization in getsentry/skills) into .claude/skills/secret-serialization in your project. Claude Code loads it when a task matches its description.
Run `npx skills add getsentry/skills --skill secret-serialization -a codex`. Or copy the skill folder (skills/secret-serialization in getsentry/skills) into .agents/skills/secret-serialization in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add getsentry/skills --skill secret-serialization -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/secret-serialization, .gemini/skills/secret-serialization, .github/skills/secret-serialization and .opencode/skills/secret-serialization in your project.
SKILL.md names no scripts, command-line tools or credentials: Secret Serialization is instructions for the agent only. Our summary lists: Python 3. Its frontmatter pre-approves these tools: Read, Grep, Glob.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Secret Serialization is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 3.8k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Secret Serialization: Logfire Instrumentation (pydantic/skills, 140 stars), Logfire Instrumentation (basicmachines-co/basic-memory, 4.1k stars), Bump Sentry Dependency (getsentry/sentry, 45k stars) and Inngest Middleware (Asymmetric-al/core, 382 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
getsentry (a GitHub organization, an official publisher) maintains it in getsentry/skills, which has 1,037 GitHub stars. The repository holds 27 skills in this directory. The repository was last updated on October 2, 2026.
Source: getsentry/skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.