diff --git a/agents/README.md b/agents/README.md index 8c9fb9dcc..63e225e15 100644 --- a/agents/README.md +++ b/agents/README.md @@ -22,6 +22,7 @@ not fleet seats. Keep changes in `/mnt/storage/src/mosaic-stack`; do not modify | Gander | Builder, the human boundary across uids (P19 333, #1694) | T3 session (Codex, gpt-6.1-sol), started by Sage under mos-0977 | none, T3 only | | Herb | Builder, a second gate lane (#1695) | T3 session (Codex, gpt-6.1-sol), started by Sage under mos-0977 | none, T3 only | | Bushroot | Builder, retire the control board writer on 7331 (#1696) | T3 session (Claude, claude-haiku-5-5), started by Sage under mos-1008 | none, T3 only | +| Megavolt | Builder, MVP T1 item 6 (agent credentials and git identity, #1697) | T3 session (Claude, Opus 5.5), started by Sage under mos-0974/0977 | none, T3 only | | Webby | Reviewer: Case 2 designs, rows 192 and 194 | T3 session (Claude, Opus 5.5, thread 03086006), started by Mos (mos-0981) | none, T3 only | | Duckworth | Reviewer: federation designs, row 193 | T3 session (Claude, Opus 5.5, thread ffceafec), started by Mos (mos-0977) | none, T3 only | | Sage | Project lead: coordination, review, integration; earlier DYOR strategy records retained | T3 session (Claude Code); Pi launcher `zai/glm-5.3:high` retained | `agents/sage/launch.sh` | diff --git a/agents/megavolt/README.md b/agents/megavolt/README.md new file mode 100644 index 000000000..1d75bca85 --- /dev/null +++ b/agents/megavolt/README.md @@ -0,0 +1,8 @@ +# Megavolt + +Builder seat, Claude Opus 5.5, started by Sage under mos-0974 and mos-0977 item 5 for MVP T1 item 6, the +credential store per agent with its own git identity (#1697). + +No launcher in this directory. The seat runs as a T3 thread and works in its own worktree. It has no +credentials of its own; until the credentials row settles per-agent identity, it pushes only its own `megavolt/*` +branches through the repository credential helper (mos-0981), never `refactor`, `main` or another seat's branch. diff --git a/docs/plans/2026-10-20_agent-credentials.md b/docs/plans/2026-10-20_agent-credentials.md new file mode 100644 index 000000000..18d6a5180 --- /dev/null +++ b/docs/plans/2026-10-20_agent-credentials.md @@ -0,0 +1,57 @@ +# Brief: a credential store per agent, own git identity, pushes to a remote + +Sage, 2026-10-20, for mos-0974 (MVP T1 item 6) and the MVP plan +(`jason-master-restart/projects/mosaic-mvp/PLAN.md` item 6, GAP-MAP G11 and G13; TARGET.md: "credentials store +available for all agents; secrets protected with RLS equivalent" and "Agent uses own credentials for git and +other actions"). Gitea #1697. Owner Megavolt (Opus 5.5, a new builder seat), reviewer Duckworth, gate owner +Sage. Base: refactor at the brief commit. Design first. The first deliverable is +`agents/megavolt/work/queue-ROW/DESIGN.md`. + +This row draws a security boundary. Sage reviews the design's authority model, and Mos rules on it before any +code is written. + +## What exists today (GAP-MAP, measured at 9ae8c73ac) + +- G11. Credential references exist per instance for Gitea and Vikunja only + (`packages/business/src/credentials.mjs`, `packages/bus/src/credentials.mjs`, `vocabulary.mjs:103`). One + Claude env file is shared by every seat. +- G13. Agents use their own Vikunja token (`packages/tasks/src/adapter.mjs`). Git goes through the host + socket (`packages/cli/src/git-socket.mjs`). Gitea tokens are loaded but never used. +- The development repository's helper (`scripts/git-credential-mosaic.mjs`, wired in `.git/config` for + git.mosaicstack.dev) pushes as one identity. Until this row lands, seats push only their own `/*` + branches through it (mos-0981). + +## What the design must settle + +1. The store. Where each agent's credentials live, per instance, under the row 190 config canon. File modes, + ownership and the read path. Which process may read which entry, and how the bus enforces that (the "RLS + equivalent"). A process asking for another agent's entry is refused and logged. +2. Kinds. Gitea (git over HTTPS, and the API), Vikunja, and the model provider. Say which kinds 10-27 needs + and which wait. The model provider entry must not copy jwoltje's `claude-session.env`. If it needs a new + provider account or subscription, flag it for Jason and don't pick one. +3. Git identity and push. Each agent commits with its own name and email and pushes with its own token to a + remote it is granted. Which refs an agent may push (its own branches, never the default branch or another + agent's), and where that's enforced: the Gitea side (branch protection, token scopes) and our side. How + this fits the host git socket, or replaces it. +4. Lifecycle. Issue, rotate (`rotateBy`, `expires`), revoke and delete, and what row 194 (agent lifecycle) calls + when an agent is hired or fired. A fired agent's credentials stop working at once. +5. Who does what. Creating a Gitea user or token, or any account outside the fleet, is Jason's (Q173 + exclusions). The design lists each such step as a command or UI action for Jason. Agents never mint + accounts. +6. Migration. Today's seats (jarvis helper, seat tokens) keep working until each moves. The mos-0981 push + rule ends only when Mos says so. +7. What this row closes in G11 and G13, and what stays open. + +## Boundaries + +- No credential value is read, printed, logged or committed. Tests use fake tokens in scratch roots and a + fake Gitea. +- No change to `~/.mosaic-dev`, `~/.config/mosaic-dev`, the live units, slot files, `~/.mosaic` or the live + `.git/config` of the canonical checkout. +- No request to git.mosaicstack.dev, tasks.woltje.com or any provider from a test. + +## Gate + +Duckworth approves DESIGN.md, Mos rules on the authority model, then Duckworth approves the manifest. The bus, +business, cli and tasks suites and every `scripts/test-*.sh` are green on Sage's gate, and the design's +mutants are killed.