AgentExperience.Abstractions
0.1.0-preview.10
dotnet add package AgentExperience.Abstractions --version 0.1.0-preview.10
NuGet\Install-Package AgentExperience.Abstractions -Version 0.1.0-preview.10
<PackageReference Include="AgentExperience.Abstractions" Version="0.1.0-preview.10" />
<PackageVersion Include="AgentExperience.Abstractions" Version="0.1.0-preview.10" />
<PackageReference Include="AgentExperience.Abstractions" />
paket add AgentExperience.Abstractions --version 0.1.0-preview.10
#r "nuget: AgentExperience.Abstractions, 0.1.0-preview.10"
#:package AgentExperience.Abstractions@0.1.0-preview.10
#addin nuget:?package=AgentExperience.Abstractions&version=0.1.0-preview.10&prerelease
#tool nuget:?package=AgentExperience.Abstractions&version=0.1.0-preview.10&prerelease
AgentExperience.Abstractions
Preview — not production ready. This is a
0.1.0-previewpackage, and it claims no production readiness. Public APIs may change between previews. Read Known limits and documented boundaries before you rely on it.
The domain types and ports of AgentExperience.NET: what an agent tried, what happened, how it was verified, and the lesson drawn from it — plus the interfaces every storage, indexing, and sanitization adapter implements.
Dependencies: the BCL only. No Microsoft Agent Framework, EF Core, Npgsql, DbUp, OpenTelemetry, or
model-provider package. Dependency-boundary tests enforce this on every build, and release verification re-checks it
from the built package. Targets net10.0.
Do you need it directly?
Usually not: AgentExperience.Core and the adapters bring it in. Reference it on its own when you implement a port
out of tree — a different store, index, sanitizer or key store — and want nothing else.
What is in it
| Area | Types |
|---|---|
| A captured run | ExperienceRun, Attempt, ToolCallRecord, Outcome, Evidence, EnvironmentFingerprint, Provenance |
| Identity and authority | Scope (where a record lives), AuthorizationContext (what the host authorized — always established by the host, never taken from model output) |
| A durable lesson | ExperienceRecord, Reflection, ExperienceStatus, LifecycleEvent, StoredLifecycleEvent, ConfidenceUpdate |
| Sanitization port | ISanitizer, RawPayload, SanitizedPayload, SanitizationDecision |
| Storage ports | IExperienceRecordStore, IExperienceCandidateSource, IExperienceGrantStore, IExperienceGrantAccessLog, IExperienceReuseFeedbackStore |
| Derived-data ports | IExperienceEmbeddingIndex, IExperienceEmbeddingGenerator |
| Key custody | IExperienceKeyStore, for crypto-shredding |
| Reuse feedback | ExperienceReuseFeedback, HumanReuseAssessment, ComparativeEvaluationResult, ReuseMeasure |
Every port returns a structured result with an outcome enum rather than throwing for an expected refusal —
Denied, NotFound, Invalid, Conflict, StaleRevision and so on — so a host can tell "not allowed" from "not
there" from "not stored".
Using it
using AgentExperience.Abstractions;
// Established by the host from its own authentication, never built from request input or model output.
var authorization = new AuthorizationContext(
TenantId: "tenant-1",
PrincipalId: currentUser.Id,
Roles: currentUser.Roles,
IssuedAt: DateTimeOffset.UtcNow,
ApplicationId: "support",
ProjectId: "tickets");
var scope = new Scope(TenantId: "tenant-1", ApplicationId: "support", ProjectId: "tickets", TeamId: "team-a");
if (!authorization.Permits(scope))
{
// Every adapter in the repository makes exactly this check before touching storage.
}
Permits requires the same tenant, and every non-null bound on the context to equal the scope's field exactly. A
null bound leaves that field unrestricted; a null scope field is never a wildcard.
Implementing a port out of tree
The in-tree adapters are the reference implementations, and their tests are the conformance suite in practice. Read
the port's XML documentation before implementing it: several obligations cannot be expressed in the type system and
do not fail at compile time — for example, a store that accepts a lifecycle event carrying a Confidence payload has
to persist it and enforce its independence key, or it will report Committed while silently dropping the payload.
The full list is in
For implementers of the ports.
The public surface of this package is pinned by an approval baseline in the repository, so any change to it is a reviewed diff.
More
- Documentation: guide and glossary
- Changes between previews: changelog
- License: Apache-2.0
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
NuGet packages (3)
Showing the top 3 NuGet packages that depend on AgentExperience.Abstractions:
| Package | Downloads |
|---|---|
|
AgentExperience.Core
Preview, not production ready. AgentExperience.NET's Core: sanitization (per-Kind allowlists, secret-field classification, recursive traversal, fail-closed rejection), in-memory run capture, deterministic verification, auditable reflection, finalization, lifecycle and confidence updates, indexing, bounded retrieval with explainable ranking, and reuse feedback, built on AgentExperience.Abstractions' ports. No dependency on MAF, EF Core, PostgreSQL, model providers, or OpenTelemetry -- only the BCL, Abstractions, Microsoft.Extensions.Compliance.Redaction, and Microsoft.Extensions.DependencyInjection.Abstractions (AD-1). |
|
|
AgentExperience.Storage.Postgres
Preview, not production ready. PostgreSQL adapter for AgentExperience.NET: persists canonical, scoped Experience Records through the IExperienceRecordStore port with plain Npgsql, host-authorization checks before any database access, exact scope predicates applied in SQL, and a journaled schema migration runner over embedded, versioned scripts. Requires Npgsql 10.0.3, dbup-postgresql 7.0.1, and dbup-core 6.1.1 or later within the same major. |
|
|
AgentExperience.Storage.InMemory
Preview, not production ready. For development and tests only: a thread-safe, in-memory implementation of AgentExperience.NET's record store, candidate source and reuse-feedback store, so the learning loop runs without PostgreSQL. Data is lost when the process ends, and none of the PostgreSQL guarantees apply (append-only enforcement, erasure reach, backups, the two database roles, crypto-shredding). Its only registration, AddAgentExperienceInMemoryStorageForDevelopment, refuses to run in a Production host environment unless explicitly overridden. Passes the same store conformance suite as the PostgreSQL adapter. Requires Microsoft.Extensions.DependencyInjection.Abstractions 10.0.12 and Microsoft.Extensions.Hosting.Abstractions 10.0.3 or later within the same major. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0-preview.10 | 77 | 10/10/2026 |
| 0.1.0-preview.9 | 119 | 10/10/2026 |
| 0.1.0-preview.8 | 154 | 10/9/2026 |
| 0.1.0-preview.7 | 221 | 10/5/2026 |
| 0.1.0-preview.6 | 70 | 10/1/2026 |
| 0.1.0-preview.5 | 73 | 10/1/2026 |
| 0.1.0-preview.4 | 70 | 9/29/2026 |
| 0.1.0-preview.3 | 72 | 9/29/2026 |
| 0.1.0-preview.2 | 766 | 9/26/2026 |
| 0.1.0-preview.1 | 773 | 9/24/2026 |
Preview release. Not production ready, and it claims no production readiness: the Known limits table lists every unresolved item, and any unresolved item blocks a production-readiness claim. The Documented boundaries table beside it states exactly what no code change can remove. Public APIs may change between previews. See https://github.com/fabbrik/AgentExperience.NET/blob/main/docs/known-limits.md