SkillOS MVP scaffold
Project description
SkillOS
SkillOS — self‑hosted фреймворк для оркестрации навыков (skills). Он помогает превращать разрозненные функции и интеграции в управляемую систему: с политиками доступа, утверждениями, бюджетами, дедупликацией, вебхуками и наблюдаемостью.
Зачем нужен SkillOS
Когда навыков становится много (внутренние сервисы, внешние API, LLM‑агенты, автоматизации), появляются типичные проблемы:
- нельзя контролировать, кто и что может выполнять;
- сложно организовать подтверждения на рискованные действия;
- нет лимитов затрат и прозрачной стоимости;
- события приходят повторно (webhook‑storm), нужны idempotency и дедупликация;
- много ручной glue‑логики и слабая повторяемость процессов.
SkillOS дает единый слой оркестрации и контроля, не привязываясь к облаку — всё работает на вашем сервере.
Для кого
- Команды, которые строят self‑hosted автоматизации.
- Проекты с навыками/инструментами: обработка заявок, интеграции, задачи для LLM.
- Компании, где важны политики доступа, бюджет, безопасность и наблюдаемость.
Use cases (примеры)
- Служба поддержки: классификация тикетов → маршрутизация → безопасное выполнение действий через approvals.
- Финансовые операции: строгие permission/approval политики и лимиты затрат.
- Интеграции: входящие вебхуки с идемпотентностью и вложениями.
- LLM‑оркестрация: контроль модели/бюджета и прозрачная трассировка.
Ключевые преимущества
- Контроль рисков: approvals, permissions, policy‑rules.
- Экономика: бюджеты и контроль затрат на запрос.
- Надежность: idempotency, DLQ, circuit breaker.
- Безопасность: JWT, HMAC, лимиты вложений.
- Масштабируемость: маршрутизация и параллельные пайплайны.
- Self‑hosted: полный контроль над инфраструктурой.
Что внутри
- Маршрутизация запросов к навыкам (keyword/vector/hybrid, веса).
- Композиции и пайплайны с параллельными группами.
- Zero-YAML SDK: декоратор
@skillи авто‑дискавери Python‑навыков. - SkillFlow: циклы и state‑machine для многошаговых навыков.
- Политики доступа (roles/permissions) и утверждения.
- Бюджетирование и контроль затрат.
- Вебхуки с проверкой подписи и вложениями.
- Идемпотентность, джобы, расписания.
- Health checks, метрики и трассировка.
Как это работает (вкратце)
- Запрос приходит через CLI или API.
- Оркестратор выбирает навык (routing).
- Проверяются policies (permissions/approvals).
- Проверяются бюджеты и circuit breaker.
- Навык исполняется, результат логируется.
Схема потока
flowchart LR
A[CLI / API] --> B[Orchestrator]
B --> C{Policies}
C -->|permissions| D[Budget & Circuit]
C -->|approval| D
D --> E[Skill Execution]
E --> F[Telemetry / Logs]
B --> G[Webhooks / Jobs / Schedules]
Установка
Через pip (после публикации в PyPI):
python -m pip install skillos-ai
skillos --help
Через Docker:
docker build -t skillos .
docker run --rm -p 8000:8000 -v "$PWD/skills:/app/skills" skillos
Dev‑установка (Poetry):
pip install poetry
poetry install
Быстрый старт
# создать навык
skillos add-skill travel/search_flights --root ./skills
# запустить запрос
skillos run "Find flights to Sochi" --root ./skills
Для dev‑режима можно использовать poetry run:
poetry run skillos add-skill travel/search_flights --root ./skills
poetry run skillos run "Find flights to Sochi" --root ./skills
Запуск API:
poetry run uvicorn skillos.api:app --host 0.0.0.0 --port 8000
Dev Mode и Zero‑YAML
Создай файл skills/implementations/hello.py:
from skillos.sdk import skill
@skill(name="hello", description="Simple greeting")
def hello(payload: str):
return f"Hello, {payload}"
Запусти без YAML и внешних зависимостей:
from skillos.orchestrator import Orchestrator
output = Orchestrator.run_simple("hello", "./skills")
print(output)
SkillFlow (циклы и state‑machine)
from skillos.flow import SkillFlow
flow = SkillFlow("counter")
@flow.start
def start(state):
state["count"] = state.get("count", 0) + 1
return state
def loop_condition(state):
if state["count"] < 3:
return "start"
return "__end__"
flow.add_edge("start", loop_condition)
result = flow.run({"count": 0})
print(result["count"]) # 3
Архитектура и структура каталога
skills/
metadata/ # YAML-описания навыков
implementations/ # Python-реализации навыков
policies/ # approval/permission политики
runtime/ # служебные файлы (circuit breaker, idempotency и др.)
attachments/ # файлы вложений вебхуков
triggers/ # webhook-триггеры
connectors/ # определения коннекторов
secrets/ # секреты (например, .env)
Основные понятия
- Skill — атомарное действие с YAML‑метаданными и Python‑реализацией.
- Composition — набор шагов с последовательным или параллельным исполнением.
- Pipeline — оркестрация набора шагов, включая параллельные группы (
skillA|skillB). - Policies — правила доступа и утверждений.
- Budget — лимиты стоимости запросов и контроль модели.
CLI (основные команды)
# оркестратор
poetry run skillos run "Find flights to Sochi" --root ./skills --execute
# пайплайн
poetry run skillos pipeline run --root ./skills --step ops/first --step ops/second --payload "start"
# вебхук
poetry run skillos webhook handle --id sample-hook --path ./payload.json --signature "t=...,v1=..." --root ./skills
Полный список и примеры: docs/cli.md.
API
GET /health— статус системы (503 приunhealthy).POST /run— выполнение запроса.POST /validate— валидация навыков.POST /skills/{id}/deprecate— депрекейт.POST /skills/{id}/undeprecate— отмена депрекейта.
Пример:
curl -X POST http://localhost:8000/run \
-H "Content-Type: application/json" \
-d '{"query":"Find flights to Sochi","execute":false}'
Вебхуки и вложения
- Подписи HMAC обязательны по умолчанию. Можно разрешить unsigned через
SKILLOS_WEBHOOK_ALLOW_UNSIGNED=1. - Вложения передаются как base64 и сохраняются в
attachments/.
Пример payload:
{
"payload": "hello",
"attachments": [
{
"filename": "image.png",
"content_type": "image/png",
"data": "<base64>"
}
]
}
Ограничения:
- Допустимые content-type:
application/json,application/pdf,text/plain,text/csv,text/markdown,text/html,image/*. - Максимальный размер:
SKILLOS_ATTACHMENT_MAX_SIZE_BYTES(по умолчанию 10MB).
Rate limiting
Есть два режима:
- Best-effort (по умолчанию): без обязательного Redis.
- Strict: атомарный Redis‑лимитер, включается
SKILLOS_RATE_LIMIT_STRICT=1.
В strict‑режиме Redis обязателен (SKILLOS_REDIS_URL/REDIS_URL). Если Redis не настроен — ошибка.
Хранилище
Два варианта:
file(по умолчанию) — локальные JSON/SQLite файлы.postgres— прод‑режим с изоляцией по tenant.
Переменные:
SKILLOS_STORAGE_BACKEND=postgresSKILLOS_POSTGRES_DSNилиDATABASE_URLSKILLOS_POSTGRES_SCHEMA(опционально)
Безопасность
- JWT:
SKILLOS_JWT_*(алгоритм, issuer, audience, clock skew). - Approval policies:
policies/approval_policies.json. - Permission policies:
policies/permission_policies.json.
Production чеклист (кратко)
- Выбрать backend (
file/postgres). - Настроить секреты и политики.
- Включить строгий rate‑limit при необходимости.
- Прогнать тесты:
poetry run pytest -q. - Запустить API.
Подробно: docs/deployment.md.
Документация
docs/quickstart.md— быстрый старт.docs/concepts.md— концепции и архитектура.docs/deployment.md— прод‑обкатка и настройки.docs/cli.md— справочник по CLI.
Вклад
См. CONTRIBUTING.md и CODE_OF_CONDUCT.md.
Лицензия
MIT — см. LICENSE.
Project details
Release history Release notifications | RSS feed
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 skillos_ai-0.2.3.tar.gz.
File metadata
- Download URL: skillos_ai-0.2.3.tar.gz
- Upload date:
- Size: 109.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.1 CPython/3.11.14 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
faf3997d3464cbf59c369d60c3cd4d902366bd252db672e522a348b6949a18aa
|
|
| MD5 |
0474ec64b884929034a605c9aff399cd
|
|
| BLAKE2b-256 |
5b7942786bfb0cf64f14cc2903889b11ca011ac01973106bffaaadd3050e1070
|
File details
Details for the file skillos_ai-0.2.3-py3-none-any.whl.
File metadata
- Download URL: skillos_ai-0.2.3-py3-none-any.whl
- Upload date:
- Size: 148.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.3.1 CPython/3.11.14 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cfc1553d791639bab0e1a77aaa56fb6c64fceb19856f34dfc3ca4aec610119ef
|
|
| MD5 |
7040b320bdb85a64b6d15d4d71556ce0
|
|
| BLAKE2b-256 |
bbd28e6f657a7617ec1471e7a9f7215c69537bca79d057ec7fa41fd9f67c333e
|