# Поручите работу агенту {#root}

@status:doc/work @audience:user,agent

[p01] Каждая страница этого руководства, которая описывает задачу, начинается с простой просьбы, которую вы печатаете своему агенту. Эта страница объясняет, что эти просьбы предполагают, как агент доказывает, что работа сделана, и что происходит, когда vibe возвращает задание агенту, вместо того чтобы выполнить его самому.

## Просьбы на этих страницах {#the-prompt-blocks}

[p02] Страница задачи открывается блоком, который можно скопировать любому агенту с [навыком](../glossary/index.xml#skill) vibevm: он называет предмет, формулирует результат и не упоминает секретов. Под ним *нужно* перечисляет, что у агента должно быть (навык, доступ к сети, токен в окружении), *результат* говорит, что вы увидите, когда всё получилось, а строки *assert* — команды, которые после этого должны проходить. Смысл именно в этих строках: ответ агента нельзя проверить по формулировке, а код выхода команды — можно. Запустите их сами или попросите агента запустить их и показать вам результаты.

> [p03] **Prompt first.** Any action in VibeVM is done by an agent or by hand, and the agent is the main road. A scenario page opens with a `prompt` block: the plain request in the user's voice, self-contained (coordinates, paths and registry named, never implied), one prompt for one outcome, free of secrets, neutral to the agent (it works for any agent with the `vibevm` skill), at most sixty words; beside it `needs` (what the agent must have) and `outcome` (what the person sees when it worked), and at least one `assert` — a shell command that must exit zero after the agent's work, because a prompt cannot be checked by its output the way a shell example can. A prompt without an assert on a scenario page is a style-linter error; an illustrative prompt on an explanation page is marked `assert="none"`. `vibe doc check --prompts` runs every prompt through the configured agent runner (`[doc.prompts] runner`) in a clean temporary directory with the fixture and then runs the asserts; it is not part of the panel — it runs in the prose phase before acceptance, as a sample in the monthly loop, and in full at reconciliation. The skill `vibevm-docs` takes a page's `prompt` as the task when the user asks for what the page describes.
>
> <spec://org.vibevm.core/vibevm/common/PROP-057#STYLE-PROMPT-FIRST>

[p04] Просьба, в которой есть необратимый шаг, публикация или удаление, говорит, что перед этим шагом агент должен спросить подтверждения. Сохраняйте эту строку, когда приспосабливаете просьбу под себя.

## Как vibe узнаёт, что его вызывает агент {#how-vibe-knows}

[p05] vibe ведёт себя одинаково, печатает ли команду человек или агент, с одним уточнением. Агент представляется флагом `--invoked-by <name>` или переменной окружения `VIBE_INVOKED_BY`. Каждый машинный отчёт после этого несёт это имя, так что в журналах видно, кто что сделал. Установленный навык велит агенту передавать его. В скрипте `--unattended` отвечает на все подтверждения и отказывается открывать интерактивные мастера.

> [p06] **Decision.** Mode is not a global flag the user sets; it is **inferred per
>   operation from how vibevm was reached and what backend is available.**
>
> <spec://org.vibevm.core/vibevm/common/PROP-018#MODE-INFERRED>

## Два пути от агента к vibe {#two-transports}

[p07] Агент может запускать vibe как команду, по процессу на вызов: так естественно задать быстрый вопрос или сделать широкий обход. Или он может говорить с `vibe mcp serve`, постоянным сервером, который регистрирует `vibe mcp install`: сервер отвечает на вопросы о пакетах проекта и выполняет те же операции, не порождая оболочку на каждый вызов. Операция определена один раз; какой дверью пользоваться, выбирает агент, а навык учит его эвристике.

> [p08] **Decision.** A reasoning/agentic operation is defined **once**, as a
> transport-agnostic core (the `Intent`-producing function over a project
> context), and exposed by **two thin adapters**:
>
> <spec://org.vibevm.core/vibevm/common/PROP-018#ONE-OP-TWO-TRANSPORTS>

## Когда vibe возвращает задание {#the-relay}

[p09] Внутри vibe нет модели. Когда операции нужно рассуждение, например объяснить проект прозой, vibe за него не берётся: он составляет инструкцию и оставляет её в почтовом ящике [эстафеты](../glossary/index.xml#relay) проекта, `.vibe/agentic/command.md`. Агент затем выполняет `vibe command`: команда печатает инструкцию и очищает ящик, а агент выполняет её собственной моделью. Автоматической записи назад нет: если результат должен дойти до vibe, агент выполняет команду, которая его записывает.

> [p10] **Decision.** When a reasoning operation runs under the relay backend, it
>   does not act. It writes an `Intent` — a markdown prompt with light
>   frontmatter (id, source command, created-at, status) — to a **single-slot
>   mailbox**, the project-local `.vibe/agentic/command.md` (§3), and returns a
>   pointer telling the caller to drain it.
>
> <spec://org.vibevm.core/vibevm/common/PROP-018#RELAY-PARKS>

> [p11] **MVP carries no write-back** (`req r4`): the relay is fire-and-forget.
>
> <spec://org.vibevm.core/vibevm/common/PROP-018#NO-WRITE-BACK>

> [p12] The **consumer seam is one
>   command**, `vibe command`: it prints the pending `Intent` to stdout and
>   clears the slot (consume-on-read; the spent intent is archived to
>   `.vibe/agentic/command.done.md`).
>
> <spec://org.vibevm.core/vibevm/common/PROP-018#DRAIN-VERB>

> [p13] **Decision.** The first `vibe agentic` operation, `explain`, exercises the
> whole relay with zero real risk. Run under an agent, it parks an `Intent`
> to `.vibe/agentic/command.md` of roughly:
>
> <spec://org.vibevm.core/vibevm/common/PROP-018#EXPLAIN-DEMONSTRATOR>

[p14] Example `agentic-explain` is copied from the source page at projection time.

[p15] Example `command` is copied from the source page at projection time.

[p16] То же рукопожатие управляет шагами сборки, которые проект объявляет работой агента: когда vibe работает под агентом, такой шаг откладывается как задача для агента, и та же команда продолжает работу, как только объявленные результаты появились. Под человеком за терминалом vibe может вместо этого вызвать настроенного провайдера модели и платит за него только тогда, когда шаг действительно выполняется.

> [p17] In `agent_mode = "agent"` (detected via env — the CLAUDECODE/VIBE_AGENT genre — or forced by `--agent-mode`), vibe does NOT call an LLM. It **parks the work and hands it to the hosting agent**: for each agent execution it writes a task file under `.vibe/agentic/outbox/<run>/<execution>.md` — the resolved prompt, the envelope's prose projection, and the output contract (paths + acceptance) — then prints a fenced `vibe-agent-tasks` block naming the run id and every task file, and exits the phase with engine status `delegated` (the handler reply vocabulary remains `ok|fail|skip`; chain pauses and nothing downstream runs). The hosting agent performs the tasks, writes the outputs, and re-invokes the same phase: vibe finds the outputs, validates them against the contract, marks satisfied executions done and continues — exact-run resumability, no special resume verb. The parking place and relay posture are [PROP-018](PROP-018-agentic-standalone-modes.xml)'s agentic-relay genre extended from one command to a phase's worth of tasks. An MCP surface (`lifecycle_run`/`lifecycle_tasks`) is a second adapter over the same state/outbox, not a second mechanism and not an autonomous development loop (§4.6).
>
> <spec://org.vibevm.core/vibevm/common/PROP-054#AGENT-HANDSHAKE>

## Особые случаи и правила {#edge-cases}

[p18] `vibe command` с пустым ящиком печатает, что ничего не ждёт; вызывать её безопасно в любой момент.

> [p19] Re-running with an empty slot prints "no
>   pending command" and exits `0`.
>
> <spec://org.vibevm.core/vibevm/common/PROP-018#EMPTY-SLOT-OK>

[p20] Запущенная без агента вокруг и без встроенного движка, операция, которой нужно рассуждение, громко падает и просит запустить её под агентом; операция, которой рассуждение не нужно, работает как обычно.

> [p21] reached **standalone** with no engine (today) → a reasoning operation
>   **fails loud** with "this needs an inference backend; run me under an
>   agent, or wait for the built-in engine," and a non-reasoning operation
>   runs normally.
>
> <spec://org.vibevm.core/vibevm/common/PROP-018#REACH-STANDALONE-NO-ENGINE>

[p22] У каждой подсистемы vibe есть полный алгоритмический режим; модель только улучшает результат, и каждое такое улучшение выключено, пока оператор его не включит.

> [p23] Every core VibeVM subsystem retains a complete algorithmic mode. An LLM may improve quality when the operator explicitly enables that feature; credentials, endpoint presence, provider configuration or construction never activate a feature. VibeVM remains useful with no provider, no API access and no agent host.
>
> <spec://org.vibevm.core/vibevm/common/PROP-054#LLM-IS-AN-ENHANCEMENT>

[p24] Агент, который читает это руководство по адресу, а не через навык, находит те же просьбы в текстовой форме каждой страницы; страницы публикуются для машин так же, как для людей.

