Analyzing .NET Performance
dotnet/skills
Scans C# and .NET code for about 50 performance anti-patterns and reports prioritized findings with concrete fixes, at a scan depth you choose.
Parse and diagnose New Relic .NET agent logs (newrelicagent.log) and profiler logs (NewRelic.Profiler.<pid.log) from a support ticket.
$ npx skills add newrelic/newrelic-dotnet-agent --skill analyze-dotnet-agent-logs -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install newrelic/newrelic-dotnet-agent analyze-dotnet-agent-logs --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/newrelic/newrelic-dotnet-agent.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/analyze-dotnet-agent-logs .claude/skills/analyze-dotnet-agent-logs && 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 "analyze-dotnet-agent-logs" agent skill from https://github.com/newrelic/newrelic-dotnet-agent/tree/main/.claude/skills/analyze-dotnet-agent-logs into .claude/skills/analyze-dotnet-agent-logs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-dotnet-agent-logs", 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/newrelic/newrelic-dotnet-agent/tree/main/.claude/skills/analyze-dotnet-agent-logsType 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 newrelic/newrelic-dotnet-agent --skill analyze-dotnet-agent-logs -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install newrelic/newrelic-dotnet-agent analyze-dotnet-agent-logs --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/newrelic/newrelic-dotnet-agent.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/analyze-dotnet-agent-logs .agents/skills/analyze-dotnet-agent-logs && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "analyze-dotnet-agent-logs" agent skill from https://github.com/newrelic/newrelic-dotnet-agent/tree/main/.claude/skills/analyze-dotnet-agent-logs into .agents/skills/analyze-dotnet-agent-logs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-dotnet-agent-logs", 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 newrelic/newrelic-dotnet-agent --skill analyze-dotnet-agent-logs -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install newrelic/newrelic-dotnet-agent analyze-dotnet-agent-logs --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/newrelic/newrelic-dotnet-agent.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/analyze-dotnet-agent-logs .cursor/skills/analyze-dotnet-agent-logs && 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 "analyze-dotnet-agent-logs" agent skill from https://github.com/newrelic/newrelic-dotnet-agent/tree/main/.claude/skills/analyze-dotnet-agent-logs into .cursor/skills/analyze-dotnet-agent-logs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-dotnet-agent-logs", 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/newrelic/newrelic-dotnet-agent.git --path .claude/skills/analyze-dotnet-agent-logs--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 newrelic/newrelic-dotnet-agent --skill analyze-dotnet-agent-logs -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install newrelic/newrelic-dotnet-agent analyze-dotnet-agent-logs --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/newrelic/newrelic-dotnet-agent.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/analyze-dotnet-agent-logs .gemini/skills/analyze-dotnet-agent-logs && 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 "analyze-dotnet-agent-logs" agent skill from https://github.com/newrelic/newrelic-dotnet-agent/tree/main/.claude/skills/analyze-dotnet-agent-logs into .gemini/skills/analyze-dotnet-agent-logs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-dotnet-agent-logs", 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 newrelic/newrelic-dotnet-agent analyze-dotnet-agent-logsInstalls 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 newrelic/newrelic-dotnet-agent --skill analyze-dotnet-agent-logs -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/newrelic/newrelic-dotnet-agent.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/analyze-dotnet-agent-logs .github/skills/analyze-dotnet-agent-logs && 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 "analyze-dotnet-agent-logs" agent skill from https://github.com/newrelic/newrelic-dotnet-agent/tree/main/.claude/skills/analyze-dotnet-agent-logs into .github/skills/analyze-dotnet-agent-logs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-dotnet-agent-logs", 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 newrelic/newrelic-dotnet-agent --skill analyze-dotnet-agent-logs -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install newrelic/newrelic-dotnet-agent analyze-dotnet-agent-logs --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/newrelic/newrelic-dotnet-agent.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/analyze-dotnet-agent-logs .opencode/skills/analyze-dotnet-agent-logs && 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 "analyze-dotnet-agent-logs" agent skill from https://github.com/newrelic/newrelic-dotnet-agent/tree/main/.claude/skills/analyze-dotnet-agent-logs into .opencode/skills/analyze-dotnet-agent-logs/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "analyze-dotnet-agent-logs", 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.
analyze-dotnet-agent-logsParse and diagnose New Relic .NET agent logs (newrelicagent.log) and profiler logs (NewRelic.Profiler.<pid.log) from a support ticket.
Analyze Dotnet Agent Logs is an agent skill from newrelic/newrelic-dotnet-agent. Parse and diagnose New Relic .NET agent logs (newrelicagent.log) and profiler logs (NewRelic.Profiler.<pid.log) from a support ticket. Use when handed a log file or a logs directory, or when asked why the agent is not reporting, not connecting, not instrumenting a library, or why custom instrumentation XML has no effect.
Its SKILL.md is about 1.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 10 other files, including scripts and reference files (for example `references/collector-protocol.md`, `references/log-formats.md` and `references/playbooks.md`).
It sits in Sales & Support, covering Performance optimization and Customer support. It works with New Relic and .NET. The repository describes itself as: The New Relic .NET language agent. The licence is Apache-2.0.
7 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit aca7658. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (Python), which the agent can run.
Shell commands in SKILL.md call:
pythonFrom 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.
Analyze Dotnet Agent Logs loads about 1.5k tokens when it runs, and up to ~8.3k if it reads all its reference files. Until then it costs about 88 tokens; SKILL.md has 815 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 found no risky patterns in SKILL.md.
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); the scripts in this folder are not scanned.
The full file from newrelic/newrelic-dotnet-agent at commit aca7658, republished under its Apache-2.0 licence (© newrelic). 815 words, ~1,469 tokens.
.claude/skills/analyze-dotnet-agent-logs/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.A support log is evidence, not prose. It is large, it holds more than one agent run, and it is written by a process you cannot interview. Work it in this order.
nrlog.py extract writes one; every later
step reads that.Read, tail, or wide-grep a raw log. A customer log runs to hundreds
of MB with single lines tens of KB wide, and those bytes stay in context for
the rest of the session.sessions, payloads, and profiler all answer in
summary form. Reach for a body only when a count has told you which body.nrlog.py sessions <path> on the file or directory. It
accepts a rolled set and merges a run that spans siblings. A customer dump
holds dozens of applications, so above 40 sessions it prints a per-file
summary instead: pick a file with --file <name>, then add --all.--file filter, so pass the same
--file to every later command.nrlog.py extract <path> --session N. Read the slim file
from here on. When it reports more than a few MB, narrow with --level,
--since, --until, or --grep and extract again. A 7-hour FINEST session
slims to 125 MB, which is no more readable than the original.extract prints both
stated log level and observed levels. They disagree whenever the level
changed at runtime, which the agent records as The log level was updated to {new} from {previous}. Trust the observed counts. The level bounds every
conclusion: INFO hides all collector payloads, and FINEST is the only level
that shows a skipped wrapper.nrlog.py profiler at the directory
first. A dump routinely holds thousands of profiler logs, so above 8 files
it groups them by signature: most are processes the .NET Framework
allow-list rejected, which is expected noise, and the group carrying
initialized is the short list worth reading. Then match one
NewRelic.Profiler.<pid>.log to the session by pid and overlapping UTC
range. When the ranges do not overlap the pid was reused and the files are
unrelated, so say that rather than pairing them.Every verdict names its evidence and its limit. "Consistent with X; not proven, because that path logs nothing" is a finished answer. A guess dressed as a finding is not.
scripts/nrlog.py, Python 3 standard library only. Run --help for flags.
| Command | Use it to |
|---|---|
sessions | List runs in a file or directory, with truncation and interleaving flags |
extract | Write the slim, redacted, payload-stripped file for one session |
payloads | Index collector calls: time, endpoint, direction, size, status, request guid |
body | Print one request or response body, so a payload enters context on purpose |
decode | Turn a base64 distributed-trace payload into JSON |
profiler | Summarize a profiler log: init, config, extensions, XML failures, method count |
instrumented | List the methods the profiler rewrote, for checking custom instrumentation |
Launcher: python on Windows, python3 elsewhere.
Derived files land in nrlog-work/ beside the source log unless --out says
otherwise. The source log is never modified.
Regenerate the fixtures and re-run the checks before trusting an edit to
nrlog.py:
python tests/make_fixtures.py && python tests/make_merge_fixtures.pyThey cover a restart, a rolled sibling, a truncated session, interleaved pids, one pid hosting three app domains, a runtime level change, DEBUG payload lines, exception continuation lines, and a planted license key for the redaction check. Generated fixtures are gitignored.
© newrelic, 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 7 other files (scripts, references) in .claude/skills/analyze-dotnet-agent-logs of newrelic/newrelic-dotnet-agent.
Open the folder on GitHubat commit aca7658
Analyze Dotnet Agent Logs 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 |
|---|---|---|---|---|---|---|
| Analyze Dotnet Agent Logs this skillnewrelic/newrelic-dotnet-agent | 117 | — | ~1.5k | Automated safety check: Pass | Apache-2.0 | |
| Analyzing .NET Performancedotnet/skills | 5.6k | 3 repos | ~3.1k | Automated safety check: Pass | MIT | |
| MAUI PR Performance Analysisdotnet/maui | 23k | — | ~2.4k | Automated safety check: Pass | MIT | |
| .NET Trimming and Native AOTAaronontheweb/dotnet-skills | 1.2k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Dotnet Debuggingnovotnyllc/dotnet-artisan | 232 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Asynkron Profilermanagedcode/dotnet-skills | 486 | — | ~1.7k | Automated safety check: Pass | MIT |
dotnet/skills
Scans C# and .NET code for about 50 performance anti-patterns and reports prioritized findings with concrete fixes, at a scan depth you choose.
dotnet/maui
Interprets pinned managed benchmark evidence for a dotnet/maui pull request and writes a narrative for the performance review workflow, without running or publishing anything.
Aaronontheweb/dotnet-skills
Guides making .NET libraries trimming-safe and Native-AOT compatible: the MSBuild properties, trimming attributes, warning codes and a playbook of safe patterns.
novotnyllc/dotnet-artisan
Debugs Windows and Linux/macOS applications (native, .NET/CLR, mixed-mode) with WinDbg MCP (crash dumps, !analyze, !syncblk, !dlk, !runaway, !dumpheap, !gcroot, BSOD), dotnet-dump, lldb with SOS…
managedcode/dotnet-skills
Use the open-source free Asynkron.Profiler dotnet tool for CLI-first CPU, allocation, exception, contention, and heap profiling of .NET commands or existing trace artifacts.
grafana/skills
Continuously profile applications with Grafana Pyroscope and read the result as flame graphs.
newrelic/newrelic-dotnet-agent
Open an Angler PR that adds the latest .NET agent release to metricnames.txt.
newrelic/newrelic-dotnet-agent
Build the New Relic .NET agent locally and validate that code changes compile.
newrelic/newrelic-dotnet-agent
Run the New Relic .NET agent integration tests locally. An agent skill from newrelic/newrelic-dotnet-agent.
newrelic/newrelic-dotnet-agent
A skill your agent uses when the user mentions a Dotty PR, dotty (package/dependency) updates, or asks to update the .NET agent compatibility docs / net-agent-compatibility-requirements after tested…
newrelic/newrelic-dotnet-agent
Mandatory unit-test and code-coverage rules for the .NET agent.
newrelic/newrelic-dotnet-agent
A skill your agent uses when a CI integration, unbounded, or container test job fails intermittently, passes on a rerun, fails identically across every matrix variant, or shows an infra-shaped error…
Categories
Parse and diagnose New Relic .NET agent logs (newrelicagent.log) and profiler logs (NewRelic.Profiler.<pid.log) from a support ticket. Analyze Dotnet Agent Logs is an agent skill from newrelic/newrelic-dotnet-agent.log) from a support ticket.
Analyze Dotnet Agent Logs fits situations like: handed a log file; A logs directory; asked why the agent is not reporting; not instrumenting a library.
Run `npx skills add newrelic/newrelic-dotnet-agent --skill analyze-dotnet-agent-logs -a claude-code`. Or copy the skill folder (.claude/skills/analyze-dotnet-agent-logs in newrelic/newrelic-dotnet-agent) into .claude/skills/analyze-dotnet-agent-logs in your project. Claude Code loads it when a task matches its description.
Run `npx skills add newrelic/newrelic-dotnet-agent --skill analyze-dotnet-agent-logs -a codex`. Or copy the skill folder (.claude/skills/analyze-dotnet-agent-logs in newrelic/newrelic-dotnet-agent) into .agents/skills/analyze-dotnet-agent-logs 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 newrelic/newrelic-dotnet-agent --skill analyze-dotnet-agent-logs -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/analyze-dotnet-agent-logs, .gemini/skills/analyze-dotnet-agent-logs, .github/skills/analyze-dotnet-agent-logs and .opencode/skills/analyze-dotnet-agent-logs in your project.
Going by SKILL.md and its folder, Analyze Dotnet Agent Logs needs Python for the scripts in its folder and the command-line tools its instructions call (python). Our summary lists: Python 3.
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 no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Analyze Dotnet Agent Logs 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 1.5k tokens (SKILL.md is roughly 5.9k 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 6.9k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Analyze Dotnet Agent Logs: Analyzing .NET Performance (dotnet/skills, 5.6k stars), MAUI PR Performance Analysis (dotnet/maui, 23k stars), .NET Trimming and Native AOT (Aaronontheweb/dotnet-skills, 1.2k stars) and Dotnet Debugging (novotnyllc/dotnet-artisan, 232 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
newrelic (a GitHub organization) maintains it in newrelic/newrelic-dotnet-agent, which has 117 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 9, 2026.
Source: newrelic/newrelic-dotnet-agent on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.