Configuration Reference
Complete reference for all MSBuild properties used to configure Zakira.Imprint SDK behavior.
Root Directory Configuration
ImprintRootDirectory
Explicitly specifies the root directory where agent directories (.github/, .claude/, etc.) and the .imprint/ manifest folder are created.
| Type | String (path) |
| Default | (auto-detected) |
| Scope | Consumer projects |
By default, Imprint auto-detects the repository root by walking up from the project directory. Markers are checked in priority order:
- VCS directories -
.git,.svn,.hg(most authoritative) - IDE directories -
.vs(Visual Studio),.idea(JetBrains) - Solution files -
*.sln,*.slnx(fallback)
If no repository root is found, falls back to the project directory.
Use cases:
- Multi-project solutions where skills should be placed at the solution root
- Non-standard repository layouts
- When auto-detection doesn’t find the desired root
<PropertyGroup>
<!-- Use solution directory as the root -->
<ImprintRootDirectory>$(SolutionDir)</ImprintRootDirectory>
</PropertyGroup>
Example scenario:
/repo-root/
├── .git/
├── MyApp.sln
├── src/
│ └── MyApp/
│ └── MyApp.csproj ← Project with Imprint package
├── .github/ ← Skills placed here (at repo root)
│ └── skills/
└── .imprint/ ← Manifest stored here (at repo root)
Agent Detection Properties
These properties control which AI agents receive skill files.
ImprintAutoDetectAgents
Enables automatic detection of AI agents based on existing directories in the project.
| Type | Boolean |
| Default | true |
| Scope | Consumer projects |
When enabled, Imprint scans the project directory for existing agent folders:
.github/→ Copilot detected.claude/→ Claude detected.cursor/→ Cursor detected.roo/→ Roo Code detected.opencode/→ OpenCode detected.windsurf/→ Windsurf detected
<PropertyGroup>
<ImprintAutoDetectAgents>true</ImprintAutoDetectAgents>
</PropertyGroup>
ImprintTargetAgents
Explicitly specifies which agents to target. When set, disables auto-detection.
| Type | String (semicolon-separated) |
| Default | (empty) |
| Scope | Consumer projects |
| Values | copilot, claude, cursor, roo, opencode, windsurf |
<PropertyGroup>
<!-- Target only Copilot and Claude -->
<ImprintTargetAgents>copilot;claude</ImprintTargetAgents>
</PropertyGroup>
ImprintDefaultAgents
Fallback agents when auto-detection finds no existing agent directories.
| Type | String (semicolon-separated) |
| Default | (empty) |
| Scope | Consumer projects |
<PropertyGroup>
<!-- Default to all agents if none detected -->
<ImprintDefaultAgents>copilot;claude;cursor;roo;opencode;windsurf</ImprintDefaultAgents>
</PropertyGroup>
Skill Prefixing Properties
These properties control how skill folders are named to avoid conflicts.
ImprintPrefixSkills
Global setting to enable/disable package name prefixing for skill folders.
| Type | Boolean |
| Default | false |
| Scope | Consumer projects |
When true, skills from MyCompany.Skills package are placed in MyCompany.Skills/ subfolder instead of directly in the skills directory.
<PropertyGroup>
<ImprintPrefixSkills>true</ImprintPrefixSkills>
</PropertyGroup>
Result:
.github/skills/
├── MyCompany.Skills/
│ └── coding/
│ └── SKILL.md
└── AnotherPackage/
└── debugging/
└── SKILL.md
ImprintDefaultPrefix
Custom prefix to use instead of package ID when prefixing is enabled.
| Type | String |
| Default | (empty - uses PackageId) |
| Scope | Consumer projects |
<PropertyGroup>
<ImprintPrefixSkills>true</ImprintPrefixSkills>
<ImprintDefaultPrefix>vendor</ImprintDefaultPrefix>
</PropertyGroup>
Package Author Properties
These properties are used when creating skill packages.
ImprintEnabledByDefault
Controls whether skills from this package are enabled by default when consumed.
| Type | Boolean |
| Default | true |
| Scope | Skill package authors |
Set to false for optional or experimental skills that consumers must explicitly enable.
<PropertyGroup>
<ImprintEnabledByDefault>false</ImprintEnabledByDefault>
</PropertyGroup>
Consumers can override per-package:
<PackageReference Include="MyCompany.OptionalSkills" Version="1.0.0">
<ImprintEnabled>true</ImprintEnabled>
</PackageReference>
PackageReference Metadata
Consumers can configure individual packages using metadata on PackageReference items.
ImprintEnabled
Enable or disable skills from a specific package.
| Type | Boolean |
| Default | Package’s EnabledByDefault setting |
| Scope | Consumer PackageReference |
<PackageReference Include="MyCompany.Skills" Version="1.0.0">
<ImprintEnabled>false</ImprintEnabled>
</PackageReference>
ImprintUsePrefix
Override global ImprintPrefixSkills for a specific package.
| Type | Boolean |
| Default | Global ImprintPrefixSkills value |
| Scope | Consumer PackageReference |
<PackageReference Include="MyCompany.Skills" Version="1.0.0">
<ImprintUsePrefix>true</ImprintUsePrefix>
</PackageReference>
ImprintPrefix
Custom prefix for a specific package’s skills.
| Type | String |
| Default | Package ID |
| Scope | Consumer PackageReference |
<PackageReference Include="MyCompany.VeryLongPackageName.Skills" Version="1.0.0">
<ImprintUsePrefix>true</ImprintUsePrefix>
<ImprintPrefix>myco</ImprintPrefix>
</PackageReference>
Result: Skills placed in .github/skills/myco/ instead of the full package name.
Diagnostic Options
MSBuild Verbose Logging
Use MSBuild’s built-in verbosity options to see detailed Imprint output:
# Windows
dotnet build -v detailed
# Or with binary log for analysis
dotnet build -bl
Imprint tasks output messages at different importance levels:
- High: Key operations (files copied, MCP servers merged)
- Normal: Detailed progress information
- Low: Diagnostic details
Complete Example
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<!-- Target specific agents -->
<ImprintTargetAgents>copilot;claude</ImprintTargetAgents>
<!-- Enable skill prefixing globally -->
<ImprintPrefixSkills>true</ImprintPrefixSkills>
</PropertyGroup>
<ItemGroup>
<!-- Standard package with prefixing -->
<PackageReference Include="Contoso.CodingSkills" Version="2.0.0" />
<!-- Package with custom short prefix -->
<PackageReference Include="MyCompany.EnterpriseSkills" Version="1.0.0">
<ImprintPrefix>enterprise</ImprintPrefix>
</PackageReference>
<!-- Disable skills from this package -->
<PackageReference Include="Experimental.Skills" Version="0.1.0">
<ImprintEnabled>false</ImprintEnabled>
</PackageReference>
<!-- Package without prefixing (override global) -->
<PackageReference Include="Core.Skills" Version="1.0.0">
<ImprintUsePrefix>false</ImprintUsePrefix>
</PackageReference>
</ItemGroup>
</Project>
Property Precedence
When multiple configuration sources exist, precedence is:
- PackageReference metadata (highest priority)
- Project-level PropertyGroup
- SDK defaults (lowest priority)
For ImprintEnabled specifically:
- Consumer’s
PackageReference.ImprintEnabled - Package author’s
ImprintEnabledByDefault - SDK default (
true)