Builder Agent Skills
Framework knowledge, pinned to the agent
Every OpenCaddis Builder agent now runs through the FabrCore Harness and receives the repository's FabrCore skill library. Skills give the coding agent focused, on-demand guidance for the framework area it is working in instead of forcing all documentation into every prompt.
There is no skill picker in the current Builder UI. When you select Create agent for a project, OpenCaddis publishes the bundled packages for local-user, pins their exact references to the new agent, and enables the Harness todo loop.
Skill lifecycle
The fabrcore* directories under .agents/skills are turned into text-only ZIP packages and embedded in OpenCaddis.Server.Builder.
OpenCaddis normalizes each package and computes a SHA-256 content version. The resulting reference is name@version.
Before creating a project agent, the App uploads every embedded package through FabrCore's protected Harness Skill administration API for local-user.
The agent configuration receives the complete comma-separated reference set through _HarnessSkills. ForceReconfigure ensures the project agent picks up the pinned set.
The Harness exposes read-only load_skill and read_skill_resource operations. Skill resources are fetched only when the agent needs them.
Bundled skill library
The current package set covers the FabrCore overview plus specialized guidance for agents, Harness, server hosting, messaging, plugins and tools, MCP, Orleans, Surface, testing, memory, GraphRAG, security, Microsoft 365 Copilot, transcription, and other supported framework areas. Packages come from the same repository skill sources used during OpenCaddis development.
FabrCore V1 Agent Skills accept SKILL.md plus UTF-8 text resources such as Markdown, JSON, YAML, CSV, XML, and text files. Scripts and executable content are not included in the managed package.
How the Builder Harness uses Skills
- The project agent uses
CreateFabrCoreHarnessAgent, not a one-shot chat agent. - The default Harness loop is explicitly set to
todo, so incomplete work can trigger another bounded iteration. - Roslyn, project-filesystem, and controlled .NET CLI tools are still supplied as the agent's execution surface.
- Skills provide instructions and reference material; they do not expand the agent's filesystem or command permissions.
- If the iteration budget ends with open todos, the agent reports the remaining work instead of claiming completion.
Publishing and security boundary
The local Server enables FabrCore admin authentication using the current mode's generated cloud key and identifies the caller as opencaddis-app. The key is held by the App and is not exposed in the UI. Skill uploads are buffered only on the protected administration route and capped at 4 MiB.
| Property | Current behavior |
|---|---|
| Scope | One principal; Builder currently publishes for local-user. |
| Version | Exact, immutable content-hash reference. |
| Transport | Validated ZIP over the protected FabrCore admin API. |
| Runtime access | Read-only skill and resource loading through the Harness. |
| Local persistence | Localhost Orleans storage is process-local. OpenCaddis republishes packages when a Builder agent is provisioned. |
Refresh the embedded packages
After changing a repository FabrCore skill, regenerate the checked-in ZIP packages before building the Builder:
dotnet msbuild src/OpenCaddis.Server.Builder/OpenCaddis.Server.Builder.csproj -t:PackageFabrCoreAgentSkills