temporality
Изменить страницу↗
Инженерные документы

Living Skills — эволюционирующие capabilities в Temporality

#1. Цель

Развить текущую модель skills из статического набора Markdown-инструкций в версионируемые capabilities, которыми одинаково могут пользоваться:

При этом Skill не должен становиться хранилищем памяти.

Skill отвечает за:

что агент умеет делать и каким каноническим способом это делается.

Temporality отвечает за:

что произошло при реальном применении Skill, что из этого было узнано, что было переиспользовано, что оказалось неверным и как на основании накопленного опыта может измениться сам Skill.

Таким образом, необходимо разделить четыре сущности:

Skill
  capability + canonical procedure

Execution
  конкретное применение capability

Memory / Knowledge
  опыт, полученный из executions

Evolution
  изменение Skill на основании опыта и evidence

Основной цикл:

             ┌──────────────────┐
             │      Skill       │
             │ capability       │
             │ procedure        │
             │ tools            │
             └────────┬─────────┘
                      │
                   execute
                      │
                      ▼
             ┌──────────────────┐
             │    Execution     │
             │ trajectory       │
             │ tool calls       │
             │ evidence         │
             └────────┬─────────┘
                      │
                 observations
                      │
                      ▼
             ┌──────────────────┐
             │ Memory /         │
             │ Knowledge        │
             │                  │
             │ discovered       │
             │ confirmed        │
             │ reused           │
             │ invalidated      │
             └────────┬─────────┘
                      │
                 enough evidence
                      │
                      ▼
             ┌──────────────────┐
             │ Skill Evolution  │
             │ proposal         │
             │ evaluation       │
             │ approval         │
             └────────┬─────────┘
                      │
                      ▼
                new Skill version

#2. Основной архитектурный принцип

#Skill ≠ Memory

Skill не должен постепенно превращаться в свалку накопленного operational knowledge.

Необходимо различать:

#Skill

Каноническая capability:

"Как агент должен выполнять эту работу."

#Memory / Knowledge

Контекстный опыт:

"Что мы узнали при выполнении этой работы."

#Execution

Фактическая история:

"Что реально сделал агент."

#Evolution

Изменение capability:

"Что в Skill необходимо изменить, если накопленного evidence достаточно."


#3. Пример разделения

Skill:

Deploy service

1. Check repository state
2. Build image
3. Run tests
4. Deploy to staging
5. Wait until service is healthy
6. Promote to production

Memory:

Для service X health endpoint обычно становится
стабильным через 30–50 секунд после rollout.

Источник:
  execution #1827
  execution #1831
  execution #1842

Состояние:
  confirmed

Использовано:
  7 раз

Эта память не должна автоматически превращаться в строку Skill.

Если накоплено достаточно evidence, может появиться evolution proposal:

Skill deploy v1.2 → v1.3

Change:
  replace generic health check with
  wait_until_healthy(service=X)

Reason:
  repeated failures during health check

Evidence:
  14 executions

Evaluations:
  12/12 passed

После принятия появляется новая версия Skill.


#4. Skill package

Минимальная структура:

skills/
  <skill-id>/
    SKILL.md
    skill.yaml

    scripts/
    examples/
    evals/

    CHANGELOG.md

Не создавать knowledge/ внутри Skill.

Knowledge является частью temporal state Temporality и хранится отдельно от skill package.

Skill package должен оставаться переносимым и пригодным для:


#5. SKILL.md

SKILL.md остаётся основным человеко- и LLM-читаемым описанием Skill.

Он должен содержать:

Пример:

# Deploy service

## Purpose

Deploy a service through staging into production.

## When to use

Use this skill when a service must be deployed through
the standard deployment pipeline.

## Procedure

1. Check repository state.
2. Build the image.
3. Run tests.
4. Deploy to staging.
5. Wait until the service is healthy.
6. Promote to production.

## Constraints

- Do not deploy with uncommitted changes.
- Production promotion requires successful staging verification.

Markdown не должен быть единственным источником машинно необходимой информации.


#6. skill.yaml

Машинный контракт Skill.

Пример:

id: deploy-service
version: 1.2.0

name: Deploy service

description: >
  Deploys a service through staging into production.

