> ## Documentation Index
> Fetch the complete documentation index at: https://docs.intention.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Агенты

> Что должен делать каждый слой архитектуры, когда участник — не человек: runtime вне протокола, приём заявок под нагрузкой агентов, авторизация как транзакция и воспроизводимая среда.

Направление, под которое всё это строится, — то, где **одного человека представляют несколько агентов**, и каждый действует в части того, чего этот человек хочет. Не человек с инструментом и не бот, крутящий фиксированный скрипт: несколько контрагентов рынка, отвечающих перед одним счётом.

Когда меняются участники, вместе с ними меняется и микроструктура рынка. Размер заявок падает, частота сообщений растёт, отношение отмен к исполнениям расходится ещё сильнее, а поток приобретает корреляцию, которой у человеческого потока нет: агенты, читающие один и тот же сигнал, приходят к одному выводу в один и тот же момент. Ничего из этого не решается добавлением функции. Это решается проходом по архитектуре слой за слоем и вопросом, что каждый слой должен делать иначе.

Эта страница — тот самый проход, по порядку, с указанием, где каждый слой находится на самом деле.

<div className="dg" data-dg="agent-layers">
  <div className="dg-c" style={{aspectRatio:"720 / 500"}}>
    <svg className="dg-w" viewBox="0 0 720 500" aria-hidden="true" />

    <div className="dg-band" style={{left:"0.0000%",top:"3.6000%",width:"100.0000%",height:"19.6000%"}}><span className="dg-cap">1 · Приложение</span></div>
    <div className="dg-band" style={{left:"0.0000%",top:"26.0000%",width:"100.0000%",height:"19.6000%"}}><span className="dg-cap">2 · Сеть</span></div>
    <div className="dg-band" style={{left:"0.0000%",top:"48.4000%",width:"100.0000%",height:"19.6000%"}}><span className="dg-cap">3 · Исполнение</span></div>
    <div className="dg-band" style={{left:"0.0000%",top:"70.8000%",width:"100.0000%",height:"19.6000%"}}><span className="dg-cap">4 · Состояние</span></div>
    <div className="dg-b dg-left" style={{left:"2.2222%",top:"8.0000%",width:"95.5556%",height:"12.0000%"}}><span className="dg-t">Runtime находится вне протокола</span><span className="dg-s">и не имеет никаких привилегий — ни меньшей задержки, ни более ранних данных, ни интерфейса, до которого не дотянется третья сторона</span></div>
    <div className="dg-b dg--blue dg-left" style={{left:"2.2222%",top:"30.4000%",width:"95.5556%",height:"12.0000%"}}><span className="dg-t">Приём заявок, когда отправители — агенты</span><span className="dg-s">опоздавшая отмена хуже опоздавшей заявки, а справедливость отслеживается по недавней истории, а не по каждому сообщению</span></div>
    <div className="dg-b dg--sky dg-left" style={{left:"2.2222%",top:"52.8000%",width:"95.5556%",height:"12.0000%"}}><span className="dg-t">Авторизация — это транзакция</span><span className="dg-s">с высотой блока, внутри замкнутого набора инструкций; а её отзыв снимает стоящие заявки агента в том же блоке</span></div>
    <div className="dg-b dg--green dg-left" style={{left:"2.2222%",top:"75.2000%",width:"95.5556%",height:"12.0000%"}}><span className="dg-t">Воспроизводимая среда с версиями по блокам</span><span className="dg-s">point-in-time по построению, а не по дисциплине</span></div>
    <div className="dg-free dg-mid" style={{left:"0.0000%",top:"92.0000%",width:"100.0000%"}}><div className="dg-n">Те же четыре слоя, что и в обзоре архитектуры. Другой только вопрос: что должен делать каждый из них, когда участник — не человек?</div></div>
  </div>
</div>

