Install
$ agentstack add skill-burakdmir-abp-skills-abp-settings-features ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
ABP Settings & Features Skill
Trigger
Settings, ISettingProvider, ISettingManager, setting values, features, IFeatureChecker, feature toggles, feature management.
Settings
Define
public class BookStoreSettingDefinitionProvider : SettingDefinitionProvider
{
public override void Define(ISettingDefinitionContext context)
{
context.Add(
new SettingDefinition("App.UI.LayoutType", defaultValue: "LeftMenu",
displayName: L["LayoutType"], isVisibleToClients: true),
new SettingDefinition("Smtp.Password", defaultValue: "", isEncrypted: true)
);
}
}
Read (ISettingProvider — cached, read-only)
string v = await _provider.GetOrNullAsync("Smtp.UserName");
bool ssl = await _provider.GetAsync("Smtp.EnableSsl");
bool ssl = await _provider.IsTrueAsync("Smtp.EnableSsl");
int port = await _provider.GetAsync("Smtp.Port");
int? port = (await _provider.GetOrNullAsync("Smtp.Port"))?.To();
ApplicationService has SettingProvider property pre-injected.
Write (ISettingManager — for UIs)
await _mgr.SetForCurrentTenantAsync("App.UI.LayoutType", "LeftMenu");
await _mgr.SetForUserAsync(userId, "App.UI.LayoutType", "LeftMenu");
await _mgr.SetGlobalAsync("App.UI.LayoutType", "TopMenu");
string v = await _mgr.GetOrNullGlobalAsync("App.UI.LayoutType");
Fallback Chain (bottom → top)
D (Default) → C (Configuration) → G (Global) → T (Tenant) → U (User)
appsettings.json
{ "Settings": { "Smtp.EnableSsl": "true" } }
Custom Value Provider
public class CustomProvider : SettingValueProvider
{
public override string Name => "Custom";
public override Task GetOrNullAsync(SettingDefinition s) { ... }
}
Configure(o => o.ValueProviders.Add());
Features
Define
public class FeatureDefProvider : FeatureDefinitionProvider
{
public override void Define(IFeatureDefinitionContext ctx)
{
var g = ctx.AddGroup("BookStore");
g.AddFeature("BookStore.PdfReporting", defaultValue: "false",
displayName: L["PdfReporting"], valueType: new ToggleStringValueType());
g.AddFeature("BookStore.MaxProductCount", defaultValue: "10",
valueType: new FreeTextStringValueType(new NumericValueValidator(0, 1000000)));
}
}
Value Types
ToggleStringValueType→ checkbox (on/off)FreeTextStringValueType→ textbox (with optional validator)SelectionStringValueType→ dropdown
Check
[RequiresFeature("BookStore.PdfReporting")] // Attribute
if (await FeatureChecker.IsEnabledAsync("BookStore.PdfReporting")) { } // Service
string v = await FeatureChecker.GetOrNullAsync("BookStore.MaxProductCount");
Child Features
var parent = g.AddFeature("BookStore.Reporting", valueType: new ToggleStringValueType());
parent.AddChild("BookStore.PdfExport", valueType: new ToggleStringValueType());
Settings vs Features
| | Settings | Features | |---|---|---| | Purpose | Config values | Functionality toggles | | Scope | User/Tenant/Global | Tenant only | | Fallback | 5-level chain | Default only | | Encryption | Yes | No |
Best Practices
- ISettingProvider for read, ISettingManager for write
- isEncrypted: true for passwords/API keys
- isVisibleToClients: true only for browser-needed settings
- Features = tenant-scoped toggles
- [RequiresFeature] for automatic checking
- Localize displayName/description
Related
[Authorization](../abp-authorization/SKILL.md) · [Multi-Tenancy](../abp-multitenancy/SKILL.md) · [Infrastructure](../abp-infrastructure/SKILL.md) · Docs: https://abp.io/docs/latest/framework/infrastructure/settings
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: burakdmir
- Source: burakdmir/abp-skills
- License: MIT
- Homepage: https://abp.io/docs/latest
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.