inputs:
  repository:
    type: string
    required: true

  revision:
    type: string
    required: true

outputs:
  deployment:
    type: artifact

capabilities:
  - inspect_repository
  - build
  - test
  - deploy
  - verify

tools:
  - repository.read
  - repository.status
  - build.run
  - test.run
  - deployment.create
  - deployment.status

runtime:
  sandbox: required
  network: restricted

preconditions:
  - repository_available
  - revision_exists

postconditions:
  - staging_deployment_created
  - production_deployment_verified

evidence:
  required:
    - revision
    - test_result
    - deployment_result

evaluation:
  suite: deploy-service/default

#7. Contract

Contract описывает то, что runtime способен проверить независимо от LLM.

Минимально поддержать:

Contract не должен превращаться в язык программирования.

Он описывает границы capability, а не каждый шаг реализации.


#8. Capabilities

Skill может предоставлять одну или несколько capabilities.

Например:

capabilities:
  - inspect_repository
  - build
  - test
  - deploy
  - verify

Capability должна быть стабильным идентификатором, пригодным для:

Memory может ссылаться не только на skill_id, но и на конкретную capability.

Например:

skill: deploy-service
capability: verify

Это позволяет Temporality накапливать опыт на более точном уровне.


#9. Tools

Skill должен явно объявлять используемые инструменты.

Например:

tools:
  - repository.read
  - repository.diff
  - test.run
  - deployment.create

Runtime должен уметь определить:

  1. какие tools нужны;
  2. какие tools доступны;
  3. каких tools не хватает;
  4. какие permissions требуются;
  5. какие ограничения накладываются на tools.

Tool не должен существовать только как строка в Markdown.


#10. Runtime requirements

Skill может требовать:

Пример:

runtime:
  sandbox: required

  network:
    mode: restricted

  filesystem:
    read:
      - repository

  credentials:
    - github.read

  mcp:
    - repository
    - ci

Runtime должен уметь проверить совместимость Skill с окружением до запуска.


#11. Preconditions / Postconditions

Skill должен описывать ожидаемые условия начала и завершения операции.

preconditions:
  - repository_available
  - revision_exists

postconditions:
  - deployment_created
  - service_verified

Postcondition не означает, что агент всегда достигнет его.

Execution должен фиксировать:

expected postcondition
actual result
evidence

Это позволяет Temporality анализировать расхождения между intended procedure и actual trajectory.


#12. Evidence

Skill может объявлять минимально необходимые evidence:

evidence:
  required:
    - inspected_revision
    - test_result
    - deployment_result

Execution должен связывать:

Skill
  ↓
Execution
  ↓
Operation
  ↓
Tool calls
  ↓
Artifacts / Evidence

Evidence используется для:


#13. Execution

Каждый запуск Skill должен быть отдельным Execution.

Execution должен фиксировать:

skill_id
skill_version
capability
inputs
runtime
tools
trajectory
outputs
evidence
result
cost
duration
errors
memory_used
memory_created

Критически важно:

Execution всегда привязан к конкретной версии Skill.

Если Skill позднее изменился, старый execution не должен "перепривязываться" к новой версии.


#14. Memory / Knowledge

Memory является отдельным temporal layer Temporality.

Она не входит физически в Skill package.

Memory представляет собой:

Каждая Memory должна иметь:

id
content
skill_id
capability
source executions
state
confidence
created_at
updated_at
last_used_at
usage_count

#15. Memory должна быть контекстной

Memory не должна автоматически попадать в каждый execution Skill.

Для нового execution Temporality должен определить релевантные Memory на основании:

Pipeline:

current operation
       ↓
candidate memories
       ↓
relevance filtering
       ↓
compact memory context
       ↓
agent

Агент должен получать не всю историю Skill, а компактный контекст релевантного опыта.


#16. Memory provenance

Каждое существенное знание должно иметь provenance.

Например:

id: memory-183

skill:
  id: deploy-service
  capability: verify

content: >
  Service X requires approximately 30–50 seconds
  before its health endpoint becomes stable.

source:
  executions:
    - run-1827
    - run-1831
    - run-1842

evidence:
  - test-result-1827
  - deployment-result-1831

state: confirmed