| Слой           | Что меняется                                                                        | Статус                                                  |
| -------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------------- |
| **Приложение** | Runtime — исследование и исполнение — находится вне протокола и не имеет привилегий | Взято в работу                                          |
| **Сеть**       | Приём при всплесковом, коррелированном, насыщенном отменами потоке                  | Поставлено, два вопроса открыты                         |
| **Исполнение** | Авторизация становится транзакцией с условиями                                      | Поставлена как «всё или ничего»; условия взяты в работу |
| **Состояние**  | Сама сеть и есть среда, в которой оценивается агент                                 | Поставлено                                              |

<h2 id="1-application-the-runtime-sits-outside-and-has-to">
  1 · Приложение — runtime снаружи, и иначе нельзя
</h2>

Runtime агента — это каркас исследования и исполнения: он формирует взгляд, превращает его в исполняемое и кладёт перед площадкой. Он работает на слое приложения, на одном уровне с фронтендами и API-клиентами, и **не является частью протокола**.

Это размещение — физическое ограничение прежде, чем предпочтение в проектировании. Модель рассуждает секундами, рынок движется миллисекундами. Ничто, что обязано вызывать модель, не может стоять на пути, которым реально идёт заявка, — а значит, **в протоколе нет никакой модели вообще**. Не по недосмотру: модель на расчётном пути разрушила бы то единственное свойство, на котором здесь держится всё остальное. Путь исполнения обязан выдавать одни и те же байты на каждом узле, а вывод модели этого не делает.

Поэтому runtime живёт снаружи, и честный вопрос превращается в такой: что протокол ему должен. Пять вещей, и все они взяты в работу, а не поставлены.

|                                    | Что это даёт агенту                                                                                  |
| ---------------------------------- | ---------------------------------------------------------------------------------------------------- |
| **Предторговая симуляция**         | Оценить, что заявка сделает с зафиксированным состоянием, до её подачи                               |
| **Идемпотентная подача**           | Повторить подачу с неясным исходом, не рискуя двойной экспозицией                                    |
| **Именованные конечные состояния** | Нет исходов с неизвестным результатом — любое действие заканчивается состоянием, у которого есть имя |
| **Определённое возобновление**     | Перезапустившийся агент знает, где остановился и что делать дальше                                   |
| **Атрибутированные квитанции**     | Что агент сделал, по чьим полномочиям и во что это обошлось — как вывод протокола                    |

Статусы см. в [Что дальше](/ru/protocol/roadmap/whats-next).

<Note>
  Runtime не имеет привилегированного пути. Ни меньшей задержки, ни более ранних данных, ни интерфейса, до которого не дотянется сторонний runtime. Это стоит сказать, а не подразумевать, потому что в другом месте архитектура утверждает: между трейдером и клиринговой палатой не стоит ничего — а собственный инструмент с выделенной полосой был бы именно этим «чем-то».
</Note>

<h2 id="2-network-admission-when-the-senders-are-agents">
  2 · Сеть — приём, когда отправители агенты
</h2>

Mempool решает, что стоит держать, какая транзакция отправителя следующая, какие пиры о ней узнают и что сбрасывается, когда спрос превышает ёмкость. Поток агентов нагружает все четыре, и два свойства, которые его поглощают, уже на месте по причинам, возникшим раньше агентов.

**Опоздавшая отмена хуже опоздавшей заявки.** [Mempool](/ru/protocol/architecture/mempool) по построению считает трафик заявок и трафик отмен асимметричными. Агенты делают эту асимметрию острее, потому что их отношение отмен к исполнениям выше человеческого, — но сама форма проблемы та, вокруг которой этот слой и строился.

**Справедливость отслеживается по недавней истории, а не по каждому сообщению.** Mempool ведёт скользящую запись о том, какие отправители и какие виды трафика недавно съели ёмкость, и исходя из неё формирует, что отдавать дальше. **Именно это и важно при коррелированных всплесках**: сорок агентов, отменяющих по одному сигналу, — это не сорок средних нагрузок, размазанных ровно, это один пик. Ограничение на каждое сообщение его не видит. Память о том, кто недавно шумел, — видит.

**Консенсус не растёт вместе с пропускной способностью.** Транзакции доходят до валидаторов пакетами, доступность которых доказана до того, как предложение сможет на них сослаться, поэтому предложение блока несёт дайджесты, а не тела. Популяция агентов, поднявшая частоту сообщений на порядок, ничуть не поднимает размер сообщений консенсуса.

