skill and agent to make your ai strong in abp work and project
Overview
A collection of curated AI agent prompts, slash commands, and workflow definitions that give your AI coding assistant deep, accurate knowledge of ABP Framework patterns. Drop this repository (or copy its config files) into any ABP project and your AI will scaffold production-ready, convention-correct code across every layer. The abp-super agent is the top-level orchestrator. Give it a plain-language description of what you want to build and it will: 1. before writing a single line: read the existing code through a codebase knowledge graph, read the repo's plan/design .md files, settle the UI source of truth (connect the for real screens and tokens if you have it — otherwise your existing UI becomes the reference), then confirm with you what is reused, extended and newly added 2. entities, properties, and optional features (background jobs, specs, UI, seeding) from your description 3. a confirmed analysis table — no code is written until you approve 4.
README
ABP AI Skills
AI coding skills for the ABP Framework — works with GitHub Copilot, Claude Code, Windsurf, and Continue.dev.
A collection of curated AI agent prompts, slash commands, and workflow definitions that give your AI coding assistant deep, accurate knowledge of ABP Framework patterns. Drop this repository (or copy its config files) into any ABP project and your AI will scaffold production-ready, convention-correct code across every layer.
Author: Samer Abdallah · Company: Xprema Systems
Table of Contents
- What’s included
- Quick start
- ⭐ Super Agent — scaffold a full feature in one prompt
- 🔧 Feature Scaffold — wire up an existing entity in one pass
- All agents at a glance
- Platform setup
- Repository structure
- Keeping the skill honest
- Reference files
- Core ABP principles enforced by every agent
- Typical ABP solution structure
- License
What’s included
| What | Where | Purpose |
|---|---|---|
| Automatic activation | AGENTS.md, .github/instructions/abp.instructions.md, .windsurfrules, CLAUDE.md, .continue/config.yaml |
The skill turns itself on when it detects an ABP project (Volo.Abp* refs, AbpModule, AbpDbContext, ABP project layout) — no prompt to attach, and it applies to bug fixes and refactors too |
| Super agent | platform-specific (see below) | Orchestrates all sub-agents from a plain-language scenario |
| Scaffold agents | 22 capabilities, identical on all four platforms (Copilot prompts · Claude commands · Windsurf workflows · Continue agents) | One agent per ABP layer / concern: super agent, feature scaffold, CRUD, MVC / Razor Pages / Angular / Blazor UI, theming, testing, install |
| Phase 0 — context intake | abp-dev/references/context-intake.md |
Before any code: existing-code knowledge graph → repo plan/design .md files → UI source of truth (Stitch MCP if connected, otherwise your existing UI as the reference) → confirm scope with you → SOLID & design-pattern check |
| Reference files | abp-dev/references/ |
Curated, correct ABP patterns for every topic |
references/INDEX.md |
abp-dev/references/INDEX.md |
The single routing table (topic → reference → live doc URL). All platform instruction files point here, so no reference can become unreachable |
| UI stack coverage | ui-razorpages.md, ui-mvc.md, ui-angular.md, ui-blazor.md, maui.md, react-native.md, theming.md |
Agents detect the project’s UI (MVC / Razor Pages / Angular / Blazor / MAUI) before generating UI code |
| Platform instructions | .github/copilot-instructions.md, CLAUDE.md, .windsurfrules, .continue/config.yaml, AGENT.md |
Injects ABP expertise into the AI assistant |
| Self-verification | scripts/verify-skill.sh + .github/workflows/verify-skill.yml |
make verify checks routing, four-platform parity, Phase 0 coverage, documented counts, ABP anti-patterns in samples and per-file doc freshness — in CI on every push |
Quick start
Option A — one-liner (no clone needed)
macOS / Linux / WSL:
curl -sSL https://raw.githubusercontent.com/smss123/ABP-ai-skills/main/install.sh \
| bash -s -- /path/to/your-abp-project
Windows PowerShell:
irm https://raw.githubusercontent.com/smss123/ABP-ai-skills/main/install.ps1 | iex
# You will be prompted for the target directory
Option B — from a cloned repo
git clone https://github.com/smss123/ABP-ai-skills.git
cd ABP-ai-skills
./install.sh /path/to/your-abp-project # macOS/Linux
.\install.ps1 C:\path\to\your-abp-project # Windows
Install flags
| Flag | Values | Default | Effect |
|---|---|---|---|
--platform / -Platform |
all copilot claude windsurf continue |
all |
Install only for one AI tool |
--overwrite / -Overwrite |
— | false | Replace existing files without prompting |
# Claude Code only
./install.sh /path/to/project --platform claude
# Copilot only, overwrite existing
./install.sh /path/to/project --platform copilot --overwrite
2. Open your project in your AI coding assistant.
3. Describe your feature — the Super Agent will do the rest:
| Platform | What to type |
|---|---|
| GitHub Copilot | Attach #abp-super.prompt.md → type your scenario |
| Claude Code | /project:abp-super Build a product catalog with Razor Pages UI |
| Windsurf Cascade | run workflow abp-super |
| Continue.dev | Select ABP Super Agent from the agent picker |
⭐ Super Agent — scaffold a full feature in one prompt
The abp-super agent is the top-level orchestrator. Give it a plain-language description of what you want to build and it will:
- Run Phase 0 — context intake before writing a single line: read the existing code through a
codebase knowledge graph, read the repo’s plan/design
.mdfiles, settle the UI source of truth (connect the Stitch MCP for real screens and tokens if you have it — otherwise your existing UI becomes the reference), then confirm with you what is reused, extended and newly added - Parse entities, properties, and optional features (background jobs, specs, UI, seeding) from your description
- Show a confirmed analysis table — no code is written until you approve
- Present a full file-by-file execution plan grouped by layer
- Execute each sub-agent in the correct dependency order:
Phase 0 → Context intake existing-code graph · plan docs · UI reference (Stitch or your pages) · SOLID check
Phase 1 → Domain layer entity class · domain service (Manager) · repository interface
Phase 2 → App.Contracts permission constants · DTOs · app service interface
Phase 3 → Application app service implementation · AutoMapper · specification · background worker
Phase 4 → EF Core EfCoreRepository · DbSet · model config · module registration
Phase 5 → Database EF Core migration commands
Phase 6 → UI (optional) Razor Pages list + create/edit modals + JS DataTable + menu
Phase 7 → Seed (optional) IDataSeedContributor with idempotent guard
- Print a summary: total files generated, layer breakdown, next-steps checklist
Example prompt
“I want to manage Products. Each Product has a Name (required, max 128 chars), a decimal Price, and an IsActive flag. I need Razor Pages UI and some seed data with 3 sample products.”
The Super Agent first runs Phase 0 (it reads your existing code, your plan documents and your current UI, then confirms scope with you), then scaffolds ~15 files across the remaining phases.
🔧 Feature Scaffold — wire up an existing entity in one pass
The abp-feature-scaffold agent is the fastest way to add all application-layer best practices to an entity that already exists in the domain layer. It reads the entity file first, extracts real properties and constants, then generates every artifact in the correct order:
| Step | Artifact | Layer |
|---|---|---|
| 1 | Read entity → extract properties, base class, Consts, business methods | — |
| 2 | BookStoreDomainErrorCodes typed error codes (:000N) |
Domain.Shared |
| 3 | en.json localization keys — menu, permissions, error messages |
Domain.Shared |
| 4 | BookStorePermissions + PermissionDefinitionProvider |
Application.Contracts |
| 5 | Dto, CreateUpdateDto, GetsInput |
Application.Contracts |
| 6 | CreateUpdateDtoValidator (FluentValidation with async uniqueness) |
Application |
| 7 | IAppService interface |
Application.Contracts |
| 8 | AppService — [Authorize], EntityNotFoundException auto-throw, BusinessException from Manager |
Application |
| 9 | AutoMapper profile entries + optional Razor Pages UI prompt | Application / Web |
Key enforcement rules baked in:
IRepository.GetAsyncauto-throwsEntityNotFoundException→ HTTP 404 — no manual null-checkManager.CreateAsyncthrowsBusinessExceptionwith error code on duplicate — no re-check in app service[StringLength]always referencesConsts.MaxXxxLength— never magic numbers- Business methods only (
SetName()) — never direct property assignment
Use this when you’ve already run abp-entity and now need to wire up everything above the domain layer.
All agents at a glance
Every capability below ships on all four platforms — a Copilot prompt, a Claude command, a Windsurf
workflow and a Continue.dev agent. scripts/verify-skill.sh fails the build if one platform gains or
loses a capability, so this table cannot go stale.
| Agent | Copilot | Claude Code | Windsurf | What it generates |
|---|---|---|---|---|
| ⭐ abp-super | #abp-super.prompt.md |
/project:abp-super |
abp-super |
Full feature end-to-end — orchestrates all sub-agents in phase order |
| 🧑💻 abp-developer | #abp-developer.prompt.md |
/project:abp-developer |
abp-developer |
General ABP work — Phase 0, then the layers the request actually touches (bug fixes, refactors, “add X”) |
| 🔧 abp-feature-scaffold | #abp-feature-scaffold.prompt.md |
/project:abp-feature-scaffold |
abp-feature-scaffold |
Application layer for an existing entity — error codes · localization · FluentValidation · permissions · app service · AutoMapper · optional Razor Pages UI (domain layer untouched) |
| abp-crud | #abp-crud.prompt.md |
/project:abp-crud |
abp-crud |
All 12 CRUD files: entity · domain service · repo · DTOs · app service · EF Core · optional Razor Pages |
| abp-entity | #abp-entity.prompt.md |
/project:abp-entity |
abp-entity |
Domain entity class + repository interface + domain service (domain layer only) |
| abp-domain-service | #abp-domain-service.prompt.md |
/project:abp-domain-service |
abp-domain-service |
Manager — uniqueness enforcement, GuidGenerator.Create() |
| abp-repository | #abp-repository.prompt.md |
/project:abp-repository |
abp-repository |
IRepository + EfCoreRepository + DbSet/config/module snippets |
| abp-app-service | #abp-app-service.prompt.md |
/project:abp-app-service |
abp-app-service |
DTOs + IAppService + AppService + AutoMapper entries |
| abp-permissions | #abp-permissions.prompt.md |
/project:abp-permissions |
abp-permissions |
Permission constants + PermissionDefinitionProvider + en.json localization keys |
| abp-specification | #abp-specification.prompt.md |
/project:abp-specification |
abp-specification |
Specification with .And()/.Or()/.Not() combinators |
| abp-background-worker | #abp-background-worker.prompt.md |
/project:abp-background-worker |
abp-background-worker |
AsyncBackgroundJob (fire-and-forget) or AsyncPeriodicBackgroundWorkerBase (periodic) |
| abp-razor-page | #abp-razor-page.prompt.md |
/project:abp-razor-page |
abp-razor-page |
Server-side UI: list page · JS DataTable · create/edit modals · menu registration. Detects the stack first — Razor Pages (Pages/) or MVC (Views/ + Controllers/); Angular, Blazor, MAUI and React Native projects are routed to ui-angular.md / ui-blazor.md / maui.md / react-native.md instead of getting C# page files |
| abp-data-seed | #abp-data-seed.prompt.md |
/project:abp-data-seed |
abp-data-seed |
IDataSeedContributor — idempotent guard, IGuidGenerator, autoSave: true |
| abp-event-bus | #abp-event-bus.prompt.md |
/project:abp-event-bus |
abp-event-bus |
ETO class + ILocalEventHandler or IDistributedEventHandler + event bus wiring |
| abp-multi-tenancy | #abp-multi-tenancy.prompt.md |
/project:abp-multi-tenancy |
abp-multi-tenancy |
IMustHaveTenant/IMayHaveTenant, ICurrentTenant, data filters, per-tenant databases |
| abp-settings | #abp-settings.prompt.md |
/project:abp-settings |
abp-settings |
SettingDefinitionProvider + ISettingProvider (read) + ISettingManager (write) |
| abp-caching | #abp-caching.prompt.md |
/project:abp-caching |
abp-caching |
IDistributedCache, GetOrAddAsync, cache invalidation, Redis setup |
| abp-mvc-page | #abp-mvc-page.prompt.md |
/project:abp-mvc-page |
abp-mvc-page |
MVC UI: controller · views · JS DataTable · toolbar contributor · menu entry (references/ui-mvc.md) |
| abp-angular-feature | #abp-angular-feature.prompt.md |
/project:abp-angular-feature |
abp-angular-feature |
Angular feature: abp generate-proxy -t ng · list component · modal form · route + nav with requiredPolicy · localization (references/ui-angular.md) |
| abp-theming | #abp-theming.prompt.md |
/project:abp-theming |
abp-theming |
Custom theme / layout for the server-side UIs: layout pages, branding, bundles (references/theming.md) |
| abp-test-runner | #abp-test-runner.prompt.md |
/project:abp-test-runner |
abp-test-runner |
Tests at the right layer — xunit unit tests, ApplicationTestBase integration tests, Shouldly + NSubstitute — then runs dotnet test and reports (references/testing-troubleshooting.md) |
| abp-install | #abp-install.prompt.md |
/project:abp-install |
abp-install |
Installs these skills into another ABP project: checks what exists, backs up hand-written rule files, runs install.sh / install.ps1 |
Continue.dev users: all agents are available via the agent picker (including the Super Agent at the top of the list).
Platform setup
GitHub Copilot
The .github/copilot-instructions.md file is automatically picked up by VS Code Copilot Chat. No extra configuration needed once the files are in your project.
Invoke agents by attaching the prompt file in Copilot Chat:
# In Copilot Chat (VS Code):
@workspace #abp-super.prompt.md Build a product catalog with category filter and Razor Pages UI
All prompt files live in .github/prompts/. Every prompt is set to mode: 'agent' so Copilot can read files, create files, and run commands autonomously.
Claude Code
CLAUDE.md at the project root is automatically loaded by Claude Code in every session.
Invoke agents with slash commands:
# Full feature from a scenario:
/project:abp-super Build a blog module with Posts, Tags, Razor Pages UI, and sample seed data
# Individual layers:
/project:abp-entity Post
/project:abp-permissions Posts
/project:abp-razor-page Post
/project:abp-data-seed Post
All commands are in .claude/commands/. The $ARGUMENTS placeholder receives everything you type after the command name.
Windsurf
.windsurfrules is automatically loaded by Windsurf as global rules for the workspace.
Invoke workflows in Cascade:
run workflow abp-super
run workflow abp-crud
run workflow abp-razor-page
All workflows are in .windsurf/workflows/. Each workflow follows the same multi-step pattern: read reference files → confirm with user → generate files.
Continue.dev
.continue/config.yaml configures the system message, docs indexing, and agents.
Use the agent picker in the Continue sidebar to select:
- ABP Super Agent — full-feature orchestrator
- ABP CRUD Scaffolder, ABP Entity + Domain, ABP App Service, etc.
The config also indexes the official ABP documentation (docs.abp.io) so you can query it with @ABP Framework in chat.
Repository structure
ABP-ai-skills/
│
├── AGENTS.md ← Auto-activation rules (loaded by Copilot/Codex/Cursor/Zed/Qoder)
├── abp-dev/
│ ├── SKILL.md ← Master skill definition (all platforms)
│ └── references/
│ ├── INDEX.md ← Routing table: topic → file → verified doc URL (single source)
│ ├── context-intake.md ← Phase 0: existing-code graph, plan docs, UI source of truth, SOLID/patterns
│ ├── ddd-domain.md ← Entities, AggregateRoot, Domain Services, Repositories
│ ├── ddd-application.md ← Application Services, DTOs, CRUD patterns
│ ├── efcore.md ← EF Core DbContext, migrations, multi-DBMS switching
│ ├── authorization.md ← Permissions, [Authorize], PermissionDefinitionProvider, Audit Logging
│ ├── api.md ← Auto API Controllers, Versioning, Integration Services, Static/Dynamic Proxies
│ ├── ui-razorpages.md ← Razor Pages, page models, tag helpers, JS API
│ ├── ui-mvc.md ← ASP.NET Core MVC UI, AbpController, _ViewImports, bundling
│ ├── ui-angular.md ← Angular SPA: generate-proxy, environment.ts, guards, theming
│ ├── maui.md ← .NET MAUI mobile UI (ABP 10 / .NET 10 TFMs, OIDC, adb reverse)
│ ├── cli-structure.md ← ABP CLI, startup templates, solution structure
│ ├── background-jobs.md ← Background jobs and periodic workers
│ ├── event-bus.md ← Local domain events & Distributed Event Bus
│ ├── multi-tenancy.md ← IMustHaveTenant, ICurrentTenant, data isolation
│ ├── settings.md ← SettingDefinitionProvider, ISettingProvider, ISettingManager
│ ├── caching.md ← IDistributedCache, GetOrAddAsync, Entity Cache, Redis setup
│ ├── modules.md ← Module system, DependsOn, ConfigureServices, Virtual File Explorer
│ ├── testing-troubleshooting.md ← Unit/integration testing, common pitfalls
│ ├── localization.md ← en.json structure, L[] helper, IStringLocalizer, localization API
│ ├── features.md ← IFeatureChecker, FeatureDefinitionProvider, IFeatureManager
│ ├── concurrency-check.md ← IHasEntityVersion, optimistic concurrency
│ ├── connection-strings.md ← Connection string config, multi-DB, per-tenant DBs
│ ├── data-filtering.md ← IDataFilter, ISoftDelete, IMultiTenant, custom filters
│ ├── deployment.md ← Production config, SSL, OpenIddict certificates
│ ├── global-features.md ← GlobalFeatureManager, [RequiresGlobalFeature]
│ ├── image-manipulation.md ← IImageCompressor, IImageResizer, ImageSharp/Magick/SkiaSharp
│ ├── interceptors.md ← AbpInterceptor, OnRegistered, DynamicProxy
│ ├── json.md ← IJsonSerializer, System.Text.Json vs Newtonsoft
│ ├── object-extensions.md ← ObjectExtensionManager, Module Entity Extensions
│ ├── options.md ← Options pattern, Configure, PreConfigure
│ ├── signalr.md ← SignalR real-time communication
│ ├── string-encryption.md ← IStringEncryptionService, AbpStringEncryptionOptions
│ ├── text-templating.md ← Scriban & Razor engines, ITemplateRenderer, email templates
│ ├── theming.md ← UI Theming, layout system, theme customization
│ ├── timing.md ← IClock, DateTimeKind, timezone, AbpClockOptions
│ ├── correlation-id.md ← ICorrelationIdProvider, AbpCorrelationIdOptions, propagation
│ ├── cms-kit.md ← CMS Kit module: blogs, pages, comments, reactions, tags
│ ├── openiddict.md ← OpenIddict module: OAuth endpoints, token lifetimes, claims
│ ├── database-tables.md ← Module DB table prefixes, connection string names
│ ├── ui-blazor.md ← Blazor WASM/Server/WebApp: components, theming, proxies
│ ├── microservices.md ← Microservice solution: apps/gateways/services, YARP, RabbitMQ
│ ├── blob-storing.md ← IBlobContainer, providers, encryption, pipelines
│ ├── audit-logging.md ← AuditLog/EntityChange, AbpAuditingOptions, security logs
│ ├── openapi-swagger.md ← Volo.Abp.Swashbuckle, AddAbpSwaggerGen, OIDC document
│ ├── background-workers.md ← AsyncPeriodicBackgroundWorkerBase, dynamic/cron workers
│ ├── production-hardening.md ← Production checklist: prefixes, keys, headers, secrets
│ ├── react-native.md ← React Native / Expo mobile UI
│ └── migration-identityserver-openiddict.md ← IdentityServer4 → OpenIddict migration guide
│
├── .github/
│ ├── copilot-instructions.md ← Copilot global instructions (auto-loaded)
│ ├── instructions/
│ │ └── abp.instructions.md ← path-scoped ABP rules (`applyTo` globs: .cs/.csproj/.cshtml/…)
│ ├── prompts/ ← one file per capability (see "All agents at a glance")
│ │ └── abp-*.prompt.md abp-super, abp-developer, abp-crud, abp-entity, …
│ └── workflows/
│ └── verify-skill.yml ← CI for the skill itself; never copied into a target project
│
├── .claude/
│ └── commands/ ← the same capabilities as /project:abp-* commands
│
├── .windsurf/
│ └── workflows/ ← the same capabilities as Cascade workflows
│
├── .continue/
│ └── config.yaml ← System message + docs index + all agents (`# id:` per agent)
│
├── scripts/
│ └── verify-skill.sh ← Self-verification harness (`make verify`, `make links`)
│
├── install.sh / install.ps1 ← Installers for macOS·Linux / Windows
├── Makefile ← make install · make verify · make links
├── AGENT.md ← Machine-readable install guide for AI agents
├── .windsurfrules ← Windsurf global rules (auto-loaded)
├── CLAUDE.md ← Claude Code global instructions (auto-loaded)
├── LICENSE
└── README.md ← This file
Keeping the skill honest
This repository verifies itself. make verify runs scripts/verify-skill.sh, and the same script runs
in CI (.github/workflows/verify-skill.yml) on every push and pull request:
| Check | What fails the build |
|---|---|
| Routing | INDEX.md names a reference file that does not exist · a file exists that INDEX.md never routes to |
| Parity | one platform exposes a capability the others do not (all four must carry the same set) |
| Phase 0 | an always-loaded entry point stops referencing context-intake.md or stops delegating detection to §0.0 |
| Counts | a documented capability count disagrees with what is on disk; a hardcoded reference-file count appears at all |
| ABP rules | a code sample recommends Guid.NewGuid() or throw new Exception instead of GuidGenerator.Create() / BusinessException |
| Installers | install.sh / install.ps1 fail to parse, or copy a path that does not exist |
| URLs | a documentation link is not an official abp.io URL (and, with make links, a URL that no longer returns 200) |
| Freshness | a reference file loses its applies_to_abp / doc_verified_on frontmatter, or declares a date while its URLs were never checked |
| UI stacks | an entry point has a UI-stack table that omits one of the stacks abp-dev/SKILL.md covers — the reason a Blazor or React Native rule can no longer be added in one place and forgotten everywhere else |
A separate CI job installs the skill into a synthetic ABP project and asserts the resulting tree —
including that the skill’s own .github/workflows/ is never copied into someone’s repository.
Documentation liveness (make links) runs weekly rather than on every push, so a transient abp.io
outage cannot block a merge.
Reference files
Every agent runs Phase 0 (references/context-intake.md) before generating code, then reads
references/INDEX.md — it maps each topic to its reference file and to a documentation URL that is
verified live — then reads the mapped file and fetches the official ABP docs URL when the network is
available.
| Reference file | Topics covered |
|---|---|
references/context-intake.md |
Phase 0: read existing code through a knowledge graph, read repo plan/design .md files, UI source of truth (Stitch MCP or the project’s own UI as reference), confirm scope with the user, SOLID + ABP design-pattern check |
references/INDEX.md |
Routing table: every topic → reference file → verified doc URL, plus the UI-stack decision matrix |
references/ddd-domain.md |
Entities, AggregateRoot, Value Objects, Domain Services, Repositories |
references/ddd-application.md |
Application Services, DTOs, CRUD patterns, ObjectMapper |
references/efcore.md |
DbContext, EF Core repositories, migrations, data seeding, multi-DBMS switching (MySQL/PostgreSQL/Oracle/SQLite) |
references/authorization.md |
Permission constants, PermissionDefinitionProvider, [Authorize], resource permissions, dynamic claims, audit log module |
references/api.md |
Auto API Controllers, API versioning, integration services, static & dynamic C# client proxies, Swagger |
references/ui-razorpages.md |
Razor Pages, page models, tag helpers, JS API proxy |
references/ui-mvc.md |
ASP.NET Core MVC UI: AbpController, Views/ + _ViewImports, tag helpers, bundling, abp install-libs, menu/toolbars |
references/ui-angular.md |
Angular SPA: environment.ts, abp generate-proxy -t ng, route-based menu, *abpPermission/PermissionService, localization, LeptonX theming, SSR/PWA |
references/cli-structure.md |
ABP CLI commands, startup templates, solution structure |
references/background-jobs.md |
Background jobs, periodic background workers |
references/event-bus.md |
Local domain events, pre-built entity events, Distributed Event Bus, ETOs |
references/multi-tenancy.md |
IMustHaveTenant, IMayHaveTenant, ICurrentTenant, tenant data isolation, per-tenant databases |
references/settings.md |
SettingDefinitionProvider, ISettingProvider, ISettingManager, setting scopes, encrypted settings |
references/caching.md |
IDistributedCache, GetOrAddAsync, Entity Cache, cache invalidation, Redis setup |
references/modules.md |
Module system, DependsOn, ConfigureServices, OnApplicationInitialization, Virtual File Explorer |
references/testing-troubleshooting.md |
Unit tests, integration tests, common pitfalls |
references/localization.md |
en.json structure, L[] helper, IStringLocalizer, culture files, client-side localization API |
references/features.md |
FeatureDefinitionProvider, IFeatureChecker, [RequiresFeature], IFeatureManager, feature value providers |
references/concurrency-check.md |
IHasEntityVersion, optimistic concurrency, AbpDbConcurrencyException |
references/connection-strings.md |
Connection string config, multi-DB setup, per-module and per-tenant databases |
references/data-filtering.md |
IDataFilter, ISoftDelete, IMultiTenant, custom EF Core / MongoDB filters |
references/deployment.md |
Production config, SSL, OpenIddict signing certificates, IIS/Azure/Docker deployment |
references/global-features.md |
GlobalFeatureManager, [RequiresGlobalFeature], GlobalModuleFeatures, OneTimeRunner |
references/image-manipulation.md |
IImageCompressor, IImageResizer, ImageSharp / Magick.NET / SkiaSharp providers |
references/interceptors.md |
AbpInterceptor, OnRegistered, AbpDynamicProxyOptions, DI-resolved proxy constraints |
references/json.md |
IJsonSerializer, System.Text.Json vs Newtonsoft, AbpJsonOptions date formats |
references/object-extensions.md |
ObjectExtensionManager, Module Entity Extensions, overriding services |
references/options.md |
Options pattern, Configure, PreConfigure, IOptions injection |
references/signalr.md |
SignalR real-time communication, ABP hub wiring |
references/string-encryption.md |
IStringEncryptionService, AbpStringEncryptionOptions, AES encrypt/decrypt |
references/text-templating.md |
Scriban & Razor engines, ITemplateRenderer, layout templates, email templates |
references/theming.md |
UI Theming, layout system, theme customization, branding |
references/timing.md |
IClock, AbpClockOptions, DateTimeKind.Utc, timezone middleware, [DisableDateTimeNormalization] |
references/correlation-id.md |
ICorrelationIdProvider, AbpCorrelationIdOptions, automatic propagation across HTTP/events/logs |
references/cms-kit.md |
CMS Kit module: blogs, pages, comments, reactions, ratings, tags, menus, global resources |
references/openiddict.md |
OpenIddict module: OAuth/OIDC endpoints, token lifetimes, custom claims, seed data format |
references/database-tables.md |
Module DB table prefixes, connection string names, schema customisation |
references/maui.md |
.NET MAUI mobile UI, OIDC with Secure Storage, adb reverse, C# proxy injection |
references/react-native.md |
React Native / Expo mobile UI, Environment.ts, OpenIddict mobile client setup |
references/migration-identityserver-openiddict.md |
Step-by-step IdentityServer4 → OpenIddict migration for ABP v6+ |
references/ui-blazor.md |
Blazor WebAssembly / Server / WebApp: ABP components, IMenuManager/IToolbarManager/IBrandingProvider, theming + bundles, abp generate-proxy -t csharp |
references/microservices.md |
Microservice solution: apps / gateways / services, YARP gateway, RabbitMQ distributed event bus, outbox/inbox, per-service databases, DbMigrator |
references/blob-storing.md |
IBlobContainer, IBlobContainer, [BlobContainerName], File System/Database/Azure/AWS-S3/Minio/Google providers, UseEncryption(), pipeline contributors |
references/audit-logging.md |
Audit logging module + infrastructure: AuditLog, AuditLogAction, EntityChange, AbpAuditingOptions, IAuditLogStore, security logs, module extension |
references/openapi-swagger.md |
Volo.Abp.Swashbuckle, AddAbpSwaggerGen* / UseAbpSwaggerUI, OAuth + OIDC variants, HideAbpEndpoints(), exposing or protecting /swagger |
references/background-workers.md |
AsyncPeriodicBackgroundWorkerBase, AbpAsyncTimer, IBackgroundWorkerManager, IDynamicBackgroundWorkerManager (cron), clustered execution + distributed locks |
references/production-hardening.md |
Production checklist: cache/lock KeyPrefix, passphrases, data-protection keys, forwarded headers, HSTS, secrets, Swagger off, logging, migrations at boot |
Each reference file declares the ABP version it targets and the date its documentation was last verified in a frontmatter block (
applies_to_abp/doc_verified_on);make links(orbash scripts/verify-skill.sh --links) HEAD-checks every abp.io URL the skill references, so a moved doc page shows up as a failure instead of as bad code generation.
Core ABP principles enforced by every agent
Every agent in this repository enforces these rules — they are non-negotiable in generated code:
- Phase 0 — context intake before any code — read the existing code through a knowledge graph, read the repo’s plan/design markdown, settle the UI source of truth (Stitch MCP if connected, otherwise the project’s existing UI as the reference), confirm scope with the user, then apply SOLID — see
abp-dev/references/context-intake.md - Layered architecture — Domain → Application → Infrastructure (EF Core) → UI (MVC / Razor Pages / Angular / Blazor / MAUI), detected from the target project
- Never expose entities to the presentation layer — always map to DTOs with
ObjectMapper.Map<>() - Business logic lives in entities and domain services — not in application services
- Application services orchestrate — they call domain services / repositories and return DTOs
- Private/protected setters on all entity properties — mutate state through business methods
- Always use
IGuidGeneratorto create Guid IDs — neverGuid.NewGuid()directly - Auto-register services — ABP discovers
ITransientDependency,ISingletonDependency,IScopedDependencyautomatically ConfigureByConvention()must always be called in EF Core model configuration- Permissions are defined in
Application.Contracts, enforced with[Authorize]in app services and in whichever UI the project uses IDataSeedContributormust be idempotent — guard withGetCountAsync() > 0before inserting- Reuse before adding — extend an existing entity, domain service, permission group or UI pattern instead of creating a parallel second one
Typical ABP solution structure
Acme.MyApp/
├── Acme.MyApp.Domain.Shared/ ← Enums, consts, error codes shared with clients
├── Acme.MyApp.Domain/ ← Entities, domain services, repository interfaces
├── Acme.MyApp.Application.Contracts/ ← App service interfaces, DTOs, permission constants
├── Acme.MyApp.Application/ ← App service implementations, AutoMapper profiles
├── Acme.MyApp.EntityFrameworkCore/ ← DbContext, EF Core repository implementations
├── Acme.MyApp.DbMigrator/ ← CLI tool: run migrations + seed data
├── Acme.MyApp.HttpApi/ ← (optional) manual API controllers
└── Acme.MyApp.Web/ ← Razor Pages, menus, bundling
License
Recommended Tools
Try a different keyword or remove a filter.
Install
npx skillfish add smss123/abp-ai-skills