The prompt is never a secret.
Most agent products treat the system prompt as proprietary plumbing. GoTo Agents treats it as user-owned configuration: assembled from editable markdown templates, filled with data you can inspect, and viewable in full at any time. If an agent behaves oddly, you look at what it actually saw.
Templates at three scopes
The system prompt renders from system_template.md, resolved down
the scope chain: the global default in .global/templates/, an
optional workspace override, an optional agent-local override. Behavioral
rules — how to use memory, how task mode works, how activities present —
live in these templates as visible markdown instructions.
PromptBuilder deliberately does the opposite of what its name
suggests: it only resolves and formats data; it never injects
behavior from Python.
What flows in
- Agent identity and instructions (
AGENT.md). - Workspace context (
WORKSPACE.md). - Available skills and activities — name + description indexes for progressive disclosure.
- Reference doc indexes per scope.
- Project context:
GOTOAGENTS.mdand shared memory. - Profile context:
PROFILE.md, profile memory,profile_state. - Mode context: active activity playbook, or task definition and parameters in task sessions.
- Runtime working memory (
RTContextView) — in-session scratch state.
Placeholders and secrets
Templates and configuration support placeholder resolution in several
syntaxes — ${VAR} with optional defaults, Jinja2
{{ var }}, and single-brace {UPPER_CASE} style
common in MCP URLs. Values come from the placeholder store, which keeps
secrets encrypted at rest; unresolved placeholders are preserved visibly in
output rather than silently swallowed, so a missing key looks like a missing
key.
The render-prompt view
The payoff feature: render any agent's fully-assembled system prompt from the UI — every index, every injected file, exactly as the model receives it. This turns prompt debugging from guesswork into reading, and it's the transparency claim of the whole product made checkable: nothing shapes agent behavior that you can't open.
Where it lives
core/prompt_builder.py— data resolution and assembly.core/placeholder_manager.py— placeholder syntaxes and encrypted values..global/templates/system_template.md— the editable global default (instance root).core/rt_context_view.py— in-session working memory.