Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Execution-order prompts

The harness assembles system and developer prompts and adapts them per provider. Base instructions encode control-flow discipline: explore → plan → edit → verify → STOP. Plan mode (/plan) and goal mode (/goal) add gating on top of the default prompt stack.

Delivery

  • A default system prompt plus per-tool prompts
  • Per-provider streaming and tool wire format
  • Skills and rules inject additional context via discovery

Edit tool prompts switch with edit.mode (the hashline prompt when hashline is active).

There is no backends.toml-driven catalog or per-backend prompt tuning, and apply_patch is not the default edit surface, Veyyon uses hashline by default.

Seeing every prompt

You do not have to read the source to find out what Veyyon sends a model. Run:

veyyon prompt --prompts

That lists every prompt by id, grouped by the directory it lives in, with one line on what each is for. An id is the file’s path under that directory without the .md, so turn-control/auto-continue and dialect/gemma name their own files.

Then look at one:

veyyon prompt --prompt subagent/system-prompt

The lookup spans every registry, so an id from any of them works without specifying its package. A mistyped id is rejected with the nearest real id quoted back.

For the system prompt itself, veyyon prompt prints the assembled text and veyyon prompt --sections breaks it down by section with the byte and token cost of each.

veyyon prompt --statements goes one level finer. The prompt is assembled from named statements, one per rule, so this prints what each individual rule costs you:

statement                                      bytes   tokens  share  condition
execution-workflow/verify                       1099      275  10.6%  always
delivery-contract/personality                   1098      274  10.5%  personality
tool-policy/lsp                                  412      103   4.0%  tools has lsp

Two things to read from it. The cost is MARGINAL: it is what the prompt would be shorter by without that rule, not the length of the rule’s text, so the numbers add up to their section rather than exceeding it. And the condition states what turns the rule on, which is what you need to know before deciding a rule is not earning its tokens.

Under the table is every rule this configuration leaves out, with the condition that would include it, so a rule being off is visible as a fact rather than as an absence you have to notice:

not in this prompt (33 of 68):
  tool-policy/delegation-gates      needs tools has task
  runtime/obsidian-vault-url        needs hasObsidian

To read one of those rules, name it:

veyyon prompt --statement delivery-contract/personality

You get the rule’s rendered text, which is what the model sees rather than the template behind it. If the rule is not in this prompt you get the condition that would include it and why the rule exists, and the command still exits 0, because a rule being off is a configuration and not a failure. An id that does not exist exits non-zero and quotes the ids of the section you named.

Both read your real configuration. The settings the prompt is gated on – your personality, whether subagent delegation is preferred or required, whether Mermaid diagrams are rendered, which tool dialect applies – are resolved from your profile config.yml before the prompt is assembled, so what you see is what a session would send. Change a setting, run it again, and the difference is visible.

The prompt is only half of what a turn pays before your first message. Every active tool ships a description and a parameter schema on every request, and veyyon prompt --tools prices that half:

tool          bytes     desc   schema   tokens  share
edit           8158     2013       27     2040   15.4%
eval           5720     1258      173     1431   10.8%
launch         5563      684      707     1391   10.5%
TOTAL         53060    10011     3266    13277

17 tools cost 13277 tokens; the system prompt costs 23403. Every request pays both.

The row set is the tool set your configuration loads, so disabling a tool removes its row and its cost. The two halves are separated because they are cut differently: a description is prose you can shorten, a schema is the parameter list and shrinks only by dropping parameters.

Nothing is written while you look. The command opens no database, migrates nothing, and leaves no marker files, so inspecting the prompt cannot change what the next session does.

Going deeper

The system prompt is not one string. It is an ordered list of parts, and the boundary between the first part and the rest is a provider-caching contract rather than a stylistic choice. To change what a part contains, read System prompt customization. To understand why the parts are split where they are, and where a new part would belong, read docs/internal/system-prompt-architecture.md.