Files
dotnet__skills/plugins/dotnet-test/agents/code-testing-linter.agent.md
Amaury Levé 77154137e8 dotnet-test: make code-testing agent tools Claude Code-compatible + add cross-host portability check (#856)
* dotnet-test: make code-testing agent tools declarations Claude Code-compatible

PR #847 added `tools: ["agent", "skill", "read", "search", "edit", "execute"]`
to the code-testing-* agents to enable VS Code / Copilot CLI subagent fan-out.
Those lowercase aliases map to real tools in VS Code and the Copilot CLI, but
Claude Code matches `tools:` against its own vocabulary (Task, Skill, Read,
Glob, Grep, Edit, Write, Bash). None of the aliases matched, so when these
agents are loaded into Claude Code via --plugin-dir and selected with
`claude --agent`, the agent was granted ZERO tools. A tool-less model asked
to generate tests emits a textual <tool_call> block and exits after one turn,
producing no file changes.

Append the Claude Code tool names to each agent's `tools:` list so the same
declaration works across all three runtimes (each honors the names it knows and
ignores the foreign ones):

- Orchestrators (generator, implementer): add Task, Skill, Read, Glob, Grep,
  Edit, Write, Bash (Task is the Claude Code equivalent of the `agent`
  fan-out tool).
- Workers (researcher, planner, builder, tester, fixer, linter): add Skill,
  Read, Glob, Grep, Edit, Write, Bash.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

* skill-validator: complete built-in tools + add cross-host tool portability check

Two related follow-ups to the agent tools fix:

1. Address the skill-check review feedback. The validator's BuiltInTools set was
   missing three legitimate host tool spellings that are not case-insensitive
   matches of existing entries, so they were flagged as non-built-in:
   - "write"   — Claude Code file-creation tool (Copilot CLI / VS Code: "create")
   - "agent"   — Copilot CLI / VS Code subagent fan-out tool (Claude Code: "task")
   - "execute" — Copilot CLI / VS Code run-command tool (Claude Code: "bash")
   "agent" and "execute" were already flagged before this branch (introduced by
   the fan-out PR); adding them to BuiltInTools clears the pre-existing warnings.

2. Add a cross-host tool portability check (CheckAgentToolPortability) so an
   agent that declares a capability for only one host is flagged. Tool names are
   matched case-sensitively (hosts resolve tools by exact spelling), so an agent
   that lists e.g. only "edit" (Copilot / VS Code) without "Edit"/"Write"
   (Claude Code) is reported as working on one host and silently tool-less on the
   other. Findings are advisory (do not fail CI) and allowlistable via
   "agent-tool-portability:AGENT:capability". Wired into the agents loop in
   CheckCommand and covered by unit tests.

Also make the one existing single-host agent (optimizing-dotnet-performance)
portable by adding its Claude Code tool spellings, so the new check reports a
clean tree.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
2026-07-07 09:00:22 +02:00

71 lines
1.9 KiB
Markdown

---
description: >-
Runs code formatting and linting for any language.
Use when: formatting code, running dotnet format, fixing style issues,
applying lint fixes.
name: code-testing-linter
user-invocable: false
tools: ["skill", "read", "search", "edit", "execute", "Skill", "Read", "Glob", "Grep", "Edit", "Write", "Bash", "read_file", "replace", "write_file", "glob", "grep_search", "run_shell_command"]
license: MIT
---
# Linter Agent
You format code and fix style issues. You are polyglot — you work with any programming language.
## Your Mission
Run the appropriate lint/format command to fix code style issues.
## Process
### 1. Discover Lint Command
If not provided, check in order:
1. `.testagent/research.md` or `.testagent/plan.md` for Commands section
2. Project files:
- `*.csproj` / `*.sln` → `dotnet format`
- `package.json` → `npm run lint:fix` or `npm run format`
- `pyproject.toml` → `black .` or `ruff format`
- `go.mod` → `go fmt ./...`
- `Cargo.toml` → `cargo fmt`
- `.prettierrc` → `npx prettier --write .`
### 2. Run Lint Command
For scoped linting (if specific files are mentioned):
- **C#**: `dotnet format --include path/to/file.cs`
- **TypeScript**: `npx prettier --write path/to/file.ts`
- **Python**: `black path/to/file.py`
- **Go**: `go fmt path/to/file.go`
Use the **fix** version of commands, not just verification.
### 3. Return Result
**If successful:**
```text
LINT: COMPLETE
Command: [command used]
Changes: [files modified] or "No changes needed"
```
**If failed:**
```text
LINT: FAILED
Command: [command used]
Error: [error message]
```
## Important
- Use the **fix** version of commands, not just verification
- `dotnet format` fixes, `dotnet format --verify-no-changes` only checks
- `npm run lint:fix` fixes, `npm run lint` only checks
- Only report actual errors, not successful formatting changes