Cheatsheet & Glossary
Everything you'll need to look up — commands, file locations, acronyms, and concept definitions. Bookmark this one. The other pages explain why; this page tells you what and where.
Build & run commands
| What | Command |
|---|---|
| Build the solution | dotnet build src/AgenticHarness.slnx |
| Run all tests | dotnet test src/AgenticHarness.slnx |
| Tests with coverage | dotnet test --collect:"XPlat Code Coverage" |
| Run a single test class | dotnet test --filter FullyQualifiedName~MyTestClass |
| Run the console UI (interactive) | dotnet run --project src/Content/Presentation/Presentation.ConsoleUI |
| Run a specific example non-interactively | dotnet run --project <ConsoleUI> -- --example research |
| Run the MCP server | dotnet run --project src/Content/Infrastructure/Infrastructure.AI.MCPServer |
| Run the SignalR Agent Hub | dotnet run --project src/Content/Presentation/Presentation.AgentHub |
Secrets management
| What | Command |
|---|---|
| Set a secret | dotnet user-secrets set "Key:Path" "value" --project <path> |
| List all secrets | dotnet user-secrets list --project <path> |
| Remove a secret | dotnet user-secrets remove "Key:Path" --project <path> |
| Clear all secrets | dotnet user-secrets clear --project <path> |
| Run the setup wizard (Windows) | setup-secrets.bat |
Project layout cheatsheet
Where to look for...
| If you want to find... | Look here |
|---|---|
| A config class | Domain.Common/Config/ |
| A CQRS command + handler | Application.Core/CQRS/<feature>/ |
| A MediatR pipeline behavior | Application.*.Common/MediatRBehaviors/ |
| An AI service interface | Application.AI.Common/Interfaces/ |
| A built-in tool | Infrastructure.AI/Tools/ |
| DI registration for any layer | <Project>/DependencyInjection.cs |
| OTel setup | Infrastructure.Observability/ |
| Skill content (runtime) | skills/<id>/SKILL.md |
| Agent manifests (runtime) | agents/<id>/AGENT.md |
| Plugin manifests (runtime) | plugins/<id>/plugin.json |
| Plugin interfaces | Application.AI.Common/Interfaces/Plugins/ |
| Tool output compression | Application.AI.Common/MediatRBehaviors/ToolOutputCompressionBehavior.cs |
| Tests | src/Content/Tests/ |
Acronyms & jargon
/.well-known/agent.json and delegate tasks over HTTP. Sister to MCP. Implemented in Infrastructure.AI/A2A/."AppConfig" section of appsettings.json. See Configuration Reference.Restricted, Supervised, or Autonomous. Determines whether tool calls run automatically, prompt for approval, or require explicit allow-listing..Common projectsApplication.Common, Application.AI.Common, Infrastructure.AI, Domain.Common). Treat as a library; don't edit unless improving the template for all consumers. See Big Picture..Core projectsApplication.Core ships with example agent commands. In a fork you'd add domain-specific projects (e.g. Domain.PupWalk, Infrastructure.PupWalk) alongside.Application.Core/CQRS/.PluginDeclaration that the plugin is never allowed to call. DeniedTools are bypass-immune — they cannot be overridden by auto-approve modes or autonomy tier settings. See Observability & Safety.DriftDetection to detect quality regressions over time.RequestValidationBehavior.DefaultTokenBudget, so the assembler can stop packing context before the turn overflows. Scoped per turn — distinct from IConversationBudgetTracker.IContextBudgetTracker.IOptions. See Patterns.SkillMode where the skill receives all MCP tools from its parent plugin automatically, bypassing explicit allowed-tools declarations. Used for plugin-provided skills. See Skills System.SkillMode. Only tools explicitly listed in allowed-tools are resolved and given to the agent. The harness controls the tool surface. See Skills System.appsettings.json containing a plugin.json manifest. The harness reads the manifest, wires the plugin's skills and MCP servers, and applies boundary governance (AllowedTools, DeniedTools, AutonomyLevel). See Tools & Keyed DI and Observability & Safety.MaxSubcommandLimit permission setting guards against this in pattern matching.SkillMetadataParser and held in SkillMetadataRegistry at startup.Managed (default — harness resolves only declared tools) or Injected (all MCP tools from the parent plugin are passed through). See Skills System.AppConfig:AI:AgentFramework:DefaultTokenBudget (default 200,000); the per-turn ceiling is tracked by IContextBudgetTracker. For the ceiling that spans an entire multi-turn conversation, see IConversationBudgetTracker.Default, Diagnostic, DataHeavy, Conversational. Determines which compression strategy is applied. See A Message's Journey.ToolOutputCategory, selects a strategy (FreeText, JSON, XML, Diagnostic), and compresses when the output exceeds configurable thresholds. Reduces token usage significantly for verbose tool responses.dotnet user-secrets set to populate.The 60-second mental model
If you read only this section: this codebase is a Clean Architecture .NET 10 template for AI agents. Skills (Markdown files) tell agents what they know — agents can use multiple skills simultaneously, with prerequisites controlling execution order. Tools (C# classes) tell agents what they can do. Local plugins extend the skill surface by bundling skills and MCP servers from external directories, with boundary governance (AllowedTools/DeniedTools) controlling their blast radius. MediatR pipeline behaviors wrap every request with safety, validation, tool output compression, observability, and audit. The agent loop is owned by Microsoft.Agents.AI. Everything is observable via OpenTelemetry. Configuration lives in strongly-typed classes bound from appsettings.json + User Secrets. Add new tools by implementing ITool and registering them in keyed DI. Add new skills by dropping a SKILL.md in skills/. Test everything. Don't disable the sandbox.
You're done
You've completed the developer onboarding guide. From here:
- Re-read A Message's Journey — it'll click differently now.
- Browse the skills/ folder for examples of real
SKILL.mdfiles. - Open Jaeger and run a few examples to watch the trace timeline.
- Pick a small feature to add. Use Extending the Harness as your template.
Found a gap in this guide? That's a bug. File it.