Skip to content

Itachi Credential Store

REFERENCE — consult when locating credentials or wiring scripts. See how-to_fix-vaultwarden-tls-cert for cert repair procedure.

Store location

LayerPathAccessStatus
Vaultwarden (PRIMARY)Docker in CT103, port 443bw get notes [name] --session $BW_SESSIONCanonical — 36 live items (37 migrated 2026-06-09; bq_token + gdrive_token deleted to trash 2026-06-11; gmail_oauth_client added 2026-06-11)
bw session cache/root/.bw_session on Z2 hostBW_SESSION=$(cat /root/.bw_session)Active — unlock with bw unlock --raw
File store (deleted)/opt/itachi/credentials/ on CT103DELETED 2026-06-09 — directory empty
ct102 runtime cache/opt/itachi/credentials/ on ct102read directly by mail-pollerLIVE — 5 mail files + gmail_oauth_client.json (mode 600); same-named as the deleted CT103 dir but a separate, active directory

Vaultwarden: running as Docker container in CT103 (itachi-security). Migration of 37 credentials completed 2026-06-09. Flat file store at /opt/itachi/credentials/ on CT103: deleted 2026-06-09, directory empty. ct102 keeps its own /opt/itachi/credentials/ as the mail-poller's runtime cache — Vaultwarden remains the canonical copy of those items.

Credential intake: bw CLI on Z2 host, writing directly to Vaultwarden. The former bw-add-credential.sh script is deleted (2026-06-11).

Vaultwarden account: michael.asolo1@gmail.com

Credential file inventory

Item names in Vaultwarden drop the .json suffix (e.g. file bq_token.json ↔ item bq_token). Deleted 2026-06-11 (Michael instruction, trash-level — recoverable): bq_token (BigQuery), gdrive_token (Google Drive).

FileServiceType
anthropic-api-key.mdAnthropic / Claude APIAPI key (**Key:** sk-ant-...)
vaultwarden_credentials.jsonVaultwarden (CT103)hostname · username · password
claude_api_key.jsonAnthropic / Claude APIkey · model · console · type
cloudflare_api_token.jsonCloudflareAPI token
cloudflare_account_id.jsonCloudflareAccount ID
cloudflare_tunnel_cert.jsonCloudflare TunnelTunnel cert
cloudflare_tunnel_id.jsonCloudflare TunnelTunnel ID
tokens_gcp.jsonGoogle Cloud PlatformOAuth tokens
gmail_oauth_client.jsonGmail OAuth2 (hinata-brain web client)Client ID + secret — added 2026-06-11; runtime copy on ct102
gmail_oauth_token.jsonGmail IMAP XOAUTH2Refresh token, scope https://mail.google.com/ — minted + live 2026-06-11 (consent app "In production"); runtime copy on ct102
tokens_monzo.jsonMonzo APIOAuth tokens
monzo_credentials.jsonMonzo APIClient credentials
tokens_truelayer.jsonTrueLayerOAuth tokens
truelayer_credentials.jsonTrueLayerClient credentials
trading212_api_key.jsonTrading212API key
trading212_credentials.jsonTrading212Account credentials
outlook-graph-credentials.jsonMicrosoft Graph APIOAuth app registration
outlook-tokens-outlook-n-nnamah.jsonOutlook (n.nnamah)OAuth tokens
outlook-tokens-outlook-michael-nnamah.jsonOutlook (michael.nnamah)OAuth tokens
outlook-tokens-hotmail-michael-asolo.jsonHotmail (michael.asolo)OAuth tokens
mail_imap_credential.jsonGmail IMAPApp password
telegram_bot_credentials.jsonTelegram (primary bot)Bot token
kakashi_telegram_bot_credentials.jsonTelegram (Kakashi)Bot token
brook_telegram_bot_credentials.jsonTelegram (Brook)Bot token
gohan_telegram_bot_credentials.jsonTelegram (Melfi — file retains gohan_ prefix pending Itachi-owned rename)Bot token
iroh_telegram_bot_credentials.jsonTelegram (Iroh)Bot token
sanji_telegram_bot_credentials.jsonTelegram (Sanji)Bot token
squidward_telegram_bot_credentials.jsonTelegram (Squidward)Bot token
zuko_telegram_bot_credentials.jsonTelegram (Zuko)Bot token
pilates_key.jsonPilates APIAPI key
fit_token.jsonGoogle Fit APIOAuth token — API access expired 2026-05-22; restore decision pending Michael (see reference_google-fit-validation)
hinata_studio_access.jsonHinata StudioAccess credentials
hinata_collector_api_key.jsonHinata CollectorAPI key
ngrok_auth.jsonngrokAuth token
vps-credentials.jsonJimmy VPSSSH / access credentials
wrangler_oauth_credentials.jsonCloudflare WranglerOAuth credentials
zoro_webhook_signing_key.jsonZoro webhookSigning key

