prompt attribute, a fidelity-based preamble summarizing prior stages, a system prompt with tool guidance and environment context, project docs, and user instructions. Understanding this assembly helps you write effective prompts and control what context each node receives.
The prompt attribute
Theprompt attribute on a node defines the task instructions for that stage. If no prompt is set, Fabro falls back to the node’s label.
Inline prompts
Short prompts can be written directly in the Graphviz file:\ for multi-line strings:
External file references
For longer prompts, use the@ prefix to load from a Markdown file relative to the Graphviz file:
@ prefix tells the engine to read the file contents and use them as the prompt text. This keeps Graphviz files concise and lets you version prompts as standalone Markdown.
File references are resolved relative to the Graphviz file’s directory first, then fall back to ~/.fabro/. This lets you keep shared prompts in your user-level config and reference them from any project.
Variable expansion
Prompts support MiniJinja-style templates. Prompt rendering has access to the workflow goal and typed run inputs:pipeline.fabro
{{ goal }} becomes Add a /health endpoint to the API server.
Undefined prompt variables render as empty text and produce a
template_undefined_variable diagnostic. fabro validate reports that diagnostic as a warning; run-style commands promote it to an error before proceeding. Environment variables are not available in prompt templates.
Prompt and goal templates can use static MiniJinja includes to share partials:
prompts/plan.md
{% include inputs.partial %} are rejected during manifest bundling because Fabro must know every template file before a sandbox run starts.
Fallback to label
If a node has neither aprompt attribute nor an empty one, Fabro uses the label as the prompt:
Prompt assembly
The prompt the agent receives is not just theprompt attribute. Fabro prepends a preamble (unless fidelity is full) that summarizes what happened in prior stages:
Example assembled prompt
Example assembled prompt
Given a plan-then-implement workflow where the plan stage completed, the The last line is the node’s
implement node with fidelity="compact" would receive:prompt attribute. Everything above it is the preamble.System prompt
Each agent session has a system prompt that provides foundational instructions. The system prompt is built once per session and includes:
The system prompt is separate from the preamble. The preamble is prepended to the user-facing prompt message, while the system prompt is set as the LLM’s system message.
The system prompt varies by LLM provider. Each provider has its own identity text, tool guidance, and coding conventions tuned to the model’s strengths. The assembled prompt follows this structure:
Example system prompt (Anthropic provider)
Example system prompt (Anthropic provider)
This is the full system prompt sent to Claude as the LLM system message. The
<environment> block is filled in at runtime.Tool guidance tracks the tools actually registered for the session. The web_search section shown below is present only when a Brave Search API key is configured; without one, both the tool and its guidance are omitted.OpenAI and Gemini providers have their own system prompts with different identity text, tool guidance (e.g.
apply_patch instead of edit_file for OpenAI), and coding conventions. The overall structure is the same.Project docs
Fabro automatically discovers project instruction files by walking the directory hierarchy from the git root to the working directory. Which files are loaded depends on the provider:
Files are loaded in directory order (root first, deepest last) with a total budget of 32KB. If the combined content exceeds this budget, later files are truncated.
Environment context
The system prompt includes an<environment> block with runtime details:
git status --short and recent commits when available, giving the agent awareness of the current repository state.
Prompt nodes vs. agent nodes
Both agent nodes (shape=box) and prompt nodes (shape=tab) go through the same prompt assembly pipeline: variable expansion, preamble prepending, and system prompt construction. The difference is execution:
Use prompt nodes for analysis, classification, and summarization tasks where tools are not needed.
Prompt logging
Fabro persists the assembled prompt tostages/{rank:03}-{node_id}@{visit}/prompt.md in metadata snapshots and fabro dump output for every agent and prompt stage. This includes the preamble (if any) and the expanded prompt text. Use these files for debugging when an agent behaves unexpectedly.