Migrate Vstest To Mtp
microsoft/testfx
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP).
Run .NET tests correctly using the test-with-timeout.sh wrapper to handle .NET 10 dual test runner modes and prevent test hangs.
$ npx skills add oocx/tfplan2md --skill run-dotnet-tests -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install oocx/tfplan2md run-dotnet-tests --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/oocx/tfplan2md.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/run-dotnet-tests .claude/skills/run-dotnet-tests && 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 "run-dotnet-tests" agent skill from https://github.com/oocx/tfplan2md/tree/main/.agents/skills/run-dotnet-tests into .claude/skills/run-dotnet-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-dotnet-tests", 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/oocx/tfplan2md/tree/main/.agents/skills/run-dotnet-testsType 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 oocx/tfplan2md --skill run-dotnet-tests -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install oocx/tfplan2md run-dotnet-tests --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oocx/tfplan2md.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/run-dotnet-tests .agents/skills/run-dotnet-tests && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "run-dotnet-tests" agent skill from https://github.com/oocx/tfplan2md/tree/main/.agents/skills/run-dotnet-tests into .agents/skills/run-dotnet-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-dotnet-tests", 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 oocx/tfplan2md --skill run-dotnet-tests -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install oocx/tfplan2md run-dotnet-tests --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oocx/tfplan2md.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/run-dotnet-tests .cursor/skills/run-dotnet-tests && 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 "run-dotnet-tests" agent skill from https://github.com/oocx/tfplan2md/tree/main/.agents/skills/run-dotnet-tests into .cursor/skills/run-dotnet-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-dotnet-tests", 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/oocx/tfplan2md.git --path .agents/skills/run-dotnet-tests--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 oocx/tfplan2md --skill run-dotnet-tests -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install oocx/tfplan2md run-dotnet-tests --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oocx/tfplan2md.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/run-dotnet-tests .gemini/skills/run-dotnet-tests && 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 "run-dotnet-tests" agent skill from https://github.com/oocx/tfplan2md/tree/main/.agents/skills/run-dotnet-tests into .gemini/skills/run-dotnet-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-dotnet-tests", 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 oocx/tfplan2md run-dotnet-testsInstalls 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 oocx/tfplan2md --skill run-dotnet-tests -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/oocx/tfplan2md.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/run-dotnet-tests .github/skills/run-dotnet-tests && 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 "run-dotnet-tests" agent skill from https://github.com/oocx/tfplan2md/tree/main/.agents/skills/run-dotnet-tests into .github/skills/run-dotnet-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-dotnet-tests", 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 oocx/tfplan2md --skill run-dotnet-tests -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install oocx/tfplan2md run-dotnet-tests --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/oocx/tfplan2md.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/run-dotnet-tests .opencode/skills/run-dotnet-tests && 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 "run-dotnet-tests" agent skill from https://github.com/oocx/tfplan2md/tree/main/.agents/skills/run-dotnet-tests into .opencode/skills/run-dotnet-tests/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "run-dotnet-tests", 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.
run-dotnet-testsRun .NET tests correctly using the test-with-timeout.sh wrapper to handle .NET 10 dual test runner modes and prevent test hangs.
Run Dotnet Tests is an agent skill from oocx/tfplan2md. Run .NET tests correctly using the test-with-timeout.sh wrapper to handle .NET 10 dual test runner modes and prevent test hangs.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA. It works with .NET. The repository describes itself as: Convert terraform plans (json) into human readable markdown for easier review of changes in pull requests. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 88d5240. 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.
Shell commands in SKILL.md call:
dotnetgitFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.
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.
Run Dotnet Tests loads about 1.9k tokens when it runs. Until then it costs about 36 tokens; SKILL.md has 709 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); files beside SKILL.md are not scanned.
The full file from oocx/tfplan2md at commit 88d5240, republished under its MIT licence (© oocx). 709 words, ~1,911 tokens.
.claude/skills/run-dotnet-tests/SKILL.md (or your agent's skills folder).Provide standardized instructions for running .NET 10 tests correctly. Ensures agents use the scripts/test-with-timeout.sh wrapper instead of direct dotnet test calls, which fail due to .NET 10's dual test runner architecture.
scripts/test-with-timeout.sh wrapper - never call dotnet test directly--solution src/tfplan2md.slnx for full test suite runs--project with relative paths from src/ directory (e.g., --project tests/Oocx.TfPlan2Md.TUnit/)update-test-snapshots skill instead of manual editsdotnet test directly from command line - it will fail with MSB1001: Unknown switch errors from repo rootsrc/tests/Oocx.TfPlan2Md.TUnit/TestData/Snapshots/ - use the update-test-snapshots skill.NET 10 introduced two distinct test runners with incompatible CLI flags:
| Working Directory | Runner Mode | --solution | --project | --treenode-filter | Result |
|---|---|---|---|---|---|
Repo root (/) | VSTest | ❌ | ❌ | ❌ | MSBuild error MSB1001: Unknown switch |
src/ (where global.json lives) | Microsoft.Testing.Platform | ✅ | ✅ | ✅ | Works correctly |
The scripts/test-with-timeout.sh wrapper automatically:
src/ directory (where global.json with "runner": "Microsoft.Testing.Platform" exists)src/-prefixed paths in argumentsWhy direct dotnet test fails: Running from repo root activates VSTest mode (no global.json), which doesn't support --solution, --project, or --treenode-filter flags. The wrapper ensures tests run from src/ directory to activate Microsoft.Testing.Platform mode.
scripts/test-with-timeout.sh -- dotnet test --solution src/tfplan2md.slnxscripts/test-with-timeout.sh -- dotnet test --solution src/tfplan2md.slnx --configuration Release --verbosity normalscripts/test-with-timeout.sh -- dotnet test --solution src/tfplan2md.slnx --no-buildscripts/test-with-timeout.sh --timeout-seconds 300 -- dotnet test --solution src/tfplan2md.slnxscripts/test-with-timeout.sh -- dotnet test --project tests/Oocx.TfPlan2Md.TUnit/Important: This project uses TUnit (not xUnit). TUnit uses --treenode-filter instead of --filter. All TUnit-specific flags must come after -- in the wrapper command.
scripts/test-with-timeout.sh -- dotnet test --project tests/Oocx.TfPlan2Md.TUnit/ --treenode-filter /*/*/MarkdownRendererTests/*scripts/test-with-timeout.sh -- dotnet test --project tests/Oocx.TfPlan2Md.TUnit/ --treenode-filter /*/*/*/Render_ValidPlan_ContainsSummarySectionTUnit uses hierarchical path patterns:
/*/*/*/TestMethodName - Match specific test method/*/*/ClassName/* - Match all tests in a class/*/Namespace.ClassName/* - Match by namespace and classDuring Development (after each meaningful change):
# Run targeted tests for the area you modified
scripts/test-with-timeout.sh -- dotnet test --project tests/Oocx.TfPlan2Md.TUnit/ --treenode-filter /*/*/YourTestClass/*Before Committing (C# code changes only):
# Run full test suite to ensure no regressions
scripts/test-with-timeout.sh -- dotnet test --solution src/tfplan2md.slnx --no-buildSkip Tests When (documentation/agent instructions only):
.agents/, AGENTS.md, scripts/ or docs/--treenode-filter to isolate itIf tests fail because snapshot files need updating (intentional output changes):
update-test-snapshots skill - Never manually edit snapshot filesSNAPSHOT_UPDATE_OK in commit message - Document the intentional change| Exit Code | Meaning | Action |
|---|---|---|
| 0 | All tests passed | Proceed with commit |
| 1-123 | Test failures | Fix failing tests before committing |
| 124 | Timeout | Increase timeout with --timeout-seconds or investigate hung tests |
| 125 | Wrapper error | Check command syntax |
Complete workflow for implementing a feature:
# 1. Build the project
dotnet build
# 2. Run targeted tests during development
scripts/test-with-timeout.sh -- dotnet test --project tests/Oocx.TfPlan2Md.TUnit/ --treenode-filter /*/*/MyFeatureTests/*
# 3. Make changes, run tests again
scripts/test-with-timeout.sh -- dotnet test --project tests/Oocx.TfPlan2Md.TUnit/ --treenode-filter /*/*/MyFeatureTests/*
# 4. Before committing, run full suite
scripts/test-with-timeout.sh -- dotnet test --solution src/tfplan2md.slnx --no-build
# 5. If all pass, commit changes
git add .
git commit -m "feat: implement my feature"MSBuild error MSB1001: Unknown switchCause: Running dotnet test directly from repo root (VSTest mode doesn't support --solution/--project flags)
Solution: Use scripts/test-with-timeout.sh wrapper
Cause: Tests taking longer than default timeout
Solution: Increase timeout with --timeout-seconds 300 (or higher)
--treenode-filterCause: Incorrect filter pattern or test doesn't exist Solution:
scripts/test-with-timeout.sh -- dotnet test --list-testsCause: Intentional output format changes
Solution: Use update-test-snapshots skill to regenerate snapshots correctly
© oocx, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .agents/skills/run-dotnet-tests of oocx/tfplan2md.
Open the folder on GitHubat commit 88d5240
Run Dotnet Tests 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 |
|---|---|---|---|---|---|---|
| Run Dotnet Tests this skilloocx/tfplan2md | 174 | — | ~1.9k | Automated safety check: Pass | MIT | |
| Migrate Vstest To Mtpmicrosoft/testfx | 1k | — | ~4.8k | Automated safety check: Pass | MIT | |
| Evaluate PR Testsdotnet/maui | 23k | — | ~2.9k | Automated safety check: Pass | MIT | |
| Fix Random CI Test Failuredotnet/macios | 2.9k | — | ~1.3k | Automated safety check: Pass | Custom licence | |
| MAUI CI Investigatordotnet/maui | 23k | — | ~2k | Automated safety check: Pass | MIT | |
| Macios CI Postmortemdotnet/macios | 2.9k | — | ~7.8k | Automated safety check: Pass | Custom licence |
microsoft/testfx
Migrates .NET test projects from VSTest to Microsoft.Testing.Platform (MTP).
dotnet/maui
Reviews the tests added in a pull request for fix coverage, quality, edge cases and test type, and recommends lighter test types where they would do.
dotnet/macios
Investigate and fix flaky/random CI test failures in dotnet/macios.
dotnet/maui
Adds dotnet/maui-specific context for investigating failing PR checks and broken nightly builds: pipelines, Helix logs, binlogs and merge-readiness verdicts.
dotnet/macios
Post-mortem analysis of CI failures across recent PRs in dotnet/macios.
marinasundstrom/raven
Testing and stabilization workflow for the Raven compiler test suite.
oocx/tfplan2md
Create a new Agent Skill following project standards and templates.
oocx/tfplan2md
Detect and analyze edge crossings and overlaps in SVG workflow diagrams using geometric intersection algorithms and visual analysis.
oocx/tfplan2md
Generate PNG screenshots for release notes using the repository's HtmlRenderer and ScreenshotGenerator tools.
oocx/tfplan2md
Safely rebase the current feature branch on top of the latest origin/main.
oocx/tfplan2md
Determine the next available issue number across all change types (feature, fix, workflow, website) by checking both local docs and remote branches, then reserve it by pushing an empty branch.
oocx/tfplan2md
Run User Acceptance Testing by creating a PR with rendered markdown on GitHub or Azure DevOps.
Works with
Categories
Run .NET tests correctly using the test-with-timeout.sh wrapper to handle .NET 10 dual test runner modes and prevent test hangs. Run Dotnet Tests is an agent skill from oocx/tfplan2md.NET 10 dual test runner modes and prevent test hangs.
Run Dotnet Tests fits situations like: testing & QA work in your project.
Run `npx skills add oocx/tfplan2md --skill run-dotnet-tests -a claude-code`. Or copy the skill folder (.agents/skills/run-dotnet-tests in oocx/tfplan2md) into .claude/skills/run-dotnet-tests in your project. Claude Code loads it when a task matches its description.
Run `npx skills add oocx/tfplan2md --skill run-dotnet-tests -a codex`. Or copy the skill folder (.agents/skills/run-dotnet-tests in oocx/tfplan2md) into .agents/skills/run-dotnet-tests 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 oocx/tfplan2md --skill run-dotnet-tests -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/run-dotnet-tests, .gemini/skills/run-dotnet-tests, .github/skills/run-dotnet-tests and .opencode/skills/run-dotnet-tests in your project.
Going by SKILL.md and its folder, Run Dotnet Tests needs the command-line tools its instructions call (dotnet and git).
SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. 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. Review the folder before installing.
Run Dotnet Tests is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Run Dotnet Tests: Migrate Vstest To Mtp (microsoft/testfx, 1k stars), Evaluate PR Tests (dotnet/maui, 23k stars), Fix Random CI Test Failure (dotnet/macios, 2.9k stars) and MAUI CI Investigator (dotnet/maui, 23k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
oocx (a GitHub user) maintains it in oocx/tfplan2md, which has 174 GitHub stars. The repository holds 28 skills in this directory. The repository was last updated on October 7, 2026.
Source: oocx/tfplan2md on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.