agentskills-agentframework
Microsoft Agent Framework integration for the Agent Skills SDK - turn a skill registry into Agent Framework tools.
Generates a set of Microsoft Agent Framework FunctionTool instances from a SkillRegistry, ready to be passed to any Agent Framework agent.
Installation
pip install agentskills-agentframework
Requires Python 3.12 or newer. Installs agentskills-core and agent-framework as dependencies.
Note:
agent-frameworkis currently a pre-release dependency (>=1.0.0rc3). The constraint will be updated once a stable release is published.
Usage
Context Provider (recommended)
The simplest way to integrate is via AgentSkillsContextProvider. It plugs into the Agent Framework lifecycle and automatically injects the skill catalog and tools on every agent.run() call — no manual system-prompt assembly required.
from pathlib import Path
from agent_framework import Agent
from agentskills_core import SkillRegistry
from agentskills_fs import LocalFileSystemSkillProvider
from agentskills_agentframework import AgentSkillsContextProvider
# Set up registry
provider = LocalFileSystemSkillProvider(Path("./skills"))
registry = SkillRegistry()
await registry.register("incident-response", provider)
# Create context provider
skills_context_provider = AgentSkillsContextProvider(registry)
# Pass it to the agent — catalog + tools are injected automatically
agent = Agent(
client=client, # any Agent Framework chat client
name="SREAssistant",
instructions="You are an SRE assistant.",
context_providers=[skills_context_provider],
)
response = await agent.run("What severity is a full DB outage?")
See examples/agent-framework/ for full working demos including client setup.
| Parameter | Default | Description |
|---|---|---|
skills_instruction_prompt |
Built-in template | Custom prompt template. Must contain {skills_catalog} and {tools_usage_instructions} placeholders. |
skills_catalog_format |
"xml" |
Skills catalog format — "xml" or "markdown". |
source_id |
"agentskills" |
Unique identifier for this provider instance. |
Manual Tools
For full control over system-prompt construction, use get_tools() directly:
from pathlib import Path
from agent_framework import Agent
from agentskills_core import SkillRegistry
from agentskills_fs import LocalFileSystemSkillProvider
from agentskills_agentframework import get_tools, get_tools_usage_instructions
# Set up registry
provider = LocalFileSystemSkillProvider(Path("./skills"))
registry = SkillRegistry()
await registry.register("incident-response", provider)
# Build tools + system prompt
tools = get_tools(registry)
catalog = await registry.get_skills_catalog(format="xml")
instructions = get_tools_usage_instructions()
# Pass to agent
agent = Agent(
client=client, # any Agent Framework chat client
name="SREAssistant",
instructions=f"{catalog}\n\n{instructions}",
tools=tools,
)
The catalog tells the agent what skills exist; the usage instructions tell it how to use the tools.
See examples/agent-framework/ for full working demos including client setup.
Generated Tools
| Tool | Parameters | Description |
|---|---|---|
get_skill_metadata |
skill_id |
Get structured metadata (name, description, etc.) |
get_skill_body |
skill_id |
Load the full markdown instructions |
list_skill_resources |
skill_id |
List bundled references, scripts and assets |
get_skill_reference |
skill_id, name |
Read a reference document |
get_skill_script |
skill_id, name |
Read a script |
get_skill_asset |
skill_id, name |
Read an asset |
All tools are async-compatible (FunctionTool with @tool decorator).
list_skill_resources returns a JSON object keyed by resource kind. Not every backend can enumerate resources — a plain static HTTP host cannot. Rather than surfacing an exception, the tool returns {"supported": false, "note": "..."} in that case: "this cannot be listed" is something the model can act on by falling back to the names in the skill body, not an error worth retrying.
API
AgentSkillsContextProvider(registry, *, skills_instruction_prompt=None, skills_catalog_format="xml", source_id=None)
A ContextProvider that injects skill catalog + tools into the agent session automatically via before_run(). Skips injection when the registry has no skills.
get_tools(registry: SkillRegistry, *, max_inline_binary_bytes: int = 65536) -> list[FunctionTool]
Returns a list of Agent Framework function tools bound to the given registry.
get_tools_usage_instructions() -> str
Returns a markdown string explaining the progressive-disclosure workflow - read metadata, then body, then fetch resources on demand. Designed for system-prompt injection alongside the skill catalog.
Comparison with Agent Framework's built-in provider
Agent Framework ships its own FileAgentSkillsProvider. Both plug into the same lifecycle, but they solve different problems:
FileAgentSkillsProvider (built-in) |
AgentSkillsContextProvider (this package) |
|
|---|---|---|
| Backends | Filesystem only | Any SkillProvider - filesystem, HTTP, custom |
| Tool surface | 2 generic tools (load_skill, read_skill_resource) |
5 typed tools (metadata, body, reference, script, asset) |
| Resource semantics | Flat - all resources accessed by path | Typed - the agent knows the category of what it is reading |
| Discovery / parsing | Built into the framework | Delegated to agentskills-core |
| Composability | Single provider | Mix multiple providers in one registry |
| Setup | Point at a folder | Register skills explicitly |
If all you need is skills in a local folder, the built-in provider is already installed and is the simpler choice. Reach for this package when skills come from somewhere other than disk, when you need several sources in one catalog, or when you want the agent to distinguish a script from a reference document.
Example
See examples/agent-framework/ for full working demos.
Error Handling
| Scenario | Exception |
|---|---|
| Skill not found in registry | SkillNotFoundError |
| Resource not found in skill | ResourceNotFoundError |
| Provider errors (HTTP, filesystem) | AgentSkillsError |
All exceptions inherit from AgentSkillsError (from agentskills-core).
Binary Resources
Skill resources may be arbitrary files. Valid UTF-8 is returned as-is; anything else is returned as a JSON envelope, so a binary payload is never silently mangled into replacement characters:
{
"name": "architecture.png",
"media_type": "image/png",
"size_bytes": 20481,
"encoding": "base64",
"content": "iVBORw0KGgo..."
}
Base64 costs roughly 1.37 characters per byte, so binaries above 64 KiB are described rather than inlined - "encoding": "none" plus a note explaining the omission. Adjust the ceiling with:
tools = get_tools(registry, max_inline_binary_bytes=256 * 1024)
License
MIT
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentskills_agentframework-0.3.0.tar.gz.
File metadata
- Download URL: agentskills_agentframework-0.3.0.tar.gz
- Upload date:
- Size: 8.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9e625778a3fffe4e7bea6db080d8058c889e2b1b196278faacc3484ad0e6b3a9
|
|
| MD5 |
3b1541303bc8dbc3a627f7b7b1e907d6
|
|
| BLAKE2b-256 |
7e87d3ea96fd208995d4276d72c3095c7c711703620e9995a4832dba4123ceb8
|
Provenance
The following attestation bundles were made for agentskills_agentframework-0.3.0.tar.gz:
Publisher:
publish.yml on pratikxpanda/agentskills-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentskills_agentframework-0.3.0.tar.gz -
Subject digest:
9e625778a3fffe4e7bea6db080d8058c889e2b1b196278faacc3484ad0e6b3a9 - Sigstore transparency entry: 2298809929
- Sigstore integration time:
-
Permalink:
pratikxpanda/agentskills-sdk@8c402728312bf75b0a4457f4adf917cc18651a70 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/pratikxpanda
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8c402728312bf75b0a4457f4adf917cc18651a70 -
Trigger Event:
push
-
Statement type:
File details
Details for the file agentskills_agentframework-0.3.0-py3-none-any.whl.
File metadata
- Download URL: agentskills_agentframework-0.3.0-py3-none-any.whl
- Upload date:
- Size: 10.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f4c9260b52a43cdbc4c3a661c38757217bbb146b8b5d2824b5010a1e8c7c948
|
|
| MD5 |
1724a98a616261ad4f9f1d0bdd0ac4c9
|
|
| BLAKE2b-256 |
c3608b77997dbed33008909c9c5763ba999bfe29b54aab3d322ffb433440426a
|
Provenance
The following attestation bundles were made for agentskills_agentframework-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on pratikxpanda/agentskills-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
agentskills_agentframework-0.3.0-py3-none-any.whl -
Subject digest:
1f4c9260b52a43cdbc4c3a661c38757217bbb146b8b5d2824b5010a1e8c7c948 - Sigstore transparency entry: 2298809967
- Sigstore integration time:
-
Permalink:
pratikxpanda/agentskills-sdk@8c402728312bf75b0a4457f4adf917cc18651a70 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/pratikxpanda
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8c402728312bf75b0a4457f4adf917cc18651a70 -
Trigger Event:
push
-
Statement type: