Repository navigation
v1.2.0 is the first NuGet release since 1.0.0 and bundles the v1.1 engine upgrades (prompt caching, per-step model profiles, prompt-variable injection, web search, Umbraco.AI Context access) together with the v1.2 feature set (Agent Sanctum pattern, Examine-powered content search, body-extraction + Brand pillar in the Content Audit). The shipped surface is now an engine, not just three example workflows — extensible via a small .NET interface, cache-aware across providers, and configurable per step.
What's new
Tools — new adoptable surface
web_search— HTTP-backed web search with provider abstraction. Brave (default) and Tavily adapters ship; custom providers plug in viaIWebSearchProvider. API keys live inappsettings.jsonunderAgentRun:WebSearch:Providers:*:ApiKey(or the matching environment variable). Structured error envelopes (not_configured/rate_limited/transport/invalid_argument) never throw into the agent loop.get_ai_context— read-only access to Umbraco.AI Contexts by alias. Use it to thread brand voices, source lists, or any other Umbraco.AI Context resource into workflow prompts without hard-coding content into agent markdown.search_content— Examine-backed keyword search across published Umbraco content. Score-ordered results with optionalcontentTypeandparentIdfilters. Complements the existinglist_content/get_contentpair when you need to discover by keyword rather than enumerate.
Total shipped tool count is now ten: fetch_url, read_file, write_file, list_files, list_content, get_content, list_content_types, search_content, get_ai_context, web_search. Custom tools plug in through Umbraco's composer system and appear to every workflow that declares them.
Engine — authoring ergonomics
- Prompt-variable substitution. Agent prompts can include
{today},{instance_id},{step_index},{previous_artifacts}, and any workflow-declaredconfig:token. Substitution is deterministic, logged when keys are missing, and happens at prompt-assembly time so dates, IDs, and configuration never hallucinate. - Per-step model profiles. Route each step to the Umbraco.AI profile that fits — a Sonnet-class profile for high-volume scanning, Opus-class for the visible report — via a
profile:field in the step definition. Resolution order is step → workflow default → site default → auto-detect. - Provider-aware prompt caching. Stable-first prompt authoring now gets automatic cache discounts: ~90% on Anthropic (once the
cache_controltranslation lands upstream — see Known Limitations) and automatic caching on OpenAI / Azure OpenAI once prompts cross the provider size threshold. No YAML changes needed; the discount comes from authoring discipline documented in the guide. - Agent Sanctum pattern. For agents whose identity matters (archivist voice, evidence-first analyst), split
PERSONA.md/CREED.md/CAPABILITIES.mdinto ship-time sidecar files. The engine auto-loads them into a cache-stable preamble above the per-turn runtime context. Agents without sanctum files behave identically to 1.0.
Umbraco Content Audit — v2 showcase
The shipped umbraco-content-audit workflow has been substantially upgraded:
- Real body-prose extraction.
get_contentnow returnsbody_text(capped prose sample) andbody_metadata(structural data: headings, links, alt-texts, image count) for every node. The cap is configurable viacontent_audit_body_max_chars(default 15000). Readability, Accessibility, and Brand pillars now score against real Block List / Block Grid / Rich Text content — prior versions returned "Not applicable" on modern block-composed pages. - Optional Brand pillar. Attach an Umbraco.AI "Brand Voice" Context (with
toneDescription,targetAudience,styleGuidelines,avoidPatterns), setbrand_voice_context: "your-alias"in the workflow'sconfig:block, and the audit runs as a 7-pillar scan with Brand-voice scoring + evidence citations. Leave the config empty and you get the 6-pillar audit — byte-identical to 1.0 output. - Hard halt on misconfiguration. If
brand_voice_contextis set but the alias doesn't exist, the scanner halts with an explicit error and no artifacts are written — it will never silently fall back to a 6-pillar scan, so misconfigurations surface loudly. - Richer audit outputs. The final report now surfaces Brand column, Brand-category root-cause clustering, and Brand-aligned actions when the pillar is enabled.
Documentation refresh
Single coherence pass across README.md, docs/workflow-authoring-guide.md, docs/beta-test-plan.md, and umbraco-marketplace.json. The guide gained a top-level Contents TOC, a Conditional Pillars via Config pattern section, refreshed Learning from the Examples walkthroughs, and dedicated sections for every new tool.
Breaking changes
None. Backwards compatibility is a hard v1.2 constraint:
- All new configuration keys (
brand_voice_context,content_audit_body_max_chars, per-stepprofile:) are optional with sensible defaults. - Prompt-variable substitution is off-by-default; prompts without
{…}tokens pass through unchanged. - Agent Sanctum files are optional; agents without them behave identically to 1.0.
- The
umbraco-content-auditworkflow, run withoutbrand_voice_context, produces output byte-identical to 1.0's 6-pillar audit.
Upgrading from 1.0
1.1.0 was tagged internally but never published to NuGet, so 1.0 adopters upgrade directly to 1.2.0 and pick up both the 1.1 and 1.2 feature sets in a single step.
dotnet add package AgentRun.Umbraco --version 1.2.0A new migration (CopyWorkflowSchemaToDisk) runs on next startup to drop the workflow JSON schema into App_Data/AgentRun.Umbraco/Schemas/ for IDE validation — without this, YAML editors logged "Unable to load schema" on the shipped workflow.yaml files. Workflows already on disk are left untouched; the migration only fills in missing state. Log output on startup confirms the migration ran:
Starting package migration for AgentRun.Umbraco
Execute CopyWorkflowSchemaToDisk
Copied workflow-schema.json to App_Data/AgentRun.Umbraco/Schemas/ for IDE validation
If you've customised any of the shipped workflows under App_Data/AgentRun.Umbraco/workflows/, those files are preserved — the migration's copy step is skip-if-exists. To pick up the v1.2 workflow upgrades (Brand pillar scanner / analyser / reporter, body-extraction-aware prompts, sanctum files), either diff against the in-package sources at the NuGet cache location or delete your modified copies and let the first-run migration re-seed them.
Known limitations
- Single concurrent instance per workflow.
- Disk-based persistence only (YAML + JSONL) — no database backend.
- Interactive mode is the primary UX; autonomous mode is functional but secondary.
- Anthropic
cache_controlmarker translation through Umbraco.AI is a planned follow-up; caching still works automatically on OpenAI / Azure OpenAI once prompts cross the provider size threshold. - Provider compatibility: Anthropic is the most thoroughly exercised provider to date. OpenAI and Azure OpenAI are supported through Umbraco.AI and work in practice; please open an issue if you hit a provider-specific error.
Links
- NuGet package
- Workflow Authoring Guide
- Beta Test Plan (also a solid first-install walkthrough)
- Report an issue
Apache 2.0 licensed. Thanks to everyone who tested the beta and surfaced the rough edges.