feat(ai): add AI agent skills for repository workflows#348
Conversation
Introduces 7 reusable skill prompts following the agentskills.io open standard, stored in .ai/skills/. Each skill encodes a recurring workflow (task orientation, validation, attribute scaffolding, etc.) so any AI agent can follow it consistently across sessions. Thin wrappers in .claude/commands/ expose the skills as Claude Code /slash-commands. AGENTS.md gains an Available Skills section that documents all 7 skills with invocation instructions for every agent type. Closes TASK-20. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
📝 WalkthroughWalkthroughThis PR establishes a comprehensive AI agent skills framework for the repository, introducing seven skill definitions for task lifecycle management, development workflows, validation, and code scaffolding, along with command wrappers and integration documentation to enable Claude Code and other agents to guide developers through repository conventions. ChangesAI Agent Skills Framework
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
Suggested labels
🚥 Pre-merge checks | ✅ 4✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Tip 💬 Introducing Slack Agent: The best way for teams to turn conversations into code.Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.
Built for teams:
One agent for your entire SDLC. Right inside Slack. Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In @.ai/skills/create-branch-pr/assets/pr-template.md:
- Line 18: The PR template checklist uses a relative link "../AGENTS.md" which
can break when rendered; open the PR template entry that contains the checklist
line referencing AGENTS.md (the line reading "New tests follow the
GIVEN/WHEN/THEN naming convention and AAA structure (see
[AGENTS.md](../AGENTS.md))") and replace the link target with a repo-root link
"/AGENTS.md" (or a full GitHub URL) so the AGENTS.md link reliably resolves in
PR descriptions.
In @.ai/skills/new-test/assets/test-template.md:
- Around line 11-12: The template uses a plain external namespace import and a
mismatched test method name: replace the raw "using Moq;" import with the
repository convention "global::Moq" (or the appropriate global:: prefix for
FakeItEasy/NSubstitute) so external packages are referenced via global::, and
rename the test method that currently has a trailing "2" (the method at the
template's test declaration around line 49) to exactly mirror its DisplayName
per the BDD rule (remove the appended "2" or otherwise make the method name
identical to the DisplayName).
In @.ai/skills/review-decisions/SKILL.md:
- Around line 27-31: Update the decision-mapping path patterns in SKILL.md to
match the repository’s actual module names instead of the simplified ones;
replace occurrences like "src/Core/***" and "src/AutoMoq/**" with the real
package patterns such as "src/Objectivity.AutoFixture.XUnit2.*" (and other
Objectivity.AutoFixture.* module patterns used here), and adjust test patterns
so test project paths mirror their corresponding source projects 1:1 (e.g.,
ensure test globbing matches the exact Objectivity.* test folders). Ensure all
entries that previously used generic patterns (the lines around the
decision-mapping entries) are updated so the decision checks will not be
skipped.
In @.ai/skills/task-finish/SKILL.md:
- Around line 28-31: Change the changed-file globs in
.ai/skills/task-finish/SKILL.md so they match this repo’s project naming
(Objectivity.AutoFixture.*) instead of generic `src/...` patterns: replace the
entries that currently read `src/Core/Attributes/*.cs`, `src/Core/*.cs`,
`src/*Tests*/*.cs` and `src/AutoMoq/**`, `src/AutoFakeItEasy/**`,
`src/AutoNSubstitute/**` with globs that include the repo module prefix (e.g.
patterns that start with `Objectivity.AutoFixture.*/` and mirror source→test
folder structure 1:1), and ensure test project globs use the same
namespace/folder layout as their corresponding source projects so decision
checks match real files.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 3b905272-2d6f-4b62-bace-8f67a27d89ee
📒 Files selected for processing (19)
.ai/skills/add-attribute/SKILL.md.ai/skills/add-attribute/references/extension-model.md.ai/skills/create-branch-pr/SKILL.md.ai/skills/create-branch-pr/assets/pr-template.md.ai/skills/new-test/SKILL.md.ai/skills/new-test/assets/test-template.md.ai/skills/review-decisions/SKILL.md.ai/skills/task-finish/SKILL.md.ai/skills/task-start/SKILL.md.ai/skills/validate/SKILL.md.backlog/tasks/task-20 - Create-AI-agent-skills-for-repository-workflows.md.claude/commands/add-attribute.md.claude/commands/create-branch-pr.md.claude/commands/new-test.md.claude/commands/review-decisions.md.claude/commands/task-finish.md.claude/commands/task-start.md.claude/commands/validate.mdAGENTS.md
| - [ ] `dotnet test src/Objectivity.AutoFixture.XUnit2.AutoMock.sln` passes on all framework slices | ||
| - [ ] Code coverage remains at least at the level prior the change (verified by Codecov) | ||
| - [ ] Mutation score remains at least at the level prior the change (verified by Stryker) | ||
| - [ ] New tests follow the GIVEN/WHEN/THEN naming convention and AAA structure (see [AGENTS.md](../AGENTS.md)) |
There was a problem hiding this comment.
Use a repo-root link for AGENTS.md in the PR template.
Line 18 uses ../AGENTS.md, which is brittle when rendered in PR descriptions. Use /AGENTS.md (or full GitHub URL) to avoid broken links.
Suggested patch
-- [ ] New tests follow the GIVEN/WHEN/THEN naming convention and AAA structure (see [AGENTS.md](../AGENTS.md))
+- [ ] New tests follow the GIVEN/WHEN/THEN naming convention and AAA structure (see [AGENTS.md](/AGENTS.md))📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| - [ ] New tests follow the GIVEN/WHEN/THEN naming convention and AAA structure (see [AGENTS.md](../AGENTS.md)) | |
| - [ ] New tests follow the GIVEN/WHEN/THEN naming convention and AAA structure (see [AGENTS.md](/AGENTS.md)) |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.ai/skills/create-branch-pr/assets/pr-template.md at line 18, The PR
template checklist uses a relative link "../AGENTS.md" which can break when
rendered; open the PR template entry that contains the checklist line
referencing AGENTS.md (the line reading "New tests follow the GIVEN/WHEN/THEN
naming convention and AAA structure (see [AGENTS.md](../AGENTS.md))") and
replace the link target with a repo-root link "/AGENTS.md" (or a full GitHub
URL) so the AGENTS.md link reliably resolves in PR descriptions.
| using Moq; // or FakeItEasy / NSubstitute depending on the module | ||
| using Xunit; |
There was a problem hiding this comment.
Template examples conflict with repository test/style conventions.
Line 11 uses using Moq; while the template states external packages should use global::. Line 49 appends 2 to the method name, which breaks the “method mirrors DisplayName” BDD rule.
Suggested patch
- using Moq; // or FakeItEasy / NSubstitute depending on the module
+ using global::Moq; // or corresponding module-specific mocking package
- public void Given<Precondition>_When<Action>_Then<Outcome>2(
+ public void Given<Precondition>_When<ActionWithInlineValue>_Then<Outcome>(Also applies to: 49-49
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.ai/skills/new-test/assets/test-template.md around lines 11 - 12, The
template uses a plain external namespace import and a mismatched test method
name: replace the raw "using Moq;" import with the repository convention
"global::Moq" (or the appropriate global:: prefix for FakeItEasy/NSubstitute) so
external packages are referenced via global::, and rename the test method that
currently has a trailing "2" (the method at the template's test declaration
around line 49) to exactly mirror its DisplayName per the BDD rule (remove the
appended "2" or otherwise make the method name identical to the DisplayName).
| | `src/Core/Attributes/*.cs` | 8, 9, 17, 26, 27, 28, 29 | | ||
| | `src/Core/**/*.cs` (non-attribute) | 3, 7, 26, 27, 28, 29 | | ||
| | `src/*Tests*/**/*.cs` | 24, 25, 26 | | ||
| | `src/AutoMoq/**`, `src/AutoFakeItEasy/**`, `src/AutoNSubstitute/**` | 4, 26, 27, 28 | | ||
| | `.github/workflows/*.yml` | 10, 14, 15, 18, 19, 20 | |
There was a problem hiding this comment.
Fix decision-mapping path patterns to match actual repository paths.
Line 27–31 use simplified paths (src/Core/..., src/AutoMoq/...) that don’t match this repo’s real module paths (src/Objectivity.AutoFixture.XUnit2.*). This can silently skip required decision checks.
Suggested patch
-| `src/Core/Attributes/*.cs` | 8, 9, 17, 26, 27, 28, 29 |
-| `src/Core/**/*.cs` (non-attribute) | 3, 7, 26, 27, 28, 29 |
-| `src/*Tests*/**/*.cs` | 24, 25, 26 |
-| `src/AutoMoq/**`, `src/AutoFakeItEasy/**`, `src/AutoNSubstitute/**` | 4, 26, 27, 28 |
+| `src/Objectivity.AutoFixture.XUnit2.Core/Attributes/*.cs` | 8, 9, 17, 26, 27, 28, 29 |
+| `src/Objectivity.AutoFixture.XUnit2.Core/**/*.cs` (non-attribute) | 3, 7, 26, 27, 28, 29 |
+| `src/Objectivity.AutoFixture.XUnit2.*.Tests/**/*.cs` | 24, 25, 26 |
+| `src/Objectivity.AutoFixture.XUnit2.AutoMoq/**`, `src/Objectivity.AutoFixture.XUnit2.AutoFakeItEasy/**`, `src/Objectivity.AutoFixture.XUnit2.AutoNSubstitute/**` | 4, 26, 27, 28 |Based on learnings: “Test projects must mirror source projects 1:1 in namespace and folder structure.”
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| | `src/Core/Attributes/*.cs` | 8, 9, 17, 26, 27, 28, 29 | | |
| | `src/Core/**/*.cs` (non-attribute) | 3, 7, 26, 27, 28, 29 | | |
| | `src/*Tests*/**/*.cs` | 24, 25, 26 | | |
| | `src/AutoMoq/**`, `src/AutoFakeItEasy/**`, `src/AutoNSubstitute/**` | 4, 26, 27, 28 | | |
| | `.github/workflows/*.yml` | 10, 14, 15, 18, 19, 20 | | |
| | `src/Objectivity.AutoFixture.XUnit2.Core/Attributes/*.cs` | 8, 9, 17, 26, 27, 28, 29 | | |
| | `src/Objectivity.AutoFixture.XUnit2.Core/**/*.cs` (non-attribute) | 3, 7, 26, 27, 28, 29 | | |
| | `src/Objectivity.AutoFixture.XUnit2.*.Tests/**/*.cs` | 24, 25, 26 | | |
| | `src/Objectivity.AutoFixture.XUnit2.AutoMoq/**`, `src/Objectivity.AutoFixture.XUnit2.AutoFakeItEasy/**`, `src/Objectivity.AutoFixture.XUnit2.AutoNSubstitute/**` | 4, 26, 27, 28 | | |
| | `.github/workflows/*.yml` | 10, 14, 15, 18, 19, 20 | |
🧰 Tools
🪛 LanguageTool
[uncategorized] ~31-~31: The official name of this software platform is spelled with a capital “H”.
Context: ...AutoNSubstitute/**| 4, 26, 27, 28 | |.github/workflows/*.yml` | 10, 14, 15, 18, 19, ...
(GITHUB)
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.ai/skills/review-decisions/SKILL.md around lines 27 - 31, Update the
decision-mapping path patterns in SKILL.md to match the repository’s actual
module names instead of the simplified ones; replace occurrences like
"src/Core/***" and "src/AutoMoq/**" with the real package patterns such as
"src/Objectivity.AutoFixture.XUnit2.*" (and other Objectivity.AutoFixture.*
module patterns used here), and adjust test patterns so test project paths
mirror their corresponding source projects 1:1 (e.g., ensure test globbing
matches the exact Objectivity.* test folders). Ensure all entries that
previously used generic patterns (the lines around the decision-mapping entries)
are updated so the decision checks will not be skipped.
| | `src/Core/Attributes/*.cs` | 8, 9, 17, 26, 27, 28, 29 | | ||
| | `src/Core/*.cs` | 3, 26, 27, 28, 29 | | ||
| | `src/*Tests*/*.cs` | 24, 25, 26 | | ||
| | `src/AutoMoq/**`, `src/AutoFakeItEasy/**`, `src/AutoNSubstitute/**` | 4, 26, 27, 28 | |
There was a problem hiding this comment.
Update changed-file patterns so decision checks actually hit real files.
Line 28–31 use path globs (src/Core/..., src/*Tests*/*.cs, src/AutoMoq/...) that don’t align with this repo’s Objectivity.AutoFixture.XUnit2.* directory naming. This can let violations slip through.
Suggested patch
-| `src/Core/Attributes/*.cs` | 8, 9, 17, 26, 27, 28, 29 |
-| `src/Core/*.cs` | 3, 26, 27, 28, 29 |
-| `src/*Tests*/*.cs` | 24, 25, 26 |
-| `src/AutoMoq/**`, `src/AutoFakeItEasy/**`, `src/AutoNSubstitute/**` | 4, 26, 27, 28 |
+| `src/Objectivity.AutoFixture.XUnit2.Core/Attributes/*.cs` | 8, 9, 17, 26, 27, 28, 29 |
+| `src/Objectivity.AutoFixture.XUnit2.Core/**/*.cs` | 3, 26, 27, 28, 29 |
+| `src/Objectivity.AutoFixture.XUnit2.*.Tests/**/*.cs` | 24, 25, 26 |
+| `src/Objectivity.AutoFixture.XUnit2.AutoMoq/**`, `src/Objectivity.AutoFixture.XUnit2.AutoFakeItEasy/**`, `src/Objectivity.AutoFixture.XUnit2.AutoNSubstitute/**` | 4, 26, 27, 28 |Based on learnings: “Test projects must mirror source projects 1:1 in namespace and folder structure.”
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| | `src/Core/Attributes/*.cs` | 8, 9, 17, 26, 27, 28, 29 | | |
| | `src/Core/*.cs` | 3, 26, 27, 28, 29 | | |
| | `src/*Tests*/*.cs` | 24, 25, 26 | | |
| | `src/AutoMoq/**`, `src/AutoFakeItEasy/**`, `src/AutoNSubstitute/**` | 4, 26, 27, 28 | | |
| | `src/Objectivity.AutoFixture.XUnit2.Core/Attributes/*.cs` | 8, 9, 17, 26, 27, 28, 29 | | |
| | `src/Objectivity.AutoFixture.XUnit2.Core/**/*.cs` | 3, 26, 27, 28, 29 | | |
| | `src/Objectivity.AutoFixture.XUnit2.*.Tests/**/*.cs` | 24, 25, 26 | | |
| | `src/Objectivity.AutoFixture.XUnit2.AutoMoq/**`, `src/Objectivity.AutoFixture.XUnit2.AutoFakeItEasy/**`, `src/Objectivity.AutoFixture.XUnit2.AutoNSubstitute/**` | 4, 26, 27, 28 | |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In @.ai/skills/task-finish/SKILL.md around lines 28 - 31, Change the
changed-file globs in .ai/skills/task-finish/SKILL.md so they match this repo’s
project naming (Objectivity.AutoFixture.*) instead of generic `src/...`
patterns: replace the entries that currently read `src/Core/Attributes/*.cs`,
`src/Core/*.cs`, `src/*Tests*/*.cs` and `src/AutoMoq/**`,
`src/AutoFakeItEasy/**`, `src/AutoNSubstitute/**` with globs that include the
repo module prefix (e.g. patterns that start with `Objectivity.AutoFixture.*/`
and mirror source→test folder structure 1:1), and ensure test project globs use
the same namespace/folder layout as their corresponding source projects so
decision checks match real files.
Summary
Summary by CodeRabbit
Closes TASK-20.
Introduces 7 reusable AI agent skill prompts following the
agentskills.io open standard. Each skill
encodes a recurring workflow so any AI agent (Claude, Copilot, Codex,
Cursor) can follow it consistently across sessions without re-reading
AGENTS.md from scratch every time.
Skills added
task-startTASK-Ntask-finishTASK-Nvalidatedotnet build+dotnet test+ test convention scanadd-attributeAttributeNamereview-decisionsnew-testSubjectClasscreate-branch-prTASK-N(optional)Structure
Checklist
type(scope): description)dotnet build src/Objectivity.AutoFixture.XUnit2.AutoMock.slnpasses with no warnings (docs-only change, no C# code modified)dotnet test src/Objectivity.AutoFixture.XUnit2.AutoMock.slnpasses on all framework slices (docs-only change)[SuppressMessage]without a justification comment// TODO:comments added