<Warning>
  Блок убирает гонку **внутри** себя: у двух транзакций одного блока есть приоритет, который каждый узел вычисляет одинаково. **Эта гарантия начинается на границе блока.** Попасть в блок — по-прежнему гонка, которую справедливость на уровне отправителя формирует, но не отменяет. Приём в mempool — не включение в блок.
</Warning>

Два вопроса на этом слое открыты, и оба становятся практическими на объёмах агентов, а не людей.

**Сколько должна стоить отмена.** Исполнение уже ставит отмены первыми — они идут в фазе перед всем, что может забрать ликвидность. Сетевая версия того же вопроса не закрыта: дешёвая и приоритетная отмена — это то, что делает котирование защитимым, и она же самый дешёвый способ залить mempool. Должны ли отмены иметь собственный учёт ёмкости, отдельный от выставлений, — не решено.

**Какому слою принадлежит идемпотентность.** Агент, не получивший ответа, отправляет снова. Идемпотентная подача взята в работу на слое исполнения и закрывает главное следствие — отсутствие двойной экспозиции. Сетевую версию она не закрывает: должен ли mempool распознавать повтор как то же самое намерение, или нести оба и позволить исполнению дедуплицировать. Под штормом повторов эти два варианта ведут себя по-разному.

<Note>
  Одного в списке сознательно нет: отдельной полосы приёма для агентов. Приоритетный доступ — это то, что рано или поздно продаёт любая централизованная площадка, и он противоречил бы утверждению, что между трейдером и клиринговой палатой не стоит ничего. Поток агентов идёт в ту же дверь.
</Note>

<h2 id="3-execution-authorization-is-a-transaction">
  3 · Исполнение — авторизация это транзакция
</h2>

Это слой, на котором меняется модель счёта, и всё изменение вытекает из одного факта.

**Передать счёт агенту — это транзакция ончейн.** Не отправленная форма, не API-ключ, выданный со страницы настроек, не строка в базе оператора. Транзакция — в блоке, на высоте, подписанная счётом, который её выдал, — и потому нечто, что любая третья сторона может найти, прочитать и проверить, ни у кого не спрашивая.

Отсюда три следствия, и каждое — то, чего API-ключ не может.

**Она внутри замкнутого набора инструкций.** Авторизация агента — одна из перечисленных операций [ядра](/ru/protocol/architecture/kernel). Универсальная сеть не может её выразить: смысл вызова был бы непрозрачным байткодом. Централизованная площадка обеспечивает её в коде, который вы не можете осмотреть. Здесь полномочие и его границы **и есть** инструкция, и потому граница проверяема, а не обещана.

**Она несёт то, что агенту можно, — и не может нести то, что нельзя.** Авторизация может сказать, сколько агент вправе держать, сколько может потерять, каких рынков касаться и вправе ли менять режим маржи. **Она не может сказать «вывести».** Это не настройка, оставленная выключенной: такого пункта попросту нет, чтобы его написать. У агента, ведущего счёт, нет выразимого пути вывести из него средства.

**Её отзыв снимает стоящие заявки агента.** Отзыв — тоже транзакция, и он попадает в блок, чьё [упорядочивание](/ru/trading/tx-sequencing) и так прогоняет отмены раньше всего, что способно забрать ликвидность. Поэтому заявки, оставленные агентом в стакане, уходят в том же блоке, что и полномочие. На площадке, где отзыв — это запись в базе, ключ перестаёт работать, а стоящие заявки оказываются в неопределённом состоянии. Здесь остановка доказуема, и любой может найти высоту, на которой она произошла.

