Cannery.Core
1.1.280
dotnet add package Cannery.Core --version 1.1.280
NuGet\Install-Package Cannery.Core -Version 1.1.280
<PackageReference Include="Cannery.Core" Version="1.1.280" />
<PackageVersion Include="Cannery.Core" Version="1.1.280" />
<PackageReference Include="Cannery.Core" />
paket add Cannery.Core --version 1.1.280
#r "nuget: Cannery.Core, 1.1.280"
#:package Cannery.Core@1.1.280
#addin nuget:?package=Cannery.Core&version=1.1.280
#tool nuget:?package=Cannery.Core&version=1.1.280
Cannery.Core
Authoritative, strongly-typed reference types and the Can registry for the Cannery Crucible AI fabric.
What is Cannery.Core?
Cannery.Core is the foundational .NET library for the Cannery Crucible — an AI fabric of tools that enable AI agents and human developers to create agents, apps, and workflows quickly, without the need for infrastructure or foundational software.
It provides three authoritative reference types for addressing any resource across the ecosystem, plus the Can registry that catalogs all available Cans (tools, agents, and capabilities) in the Crucible:
| Type | Purpose |
|---|---|
Curi |
Canonical identity for any Cannery entity or resource |
HttpUri |
Strongly-typed HTTP/HTTPS endpoint reference |
AzureResourceId |
Authoritative reference to an Azure cloud resource |
| Can Registry | Catalog of all registered Cans in the Crucible |
Curi — Cannery URI
Curi is a .NET value object representing a canonical address for any entity or resource in the Cannery/Crucible ecosystem (Curator, Codex, Conductor, Compliance, etc.). It enables stable, typed references with optional versioning and anchors for deterministic narratives and evidence.
- Strongly typed: Prevents stringly-typed errors and enables validation, normalization, and parsing.
- Portable: Designed for use across all domain, application, and infrastructure layers.
- Interoperable: Includes an EF Core value converter (
CuriConverter) for string/NVARCHAR persistence. - Grammar:
scheme://type/canonicalKey[?v=][#fragment]
using Cannery.Core.Curi;
// Construct from string (canonicalKey is a system-generated UUIDv7-based key)
var curi = Curi.Parse("curator://catalog/CUR-Catalog-018e8e7e-7b2a-7e6b-bf7e-1a2b3c4d5e6f?v=1");
// Validate
if (!curi.Validate(out var error)) throw new Exception(error);
// Normalize (lowercases scheme and type)
var normalized = curi.Normalize();
// Build — canonical key is generated automatically; callers supply only the CanType
var built = Curi.Build(CanTypes.CuratorResource, version: 1);
// Use as string
string s = curi; // implicit
Console.WriteLine(curi); // ToString()
HttpUri
HttpUri is a strongly-typed value object for HTTP/HTTPS endpoint references. It wraps a validated URI and ensures only well-formed HTTP or HTTPS addresses are used as resource references across agents and workflows.
using Cannery.Core.HttpUri;
var endpoint = HttpUri.Parse("https://api.example.com/v1/agents");
Console.WriteLine(endpoint.Value);
AzureResourceId
AzureResourceId is a strongly-typed value object representing an authoritative reference to an Azure cloud resource (e.g., a storage account, service bus, App Service, or AI service). It parses and validates the standard Azure Resource Manager resource ID format.
using Cannery.Core.AzureResourceId;
var resourceId = AzureResourceId.Parse(
"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/my-rg/providers/Microsoft.CognitiveServices/accounts/my-ai");
Console.WriteLine(resourceId.SubscriptionId);
Console.WriteLine(resourceId.ResourceGroup);
Console.WriteLine(resourceId.ResourceName);
Can Registry
The Can registry is the catalog of all Cans registered in the Cannery Crucible. A Can is a self-contained unit of capability — an agent, tool, or workflow module — that can be discovered and orchestrated by the Crucible without tight coupling between Cans.
using Cannery.Core.Registry;
// Look up a registered Can by its type
var canType = CanTypes.CuratorResource;
var entry = CanTypeRegistry.Get(canType);
Console.WriteLine(entry.FullId); // Full identifier
Console.WriteLine(entry.ShortId); // Short/display identifier
EF Core Persistence
Use the included value converter for Curi properties:
modelBuilder.Entity<MyEntity>()
.Property(e => e.Curi)
.HasConversion(new CuriConverter());
API Reference
Curi
public readonly record struct Curi(string Value)bool Validate(out string error)Curi Normalize()static Curi Build(CanType canType, int? version = null, string? fragment = null)- Implicit conversion to
string, explicit fromstring
Curi Grammar
scheme://type/canonicalKey[?v=version][#fragment]
- scheme: e.g.,
curator,codex,conductor,crucible - type: e.g.,
catalog,chronicle,playbook,chat-session - canonicalKey: system-generated, opaque, UUIDv7-based identifier (e.g.,
CUR-Catalog-018e8e7e-7b2a-7e6b-bf7e-1a2b3c4d5e6f) — never supplied by callers - version: optional integer via
?v=query parameter - fragment: optional anchor (e.g.,
#section=ch1)
See docs/cannery/cannery-uri.md for the full CURI specification.
License
Contributing
Contributions, issues, and feature requests are welcome! Please see CONTRIBUTING.md.
Acknowledgements
- Cannery/Crucible ecosystem design team
- docs/cannery/cannery-uri.md for canonical CURI specification
| 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
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.1.280 | 0 | 6/9/2026 |
| 1.1.278 | 37 | 6/8/2026 |
| 1.1.276 | 36 | 6/7/2026 |
| 1.1.274 | 41 | 6/5/2026 |
| 1.1.272 | 91 | 6/1/2026 |
| 1.1.268 | 97 | 5/30/2026 |
| 1.1.266 | 99 | 5/29/2026 |
| 1.1.264 | 102 | 5/28/2026 |
| 1.1.262 | 102 | 5/26/2026 |
| 1.1.259 | 90 | 5/25/2026 |
| 1.1.257 | 93 | 5/25/2026 |
| 1.1.253 | 94 | 5/25/2026 |
| 1.1.251 | 93 | 5/23/2026 |
| 1.1.249 | 94 | 5/21/2026 |
| 1.1.247 | 93 | 5/21/2026 |
| 1.1.245 | 81 | 5/20/2026 |
| 1.1.243 | 94 | 5/19/2026 |
| 1.1.241 | 89 | 5/19/2026 |
| 1.1.239 | 97 | 5/16/2026 |
| 1.1.236 | 92 | 5/16/2026 |