diff --git a/README.md b/README.md index a5d76b2..528f533 100644 --- a/README.md +++ b/README.md @@ -362,6 +362,10 @@ Dockerfile while keeping the bot-bottle sidecars in place. bottle: gitea-dev skills: - init-prd +git: + user: + name: gitea-helper + email: eric+gitea-helper@dideric.is --- You help maintain Gitea-hosted projects. @@ -375,6 +379,19 @@ frontmatter — bot-bottle ignores them at launch but doesn't reject them, so the same file can drop into `~/.claude/agents/` as a Claude Code subagent. +An agent may also declare `git.user` (`name` / `email`). It overlays +the referenced bottle's `git.user` per-field — the agent's non-empty +fields win, the rest fall through to the bottle — so two agents can +share one bottle and still commit under distinct identities without +an identity-only bottle (PRD 0027). Only `git.user` is allowed at the +agent level; `git.remotes` stays bottle-only because it carries +credentials and host trust. The launch preflight and `cli.py info` +print the effective identity annotated `(agent)` / `(bottle)` so you +can see where each field came from. Git authorship is not a +credential — push auth is the bottle's remote key/token — so a +repo-shipped agent setting its own identity grants no access; treat +an agent identity as *claimed, not vouched*. + Unknown top-level frontmatter keys die at load with a "did you mean" pointer; typos don't silently ghost into an empty config. diff --git a/examples/agents/implementer.md b/examples/agents/implementer.md index fd6360f..13df974 100644 --- a/examples/agents/implementer.md +++ b/examples/agents/implementer.md @@ -5,6 +5,10 @@ model: opus bottle: dev skills: - init-prd +git: + user: + name: implementer-bot + email: eric+implementer@dideric.is --- You are a feature-implementation agent running inside an ephemeral