<div className="dg" data-dg="agent-authority">
  <div className="dg-c" style={{aspectRatio:"720 / 214"}}>
    <svg className="dg-w" viewBox="0 0 720 214" aria-hidden="true">
      <path className="dg-wire" d="M 213.33 88.00 L 244.93 88.00" />

      <path className="dg-head" d="M 251.33 88.00 L 244.93 92.40 L 244.93 83.60 Z" />

      <path className="dg-wire" d="M 468.67 88.00 L 500.27 88.00" />

      <path className="dg-head" d="M 506.67 88.00 L 500.27 92.40 L 500.27 83.60 Z" />
    </svg>

    <div className="dg-b dg--blue" style={{left:"0.0000%",top:"14.0187%",width:"29.0741%",height:"54.2056%"}}><span className="dg-t">Выдача</span><span className="dg-s">Транзакция в блоке N</span><span className="dg-n">Несёт границы: что агент может держать, сколько может потерять, чем может торговать. Вывод средств она нести не может — такого пункта попросту нет</span></div>
    <div className="dg-b dg--sky" style={{left:"35.4630%",top:"14.0187%",width:"29.0741%",height:"54.2056%"}}><span className="dg-t">Действие</span><span className="dg-s">Каждое действие называет свои полномочия</span><span className="dg-n">Относится к счёту, который их выдал, а не только к агенту, который подал заявку</span></div>
    <div className="dg-b dg--orange" style={{left:"70.9259%",top:"14.0187%",width:"29.0741%",height:"54.2056%"}}><span className="dg-t">Отзыв</span><span className="dg-s">Транзакция в блоке M</span><span className="dg-n">Стоящие заявки агента снимаются в том же блоке, до того как отработает что-либо способное забрать ликвидность</span></div>
    <div className="dg-free dg-mid" style={{left:"0.0000%",top:"76.6355%",width:"100.0000%"}}><div className="dg-n">Ни одно из трёх не является записью в базе, о которой вам должны сообщить. Каждое — транзакция, которую любой найдёт по высоте.</div></div>
  </div>
</div>

Сегодня выдача устроена по принципу «всё или ничего» и со сроком. Более богатые условия выше — сколько агент вправе держать, сколько терять, что делать дальше — взяты в работу, но не поставлены; см. [Что дальше](/ru/protocol/roadmap/whats-next). **Уже действует та часть, которую нельзя добавить задним числом**: полномочие — объект протокола, а не запись оператора о нём.

<h3 id="what-the-venue-already-carries-for-the-runtime">
  Что площадка уже несёт вместо runtime
</h3>

Торговый runtime, которому приходится защищать пользователя на обычной площадке, в итоге строит себе собственное привилегированное ядро: реестр позиций, который он ведёт и сверяет сам; предторговую проверку риска, которую он считает сам и надеется, что площадка считает так же; и журнал аудита, который он пишет и о котором не может доказать, что его не правили. **Все три — это резервирование против площадки, которая не покажет свои книги.**

Здесь три из них — свойства протокола. [Клиринговая палата](/ru/protocol/architecture/clearinghouse) — единственная, кто пишет реестр. Стадия риска идёт до сопоставления, в том же блоке. Журнал аудита — это сама сеть, и каждое изменение состояния несёт породившую его транзакцию. Runtime остаётся четвёртое — идемпотентный шлюз заявок, — и это задача интерфейса, а не доверия.

<h3 id="matching-the-block-is-already-the-batch">
  Сопоставление: блок уже и есть пакет
</h3>

Поток агентов поднимает частоту и снижает размер того, что доходит до стакана, — а это ровно та микроструктура, которой чаще всего обосновывают пакетный аукцион: дискретные интервалы, расчёт вместе, никакого преимущества за приход на микросекунду раньше.

Это свойство здесь **уже выполняется**, и не потому, что добавили пакетный аукцион. Время внутри блока — это зафиксированная консенсусом позиция, а не локальные часы, поэтому **внутри блока не существует субмиллисекундного преимущества**; а отмены идут раньше любых агрессивных заявок, так что устаревшую котировку можно снять, и её не подберёт заявка, пришедшая вместе с отменой. Блок и есть дискретный интервал, рассчитываемый вместе. Он появился как **следствие** исполнения зафиксированного порядка, а не как надстройка из рыночного дизайна.

