feat: provision 1Password service account token to new targets#27
Conversation
… keychain Read the op service account token from the dev machine's login Keychain and store it in the external airdrop keychain under SERVER_NAME_LOWER. First-boot extracts and installs it under ADMIN_USERNAME so claude-wrapper can fetch it via id -un lookup. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…chain Extract the op service account token from the external airdrop keychain and install it in the admin user's login keychain. Uses ADMIN_USERNAME on the write so claude-wrapper's id -un lookup matches on first run. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
PR Review -- feat: provision 1Password service account token to new targetsSummaryPhase 4 of the 1Password service-account migration. Piggybacks on the existing external-keychain airdrop flow to stage Code Quality
The provisioning block follows existing conventions cleanly. The Minor:
The new block mirrors the WiFi pattern exactly. The intentional account-name divergence -- The
ReliabilityNo regressions identified. The new
SecurityNo concerns. The token is stored in the macOS Keychain (not written to disk), Non-Blocking Observations (by maintenance impact)
VERDICT: PASS |
- prep-airdrop.sh: only echo "Provisioning..." when token is present (previously printed before the nil-check, creating misleading output when the dev Keychain lacks the token) — closes #28 - first-boot.sh: clarify -u flag semantics for security set-keychain-settings — the no-timeout behavior comes from omitting -t, not from -u alone — closes #31 - CLAUDE.md: note that opp is a local shell function from dotfiles, not a standard macOS/Homebrew tool — closes #29 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- prep-airdrop.sh: only echo "Provisioning..." when token is present (previously printed before the nil-check, creating misleading output when the dev Keychain lacks the token) — closes #28 - first-boot.sh: clarify -u flag semantics for security set-keychain-settings — the no-timeout behavior comes from omitting -t, not from -u alone — closes #31 - CLAUDE.md: note that opp is a local shell function from dotfiles, not a standard macOS/Homebrew tool — closes #29 Co-authored-by: Claude Code Bot <claude-code@smartwatermelon.github> Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Summary
Phase 4 of the 1Password service-account migration. Uses the existing external-keychain airdrop flow to provision
op-service-account-claude-automationto new Mac Mini dev-server targets, soclaude-wrappercan fetchGH_TOKENfromop://Automation/GitHub - CCCLI/Tokenon first boot.Scope: dev-server only. No Caddy, no runtime rotation, no System-keychain hop.
mac-server-setupwill get a parallel PR covering those.Changes
prep-airdrop.sh— read token from dev Keychain, stage in external keychain underSERVER_NAME_LOWERaccount; addKEYCHAIN_OP_SERVICEto manifestscripts/server/first-boot.sh— import token from external keychain, install in admin login keychain underADMIN_USERNAME(matchesclaude-wrapper'sid -unlookup inlib/credentials.sh)CLAUDE.md— clarifyop(service account, non-interactive) vsopp(Personal vault, interactive)docs/plans/2026-04-13-phase4-op-service-account-token.md— implementation planAccount-name invariant
External keychain:
-a "\${SERVER_NAME_LOWER}"(consistent with existing TimeMachine/WiFi).Login keychain on target:
-a "\${ADMIN_USERNAME}"(= `whoami` = `id -un`, what the wrapper looks up).Test plan
🤖 Generated with Claude Code