Add a vertical-slice feature (command/query + handler + validator + endpoint) to an existing FSH module.

MITAuto-check passedDevelopment

Install Add Feature

skills CLI
$ npx skills add fullstackhero/dotnet-starter-kit --skill add-feature -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install fullstackhero/dotnet-starter-kit add-feature --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/fullstackhero/dotnet-starter-kit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/add-feature .claude/skills/add-feature && rm -rf skills-src

Use ~/.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/

Facts

Skill name
add-feature
GitHub stars
6.8k
Token cost
~1.1k tokens
SKILL.md length
191 words
Files
1
Skills in repo
11
Repo updated
First seen
Licence
MIT

At a glance

Add a vertical-slice feature (command/query + handler + validator + endpoint) to an existing FSH module.

  • Works in 6 steps: Command/Query (Contracts project) → Handler (runtime Features/) — inject the… → Validator (required; same folder) → …
  • Adding an API endpoint
  • SKILL.md covers Layout (real), Step 1 — Command/Query…, Step 2 — Handler (runtime… and Step 3 — Validator (required;…, plus 4 more sections
  • Calls dotnet

What it does

Add Feature is an agent skill from fullstackhero/dotnet-starter-kit. Add a vertical-slice feature (command/query + handler + validator + endpoint) to an existing FSH module. Use when adding an API endpoint or business operation to a module that already exists.

Its SKILL.md is about 1.1k 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 Development, covering REST APIs, Operations and SOPs and Project scaffolding. The repository describes itself as: Production Grade Cloud-Ready .NET 10 Starter Kit (Web API + React Client) with Multitenancy Support, and Clean/Modular Architecture that saves roughly 200+ Development Hours! All… The licence is MIT.

When your agent uses it

  • Adding an API endpoint
  • Business operation to a module that already exists

Example prompts

  • “/add-feature”

Workflow steps

6 steps, taken from the step headings in SKILL.md.

  1. Command/Query (Contracts project)
  2. Handler (runtime Features/) — inject the DbContext, NOT a repository
  3. Validator (required; same folder)
  4. Endpoint (same folder)
  5. Wire it in {X}Module.MapEndpoints
  6. Verify

What it can do on your machine

Read from SKILL.md and the folder at commit 0bd98e3. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • dotnet

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Add Feature loads about 1.1k tokens when it runs. Until then it costs about 51 tokens; SKILL.md has 191 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~51
When it runs · the whole SKILL.md, loaded when a task matches
~1.1k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from fullstackhero/dotnet-starter-kit at commit 0bd98e3, republished under its MIT licence (© fullstackhero). 191 words, ~1,132 tokens.

Download SKILL.mdSave it as .claude/skills/add-feature/SKILL.md (or your agent's skills folder).
name
add-feature
description
Add a vertical-slice feature (command/query + handler + validator + endpoint) to an existing FSH module. Use when adding an API endpoint or business operation to a module that already exists.
argument-hint
[ModuleName] [Area] [FeatureName]

Add Feature

A feature is a vertical slice split across two projects: the request/response types live in the module's .Contracts project (public API); the handler, validator, and endpoint live in the runtime project. Full conventions: .agents/rules/api-conventions.md.

Layout (real)

src/Modules/{X}/Modules.{X}.Contracts/v1/{Area}/{Feature}Command.cs   # ICommand<T>/IQuery<T>
src/Modules/{X}/Modules.{X}.Contracts/Dtos/{Entity}Dto.cs             # response DTOs (if any)
src/Modules/{X}/Modules.{X}/Features/v1/{Area}/{Feature}/
├── {Feature}CommandHandler.cs    # public sealed, injects the DbContext directly
├── {Feature}CommandValidator.cs  # required for commands + paginated queries
└── {Feature}Endpoint.cs          # internal static extension

Step 1 — Command/Query (Contracts project)

Mediator interfaces (using Mediator;). Records. A create command can return the raw Guid.

csharp
namespace FSH.Modules.{X}.Contracts.v1.{Area};

public sealed record Create{Entity}Command(string Name, decimal PriceAmount, string PriceCurrency)
    : ICommand<Guid>;

Read/list DTOs go in Modules.{X}.Contracts/Dtos/. Paginated queries return PagedResponse<T> (FSH.Framework.Shared.Persistence) — see query-patterns.

Step 2 — Handler (runtime Features/) — inject the DbContext, NOT a repository

There is no generic IRepository<T>. Inject the module's {X}DbContext. public sealed, primary ctor, ValueTask<T>, .ConfigureAwait(false), guard first. Tenant/audit fields are auto-stamped — only inject ICurrentUser if you need the acting user (GetUserId() / GetTenant()).

csharp
public sealed class Create{Entity}CommandHandler(CatalogDbContext dbContext)
    : ICommandHandler<Create{Entity}Command, Guid>
{
    public async ValueTask<Guid> Handle(Create{Entity}Command command, CancellationToken cancellationToken)
    {
        ArgumentNullException.ThrowIfNull(command);

        var entity = {Entity}.Create(command.Name, new Money(command.PriceAmount, command.PriceCurrency));
        dbContext.{Entities}.Add(entity);
        await dbContext.SaveChangesAsync(cancellationToken).ConfigureAwait(false);
        return entity.Id;
    }
}

Throw NotFoundException / CustomException(msg, errors, HttpStatusCode) (FSH.Framework.Core.Exceptions) — the global handler maps them to ProblemDetails.

Step 3 — Validator (required; same folder)

csharp
public sealed class Create{Entity}CommandValidator : AbstractValidator<Create{Entity}Command>
{
    public Create{Entity}CommandValidator()
    {
        RuleFor(x => x.Name).NotEmpty().MaximumLength(200);
        RuleFor(x => x.PriceCurrency).NotEmpty().Length(3);
    }
}

Architecture.Tests fails the build if a command/paginated-query handler has no {Name}Validator.

Step 4 — Endpoint (same folder)

csharp
public static class Create{Entity}Endpoint
{
    internal static RouteHandlerBuilder MapCreate{Entity}Endpoint(this IEndpointRouteBuilder endpoints) =>
        endpoints.MapPost("/{entities}",
                async (Create{Entity}Command command, IMediator mediator, CancellationToken ct) =>
                    Results.Ok(await mediator.Send(command, ct)))
            .WithName("Create{Entity}")
            .WithSummary("Create a {entity}")
            .RequirePermission({X}Permissions.{Entities}.Create)
            .WithIdempotency();   // on replay-safe POSTs
}

Step 5 — Wire it in {X}Module.MapEndpoints

csharp
group.MapCreate{Entity}Endpoint();   // group = endpoints.MapGroup("api/v{version:apiVersion}/{x}") …

Step 6 — Verify

bash
dotnet build src/FSH.Starter.slnx          # 0 warnings (TreatWarningsAsErrors)
dotnet test src/Tests/{X}.Tests            # + add a handler/validator test (see testing-guide)

Checklist

  • Command/Query in the Contracts project (using Mediator;), DTOs in Contracts/Dtos/
  • Handler public sealed, injects {X}DbContext (no repository), ValueTask<T> + .ConfigureAwait(false)
  • {Name}Validator exists
  • Endpoint internal static …Map{Feature}Endpoint, .RequirePermission(...), .WithName/.WithSummary
  • Wired in {X}Module.MapEndpoints
  • Build 0 warnings; test added

© fullstackhero, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/add-feature of fullstackhero/dotnet-starter-kit.

Open the folder on GitHubat commit 0bd98e3

Compare with similar skills

Add Feature 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.

Add Feature compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Add Feature this skillfullstackhero/dotnet-starter-kit6.8k—~1.1kAutomated safety check: PassMIT
Create Datadriven Aspnetcoredotnet/skills5.6k1 repos~3.2kAutomated safety check: PassMIT
Strands Reviewstrands-agents/harness-sdk8.7k—~3.2kAutomated safety check: PassApache-2.0
Systematic Testingadam-s/intercept189—~1.4kAutomated safety check: PassMIT
Foundry Agent Syncgithub/awesome-copilot40k1 repos~2.1kAutomated safety check: PassMIT
Project GeneratorLeoYeAI/openclaw-master-skills2.2k—~4.5kAutomated safety check: PassMIT

Similar skills

  • Official

    Generate or scaffold ASP.NET Core code — Razor Pages, Blazor components, MVC controllers, views, and Minimal API endpoints — without using ASP.NET Core CLI scaffolding/code-generation tools.

    5.6k GitHub starsUsed in 1 repo~3.2k tokens
    DevelopmentAuto-check passed
  • Strands Review

    strands-agents/harness-sdk

    Local preview of the strands-agents/devtools /strands review agent.

    8.7k GitHub stars~3.2k tokensUpdated yesterday
    DevelopmentAuto-check passed
  • Systematic Testing

    adam-s/intercept

    Bottom-up systematic validation for multi-layer architectures.

    189 GitHub stars~1.4k tokensUpdated 2 mo ago
    Backend & APIsAuto-check passed
  • Foundry Agent Sync

    github/awesome-copilot

    Official

    Create and synchronize prompt-based AI agents directly within Azure AI Foundry via REST API, from a local JSON manifest.

    40k GitHub starsUsed in 1 repo~2.1k tokens
    Backend & APIsAuto-check passed
  • Project Generator

    LeoYeAI/openclaw-master-skills

    Automatically transform requirement documents or natural language descriptions into complete full-stack projects (Java backend + Vue frontend) with MANDATORY interactive tech stack selection.

    2.2k GitHub stars~4.5k tokensUpdated 2 mo ago
    Backend & APIsAuto-check passed
  • Project Docs

    jezweb/claude-skills

    Generate project documentation from codebase analysis — ARCHITECTURE.md, APIENDPOINTS.md, DATABASESCHEMA.md.

    1.1k GitHub stars~1.6k tokensUpdated 2 days ago
    DatabasesAuto-check: notes

More from fullstackhero/dotnet-starter-kit

All 11 skills in this repo
  • Add Entity

    fullstackhero/dotnet-starter-kit

    Add a domain entity/aggregate with EF configuration and a migration to an existing FSH module.

    6.8k GitHub stars~1.2k tokensUpdated 7 days ago
    Auto-check passed
  • Add Full Slice

    fullstackhero/dotnet-starter-kit

    Build a capability end-to-end — backend vertical slice (Contracts→handler→validator→endpoint) AND the React page wired to it.

    6.8k GitHub stars~783 tokensUpdated 7 days ago
    Auto-check passed
  • Add Integration Event

    fullstackhero/dotnet-starter-kit

    Publish a cross-module integration event via the Outbox and handle it idempotently in another module.

    6.8k GitHub stars~1.1k tokensUpdated 7 days ago
    Auto-check passed
  • Add Module

    fullstackhero/dotnet-starter-kit

    Create a new module (bounded context) — runtime + Contracts projects, IModule, DbContext, permissions, migrations, and the four registration sites.

    6.8k GitHub stars~1.5k tokensUpdated 7 days ago
    Auto-check passed
  • Add Permission

    fullstackhero/dotnet-starter-kit

    Add a new permission end-to-end — server constant + endpoint gate, and (admin app) mirror it into the permissions catalog + route guard.

    6.8k GitHub stars~849 tokensUpdated 7 days ago
    Auto-check passed
  • Add React Page

    fullstackhero/dotnet-starter-kit

    Add a list+create page to a React app (clients/admin or clients/dashboard) — API module, page, lazy route, (admin) permission gate, Playwright test.

    6.8k GitHub stars~1.5k tokensUpdated 7 days ago
    Auto-check passed

Questions about Add Feature

What does Add Feature do?

Add a vertical-slice feature (command/query + handler + validator + endpoint) to an existing FSH module. Add Feature is an agent skill from fullstackhero/dotnet-starter-kit. Add a vertical-slice feature (command/query + handler + validator + endpoint) to an existing FSH module.

When should I use Add Feature?

Add Feature fits situations like: adding an API endpoint; business operation to a module that already exists.

How do I install Add Feature in Claude Code?

Run `npx skills add fullstackhero/dotnet-starter-kit --skill add-feature -a claude-code`. Or copy the skill folder (.agents/skills/add-feature in fullstackhero/dotnet-starter-kit) into .claude/skills/add-feature in your project. Claude Code loads it when a task matches its description.

How do I install Add Feature in Codex?

Run `npx skills add fullstackhero/dotnet-starter-kit --skill add-feature -a codex`. Or copy the skill folder (.agents/skills/add-feature in fullstackhero/dotnet-starter-kit) into .agents/skills/add-feature in your project. Codex loads it when a task matches its description.

Can I use Add Feature in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add fullstackhero/dotnet-starter-kit --skill add-feature -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-feature, .gemini/skills/add-feature, .github/skills/add-feature and .opencode/skills/add-feature in your project.

What does Add Feature need to run?

Going by SKILL.md and its folder, Add Feature needs the command-line tools its instructions call (dotnet).

Does Add Feature access the network?

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.

Is Add Feature safe to install?

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.

What licence does Add Feature use?

Add Feature is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Add Feature use?

About 1.1k tokens (SKILL.md is roughly 4.5k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Add Feature?

Skills that share tags, products or a category with Add Feature: Create Datadriven Aspnetcore (dotnet/skills, 5.6k stars), Strands Review (strands-agents/harness-sdk, 8.7k stars), Systematic Testing (adam-s/intercept, 189 stars) and Foundry Agent Sync (github/awesome-copilot, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Add Feature?

fullstackhero (a GitHub organization) maintains it in fullstackhero/dotnet-starter-kit, which has 6,813 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on September 30, 2026.

Source: fullstackhero/dotnet-starter-kit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.