Token death watch (ruling 2026-06-11: no token dies silently)

token-watchdog.py (sandpit scripts/, runs from Z2 host clone /opt/hinata-sandpit/scripts/) sweeps daily at 08:30 via hinata-token-watchdog.timer (Z2 host systemd):

SurfaceSignal watched
Gmail XOAUTH2 (ct102)Gmail OAuth refresh failed in journal; latest connect line degraded to app password
MS Graph ×3 (ct102)Graph token refresh failed / invalid_grant / AUTHENTICATIONFAILED; outlook-tokens-*.json not rewritten in 7 days (rotation stopped)
Poller liveness (ct102)no Mail poller complete in 2h (15-min timer)
Monzo + TrueLayer (ct109)401 / Bad refresh token / invalid_grant in poll logs
Data plane (Z2 host)/mnt/data mount check (task 800148)

Alerts: Telegram (creds read from CT106 /etc/hinata/telegram.env, never printed). Sunday all-clear pulse guards against watchdog self-death. Run log: /mnt/data/hinata/logs/token-watchdog.log. Excluded: fit_token (pipeline retired, restore pending Michael), tokens_gcp (no active consumer).

bw CLI session management

OperationCommand
Check statusssh hinata-z2 "bw status"
Unlock and cache sessionssh -t hinata-z2 "bw unlock --raw > /root/.bw_session && chmod 600 /root/.bw_session"
Read item by namessh hinata-z2 "BW_SESSION=\$(cat /root/.bw_session) bw get password [item-name]"
Session expiryOn idle timeout — re-run unlock command above

Resolution order in itachi_read.sh

  1. Exact filename match in /opt/itachi/credentials/ on CT103
  2. [name].json in /opt/itachi/credentials/
  3. [name].md in /opt/itachi/credentials/
  4. Vaultwarden CLI via /root/.bw_session on Z2 (canonical — 36 live items)

Script consumers

ScriptKey consumedWhat it isSource path
telegram-bot.pyANTHROPIC_API_KEYAnthropic Claude API key (sk-ant-...)/root/Sandpit/hinata/scripts/.env.anthropic-api → CT103 anthropic-api-key.md
telegram-bot.pyTELEGRAM_BOT_TOKENPrimary Hinata bot token/etc/hinata/telegram.env on CT106 (also: ANTHROPIC_API_KEY, TELEGRAM_CHAT_ID, HINATA_API_KEY)
chat-audit.pyHINATA_ANTHROPIC_API_KEYAnthropic Claude API key/opt/jimmy-brain-ops/.env
collector-bulma.py + all collectorsHINATA_API_KEYInternal Hinata collector API auth key (x-hinata-key header) — not the Anthropic keyCT103 hinata_collector_api_key.json; local cache /opt/jimmy-brain-ops/secrets/monzo/collector_api_key.txt
poll-monzo.pymonzo_credentials.json · telegram_bot_credentials.jsonMonzo OAuth client credentials; Telegram bot tokenCT103 /opt/itachi/credentials/ — broken symlinks at /opt/jimmy-brain-ops/secrets/monzo/ removed 2026-06-09; credentials now accessed via pct exec 103 -- cat /opt/itachi/credentials/[file]
read-credentials.shanyitachi_read.sh resolution order above

Broken credential path — poll-monzo.py / monzo-token-watchdog.py

These scripts hardcode Path("/opt/jimmy-brain-ops/secrets/monzo") and expect monzo_credentials.json and telegram_bot_credentials.json there. The symlinks at that path pointed to /mnt/data/itachi-credentials/ (bind mount absent). Symlinks removed 2026-06-09. Canonical source: CT103 /opt/itachi/credentials/. Access: pct exec 103 -- cat /opt/itachi/credentials/[file] from Z2 host.


Cross-links: reference_approved-ip-addresses · how-to_fix-vaultwarden-tls-cert