<?xml version="1.0" encoding="UTF-8"?>
<spec xmlns="https://vibevm.org/spec/1">
  <title id="root">Ask your agent to do the work</title>
  <status stage="doc" state="work" audience="user,agent"/>
  <p p="1">Every page in this manual that describes a task starts with the plain request you type to your agent. This page explains what those requests assume, how the agent proves the work is done, and what happens when vibe hands a job back to the agent instead of doing it itself.</p>
  <section id="the-prompt-blocks" title="The requests on these pages">
    <p p="2">A task page opens with a block you can copy into any agent that has the vibevm [skill](../glossary/index.xml#skill): it names the thing, states the result, and mentions no secrets. Under it, *needs* lists what the agent must have (the skill, network access, a token in the environment), *outcome* says what you will see when it worked, and the *assert* lines are commands that must succeed afterwards. The asserts are the point: an agent's answer cannot be checked by its wording, but a command's exit code can. Run them yourself, or ask the agent to run them and show you the results.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-057#STYLE-PROMPT-FIRST" p="3"/>
    <p p="4">A request that includes a step that cannot be undone, publishing or deleting, says that the agent must confirm before that step. Keep that line when you adapt a request.</p>
  </section>
  <section id="how-vibe-knows" title="How vibe knows an agent is calling">
    <p p="5">vibe behaves the same whether a person or an agent types the command, with one refinement. An agent identifies itself with `--invoked-by &lt;name&gt;` or the environment variable `VIBE_INVOKED_BY`. Every machine-readable report then carries that name, so logs show who did what. The installed skill tells the agent to pass it. In a script, `--unattended` answers every confirmation and refuses to open any interactive wizard.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-018#MODE-INFERRED" p="6"/>
  </section>
  <section id="two-transports" title="Two ways for an agent to reach vibe">
    <p p="7">An agent can run vibe as a command, one process per call, which is the natural way for a quick question or a wide scan. Or it can talk to `vibe mcp serve`, a persistent server registered by `vibe mcp install`, which answers questions about the project's packages and can run the same operations without spawning a shell each time. The operation is defined once; which door the agent uses is the agent's choice, and the skill teaches it the heuristic.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-018#ONE-OP-TWO-TRANSPORTS" p="8"/>
  </section>
  <section id="the-relay" title="When vibe hands the job back">
    <p p="9">vibe has no model inside it. When an operation needs reasoning, such as explaining a project in prose, vibe does not attempt it: it composes an instruction and parks it in the project's [relay](../glossary/index.xml#relay) mailbox, `.vibe/agentic/command.md`. The agent then runs `vibe command`, which prints the instruction and clears the mailbox, and carries it out with its own model. There is no automatic write-back: if the result should reach vibe, the agent runs the command that records it.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-018#RELAY-PARKS" p="10"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-018#NO-WRITE-BACK" p="11"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-018#DRAIN-VERB" p="12"/>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-018#EXPLAIN-DEMONSTRATOR" p="13"/>
    <example id="agentic-explain" fixture="hello-vibe" p="14">
      <run>vibe agentic explain --path hello-vibe</run>
      <expect>intent queued — run `vibe command` to fetch it, then carry it out</expect>
    </example>
    <example id="command" fixture="hello-vibe-relay" p="15">
      <run>vibe command --path hello-vibe</run>
      <expect>---
vibevm-intent: pending
source: agentic explain
---

# Explain this project

Detected in this project: vibe.toml.

Explain this project to a developer seeing it for the first time, in at most three short paragraphs of plain prose.

Work from these sources, in priority order:
1. `README.md` at the project root — read it and summarise what the project is and does.
2. `vibe.toml`, if present — fold in what its structure reveals: the package `kind`, what the project `requires`, and what it `provides`.

If `README.md` is absent, say so in one clause and explain from `vibe.toml` alone. If neither is present, state that the project carries no description and stop. Do not invent features the sources do not support — prefer "the sources don't say" over guessing. Lead with the explanation; no preamble.</expect>
    </example>
    <p p="16">The same handshake governs the build steps a project declares as agent work: when vibe runs under an agent, such a step is parked as a task for the agent to perform, and the same command resumes once the declared outputs exist. Under a person at a terminal, vibe can instead call a configured model provider, and pays for it only when the step actually runs.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-054#AGENT-HANDSHAKE" p="17"/>
  </section>
  <section id="edge-cases" title="Edge cases and rules">
    <p p="18">Running `vibe command` with an empty mailbox prints that nothing is pending; it is safe to call at any time.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-018#EMPTY-SLOT-OK" p="19"/>
    <p p="20">Run with no agent around it and no built-in engine, an operation that needs reasoning fails loudly and says to run it under an agent; an operation that needs none runs as usual.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-018#REACH-STANDALONE-NO-ENGINE" p="21"/>
    <p p="22">Every subsystem of vibe has a complete algorithmic mode; a model only ever improves a result, and each such enhancement is off unless the operator switches it on.</p>
    <rule ref="spec://org.vibevm.core/vibevm/common/PROP-054#LLM-IS-AN-ENHANCEMENT" p="23"/>
    <p p="24">An agent that reads this manual by address, rather than through a skill, finds the same requests in the plain-text form of each page; the pages are published for machines as much as for people.</p>
  </section>
</spec>