Нельзя считать Memory подтверждённой только потому, что LLM её сформулировала.


#17. Memory lifecycle

Минимальная state machine:

proposed
    │
    ▼
confirmed
    │
    ├──────► invalidated
    │
    ▼
used

Дополнительно:

deprecated
superseded

Изменение состояния Memory должно быть событием.

Не удалять историю состояния.


#18. Memory reuse

При использовании Memory execution должен фиксировать:

memory_id
why_selected
relevance_context
whether_used
effect

Например:

memory.used

memory: memory-183
execution: run-1942
reason:
  service=X
  operation=health-check

result:
  avoided premature health check

Это позволяет анализировать не только наличие памяти, но и реальное переиспользование опыта.


#19. Memory invalidation

Если execution показывает, что Memory больше не соответствует реальности, она не должна быть просто изменена.

Необходимо:

old memory
    ↓
invalidated / superseded
    ↓
new memory

Например:

M1:
"Service X requires 30–50 sec"

        ↓ evidence

M1:
superseded

M2:
"After v4 deployment service X usually becomes healthy
within 5–10 sec."

История должна сохраняться.


#20. Skill Evolution

Skill может эволюционировать на основании:

Но:

Memory не изменяет Skill автоматически.

Сначала возникает evidence и evolution proposal.


#21. Evolution Proposal

Агент может создать proposal:

Skill Evolution Proposal

Skill: deploy-service
Current version: 1.2.0

Observed problem:
Health checks frequently execute too early.

Evidence:
14 executions

Related memories:
memory-183
memory-211

Proposed change:
Use wait_until_healthy(service)

Affected capabilities:
verify

Expected effect:
Reduce transient deployment failures.

Required evaluations:
deploy-service/health-check

Proposal является отдельным объектом Temporality.


#22. Agent-driven evolution

Стандартный workflow:

observe
   ↓
detect repeated pattern
   ↓
collect evidence
   ↓
find related memories
   ↓
create proposal
   ↓
validate
   ↓
run evaluations
   ↓
approval
   ↓
apply
   ↓
new Skill version

Агент не должен менять опубликованный Skill непосредственно на основании одного execution.


#23. Human-driven evolution

Человек должен иметь возможность:

Человек и агент должны работать с одной моделью данных.


#24. Skill analysis tools

Минимальный набор инструментов.

#skill_inspect

Показывает:

identity
version
description
capabilities
contract
tools
runtime
evaluation status
recent executions
related memory summary
evolution status

#skill_validate

Проверяет:


#skill_diff

Показывает различия между версиями:

instructions
contract
capabilities
tools
runtime
evaluations

Memory в Skill diff не включается.

Она отображается отдельно как temporal context.


#skill_history

Показывает:

skill created
version created
execution
failure
evaluation
proposal
approval
new version

#skill_executions

Позволяет анализировать реальные применения Skill:

list
inspect
filter
compare

Фильтры:


#skill_memory

Не изменяет Skill.

Показывает Memory, связанные с:

Поддержать:

list
search
inspect

Изменение состояния Memory должно выполняться отдельными memory operations.


#skill_propose

Создаёт Evolution Proposal.


#skill_evaluate

Запускает evaluations для Skill или proposal.


#skill_apply — только для человека

Применение утверждённого proposal — не тул агента: версию применяет человек через UI, CLI (temporality skill apply) или API. Инструментов skill_apply / skill_rollback у агента нет; «откат» — это новая версия, созданная proposal-механикой (история не удаляется никогда).


#25. Memory tools

У Memory нет собственных memory.* туллов; фактическая поверхность:

remember            — запомнить устойчивый вывод (kind: claim)
knowledge_lookup    — проверить конкретное знание по id
knowledge_explore   — исследование базы знаний (поиск, углубление)

Изменение состояния знаний (confirm/invalidate/supersede) — действия человека через UI/HTTP API (/v1/observations/knowledge/promote|invalidate| challenge); для агента-исполнителя они закрыты.

Важно:

skill_memory — это навигация от Skill к Memory.

knowledge_* — работа с самой Memory.


#26. Agent tools

Для агента предоставить компактный MCP/tool interface:

