Skip to content

Z2 Service Catalog

Canonical endpoint registry for all Z2 services. Single source of truth — all other documents reference this file.

Host

PropertyValue
Hostnamehinata-z2
LAN IP192.168.1.153
Tailscale IP100.120.141.100
Proxmox Webhttps://192.168.1.153:8006
OSProxmox VE

Z2 Host Services (systemd)

ServicePortOwnerHealth CheckDescription
bulma-api8081bulma-financescurl http://localhost:8081/healthFinancial data API
weather-api8082allmight-healthcurl http://localhost:8082/healthWeather data API
email-p4-api8080heimerdinger-nlpcurl http://localhost:8080/healthEmail intelligence API
collector-bulma8090bulma-finances + zoro-fitnesscurl http://localhost:8090/healthBulma + Zoro collector (transactions, posture)
collector-events8091melfi-sovereigntycurl http://localhost:8091/healthActivity events collector
collector-football8092trunks-codingcurl http://localhost:8092/healthFootball data collector (pending scraper)
collector-mastery8093shikamaru-learningcurl http://localhost:8093/healthMastery/learning collector
collector-musicmastery8094squidward-musiccurl http://localhost:8094/healthMusic mastery collector
pilates-researcherallmight-healthsystemctl status pilates-researcher.timerPilates slot scraper (30-min timer, self-gates 06-18h/hourly overnight)
hinata-zepile-collector5000zepile-appraisercurl http://localhost:5000/healthHousing/jobs/marketplace scraper (Flask + internal 2h scheduler)

Deleted Z2 host units (2026-06-11): hinata-poll-truelayer-morning, hinata-poll-truelayer-evening, hinata-normalise-inbox, hinata-transcribe-audio, hinata-mail-body-archive (.service + .timer). No banking poller runs on the Z2 host.

Containers

CTHostnameIPServicesMount Points
100jimmy-neutron-postgres192.168.1.253PostgreSQL 15 (hinata DB · system.tasks)/mnt/data/postgres-backup → /mnt/backup, /mnt/data/shared → /shared
101heimerdinger-nlp192.168.1.132NLP API :8000/mnt/data/shared → /shared
102iroh-mail-pollerMail polling service/mnt/data/shared → /shared
103itachi-securityVaultwarden :8080/mnt/data/shared → /shared
104l-researchResearch tools/mnt/data/shared → /shared
105nujabes-audioAudio processing/mnt/data/shared → /shared
106minato-telegram192.168.1.132telegram-bot + hinata-bot-poller/mnt/data/transcripts → /transcripts, /opt/hinata-vault (ro), /opt/jimmy-brain-ops/scripts → /opt/scripts (ro)
107orochimaru-transcriptsTranscript storage/mnt/data/transcripts → /transcripts
108zoro-fitnessZoro fitness data/mnt/data/zoro-fitness, /opt/hinata-sandpit (ro)
109bulma-finance192.168.1.214Bulma banking (6 systemd timers)/mnt/data/hinata/data/bulma → /root/data/bulma

CT109 Bulma Banking Timers

TimerScheduleDescription
bulma-poll-monzoevery 15 minMonzo transaction polling
bulma-poll-truelayerevery 15 minTrueLayer transaction polling
bulma-analytics06:30 dailyFinancial analytics run
bulma-daily-alert09:00 dailyDaily spending alert
bulma-weekly-alertSun 19:00Weekly spending alert
bulma-weekly-summarySun 20:00Weekly financial summary

CT109 reaches the collector at LAN address 192.168.1.153:8090. The Z2 host Tailscale IP (100.120.141.100) is unreachable from inside LXC containers. Data plane: /mnt/data/hinata/data/bulma on Z2 host, bind-mounted to /root/data/bulma in CT109.

Database (CT100)

SchemaOwner CommanderTablesDescription
hinataSystemtasks, burnout_checks, cli_token_overrides, colonel_inputs, health_events, session_labels, system_eventsSystem-level tables (renamed from public 2026-06-08)
bulmabulma-financesaccounts, credit_limits, transactionsFinancial data
zorozoro-fitnessposture_assessmentsFitness tracking
footballtrunks-coding(empty — pending scraper data)Football statistics
masteryshikamaru-learningmastery_touchesLearning activity
musicmasterysquidward-musicmusicmastery_eventsMusic mastery leaderboard + events
orochimaruorochimaru-scouttoken_burn_sessions, token_burn_daily, token_burn_agentsToken burn tracking
weatherallmight-healthsnapshots, daily_forecastsWeather historical data

