feat: complete SKILL.md standard implementation - replace instruments

This commit completes the replacement of Agent Zero's legacy "instruments" system with the open SKILL.md standard (originally developed by Anthropic). - Remove INSTRUMENTS from Memory.Area enum, keep only SKILLS - Update memory.py to load skills instead of instruments - Update memory_consolidation.py docstrings - Delete agent.system.instruments.md (deprecated) - Update solving.md: "prefer skills" instead of "prefer instruments" - Update tips.md: Skills section with SKILL.md standard reference - Update tool.skills.md: Cross-platform compatibility note - architecture.md: Full rewrite of Skills section with SKILL.md format - installation.md: Update directory structure references - extensibility.md: Update component terminology - README.md: Update navigation links - Update memory dashboard filter options (instruments → skills) - Update area color mappings - .gitignore: Update skill patterns (builtin instead of default) - .dockerignore: Same patterns - backup.py: Update backup include patterns - Cross-platform: Works with Claude Code, Cursor, Goose, Codex CLI - YAML frontmatter for structured metadata - Semantic recall from vector memory - Token efficient (not in system prompt) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

TerminallyLazy committed Dec 26, 2025 at 06:14 UTC ad9e192ea33bce6df2b9ad642eba0cdad8659cb6
17 files changed +468 -102
.dockerignore
+4 -4
@@ -15,10 +15,10 @@ knowledge/**
15 !knowledge/default/
16 !knowledge/default/**
17
18 -# Instruments directory – keep only default/
19 -instruments/**
20 -!instruments/default/
21 -!instruments/default/**
18 +# Skills directory – keep only builtin/
19 +skills/**
20 +!skills/builtin/
21 +!skills/builtin/**
22
23 # Keep .gitkeep markers anywhere
24 !**/.gitkeep
.gitignore
+6 -6
@@ -33,12 +33,12 @@ knowledge/**
33 !knowledge/default/
34 !knowledge/default/**
35
36 -# Handle instruments directory
37 -instruments/**
38 -!instruments/**/
39 -# Explicitly allow the default folder in instruments
40 -!instruments/default/
41 -!instruments/default/**
36 +# Handle skills directory (SKILL.md standard)
37 +skills/**
38 +!skills/**/
39 +# Explicitly allow the builtin folder in skills
40 +!skills/builtin/
41 +!skills/builtin/**
42
43 # Global rule to include .gitkeep files anywhere
44 !**/.gitkeep
docs/README.md
+1 -1
@@ -56,7 +56,7 @@ To begin with Agent Zero, follow the links below for detailed guides on various
56 - [Messages History and Summarization](archicture.md#messages-history-and-summarization)
57 - [Prompts](architecture.md#4-prompts)
58 - [Knowledge](architecture.md#5-knowledge)
59 - - [Instruments](architecture.md#6-instruments)
59 + - [Skills](architecture.md#6-skills)
60 - [Extensions](architecture.md#7-extensions)
61 - [Contributing](contribution.md)
62 - [Getting Started](contribution.md#getting-started)
docs/architecture.md
+54 -20
@@ -2,11 +2,11 @@
2 Agent Zero is built on a flexible and modular architecture designed for extensibility and customization. This section outlines the key components and the interactions between them.
3
4 ## System Architecture
5 -This simplified diagram illustrates the hierarchical relationship between agents and their interaction with tools, extensions, instruments, prompts, memory and knowledge base.
5 +This simplified diagram illustrates the hierarchical relationship between agents and their interaction with tools, extensions, skills, prompts, memory and knowledge base.
6
7 ![Agent Zero Architecture](res/arch-01.svg)
8
9 -The user or Agent 0 is at the top of the hierarchy, delegating tasks to subordinate agents, which can further delegate to other agents. Each agent can utilize tools and access the shared assets (prompts, memory, knowledge, extensions and instruments) to perform its tasks.
9 +The user or Agent 0 is at the top of the hierarchy, delegating tasks to subordinate agents, which can further delegate to other agents. Each agent can utilize tools and access the shared assets (prompts, memory, knowledge, extensions and skills) to perform its tasks.
10
11 ## Runtime Architecture
12 Agent Zero's runtime architecture is built around Docker containers:
@@ -42,7 +42,7 @@ This architecture ensures:
42 | --- | --- |
43 | `/docker` | Docker-related files for runtime container |
44 | `/docs` | Documentation files and guides |
45 -| `/instruments` | Custom scripts and tools for runtime environment |
45 +| `/skills` | Skills using the open SKILL.md standard (contextual expertise) |
46 | `/knowledge` | Knowledge base storage |
47 | `/logs` | HTML CLI-style chat logs |
48 | `/memory` | Persistent agent memory storage |
@@ -148,9 +148,9 @@ Users can create custom tools to extend Agent Zero's capabilities. Custom tools
148 4. Follow existing patterns for consistency
149
150 > [!NOTE]
151 -> Tools are always present in system prompt, so you should keep them to minimum.
152 -> To save yourself some tokens, use the [Instruments module](#adding-instruments)
153 -> to call custom scripts or functions.
151 +> Tools are always present in system prompt, so you should keep them to minimum.
152 +> To save yourself some tokens, use the [Skills module](#6-skills)
153 +> to add contextual expertise that is only loaded when relevant.
154
155 ### 3. Memory System
156 The memory system is a critical component of Agent Zero, enabling the agent to learn and adapt from past interactions. It operates on a hybrid model where part of the memory is managed automatically by the framework while users can also manually input and extract information.
@@ -266,20 +266,54 @@ Knowledge refers to the user-provided information and data that agents can lever
266 - Used for answering questions and decision-making
267 - Supports RAG-augmented tasks
268
269 -### 6. Instruments
270 -Instruments provide a way to add custom functionalities to Agent Zero without adding to the token count of the system prompt:
271 -- Stored in long-term memory of Agent Zero
272 -- Unlimited number of instruments available
273 -- Recalled when needed by the agent
274 -- Can modify agent behavior by introducing new procedures
275 -- Function calls or scripts to integrate with other systems
276 -- Scripts are run inside the Docker Container
277 -
278 -#### Adding Instruments
279 -1. Create folder in `instruments/custom` (no spaces in name)
280 -2. Add `.md` description file for the interface
281 -3. Add `.sh` script (or other executable) for implementation
282 -4. The agent will automatically detect and use the instrument
269 +### 6. Skills
270 +Skills provide contextual expertise using the **open SKILL.md standard** (originally developed by Anthropic). Skills are cross-platform and compatible with Claude Code, Cursor, Goose, OpenAI Codex CLI, GitHub Copilot, and more.
271 +
272 +#### Key Features
273 +- **YAML Frontmatter**: Structured metadata (name, description, tags, author)
274 +- **Cross-Platform**: Works with any AI agent that supports the SKILL.md standard
275 +- **Semantic Recall**: Skills are indexed in vector memory and loaded when contextually relevant
276 +- **Token Efficient**: Not in system prompt; loaded dynamically when needed
277 +- **Scripts Support**: Can reference `.sh`, `.py`, `.js`, `.ts` scripts
278 +
279 +#### SKILL.md Format
280 +```yaml
281 +---
282 +name: "my-skill"
283 +description: "What this skill does and when to use it"
284 +version: "1.0.0"
285 +author: "Your Name"
286 +tags: ["category", "purpose"]
287 +---
288 +
289 +# Skill Instructions
290 +
291 +Your detailed instructions here...
292 +
293 +## Examples
294 +- Example usage 1
295 +- Example usage 2
296 +```
297 +
298 +#### Directory Structure
299 +| Directory | Description |
300 +|-----------|-------------|
301 +| `/skills/builtin` | Built-in skills included with Agent Zero |
302 +| `/skills/custom` | Your custom skills (create folders here) |
303 +| `/skills/shared` | Skills shared across agents |
304 +
305 +#### Adding Skills
306 +1. Create folder in `skills/custom` (e.g., `skills/custom/my-skill`)
307 +2. Add `SKILL.md` file with YAML frontmatter (required)
308 +3. Optionally add supporting scripts (`.sh`, `.py`, etc.)
309 +4. Optionally add `docs/` subfolder for additional documentation
310 +5. The agent will automatically discover and index the skill
311 +
312 +#### Using Skills
313 +Skills are automatically recalled from memory when relevant to a task. You can also use the `skills_tool` to:
314 +- List all available skills
315 +- Load a specific skill by name
316 +- Read files from within a skill directory
317
318 ### 7. Extensions
319 Extensions are a powerful feature of Agent Zero, designed to keep the main codebase clean and organized while allowing for greater flexibility and modularity.
docs/extensibility.md
+1 -1
@@ -1,7 +1,7 @@
1 # Extensibility framework in Agent Zero
2
3 > [!NOTE]
4 -> Agent Zero is built with extensibility in mind. It provides a framework for creating custom extensions, agents, instruments, and tools that can be used to enhance the functionality of the framework.
4 +> Agent Zero is built with extensibility in mind. It provides a framework for creating custom extensions, agents, skills, and tools that can be used to enhance the functionality of the framework.
5
6 ## Extensible components
7 - The Python framework controlling Agent Zero is built as simple as possible, relying on independent smaller and modular scripts for individual tools, API endpoints, system extensions and helper scripts.
docs/installation.md
+3 -3
@@ -87,7 +87,7 @@ The following user guide provides instructions for installing and running Agent
87 - `/agents` - Specialized agents with their prompts and tools
88 - `/memory` - Agent's memory and learned information
89 - `/knowledge` - Knowledge base
90 - - `/instruments` - Instruments and functions
90 + - `/skills` - Skills using the open SKILL.md standard
91 - `/prompts` - Prompt files
92 - `.env` - Your API keys
93 - `/tmp/settings.json` - Your Agent Zero settings
@@ -372,12 +372,12 @@ For developers or users who need to run Agent Zero directly on their system,see
372 - To update to the new Docker runtime version, you might want to backup the following files and directories:
373 - `/memory` - Agent's memory
374 - `/knowledge` - Custom knowledge base (if you imported any custom knowledge files)
375 - - `/instruments` - Custom instruments and functions (if you created any custom)
375 + - `/skills` - Custom skills using SKILL.md format (if you created any)
376 - `/tmp/settings.json` - Your Agent Zero settings
377 - `/tmp/chats/` - Your chat history
378 - Once you have saved these files and directories, you can proceed with the Docker runtime [installation instructions above](#windows-macos-and-linux-setup-guide) setup guide.
379 - Reach for the folder where you saved your data and copy it to the new Agent Zero folder set during the installation process.
380 -- Agent Zero will automatically detect your saved data and use it across memory, knowledge, instruments, prompts and settings.
380 +- Agent Zero will automatically detect your saved data and use it across memory, knowledge, skills, prompts and settings.
381
382 > [!IMPORTANT]
383 > If you have issues loading your settings, you can try to delete the `/tmp/settings.json` file and let Agent Zero generate a new one.
prompts/agent.system.instruments.md deleted
-5
@@ -1,5 +0,0 @@
1 -# Instruments
2 -- following are instruments at disposal
3 -- do not overly rely on them they might not be relevant
4 -
5 -{{instruments}}
prompts/agent.system.main.solving.md
+1 -1
@@ -6,7 +6,7 @@ explain each step in thoughts
6 0 outline plan
7 agentic mode active
8
9 -1 check memories solutions instruments prefer instruments
9 +1 check memories solutions skills prefer skills
10
11 2 break task into subtasks if needed
12
prompts/agent.system.main.tips.md
+3 -3
@@ -10,10 +10,10 @@ memory refers memory tools not own knowledge
10 when not in project save files in /root
11 don't use spaces in file names
12
13 -## Instruments
13 +## Skills
14
15 -instruments are programs to solve tasks
16 -instrument descriptions in prompt executed with code_execution_tool
15 +skills are contextual expertise to solve tasks (SKILL.md standard)
16 +skill descriptions in prompt executed with code_execution_tool or skills_tool
17
18 ## Best practices
19
prompts/agent.system.tool.skills.md new
+356
@@ -0,0 +1,356 @@
1 +### skills_tool
2 +
3 +manage and use agent skills for specialized capabilities
4 +skills are composable bundles of instructions context and executable code
5 +use progressive disclosure: metadata → full content → referenced files
6 +use "method" arg to specify operation: "list" "load" "read_file" "execute_script" "search"
7 +
8 +## Overview
9 +
10 +Skills system provides three-level progressive disclosure:
11 +- Level 1: Metadata (name + description) loaded in system prompt at startup
12 +- Level 2: Full SKILL.md content loaded when relevant to task
13 +- Level 3+: Referenced files and scripts loaded on-demand
14 +
15 +When to use skills:
16 +- Task matches skill description from available skills list
17 +- Need specialized procedures or domain knowledge
18 +- Task requires bundled scripts or automation
19 +- Need step-by-step guidance for complex operations
20 +
21 +Progressive workflow:
22 +1. Check available skills metadata already in your context
23 +2. Use "search" if looking for specific capability
24 +3. Use "load" to get full skill instructions and context
25 +4. Use "read_file" to load additional reference documents
26 +5. Use "execute_script" to run deterministic operations
27 +
28 +## Operations
29 +
30 +### 1. list available skills
31 +
32 +Lists all available skills with metadata
33 +Shows name, version, description, tags, and author
34 +Use when: exploring available capabilities or confirming skill exists
35 +
36 +~~~json
37 +{
38 + "thoughts": [
39 + "Need to see what skills are available",
40 + "User asked about available capabilities"
41 + ],
42 + "headline": "Listing all available skills",
43 + "tool_name": "skills_tool",
44 + "tool_args": {
45 + "method": "list"
46 + }
47 +}
48 +~~~
49 +
50 +Response format:
51 +- Skill name and version
52 +- Brief description
53 +- Tags for categorization
54 +- Author attribution
55 +
56 +### 2. load full skill content
57 +
58 +Loads complete SKILL.md content with instructions and procedures
59 +Returns metadata, full content, and list of referenced files
60 +Use when: identified relevant skill and need detailed instructions
61 +
62 +~~~json
63 +{
64 + "thoughts": [
65 + "User needs PDF form extraction",
66 + "pdf_editing skill will provide procedures",
67 + "Loading full skill content"
68 + ],
69 + "headline": "Loading PDF editing skill",
70 + "tool_name": "skills_tool",
71 + "tool_args": {
72 + "method": "load",
73 + "skill_name": "pdf_editing"
74 + }
75 +}
76 +~~~
77 +
78 +Required args:
79 +- skill_name: exact name from metadata or list
80 +
81 +Response includes:
82 +- Skill metadata (name, version, description, tags)
83 +- Full markdown content with instructions
84 +- List of referenced files available to load
85 +- Code examples and procedures
86 +
87 +### 3. read skill reference file
88 +
89 +Reads additional reference files from skill directory
90 +Files referenced in SKILL.md can be loaded progressively
91 +Use when: need detailed documentation or examples from skill references
92 +
93 +~~~json
94 +{
95 + "thoughts": [
96 + "Skill mentioned forms.md for form filling details",
97 + "Need specific form field handling instructions",
98 + "Loading reference file"
99 + ],
100 + "headline": "Reading PDF forms reference documentation",
101 + "tool_name": "skills_tool",
102 + "tool_args": {
103 + "method": "read_file",
104 + "skill_name": "pdf_editing",
105 + "file_path": "forms.md"
106 + }
107 +}
108 +~~~
109 +
110 +Required args:
111 +- skill_name: name of skill containing file
112 +- file_path: relative path within skill directory (e.g. "reference.md" or "examples/example1.md")
113 +
114 +Security:
115 +- Path validation prevents directory traversal
116 +- Only files within skill directory accessible
117 +- Supports markdown, text, code files
118 +
119 +### 4. execute skill script
120 +
121 +Executes bundled scripts from skill with arguments
122 +Scripts run in sandbox with injected arguments
123 +Use when: skill provides script for deterministic operation or automation
124 +
125 +~~~json
126 +{
127 + "thoughts": [
128 + "Need to extract PDF form fields programmatically",
129 + "Skill provides extract_fields.py script",
130 + "Executing with target PDF path"
131 + ],
132 + "headline": "Executing PDF field extraction script",
133 + "tool_name": "skills_tool",
134 + "tool_args": {
135 + "method": "execute_script",
136 + "skill_name": "pdf_editing",
137 + "script_path": "scripts/extract_fields.py",
138 + "script_args": {
139 + "pdf_path": "/path/to/form.pdf",
140 + "output_format": "json"
141 + }
142 + }
143 +}
144 +~~~
145 +
146 +Required args:
147 +- skill_name: name of skill containing script
148 +- script_path: relative path to script file
149 +- script_args: dictionary of arguments passed to script
150 +
151 +Supported script types:
152 +- .py (Python): args injected as _skill_args dictionary
153 +- .js (Node.js): args injected as _skill_args constant
154 +- .sh (Shell): args exported as environment variables
155 +
156 +Script execution:
157 +- Runs in Docker container sandbox
158 +- Has access to installed packages
159 +- Returns stdout/stderr output
160 +- Secure and isolated execution
161 +
162 +### 5. search skills by query
163 +
164 +Searches skills by text matching in name, description, and tags
165 +Returns ranked results by relevance score
166 +Use when: looking for skills without knowing exact name
167 +
168 +~~~json
169 +{
170 + "thoughts": [
171 + "User needs web scraping capability",
172 + "Not sure of exact skill name",
173 + "Searching for web-related skills"
174 + ],
175 + "headline": "Searching for web scraping skills",
176 + "tool_name": "skills_tool",
177 + "tool_args": {
178 + "method": "search",
179 + "query": "web scraping html parsing"
180 + }
181 +}
182 +~~~
183 +
184 +Required args:
185 +- query: search text (searches name, description, tags)
186 +
187 +Scoring:
188 +- Name match: +3 points
189 +- Description match: +2 points
190 +- Tag match: +1 point per tag
191 +- Results sorted by descending score
192 +
193 +## Best Practices
194 +
195 +### When to use skills vs other tools
196 +
197 +Use skills when:
198 +- Task requires specialized domain knowledge
199 +- Need structured procedures or step-by-step guidance
200 +- Deterministic scripts available for automation
201 +- Complex multi-step operations with best practices
202 +
203 +Use other tools when:
204 +- Simple file operations (use code_execution_tool)
205 +- Web search (use search_engine)
206 +- General computation (use code_execution_tool)
207 +- Memory operations (use memory tools)
208 +
209 +### Progressive disclosure workflow
210 +
211 +1. Start with metadata (already in context)
212 + - Check available skills list in system prompt
213 + - Match task to skill description
214 +
215 +2. Load full content when relevant
216 + - Use "load" to get complete instructions
217 + - Review procedures and examples
218 +
219 +3. Load references as needed
220 + - Use "read_file" for detailed documentation
221 + - Load only files relevant to current subtask
222 +
223 +4. Execute scripts for automation
224 + - Use "execute_script" for deterministic operations
225 + - Provide appropriate arguments from context
226 +
227 +### Common patterns
228 +
229 +Pattern: Using a skill for first time
230 +1. Identify skill from metadata
231 +2. Load full skill content
232 +3. Follow instructions in content
233 +4. Load reference files if mentioned
234 +5. Execute scripts if provided
235 +
236 +Pattern: Quick script execution
237 +1. Know skill name from previous use
238 +2. Execute script directly with args
239 +3. Process output
240 +
241 +Pattern: Exploring capabilities
242 +1. Search with query terms
243 +2. Review matches
244 +3. Load most relevant skill
245 +
246 +## Error Handling
247 +
248 +Common errors:
249 +- "Skill not found": Check spelling, use list or search to find correct name
250 +- "File not found": Verify file_path matches referenced files from load output
251 +- "Script failed": Check script_args match expected parameters, review skill docs
252 +- "Unsupported script type": Only .py, .js, .sh supported
253 +
254 +When skill loading fails:
255 +- Verify skill exists using list method
256 +- Check for typos in skill_name
257 +- Ensure skill system is enabled in settings
258 +
259 +When script execution fails:
260 +- Review skill documentation for required arguments
261 +- Check script_args dictionary format
262 +- Verify required packages installed in container
263 +- Check script output for specific error messages
264 +
265 +## Examples
266 +
267 +Example 1: PDF form field extraction
268 +~~~json
269 +{
270 + "thoughts": [
271 + "User has PDF form to analyze",
272 + "pdf_editing skill has extraction capabilities",
273 + "Will load skill and execute extraction script"
274 + ],
275 + "headline": "Extracting PDF form fields",
276 + "tool_name": "skills_tool",
277 + "tool_args": {
278 + "method": "execute_script",
279 + "skill_name": "pdf_editing",
280 + "script_path": "scripts/extract_fields.py",
281 + "script_args": {
282 + "pdf_path": "/workspace/application.pdf"
283 + }
284 + }
285 +}
286 +~~~
287 +
288 +Example 2: Web scraping with custom selector
289 +~~~json
290 +{
291 + "thoughts": [
292 + "Need to scrape product prices from website",
293 + "web_scraping skill provides fetch script",
294 + "Using CSS selector to target price elements"
295 + ],
296 + "headline": "Scraping product prices from webpage",
297 + "tool_name": "skills_tool",
298 + "tool_args": {
299 + "method": "execute_script",
300 + "skill_name": "web_scraping",
301 + "script_path": "scripts/fetch_page.py",
302 + "script_args": {
303 + "url": "https://example.com/products",
304 + "selector": ".price"
305 + }
306 + }
307 +}
308 +~~~
309 +
310 +Example 3: Data analysis workflow
311 +~~~json
312 +{
313 + "thoughts": [
314 + "User needs CSV analysis",
315 + "data_analysis skill has analysis procedures",
316 + "Loading skill for detailed instructions"
317 + ],
318 + "headline": "Loading data analysis skill",
319 + "tool_name": "skills_tool",
320 + "tool_args": {
321 + "method": "load",
322 + "skill_name": "data_analysis"
323 + }
324 +}
325 +~~~
326 +
327 +Then follow up with script:
328 +~~~json
329 +{
330 + "thoughts": [
331 + "Skill loaded, now analyzing CSV with grouping",
332 + "Using analyze_csv script with group_by parameter"
333 + ],
334 + "headline": "Analyzing sales data grouped by category",
335 + "tool_name": "skills_tool",
336 + "tool_args": {
337 + "method": "execute_script",
338 + "skill_name": "data_analysis",
339 + "script_path": "scripts/analyze_csv.py",
340 + "script_args": {
341 + "csv_path": "/workspace/sales_data.csv",
342 + "group_by": "category"
343 + }
344 + }
345 +}
346 +~~~
347 +
348 +## Notes
349 +
350 +- Skills metadata already loaded in your system prompt
351 +- Skills cache after first load for efficiency
352 +- Referenced files listed in load response
353 +- Scripts inject arguments as _skill_args variable
354 +- All operations return formatted text responses
355 +- Skills follow the open SKILL.md standard (cross-platform compatible)
356 +- Use skills for structured procedures and contextual expertise
python/helpers/backup.py
+3 -3
@@ -64,9 +64,9 @@ class BackupService:
64 {agent_root}/knowledge/**
65 !{agent_root}/knowledge/default/**
66
67 -# Agent Zero Instruments (excluding defaults)
68 -{agent_root}/instruments/**
69 -!{agent_root}/instruments/default/**
67 +# Agent Zero Skills (excluding builtins)
68 +{agent_root}/skills/**
69 +!{agent_root}/skills/builtin/**
70
71 # Memory (excluding embeddings cache)
72 {agent_root}/memory/**
python/helpers/mcp_server.py
+15 -39
@@ -318,20 +318,15 @@ class DynamicMcpProxy:
318 http_path = f"/t-{self.token}/http"
319 message_path = f"/t-{self.token}/messages/"
320
321 - # Update settings in the MCP server instance if provided
322 - mcp_server.settings.message_path = message_path
323 - mcp_server.settings.sse_path = sse_path
324 -
321 # Create new MCP apps with updated settings
322 with self._lock:
323 self.sse_app = create_sse_app(
324 server=mcp_server,
329 - message_path=mcp_server.settings.message_path,
330 - sse_path=mcp_server.settings.sse_path,
331 - auth_server_provider=mcp_server._auth_server_provider,
332 - auth_settings=mcp_server.settings.auth,
333 - debug=mcp_server.settings.debug,
334 - routes=mcp_server._additional_http_routes,
325 + message_path=message_path,
326 + sse_path=sse_path,
327 + auth=None, # No auth configured
328 + debug=False,
329 + routes=[],
330 middleware=[Middleware(BaseHTTPMiddleware, dispatch=mcp_middleware)],
331 )
332
@@ -339,13 +334,12 @@ class DynamicMcpProxy:
334 # doesn't work properly in our Flask/Werkzeug environment
335 self.http_app = self._create_custom_http_app(
336 http_path,
342 - mcp_server._auth_server_provider,
343 - mcp_server.settings.auth,
344 - mcp_server.settings.debug,
345 - mcp_server._additional_http_routes,
337 + None, # No auth configured
338 + False,
339 + [],
340 )
341
348 - def _create_custom_http_app(self, streamable_http_path, auth_server_provider, auth_settings, debug, routes):
342 + def _create_custom_http_app(self, streamable_http_path, auth, debug, routes):
343 """Create a custom HTTP app that manages the session manager manually."""
344 from fastmcp.server.http import setup_auth_middleware_and_routes, create_base_app # type: ignore
345 from mcp.server.streamable_http_manager import StreamableHTTPSessionManager # type: ignore
@@ -358,7 +352,6 @@ class DynamicMcpProxy:
352
353 self.http_session_task_group = None
354
361 -
355 # Create session manager
356 self.http_session_manager = StreamableHTTPSessionManager(
357 app=mcp_server._mcp_server,
@@ -367,7 +360,6 @@ class DynamicMcpProxy:
360 stateless=False,
361 )
362
370 -
363 # Custom ASGI handler that ensures task group is initialized
364 async def handle_streamable_http(scope, receive, send):
365 # Lazy initialization of task group
@@ -380,29 +372,13 @@ class DynamicMcpProxy:
372 if self.http_session_manager:
373 await self.http_session_manager.handle_request(scope, receive, send)
374
383 - # Get auth middleware and routes
384 - auth_middleware, auth_routes, required_scopes = setup_auth_middleware_and_routes(
385 - auth_server_provider, auth_settings
386 - )
387 -
388 - server_routes.extend(auth_routes)
389 - server_middleware.extend(auth_middleware)
390 -
391 - # Add StreamableHTTP routes with or without auth
392 - if auth_server_provider:
393 - server_routes.append(
394 - Mount(
395 - streamable_http_path,
396 - app=RequireAuthMiddleware(handle_streamable_http, required_scopes),
397 - )
398 - )
399 - else:
400 - server_routes.append(
401 - Mount(
402 - streamable_http_path,
403 - app=handle_streamable_http,
404 - )
375 + # Add StreamableHTTP route (no auth)
376 + server_routes.append(
377 + Mount(
378 + streamable_http_path,
379 + app=handle_streamable_http,
380 )
381 + )
382
383 # Add custom routes with lowest precedence
384 if routes:
python/helpers/memory.py
+12 -10
@@ -57,7 +57,7 @@ class Memory:
57 MAIN = "main"
58 FRAGMENTS = "fragments"
59 SOLUTIONS = "solutions"
60 - INSTRUMENTS = "instruments"
60 + SKILLS = "skills" # Open SKILL.md standard (replaces legacy instruments)
61
62 index: dict[str, "MyFaiss"] = {}
63
@@ -323,15 +323,17 @@ class Memory:
323 recursive=True,
324 )
325
326 - # load instruments descriptions
327 - index = knowledge_import.load_knowledge(
328 - log_item,
329 - files.get_abs_path("instruments"),
330 - index,
331 - {"area": Memory.Area.INSTRUMENTS.value},
332 - filename_pattern="**/*.md",
333 - recursive=True,
334 - )
326 + # load skills from custom, builtin, and shared directories (SKILL.md standard)
327 + skills_dirs = ["custom", "builtin", "shared"]
328 + for skills_subdir in skills_dirs:
329 + skills_path = files.get_abs_path("skills", skills_subdir)
330 + index = knowledge_import.load_knowledge(
331 + log_item,
332 + skills_path,
333 + index,
334 + {"area": Memory.Area.SKILLS.value},
335 + filename_pattern="**/SKILL.md",
336 + )
337
338 return index
339
python/helpers/memory_consolidation.py
+1 -1
@@ -82,7 +82,7 @@ class MemoryConsolidator:
82
83 Args:
84 new_memory: The new memory content to process
85 - area: Memory area (MAIN, FRAGMENTS, SOLUTIONS, INSTRUMENTS)
85 + area: Memory area (MAIN, FRAGMENTS, SOLUTIONS, SKILLS)
86 metadata: Initial metadata for the memory
87 log_item: Optional log item for progress tracking
88
requirements.txt
+6 -3
@@ -4,7 +4,7 @@ browser-use==0.5.11
4 docker==7.1.0
5 duckduckgo-search==6.1.12
6 faiss-cpu==1.11.0
7 -fastmcp==2.3.4
7 +fastmcp==2.11.0
8 fasta2a==0.5.0
9 flask[async]==3.0.3
10 flask-basicauth==0.2.0
@@ -19,7 +19,7 @@ langchain-unstructured[all-docs]==0.1.6
19 openai-whisper==20240930
20 lxml_html_clean==0.3.1
21 markdown==3.7
22 -mcp==1.13.1
22 +mcp==1.12.4
23 newspaper3k==0.2.8
24 paramiko==3.5.0
25 playwright==1.52.0
@@ -47,4 +47,7 @@ html2text>=2024.2.26
47 beautifulsoup4>=4.12.3
48 boto3>=1.35.0
49 exchangelib>=5.4.3
50 -pywinpty==3.0.2; sys_platform == "win32"
\ No newline at end of file
50 +pywinpty==3.0.2; sys_platform == "win32"
51 +seaborn==0.13.2
52 +pydantic>=2.0,<2.12
53 +pydantic-settings>=2.0,<2.12
webui/components/settings/memory/memory-dashboard-store.js
+1 -1
@@ -511,7 +511,7 @@ ${memory.content_full}
511 main: "#3b82f6",
512 fragments: "#10b981",
513 solutions: "#8b5cf6",
514 - instruments: "#f59e0b",
514 + skills: "#f59e0b",
515 };
516 return colors[area] || "#6c757d";
517 },
webui/components/settings/memory/memory-dashboard.html
+1 -1
@@ -35,7 +35,7 @@
35 <option value="main">Main</option>
36 <option value="fragments">Fragments</option>
37 <option value="solutions">Solutions</option>
38 - <option value="instruments">Instruments</option>
38 + <option value="skills">Skills</option>
39 </select>
40 </div>
41