skill_search
skill_inspect
skill_validate
skill_history
skill_executions
skill_memory
skill_propose
skill_evaluate

remember
knowledge_lookup
knowledge_explore

Изменяющие Skill операции разделить:

read
propose
approve
apply

По умолчанию агент должен иметь возможность:

Прямое изменение опубликованного Skill должно контролироваться policy/approval.


#27. Skill discovery

Runtime должен уметь находить подходящие Skill по:

Например:

task:
  "review pull request"

       ↓

candidate capabilities:
  code.review

       ↓

candidate skills:
  github-code-review
  security-review

Discovery не должен загружать полный текст всех Skill в context LLM.

Сначала используется machine-readable metadata, затем загружается необходимая инструкция.


#28. Skill composition

В будущем Skill может использовать другие Skill.

Например:

release
 ├── code-review
 ├── build
 ├── deploy
 └── verify

Но composition не должна приводить к копированию их Memory внутрь родительского Skill.

Memory остаётся связанной с фактическими executions и capabilities.


#29. Evaluations

Skill должен иметь evaluations.

Структура:

evals/
  basic/
  regression/
  edge-cases/

Evaluation должна проверять не только output, но по возможности:


#30. Skill quality

Не вводить единственный "Skill Score".

Хранить наблюдаемые показатели:

success_rate
failure_rate
tool_error_rate
average_cost
average_duration
average_trajectory_length
retry_rate
postcondition_failure_rate
evidence_completeness
evaluation_pass_rate
memory_reuse_rate

Показатели должны быть доступны в динамике.


#31. Memory analytics

Для каждой Memory должно быть видно:

discovered
confirmed
used
revalidated
invalidated
superseded

Также:

usage_count
last_used_at
source_execution_count

Особенно важно видеть:


#32. Skill evolution analytics

Для Skill должна существовать temporal timeline:

Skill v1.0
   │
   ├── execution
   ├── memory discovered
   ├── memory confirmed
   ├── memory reused
   ├── failures
   ├── evaluation
   ├── evolution proposal
   ├── human approval
   │
   ▼
Skill v1.1

Главная цель:

видеть не только текущий Skill, но и историю того, почему он стал таким.


#33. Skill snapshots

Для любой точки времени должна быть возможность получить состояние:

skill state at T

Snapshot должен включать:

skill version
skill contract
instructions
tools
runtime
evaluation definition

Memory не копируется внутрь Skill snapshot.

Вместо этого execution ссылается на использованный набор Memory.


#34. Reproducibility

Для каждого execution должно быть возможно восстановить:

skill_id
skill_version
skill_snapshot
capability
inputs
runtime
tools
memory_used
trajectory
evidence
outputs

Цель:

Через любое время должно быть возможно понять, почему агент действовал именно так.


#35. CLI

Реальный набор (cmd/temporality):

temporality skill list
temporality skill inspect code-review
temporality skill validate code-review
temporality skill history code-review
temporality skill diff code-review 1.1.0 1.2.0
temporality skill executions code-review
temporality skill memory code-review
temporality skill evals code-review
temporality skill apply <version>
temporality skill reject <version>

propose из CLI нет — proposal создаёт агент (skill_propose); применение и отклонение версии — человек (выше). Memory-подкоманд в CLI нет.

Для каждого read-only command поддержать:

--json

Например:

temporality skill inspect code-review --json

#36. API

Реальные префиксы API:

Skill (/v1/workspace/skills):

GET    /v1/workspace/skills
GET    /v1/workspace/skills/{id}
GET    /v1/workspace/skills/{id}/versions
POST   /v1/workspace/skills/{id}/versions/{version}/apply     (человек)
POST   /v1/workspace/skills/{id}/versions/{version}/reject     (человек)
POST   /v1/workspace/skills/draft                              (NL-билдер)
POST   /v1/workspace/skills/import

Memory (/v1/observations/knowledge):

GET    /v1/observations/knowledge                 (список, фасеты, поиск)
GET    /v1/observations/events/{id}               (досье события)
POST   /v1/observations/knowledge/promote         (расширение scope)
POST   /v1/observations/knowledge/invalidate
POST   /v1/observations/knowledge/challenge

Lifecycle-действия над знаниями — только для человека (operator+). API не должен обходить event model.


