[Discuss] Look at Progressive Disclosure for Context items using a progressive disclosure inspired by Claude Skills
>>> [!note] Migrated issue
<!-- Drupal.org comment -->
<!-- Migrated from issue #3567568. -->
Reported by: [kristen pol](https://www.drupal.org/user/8389)
>>>
<h3>Implement Progressive Disclosure for Context items using a progressive disclosure inspired by Claude Skills</h3>
<h4>Problem/Motivation</h4>
<p>The Context Control Center (CCC) is designed to provide AI agents with the necessary information to produce high-quality, on-brand output. However, sending the <em>entire</em> collection of available context (brand voice, style guides, technical facts, etc.) with every single agent call is highly inefficient.</p>
<p>This approach leads to several problems:</p>
<ol>
<li><strong>Polluted Context Window:</strong> Irrelevant information can confuse the LLM and lead to lower-quality or unpredictable results.</li>
<li><strong>Increased Token Usage:</strong> Large prompts are expensive and slow.</li>
<li><strong>Scalability Issues:</strong> As an organization adds more context, the system becomes increasingly unwieldy and costly.</li>
</ol>
<p>We need a mechanism for an agent to dynamically select and load <em>only</em> the specific context it needs for a given task, keeping the initial prompt lean and efficient.</p>
<h4>Proposed resolution</h4>
<p>We should adopt a "progressive disclosure" model inspired by Anthropic's Claude Skills and the open-source <strong>OpenSkills</strong> project. This approach treats each <code>Formatted Context</code> entity as a "skill" that an agent can choose to load on demand.</p>
<p>The workflow would be a two-step process:</p>
<p><strong>1. System Prompt Injection with a "Table of Contents"</strong></p>
<p>First, a lightweight summary of all available <code>Formatted Context</code> "skills" is injected into the agent's system prompt. This acts as a table of contents, telling the agent what knowledge is available without loading the full content.</p>
<p><em>Example inspired by OpenSkills:</em></p>
<pre><pre><context_skills priority="1"><br><br>## Available Context & Skills<br><br><usage><br>When asked to perform a task, first check if any of the available context skills below can help.<br><br>How to use a context skill:<br>- Invoke the 'context_loader' tool with the skill's name (e.g., context_loader("brand_voice")).<br>- The full content of the skill will be loaded with detailed instructions.<br></usage><br><br><available_skills><br><br><skill><br><name>brand_voice</name><br><description>Guidelines for brand voice, tone, sentiment, and personality. Use this for all user-facing content.</description><br></skill><br><br><skill><br><name>seo_rules</name><br><description>Technical SEO best practices, including keyword density, meta description length, and linking strategies.</description><br></skill><br><br></available_skills><br><br></context_skills></pre></pre><h3>Structure</h3>
<p>Then the content item has a "parent" file with instructions on when it is used and then conditionally loads "sub-context items" as needed. Skills can run scripts and so on, but for context items we could conditionally load more "sub-items" if the LLM determines they're needed and don't load them if they don't need them.</p>
<p>The idea is Progressive disclosure: The full instructions load only when the skill/context-item is invoked, keeping your agent's context clean.</p>
<p>Claude's skill writing docs have a lot of potential properties to consider but their use-case is more complex than ours. What I think is most relevant is the progressive disclosure context.</p>
<p><a href="https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices#naming-conventions">https://platform.claude.com/docs/en/agents-and-tools/agent-skills/best-practices#naming-conventions</a></p>
<h3>Example: Data Query Folder structure</h3>
<pre><pre>bigquery-skill/<br>├── SKILL.md (overview and navigation)<br>└── reference/<br> ├── finance.md (revenue, billing metrics)<br> ├── sales.md (opportunities, pipeline)<br> ├── product.md (API usage, features)<br> └── marketing.md (campaigns, attribution)</pre></pre><p>Skill.md (So the "parent content item")</p>
<pre><pre># BigQuery Data Analysis<br><br>## Available datasets<br><br>**Finance**: Revenue, ARR, billing → See [reference/finance.md](reference/finance.md)<br>**Sales**: Opportunities, pipeline, accounts → See [reference/sales.md](reference/sales.md)<br>**Product**: API usage, features, adoption → See [reference/product.md](reference/product.md)<br>**Marketing**: Campaigns, attribution, email → See [reference/marketing.md](reference/marketing.md)<br><br>## Quick search<br><br>Find specific metrics using grep:<br>```bash<br>grep -i "revenue" reference/finance.md<br>grep -i "pipeline" reference/sales.md<br>grep -i "api usage" reference/product.md<br>```</pre></pre><h3>Example: Internal Comms writing skill</h3>
<p>For help with "writing words" context application the example GitHub skills is really relevant.</p>
<p><a href="https://github.com/anthropics/skills/blob/main/skills/internal-comms/SKILL.md">https://github.com/anthropics/skills/blob/main/skills/internal-comms/SKILL.md</a></p>
<pre><pre>---<br>name: internal-comms<br>description: A set of resources to help me write all kinds of internal communications, using the formats that my company likes to use. Claude should use this skill whenever asked to write some sort of internal communications (status reports, leadership updates, 3P updates, company newsletters, FAQs, incident reports, project updates, etc.).<br>license: Complete terms in LICENSE.txt<br>---<br><br>## When to use this skill<br><br>To write internal communications, use this skill for:<br>- 3P updates (Progress, Plans, Problems)<br>- Company newsletters<br>- FAQ responses<br>- Status reports<br>- Leadership updates<br>- Project updates<br>- Incident reports<br><br>## How to use this skill<br><br>To write any internal communication:<br><br>1. **Identify the communication type** from the request<br>2. **Load the appropriate guideline file** from the `examples/` directory:<br> - `examples/3p-updates.md` - For Progress/Plans/Problems team updates<br> - `examples/company-newsletter.md` - For company-wide newsletters<br> - `examples/faq-answers.md` - For answering frequently asked questions<br> - `examples/general-comms.md` - For anything else that doesn't explicitly match one of the above<br>3. **Follow the specific instructions** in that file for formatting, tone, and content gathering<br><br>If the communication type doesn't match any existing guideline, ask for clarification or more context about the desired format.<br><br>## Keywords<br><br>3P updates, company newsletter, company comms, weekly update, faqs, common questions, updates, internal comms</pre></pre>
issue