<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>repoverlay | Blog</title><description>Add configuration files to git repositories without commits.</description><link>https://repoverlay.tylerbutler.com/</link><language>en</language><item><title>Introducing profiles</title><link>https://repoverlay.tylerbutler.com/blog/introducing-profiles/</link><guid isPermaLink="true">https://repoverlay.tylerbutler.com/blog/introducing-profiles/</guid><description>Profiles combine overlays, agent instructions, and plugins into one named configuration. Apply a profile to any repository.

</description><pubDate>Sat, 27 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;repoverlay 0.17.0 introduces &lt;strong&gt;profiles&lt;/strong&gt;, the biggest feature I have added since the
project began. A profile combines overlays, agent instruction files, and plugins
into one named configuration that you apply to a repository.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;why-i-built-them&quot;&gt;Why I built them&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Overlays solve one problem well: they add configuration files to a repository without
commits. But my own setup needed more than files. I wanted to say &quot;give me
everything I need to do Rust work with this agent&quot; and have one command place the
overlays, write the agent instructions, and install the skills and MCP servers I
rely on.&lt;/p&gt;
&lt;p&gt;An overlay defines files to add. A profile defines a working environment.
It refers to overlays and adds agent capabilities through instructions and plugins.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;how-they-work&quot;&gt;How they work&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Define marketplaces and profiles in your repoverlay CCL configuration, beside &lt;code dir=&quot;auto&quot;&gt;sources&lt;/code&gt;:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;marketplaces =&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;name = playground&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;url = obra/claude-plugins&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;profiles =&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span&gt;rust-dev =&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;description = Rust development profile&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;overlays =&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;= rust-base&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;= rust-tools&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;instructions =&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;        &lt;/span&gt;&lt;/span&gt;&lt;span&gt;content =&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;          &lt;/span&gt;&lt;/span&gt;&lt;span&gt;Be concise in all responses.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;plugins =&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;      &lt;/span&gt;&lt;/span&gt;&lt;span&gt;= playground/rust-dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Apply the profile to a specific harness, the application that runs the agent.
To keep the profile in place until you remove it, use persistent mode:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;repoverlay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;profile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;apply&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rust-dev&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--harness&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;copilot&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;To apply it for one agent session with automatic cleanup, use ephemeral mode:&lt;/p&gt;
&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;span&gt;repoverlay&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;copilot&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;--profile&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;rust-dev&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/figure&gt;&lt;/div&gt;
&lt;p&gt;Profiles use &lt;strong&gt;plugins&lt;/strong&gt; in the Claude Code plugin format. A plugin supplies
skills, agents, and MCP servers. When you apply a profile, repoverlay extracts
managed plugins that it can cache. It puts each part in the path for the selected
harness.&lt;/p&gt;
&lt;p&gt;Skills use &lt;code dir=&quot;auto&quot;&gt;.agents/skills/&lt;/code&gt; for Copilot and &lt;code dir=&quot;auto&quot;&gt;.claude/skills/&lt;/code&gt; for Claude.
repoverlay merges MCP servers into &lt;code dir=&quot;auto&quot;&gt;.mcp.json&lt;/code&gt;. Claude loads delegate plugins
and plugins that repoverlay cannot cache through its own settings.
Copilot skips these plugins with a warning.&lt;/p&gt;
&lt;p&gt;repoverlay applies profile capabilities to the target repository, not globally
for the user or machine. It excludes new files from git when possible.
Profiles can also update existing files through managed regions or JSON merges.
repoverlay keeps cache and recovery snapshots outside the repository.&lt;/p&gt;
&lt;div&gt;&lt;h2 id=&quot;current-limitations&quot;&gt;Current limitations&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;Profiles have these limits in 0.17.0:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Profiles support GitHub Copilot and Claude Code. They do not support other
harnesses yet.&lt;/li&gt;
&lt;li&gt;Only Claude supports &lt;code dir=&quot;auto&quot;&gt;delegate&lt;/code&gt; install mode. This mode enables a plugin in the
harness configuration. Copilot skips delegate plugins with a warning.&lt;/li&gt;
&lt;li&gt;A profile changes only the repository where you apply it. It does not install
capabilities globally for the user or machine. Apply the profile to each
repository where you need it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;One mode at a time per profile.&lt;/strong&gt; A profile already applied persistently
cannot also run as an ephemeral session. An active ephemeral profile cannot
also be applied persistently. A lock file prevents concurrent ephemeral
sessions. repoverlay recovers the lock automatically if a previous session was killed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Interrupted cleanup needs a manual step.&lt;/strong&gt; If an ephemeral session is
interrupted and cleanup fails, repoverlay reports the error. It keeps enough
state for you to finish with &lt;code dir=&quot;auto&quot;&gt;repoverlay profile remove&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;&lt;h2 id=&quot;try-them&quot;&gt;Try them&lt;/h2&gt;&lt;/div&gt;
&lt;p&gt;The &lt;a href=&quot;https://repoverlay.tylerbutler.com/guides/profiles/&quot;&gt;profiles guide&lt;/a&gt; explains how to define, inspect, apply, and
remove profiles. It covers marketplaces, managed and delegate plugins, and the
capability paths for each harness. Read the guide, and tell me what you build.&lt;/p&gt;</content:encoded><category>release</category><category>profiles</category></item></channel></rss>