#37. Event model

Event stream остаётся единственным source of truth.

Не создавать независимый mutable state, который становится вторым источником истины.

Допустимы materialized views и индексы.

Проекции:

Skill state
Memory state
Execution state
Evolution timeline
Analytics
UI

должны восстанавливаться из событий.


#38. Events

Фактический vocabulary:

skill.proposed
skill.applied
skill.rejected
skill.evaluation.completed

eval.case_candidate.proposed

eval.case_candidate.accepted

knowledge.proposed
knowledge.confirmed
knowledge.used
knowledge.challenged
knowledge.corrected
knowledge.invalidated
knowledge.superseded
knowledge.disproved

hint.offered
hint.used
hint.ignored
hint.outcome

memory.read

Прочие события модели (skill.execution., evaluation.) пока не эмитятся — плановая часть словаря.

Каждое событие должно иметь provenance.


#39. Skill evolution не должна менять прошлое

Если:

Skill v1.0

использовался в execution #100, а затем появился:

Skill v1.1

execution #100 должен навсегда оставаться связанным с v1.0.

То же самое относится к Memory.

Если Memory была подтверждена на момент execution #100, а затем инвалидирована, это не должно изменять историческое состояние execution #100.


#40. Legacy skills

Существующие skills вида:

SKILL.md
scripts/

должны продолжать работать.

Если skill.yaml отсутствует, runtime должен загрузить legacy Skill.

Добавить:

temporality skill migrate <path>

который создаёт initial manifest.

Автоматически определённые поля должны быть помечены как inferred.


#41. Migration

Pipeline:

legacy SKILL.md
       ↓
parse
       ↓
infer metadata
       ↓
generate skill.yaml
       ↓
validate
       ↓
human review
       ↓
Skill v1.0

Migration не должна менять фактическое поведение Skill.


#42. Security

Skill является потенциально исполняемой capability.

Необходимо явно контролировать:

Skill не получает permission только потому, что permission упомянут в SKILL.md.

Manifest описывает требуемые capabilities, runtime policy определяет реально предоставленные permissions.


#43. MVP

Статус: MVP и Phase 2 реализованы (разделы ниже — исторический план, выполнен почти полностью; apply — только для человека, см. §24).

Первый этап должен быть минимальным.

#Обязательно:

  1. skill.yaml;
  2. SKILL.md;
  3. legacy Skill loading;
  4. Skill registry;
  5. Contract validation;
  6. Capability declarations;
  7. Tool declarations;
  8. Skill versions;
  9. Execution → Skill version linkage;
  10. Memory objects;
  11. Memory lifecycle;
  12. Memory → execution provenance;
  13. Memory reuse tracking;
  14. event-based evolution;
  15. skill_inspect;
  16. skill_validate;
  17. skill_history;
  18. skill_executions;
  19. skill_memory;
  20. CLI;
  21. JSON API.

#Не требуется в MVP:


#44. Phase 2

После MVP:

  1. evolution proposals;
  2. agent-driven proposals;
  3. evaluations;
  4. evidence-aware evaluations;
  5. human approval;
  6. Skill diff;
  7. rollback;
  8. contextual Memory retrieval;
  9. evolution analytics;
  10. UI.

#45. Phase 3

Исследовать:


#46. UI

На существующем UI Temporality добавить представление Skill.

Разделы:

Overview
Contract
Capabilities
Tools
Executions
Memory
Evaluations
Evolution
Versions

Главный экран:

Code Review
v1.2.0

Capabilities
  inspect_code
  inspect_diff
  run_tests
  report_findings

Tools
  repository
  CI

Executions
  183

Memory
  17 confirmed
  3 invalidated
  8 recently reused

Evaluations
  42 / 44 passed

Evolution
  6 changes
  2 pending proposals

Важно:

Memory должна визуально оставаться отдельным слоем.

Не создавать впечатление, что 17 confirmed memories являются частью файла Skill.


#47. Human editing workflow

Человек изменяет:

SKILL.md
skill.yaml
tools
evals

Pipeline:

edit
  ↓
validate
  ↓
run affected evaluations
  ↓
show diff
  ↓
create new version

Опубликованную версию нельзя silently изменять.


