docs(decisions): ADR 0003 — system prompts stay user-directed
Record that we considered auto-generating an agent's system prompt from its bottle's egress/git config (so it would know its access up front) but opted to keep prompts operator-authored: we may want to withhold that information from the agent directly, and the agent can infer its access on its own regardless. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit was merged in pull request #103.
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
# ADR 0003: Keep agent system prompts user-directed, not auto-generated from config
|
||||
|
||||
- **Status:** Accepted
|
||||
- **Date:** 2026-05-29
|
||||
- **Deciders:** didericis
|
||||
|
||||
## Context
|
||||
|
||||
A bottle already declares exactly what an agent can reach: egress routes
|
||||
(allowlisted hosts + auth) and git config (remotes + identity). We
|
||||
considered deriving an agent's system prompt — or a section of it —
|
||||
automatically from those configs, so an agent would be told up front
|
||||
what it has access to (e.g. "you can reach `gitea.dideric.is` over the
|
||||
git remote and its API"). The question surfaced while hand-writing that
|
||||
exact line into the `claude-implementer` prompt.
|
||||
|
||||
## Decision
|
||||
|
||||
System prompts stay **user-directed** — authored by the operator. We do
|
||||
not auto-generate prompt content from a bottle's egress / git config.
|
||||
|
||||
## Consequences
|
||||
|
||||
- The operator controls what the agent is *told* about its environment,
|
||||
independently of what the bottle *grants*. Sometimes we may want to
|
||||
withhold that information from the agent directly — keep the prompt
|
||||
silent about an allowlisted host even though egress permits it.
|
||||
- The agent can still infer its access on its own (attempt a request,
|
||||
read its env, `git remote -v`, the gitconfig), so auto-injection is a
|
||||
convenience, not a capability the agent depends on.
|
||||
- Cost accepted: operators must restate access in the prompt when they
|
||||
want the agent to know it (as we did for the Gitea instance), and the
|
||||
prompt can drift from the config. That decoupling of "what the bottle
|
||||
grants" from "what the agent is told" is the point.
|
||||
- Revisit if keeping prompts in sync with configs becomes a real pain.
|
||||
An *opt-in* helper that emits a capability summary the operator
|
||||
chooses to include would honor this decision; silent auto-injection
|
||||
would not.
|
||||
|
||||
## Links
|
||||
|
||||
- ADR 0002 (`0002-agent-identity-claimed-not-vouched.md`) — related
|
||||
agent-trust posture (what the agent is granted vs. what it can claim).
|
||||
Reference in New Issue
Block a user