system/credentials.md
All sensitive credentials are stored as environment variables, never in code.
DATABASE_URL — PostgreSQL connection string (production only)GOOGLE_CLIENT_ID — Google OAuth client IDGOOGLE_CLIENT_SECRET — Google OAuth client secretRAILS_MASTER_KEY — Rails encrypted credentials keySOLANA_ADMIN_KEY — Alex Bot's Solana private key (base58), used by Turf Monster for onchain operationsANTHROPIC_API_KEY — Claude API key for AI chat (McRitchie Studio)X_BEARER_TOKEN — X (Twitter) API bearer token for News intake (McRitchie Studio). See docs/agents/system/news-pipeline.md for setup.mcritchie_studio_development (local PostgreSQL, no password)alex@mcritchie.studio / passwordAll agents share a primary Gmail account and have individual forwarding addresses on the mcritchie.studio domain.
bot@mcritchie.studio — shared Gmail account used by all agentsalex@mcritchie.studio 1Password accountEach agent has a dedicated email that forwards to the shared bot@mcritchie.studio inbox:
| Agent | Purpose | |
|---|---|---|
| Alex | admin@mcritchie.studio |
Orchestrator, admin notifications |
| Mack | mack@mcritchie.studio |
Worker agent comms |
| Mason | mason@mcritchie.studio |
Infrastructure alerts, deploy notifications |
| Turf Monster | turf@mcritchie.studio |
Sports data, Turf Monster app notifications |
Each agent has a dedicated Solana wallet on devnet. Credentials stored in 1Password.
| Agent | Address | Role |
|---|---|---|
| Alex Bot | F6f8h5yynbnkgWvU5abQx3RJxJpe8EoQmeFBuNKdKzhZ |
Primary vault admin (signs all onchain ops) |
| Alex Human | 7ZDJp7FUHhuceAqcW9CHe81hCiaMTjgWAXfprBM59Tcr |
Backup vault admin (recovery only) |
| Mason | CytJS23p1zCM2wvUUngiDePtbMB484ebD7bK4nDqWjrR |
Agent wallet |
| Mack | foUuRyeibadQoGdKXZ9pBGDqmkb1jY1jYsu8dZ29nds |
Agent wallet |
| Turf Monster | BLSBw8fXHzZc5pbaYCKMpMSsrtXBTbWXpUPVzMrXx9oo |
Agent wallet |
Wallet credentials are stored in the alex@mcritchie.studio 1Password account. Use the CLI to retrieve them programmatically.
Prerequisites: Install brew install 1password-cli, then enable "Integrate with 1Password CLI" in 1Password desktop app (Settings > Developer).
Account ID: MWOV5OT5BRHATI4EGMN26C5DPA
Vault layout:
- agents — All agent wallet credentials (renamed from "🦞 Bots" 2026-05-03)
- 🧱 Blockchain — General blockchain credentials
Retrieve a wallet's private key (items renamed 2026-05-03 to agent.* convention):
```bash
op item get "agent.solana" --vault "agents" --account MWOV5OT5BRHATI4EGMN26C5DPA --fields "private key"
op item get "agent.mason.solana" --vault "agents" --account MWOV5OT5BRHATI4EGMN26C5DPA --fields "private key"
op item get "agent.mack.solana" --vault "agents" --account MWOV5OT5BRHATI4EGMN26C5DPA --fields "private key"
op item get "agent.turf.solana" --vault "agents" --account MWOV5OT5BRHATI4EGMN26C5DPA --fields "private key"
```
Set as env var (one-liner):
bash
export SOLANA_ADMIN_KEY=$(op item get "agent.solana" --vault "agents" --account MWOV5OT5BRHATI4EGMN26C5DPA --fields "private key")
Item fields: Each wallet entry contains recovery phrase, private key (base58), and wallet address (base58 public key).
Alex Bot is the primary admin for the TurfVault smart contract (program 7Hy8GmJWPMdt6bx3VG4BLFnpNX9TBwkPt87W6bkHgr2J). Alex Human is the backup admin. Both can perform admin actions (create/settle/close contests). The SOLANA_ADMIN_KEY env var in Turf Monster's .env holds Alex Bot's private key.
.env files or credential fileshas_secure_password.env files (gitignored), never in code or commits