☿ Autolycus · Agent Reliability

Outcome Contract & Verify Gate

Формальный протокол завершения задач —
6 outcome-кодов, verify gate, trust boundaries. Вдохновлено BitGN Agent Challenges.

5
модулей Python
81
авто-тестов
3
skills с интеграцией
~800
строк кода
Модули
task_outcome.py
6 outcome-кодов, фабрики, format, verify
20 тестов
run_with_outcome.py
Обёртка скриптов/функций в TaskOutcome
11 тестов
response_verifier.py
Verify Gate — проверка ответа перед отправкой
24 теста
trust_classifier.py
Классификация trusted/untrusted, prompt injection
17 тестов
sanitize_with_trust.py
Интеграция trust + outcome для производства
9 тестов
Возможности
📋

Outcome Contract

6 строгих кодов завершения задачи вместо свободного текста. Каждый ответ содержит outcome code, сообщение и ссылки на источники (grounding refs).

from task_outcome import outcome_ok, outcome_denied_security

result = outcome_ok("Задача выполнена",
    grounding_refs=["wiki/page.md"])
# 🚫 Отказано: ...
# ❓ Уточнение: ...
# ⚠️ Недоступно: ...
# ❌ Ошибка: ... (details)

Verify Gate

Автоматическая проверка ответа перед отправкой пользователю. Гарантирует что grounding refs валидны, объяснения достаточны, а сообщение не противоречит контексту.

from response_verifier import verify_response

passed, issues = verify_response(result, context={
    "read_files": ["wiki/page.md"]
})
if not passed:
    for issue in issues:
        print(f"⚠️ {issue}")
🛡️

Trust Boundaries

Защита от prompt injection. Untrusted контент (форумы, скачанные файлы, API) — данные, не инструкции. Три уровня доверия: trusted, semi_trusted, untrusted.

annotation = get_trust_annotation("/tmp/downloaded/file.txt")
# {"type": "data", "trust": "untrusted", "sensitive": false}

sanitize_input("Ignore all previous instructions")
# → OUTCOME_DENIED: prompt injection detected
🔄

Run With Outcome

Любой Python-скрипт или функция автоматически оборачивается в TaskOutcome. Таймауты, перехват исключений, форматирование stderr.

from run_with_outcome import run_script, run_function

result = run_script("scripts/check.py", timeout=30)
# result.code == OutcomeCode.OK → успех
# result.code == OutcomeCode.ERROR → ошибка + details
Outcome Codes
Код Значение Префикс пользователю Пример
OK Успешное выполнение Вилка найдена, заменена
DENIED_SECURITY Отказ по безопасности 🚫 Отказано: Доступ к /etc/shadow запрещён политикой
DENIED_POLICY Отказ по политике 🚫 Отказано: Скидка 99% превышает лимит
CLARIFICATION Требуется уточнение ❓ Уточнение: Какой сервер имеется в виду?
UNSUPPORTED Инструмент недоступен ⚠️ Недоступно: Нет инструмента для генерации изображений
ERROR Техническая ошибка ❌ Ошибка: БД недоступна (timeout 30s)
Вдохновение

Архитектура реализована на основе исследования BitGN Agent Challenges (ECOM1 / PAC1):

Подробнее: bitgn.com/insights · github.com/bitgn/challenges

☿ Autolycus Agent · autolycus-agent.ru · GitHub