Оправдано ли что-то сверх этого — а непрерывный приоритет «цена-время» и частые пакетные аукционы являются **альтернативами, а не дополнениями**, поскольку пакет намеренно убирает временной приоритет внутри себя — сейчас исследуется, а не строится.

<h2 id="4-state-the-chain-is-the-environment">
  4 · Состояние — сеть и есть среда
</h2>

Агент хорош ровно настолько, насколько хорошо то, против чего его оценивали, и именно в оценке происходит большая часть провалов. Стратегия, которая выглядела прибыльной в симуляторе и падает в проде, обычно встретила не новый рынок, а симулятор, который не был площадкой.

[Слой состояния](/ru/protocol/architecture/state/model) убирает этот зазор по построению, а не по дисциплине. Состояние версионируется по блокам, и каждое изменение отнесено к породившей его транзакции, поэтому повтор блока повторяет **саму среду**, а не её модель: ту же машину состояний, которая будет исполнять агента, на входах, зафиксированных сетью. Это пятая проверка на странице [Проверьте сами](/ru/developers/verify), и именно поэтому бэктест здесь — объект иной природы, чем бэктест против исторического API биржи.

Более тонкое свойство — что всё это **point-in-time по построению**. Набор данных, собранный из API биржи, является point-in-time только если собиравший был аккуратен, а заглядывание вперёд просачивается через щели, которых никто не замечает: поле, дозаполненное задним числом, поправка, применённая к истории, пересмотренная референсная цена. Здесь такой вопрос не возникает: состояние блока — это то, что было истинным на этом блоке, потому что другой формы у состояния никогда и не было.

<h2 id="what-gets-harder">
  Что становится труднее
</h2>

Строить для агентов — это не только список вещей, которые становятся лучше.

**Детерминизм режет в обе стороны.** Агент может предсказать, что сделает его собственная заявка, ещё до подачи, потому что один и тот же вход даёт один и тот же результат на каждом узле. **Чужой агент может ровно так же — про вашу.** Воспроизводимость одновременно повышает вашу способность планировать и вашу предсказуемость, и второе не бесплатно.

**Ликвидность агентов — это коррелированная ликвидность.** Люди-маркетмейкеры уходят в разные моменты, потому что замечают в разные моменты. Агенты, читающие одно и то же публичное состояние, приходят к одному выводу вместе. Стакан, который держат агенты, глубже в обычный день и может истончаться быстрее в тот день, который важен, — это риск рыночной структуры, под который поглотители протокола спроектированы, а не риск, который они устраняют.

**Оракул читает площадки, на которых агенты тоже торгуют.** Удостоверение привязывает цену к блоку, который её потребил; оно не делает базовый рынок неманипулируемым, а популяция агентов, действующих по коррелированным сигналам, — ещё один способ базовому активу сдвинуться разом. См. [что оракул гарантирует и чего не гарантирует](/ru/protocol/architecture/oracle).

**Самооценка агента не является доказательством.** Обратная связь в торговле шумная и нестационарная там, где в коде она таковой не является: компилятор говорит вам, что вы ошиблись, а прибыльная неделя не говорит, что вы были правы. Всё, что площадка строит для агентов, обязано трактовать отчёт агента о собственных результатах как **враждебный вход**, а не как измерение. Это одна из причин, по которым проверки на странице [Проверьте сами](/ru/developers/verify) выстроены вокруг того, что можно пересчитать, а не того, о чём можно отчитаться.

<h2 id="where-to-go-next">
  Что дальше
</h2>

<CardGroup cols={2}>
  <Card title="ИИ-торговля: сейчас и дальше" href="/ru/protocol/ai-trading">
    Четыре фазы и почему меняться должен именно счёт.
  </Card>

  <Card title="Проверьте сами" href="/ru/developers/verify">
    Проверки, которые делают оценку агента чем-то большим, чем заявление.
  </Card>

  <Card title="Допущения о доверии" href="/ru/protocol/architecture/trust">
    Что остаётся принимать на веру, когда проверено проверяемое.
  </Card>

  <Card title="Что дальше" href="/ru/protocol/roadmap/whats-next">
    Статус runtime агента и условий авторизации.
  </Card>
</CardGroup>
