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:

  1. VCS directories - .git, .svn, .hg (most authoritative)
  2. IDE directories - .vs (Visual Studio), .idea (JetBrains)
  3. 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:

  1. PackageReference metadata (highest priority)
  2. Project-level PropertyGroup
  3. SDK defaults (lowest priority)

For ImprintEnabled specifically:

  1. Consumer’s PackageReference.ImprintEnabled
  2. Package author’s ImprintEnabledByDefault
  3. SDK default (true)

Back to top

Copyright © 2026 Moaid Hathot. Distributed under the MIT License.

This site uses Just the Docs, a documentation theme for Jekyll.