Shared Infrastructure

PathLocationConsumersPurpose
/mnt/data/transcripts/Z2 HDDCT106, CT107Session transcripts (7 files) — symlinked from /opt/hinata-transcripts/
/opt/hinata-vault/Z2 hostCT106 (ro)Read-only vault sync
/mnt/data/Z2 host (HDD)CT101-105 via bind mountPersistent data storage
/opt/jimmy-brain-ops/scripts/Z2 hostCT106 (ro)Automation scripts

Studio Data Pipeline

Studio ComponentData FileGenerator ScriptLocationTriggerFreshness
TokenBurnChartpublic/data/sessionBurn.jsonrefresh-session-burn.pyMac (old vault: Sandpit/Github/hinata-brain/captain/jimmy-neutron-brain-ops/scripts/)Manual — needs automationStale unless manually run
TokenBurnChart (daily)Sandpit/hinata/data/token-burn/YYYY-MM/extract-daily-token-burn.pyMac (launchd: com.hinata.token-burn-continuous)Continuous daemonLive
Mastery/Shogipublic/data/mastery-*.jsoncollector-mastery webhookZ2 host :8093 → CT100 postgresOn mastery eventLive
MusicMasterypublic/data/musicmastery-*.jsoncollector-musicmastery webhookZ2 host :8094 → CT100 postgresOn music eventLive
CalendarViewCalDAV / FastmailDirect fetchBrowserOn loadLive
MailboxSandpit/hinata/mail-archive/YYYY-MM-DD.jsonlmail-actionable-archive.pyZ2 scriptsDailyLive

Known issues:

  • refresh-session-burn.py runs from old iCloud vault path (Sandpit/Github/hinata-brain/captain/...) — needs migration to Sandpit/hinata-sandpit/scripts/ or Z2
  • Single Studio path (lifted 2026-06-14): Sandpit/hinata/applications/hinata-studio/ (sole canonical — runtime + git tree). Vite dev server, wrangler dev, and refresh-*.py writers all converge here.
  • sessionBurn.json has no launchd automation — goes stale between manual runs

Script → Data Dependencies (Z2)

ScriptReadsWritesFrequency
telegram-bot.py/opt/vault/federation/*, /opt/vault/the-government/*/mnt/data/transcripts/telegram.mdContinuous
session-end-check.shSession JSONL, /opt/vault/memory/Multiple Studio data files, telegram notificationsOn session end
session-start.sh/opt/vault/memory/MEMORY.md, /mnt/data/transcripts/telegram-session-state.mdLock filesOn session start
check-delegation-ratio.pySession JSONLToken burn reportsOn demand
generate-prompt-audit.py/opt/vault/federation/* (COMMANDER_MAP)Prompt audit reportOn demand
scan-context-drift.py/opt/vault/federation/*Drift reportOn demand

Credential Architecture (Itachi)

Vaultwarden (CT103) is the canonical credential store. JSON files in /opt/itachi/credentials/ are deleted (2026-06-09). All 37 credentials in Vaultwarden.

PrioritySourceLocationNotes
1Env vars/etc/hinata/telegram.env (CT106)Static — needs manual update on rotation
2Vaultwarden CLICT103 Vaultwarden → bw get itemCanonical source of truth
3Bootstrap file/etc/hinata/vw-bootstrap.json (Z2 host)Vaultwarden unlock only — not general credential storage

Current state (2026-06-09):

  • /mnt/data/itachi-credentials/ deleted — all credentials migrated to Vaultwarden
  • bw-session-renew.sh reads bootstrap from /etc/hinata/vw-bootstrap.json
  • mail-poller.py reads mail_imap_credential via bw get item (BW CLI)
  • pilates-researcher.service extracts pilates_key via ExecStartPre → /tmp/pilates_key.json (ephemeral)
  • CT106 loads credentials from /etc/hinata/telegram.env (static env file)

Target state: All credentials in Vaultwarden. JSON files deleted. read-credentials.sh resolves via Vaultwarden CLI only. CT106 env files auto-generated from Vaultwarden on rotation.

Hard rules:

  • Credentials come from Itachi on Z2 (Vaultwarden, CT103) primarily
  • Never use iCloud as a fallback — old iCloud credential folder will be deleted
  • Never print credential values in logs or transcripts

External (Cloudflare)

ServiceURLType
michael-engineer.devPublic websitePages
studio.michael-engineer.devStudio dashboard (ZT-protected)Pages + Workers
hinata-studio-apiWorker APIWorkers + D1