#48. Agent evolution workflow

Агент:

execute Skill
      ↓
observe trajectory
      ↓
find repeated problem
      ↓
search Memory
      ↓
collect evidence
      ↓
form evolution proposal
      ↓
validate
      ↓
evaluate
      ↓
request approval
      ↓
apply
      ↓
new Skill version

Ключевой момент:

агент не обязан менять Skill при каждом обнаружении нового знания.

Большинство discoveries должны оставаться Memory.

Skill меняется только тогда, когда накопленный evidence показывает, что сама canonical capability/procedure должна измениться.


#49. Критерий разделения Memory и Skill

При каждом потенциальном изменении необходимо задавать вопрос:

Это знание о конкретной ситуации или изменение канонического способа выполнения capability?

Если:

"В service X после deploy надо ждать 40 секунд"

это Memory.

Если:

"Проверка health должна ждать готовности сервиса,
а не выполняться один раз сразу после deploy"

это потенциальное изменение Skill.

Таким образом:

specific/contextual
        → Memory

general/canonical
        → Skill Evolution

Это правило не обязано приниматься автоматически: агент может предложить классификацию, а evidence и человек определяют результат.


#50. Критерии готовности

Реализованный MVP должен позволять выполнить следующий end-to-end сценарий.

#Scenario

Создать Skill:

code-review
v1.0.0

с:

SKILL.md
skill.yaml
tools
evals

Запустить несколько executions.

Во время executions агент обнаруживает:

repository X
requires special test setup

Создаётся Memory:

proposed
   ↓
confirmed

Memory используется в следующих executions:

memory.used

Через несколько запусков появляется повторяющийся failure.

Temporality показывает:

14 executions
7 related memories
9 failures
same trajectory pattern

Агент формирует Evolution Proposal:

current Skill: v1.0.0

observed problem:
...

evidence:
...

related memory:
...

proposed change:
...

affected capability:
...

evaluation:
...

Человек рассматривает proposal.

После approval:

Skill v1.1.0

создаётся как новая версия.

При этом старые executions остаются привязанными к:

Skill v1.0.0

и сохраняют:

skill snapshot
memory used
trajectory
tools
evidence

Можно открыть timeline:

Skill v1.0
    │
    ├── execution
    ├── execution
    ├── memory discovered
    ├── memory confirmed
    ├── memory reused
    ├── repeated failure
    ├── evolution proposal
    ├── evaluation
    ├── approval
    │
    ▼
Skill v1.1
    │
    ├── execution
    ├── memory reused
    └── improved result

#51. Главный принцип системы

Skill не должен превращаться в ещё один формат prompt engineering.

Skill — это:

версионируемая capability с каноническим способом выполнения, контрактом, инструментами и runtime requirements.

Memory — это:

временное и контекстное знание, полученное из реальных executions и подтверждённое evidence.

Execution — это:

наблюдаемая история фактического применения capability.

Evolution — это:

процесс изменения Skill на основании накопленного evidence, evaluations и опыта.

В результате Temporality замыкает цикл:

              ┌────────────────────┐
              │       SKILL        │
              │ capability         │
              │ canonical method   │
              └─────────┬──────────┘
                        │
                     execute
                        │
                        ▼
              ┌────────────────────┐
              │     EXECUTION      │
              │ trajectory         │
              │ tools              │
              │ evidence           │
              └─────────┬──────────┘
                        │
                     observe
                        │
                        ▼
              ┌────────────────────┐
              │      MEMORY        │
              │ contextual         │
              │ experience         │
              └─────────┬──────────┘
                        │
                     reuse
                        │
                        ├───────────────► next execution
                        │
                   enough evidence
                        │
                        ▼
              ┌────────────────────┐
              │     EVOLUTION      │
              │ proposal           │
              │ evaluation         │
              │ approval           │
              └─────────┬──────────┘
                        │
                        ▼
                  SKILL vNext

Ключевое свойство архитектуры: Skill остаётся относительно стабильным и переносимым артефактом, а Temporality становится памятью его эксплуатации. Skill учится не за счёт разрастания SKILL.md, а за счёт наблюдаемого цикла execution → memory → evidence → evolution → new skill version.