Metadata-Version: 2.4
Name: forge-skills
Version: 0.2.0
Summary: Skills Runtime for Forge — intent-based dispatch, SKILL.md loading, and sub-run execution.
Project-URL: Homepage, https://github.com/angelnicolasc/forge
Project-URL: Repository, https://github.com/angelnicolasc/forge
Project-URL: Issues, https://github.com/angelnicolasc/forge/issues
Project-URL: Changelog, https://github.com/angelnicolasc/forge/blob/main/CHANGELOG.md
Author-email: Angel DiCerutti <angelnicolascorzo@gmail.com>
License-Expression: Apache-2.0
Keywords: agents,dispatch,intent,llm,orchestration,skills
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: forge-os-core==0.2.0
Requires-Dist: pydantic<3.0,>=2.7
Requires-Dist: pyyaml>=6.0
Requires-Dist: structlog<26.0,>=24.0
Provides-Extra: intent
Requires-Dist: forge-os-core[intent]; extra == 'intent'
Description-Content-Type: text/markdown

# forge-skills

Skills Runtime for the Forge agent harness.

Provides intent-based skill dispatch, SKILL.md loading, and sub-run execution
with full EventBus integration.

## Installation

```bash
pip install forge-skills
# With intent-based dispatch (sentence-transformers):
pip install forge-skills[intent]
```

## Quick start

```python
from forge_skills import SkillDef, SkillRuntime

rt = SkillRuntime()

skill = SkillDef(
    name="greet",
    description="Greet a user by name",
    examples=["say hello to", "greet", "hi to"],
    parameters=[{"name": "user", "type": "string", "description": "User name"}],
)

async def greet_handler(args: dict) -> str:
    return f"Hello, {args['user']}!"

rt.register(skill, handler=greet_handler)

result = await rt.invoke("greet", arguments={"user": "Alice"})
print(result.output)  # Hello, Alice!
```

## SKILL.md format

```markdown
---
name: summarize
description: Summarize a document
examples:
  - "summarize this"
  - "give me the key points"
parameters:
  - name: text
    type: string
    description: Text to summarize
    required: true
timeout_seconds: 30.0
tags:
  - nlp
---

Summarize the following text concisely:

{text}
```

## Technical debt

See DEVLOG.md for DT entries introduced in Phase 3.
