Infrastructure Overview

10
AI Agents
8
Active Hosts
69
GitHub Repos
18
MCP Servers
9
macOS Runners
18
ARC Linux Runners
6
iOS Apps
27
CF Workers

Quick Reference

HostTailscale IPRole
MacBook Air M4100.126.195.52Dev, 9 CI runners, Claude Code
Dell Precision 5520100.95.212.93k3s (ArgoCD, ARC, Tablez vCluster)
Mac Mini M4100.92.170.124iBuild-E + iClaw-E
VPS srv1099021100.111.142.118Volt-E (Boston)
Pi4-03 8GB100.107.48.17Pi-E
Pi4-02100.77.12.75Review-E
Pi4-01100.73.159.126Tailscale exit node
DS412+ NAS100.95.36.122NFS volumes (~9TB) for k3s

Hosts

Active Infrastructure

HostSpecsOSLocationSSH Access
MacBook Air M4Apple M4, 24GBmacOS 15OsloLocal
Dell Precision 5520i7-7820HQ, 32GB, 233GB NVMeUbuntu 24.04Oslossh -i ~/.ssh/dell-stig-1 claude@100.95.212.93
Mac Mini M4Apple M4macOSOslossh -i ~/.ssh/mac-executor claude@100.92.170.124
VPS srv1099021x86_64LinuxBostonssh -i ~/.ssh/vps-srv1099021 root@100.111.142.118
Pi4-02ARM64, 4GBLinuxOslossh -i ~/.ssh/rpi-pi4-02 claude@100.77.12.75
Pi4-03 8GBARM64, 8GBLinuxOslossh -i ~/.ssh/rpi-claude claude@100.107.48.17
DS412+ NAS~9TBLinuxOslo
Pi4-01ARM64LinuxOslossh -i ~/.ssh/rpi-pi4-01

Physical Layout

Oslo (Home):
├── MacBook Air M4 — dev + CI runners + Claude Code
├── Dell Precision 5520 (i7, 32GB) — k3s cluster
├── Mac Mini M4 — iBuild-E + iClaw-E
├── Raspberry Pi 4-01 — Tailscale exit node
├── Raspberry Pi 4-02 — Review-E
├── Raspberry Pi 4-03 — Pi-E
├── Synology DS412+ (~9TB) — NFS for k3s
└── Mobile: Samsung A17, iPhone 15 Pro Max, iPad

Boston (Hostinger DC):
└── VPS srv1099021 — Volt-E

Agents

Where Agents Run

MacBook Air M4 (Oslo)                    Raspberry Pi 4-03 8GB (Oslo)
├── Codi-E (claude-3) -- Orchestrator    └── Pi-E -- Remote Executor
├── Claude-4 ----------- Executor            (OpenClaw Docker, Sonnet 4.6)
├── Claude-5 ----------- Executor
└── Claude-6 ----------- Executor       Raspberry Pi 4-02 (Oslo)
                                          └── Review-E -- Code Reviewer
Mac Mini M4 (Oslo)                             (agent-runner, Sonnet 4.6)
├── iBuild-E ----------- iOS Builder
│    (Claude Code + LaunchAgent)          Dell Precision 5520 (Oslo, k3s)
└── iClaw-E ------------ Personal Asst   └── ATL-E -- Agile Team Lead
     (OpenClaw)                                (k8s deployment, TypeScript)

VPS srv1099021 (Boston)
└── Volt-E ------------- Remote Executor
     (OpenClaw Docker, Sonnet 4.6)

Capabilities

CapabilityCodi-E4/5/6Pi-EVolt-EReview-EiBuild-EiClaw-E
Create PRsYesYesYesYesNoYes-
Merge PRsYesYesNoNoNoNo-
iOS BuildsYesYesNoNoNoYes-
Code ReviewNoNoNoNoYesNo-
ArchitectureYesNoNoNoNoNo-
DiscordYesYesYesYesYesYesYes

Authentication

Single Claude Max subscription: invotekas@gmail.com shared by ALL agents. No API billing.
AgentClaude AuthGitHub AuthToken Keepalive
Codi-E / 4/5/6Local Claude MaxUser's gh CLIManual
Pi-EOAuth (shared)pie-agent-botClaude cron (3-day)
Volt-EOAuth (shared)volt-e-agent-botClaude cron (3-day)
Review-EOAuth (shared)review-e-botClaude cron (3-day)
iBuild-ELocal Claude Maxibuild-e-botLocal LaunchAgent
iClaw-ELocal Claude Maxiclaw-e-bot

Discord Bot IDs

AgentMention FormatChannel
Codi-E<@1477267530946187305>
Pi-E<@1477270576765735024>#pi-e
Volt-E<@1477272514332852416>#volt-e
Review-E<@1477785888095473798>#review-e

Kubernetes

Dell k3s Cluster

Host: Dell Precision 5520 (100.95.212.93). GitOps: cluster-gitops → ArgoCD v3.0.4.

ComponentNamespaceDescription
ArgoCDargocdCluster orchestrator (self-managed)
ARC 0.13.1arc-systemsActions Runner Controller
ARC Runnersarc-runners18 scale sets (16 Stig-Johnny + 1 cuti-e + 1 DinD)
ATL-Eatl-agentAgile Team Lead (TypeScript)
vCluster PlatforminvotekDashboard at vcluster.invotek.no
NFS ProvisionerHelm v4.0.18, nfs-csi StorageClass
starcstarcLegacy client (MSSQL 40GB)

Storage: NFS from DS412+ at 100.95.36.122:/volume1/docker. Future projects get own vCluster.

Tablez vCluster (Active Client/Partner)

GitOps: tablez-dev/tablez-gitops → Flux CD with image automation.

ComponentTypeNFS
Flux CDGitOps controller
Flux Image AutomationAuto-updates container images from GHCR
tablez-reservationC# service
tablez-api-gatewayC# service
tablez-restaurantC# service
tablez-guestC# service
tablez-notificationDocker service
tablez-aiDocker service
PostgresDatabase5Gi
ValkeyCache (Redis-compat)
PrometheusMetrics10Gi
GrafanaDashboardsdynamic
LokiLog aggregation5Gi
TempoDistributed tracing5Gi
Cloudflare TunnelExternal access (grafana.invotek.no)

Grafana at grafana.invotek.no via CF Tunnel (Zero Trust). Terraform manages DNS + tunnel (local state).

CI pipeline: PR merged → docker-build workflow → image pushed to GHCR → Flux image automation detects new tag → auto-commits update to tablez-gitops → Flux deploys to vCluster.

Networking

SSH Keys

KeyTargetCommand
dell-stig-1Dell k3sssh -i ~/.ssh/dell-stig-1 claude@100.95.212.93
mac-executorMac Mini M4ssh -i ~/.ssh/mac-executor claude@100.92.170.124
rpi-claudePi4-03ssh -i ~/.ssh/rpi-claude claude@100.107.48.17
rpi-pi4-02Pi4-02ssh -i ~/.ssh/rpi-pi4-02 claude@100.77.12.75
vps-srv1099021VPSssh -i ~/.ssh/vps-srv1099021 root@100.111.142.118

Cloudflare Domains (5)

DomainPurpose
dashecorp.comShared app domain, email routing
invotek.noCompany (GDPR workers, Grafana tunnel)
stigjohnny.noPersonal (blog, CV)
nutrie.appNutri-E (DSLD, webhook, OpenAI)
cutiefeedback.comCuti-E platform

Tunnels

TunnelDomainTarget
tablez-vclustergrafana.invotek.noTablez Grafana
vcluster-platformvcluster.invotek.novCluster dashboard

Security Layers

#LayerWhereWhat
1Tailscale ACLAll agentstag:sandbox restricts outbound
2Docker iptablesPi-E, Volt-EDOCKER-USER blocks private ranges
3macOS pfMac Mini M4Blocks Tailscale/LAN outbound
4Host iptablesVolt-Euid-owner blocks container

ACL source of truth: Stig-Johnny/infra-config/tailscale/acl.json

GitHub

54
Stig-Johnny
4
cuti-e (public)
11
tablez-dev

Stig-Johnny — Active

CategoryRepos#
Appsnutri-e, fast-e, count-e, drink-e, heart-e, star-rewards, cutie7
MCPappstoreconnect, claude-memory, context-layer, cutie, deadline-tracker, infra-health, pushbullet-sms, slack-notifications, submission-checklist, telegram-notifications, totp11
Inframac-executor, pi-e-config, volt-e-config, review-e-config, atl-agent, claude-3, cluster-gitops, infra-config, dashecorp-skills9
Sitesdashecorp, private-sites, cv, invotek-no-20234
Legacyagent-runner (dead), mcp-open-core (dead), ~20 others~23

Runners

macOS (MacBook Air M4) — 9

Labels: [self-hosted, macOS, ARM64, ios]. One per repo. v2.332.0. Required for Xcode.

Linux ARC (Dell k3s) — 18

ARC 0.13.1. Labels: arc-linux-{repo}. Scale 0-3. Standard: 250m→1cpu. Higher: 500m→2cpu. DinD: 1cpu→4cpu.

GitHub Apps (5)

AppAgentStatus
ibuild-e-botiBuild-ELIVE
review-e-botReview-ELIVE
pie-agent-botPi-ELIVE
volt-e-agent-botVolt-ELIVE
iclaw-e-botiClaw-ELIVE

GitHub Actions Runners

9
macOS Runners
18
Linux ARC Scale Sets
2
Hosts

macOS Runners (MacBook Air M4, Oslo)

All v2.332.0. Run as LaunchAgents (start on login). Labels: [self-hosted, macOS, ARM64, ios]. Required for Xcode/iOS builds.

Runner NameRepoPath
mac-mini-m1Stig-Johnny/nutri-e~/actions-runner/
mac-mini-fast-eStig-Johnny/fast-e~/actions-runner-fast-e/
mac-mini-count-eStig-Johnny/count-e~/actions-runner-count-e/
mac-mini-drink-eStig-Johnny/drink-e~/actions-runner-drink-e/
mac-mini-heart-eStig-Johnny/heart-e~/actions-runner-heart-e/
mac-mini-star-rewardsStig-Johnny/star-rewards~/actions-runner-star-rewards/
mac-mini-cutieStig-Johnny/cutie~/actions-runner-cutie/
mac-mini-ios-sdkcuti-e/ios-sdk~/actions-runner-ios-sdk/
mac-mini-ios-link-sdkcuti-e/ios-link-sdk~/actions-runner-ios-link-sdk/
Legacy naming: Runner names say "mac-mini" from when they ran on a Mac Mini. They now run on MacBook Air M4.

Linux ARC Runners (Dell Precision 5520, Oslo — k3s)

Actions Runner Controller (ARC) 0.13.1. GitOps: cluster-gitops/runners/. Scale 0-3 pods. Auth via SealedSecret. Image: ghcr.io/actions/actions-runner:latest.

Stig-Johnny ApplicationSet (16 repos)

Labels: arc-linux-{repo} (e.g., arc-linux-nutri-e)

ResourcesRepos
Standard (250m/512Mi → 1cpu/2Gi)totp-mcp, pushbullet-sms-mcp, telegram-notifications-mcp, slack-notifications-mcp, claude-memory-mcp, appstoreconnect-mcp, heart-e, drink-e, count-e, fast-e, dashecorp, claude-3, atl-agent
Higher (500m/1Gi → 2cpu/4Gi)star-rewards, nutri-e, cutie

cuti-e Runners

LabelRepoResourcesScale
arc-linux-ios-sdkcuti-e/ios-sdk250m/512Mi → 1cpu/2Gi0-2

Docker-in-Docker

LabelRepoResourcesScale
arc-linux-dockerStig-Johnny/nutri-e only1cpu/2Gi → 4cpu/8Gi0-2

Runner Routing

Job TypeRunner LabelHostWhy
iOS build/test[self-hosted, macOS, ARM64, ios]MacBook Air M4Requires Xcode, simulator
Android build[self-hosted, macOS, ios]MacBook Air M4AAPT2 is x86-only (Rosetta)
Linux CI (lint, scripts)arc-linux-{repo}Dell k3sNo Xcode needed
Docker-in-Dockerarc-linux-dockerDell k3snutri-e container builds
Rule: Never use ubuntu-latest. Always self-hosted to avoid GitHub-hosted costs ($0.08/min for macOS).

Missing ARC Runners

These repos have no Linux ARC runner configured:

RepoImpact
infra-health-mcpNo Linux CI
context-layer-mcpNo Linux CI
deadline-tracker-mcpNo Linux CI
cutie-mcpNo Linux CI
submission-checklist-mcpNo Linux CI
cuti-e/ios-link-sdkNo Linux CI (only macOS runner)

Maintenance

TaskCommand
Check macOS runnerslaunchctl list | grep actions.runner
Check ARC podsssh dell; kubectl get pods -n arc-runners
Xcode update broke runnersxcodebuild -runFirstLaunch on MacBook Air
Container bloat cleanupdocker system prune -a --volumes -f
Add new ARC runnerAdd entry to cluster-gitops/runners/stig-johnny-runners.yaml

DevOps & CI/CD

All repos: GitHub Flow — trunk-based, feature branches, squash merge. Conventional commits required.

PR Lifecycle (End-to-End)

1
Agent creates PR — pushes feature branch, runs gh pr create
2
4 things trigger in parallel:
build-and-test.yml → CI on self-hosted runner
Copilot → automatic code review
request-review.yml → Discord #tasks thread + Review-E tagged
auto-merge.yml → starts waiting for checks
3
Review-E picks up from Discord → reviews code → approves or requests changes
4
Discord thread receives updates:
build-status-to-discord.yml → CI pass/fail
forward-copilot-reviews.yml → Copilot review
pr-comments-to-discord.yml → any comments
5
Auto-merge decides:
• Wait for CI (10 min timeout)
• Wait for Copilot (60s)
• Query unresolved threads (GraphQL)
• All clear → enable auto-merge (squash)
• Blocked → fallback REST merge API
6
Post-merge:
• Discord thread: merge notification + author mention
• Linked issues auto-closed
release-please.yml triggered

Auto-merge Decision Flow

PR opened/synchronized
  |
  +-- Has manual-merge label? --> Skip
  |
  +-- Wait for CI (10 min timeout)
  |   +-- Any failed? --> FAIL
  |
  +-- Wait 60s for Copilot
  |
  +-- Query threads via GraphQL
  |   +-- Unresolved? --> FAIL
  |
  +-- Try GraphQL enableAutoMerge
  |   +-- Failed? --> Fallback: REST pulls.merge
  |
  +-- Poll for merged_at (2 min)
  |
  +-- Post-merge:
      +-- Trigger release-please
      +-- iOS files changed? --> Xcode Cloud monitor
      +-- Discord merge notification
      +-- Close linked issues

Discord Thread Model

Each PR gets a dedicated Discord thread in #tasks:

EventWorkflowAction
PR openedrequest-review.ymlCreates thread, stores msg ID as <!-- discord-review-msg-id:XXX -->
CI donebuild-status-to-discord.ymlPass/fail to thread
Copilot reviewsforward-copilot-reviews.ymlReview summary to thread
Commentspr-comments-to-discord.ymlComment content to thread
Merged/closedauto-merge.ymlResolution + author mention

Release Pipeline

1
PR merges to mainrelease-please.yml triggers
2
Releasable commits? (feat/fix/perf/deps) → Opens Release PR (version.txt + CHANGELOG)
3
Auto-approved via RELEASE_PAT (Review-E PAT, expires 2026-05-30)
4
Auto-merged (squash)
5
GitHub Release + git tag → release-notes-to-discord.yml
6
iOS: Xcode Cloud builds → TestFlight

Standard Workflows (8 per app repo)

WorkflowTriggerPurpose
auto-merge.ymlPR opened/syncWait for checks, merge
request-review.ymlPR openedDiscord thread, request Review-E
pr-comments-to-discord.ymlCommentsForward to Discord thread
forward-copilot-reviews.ymlPR opened/syncForward Copilot to Discord
build-status-to-discord.ymlworkflow_runCI status to Discord
auto-resolve-copilot.ymlPR reviewResolve Copilot threads
notify-failure.ymlworkflow_runDiscord alert on failure
release-please.ymlpush to mainVersion, changelog, Release

Runner Routing

JobRunnerHost
iOS build/test[self-hosted, macOS, ARM64, ios]MacBook Air M4
Android build[self-hosted, macOS, ios]MacBook Air M4 (Rosetta)
Linux CIarc-linux-{repo}Dell k3s
Docker-in-Dockerarc-linux-dockerDell k3s (nutri-e)

Repo Workflow Status

Repoauto-mergecopilot-fwdnotify-failxcode-monitor
nutri-eoldYesYesYes
star-rewardspartialYesYesYes
fast-epartialYesYesYes
count-elatestYesYesYes
drink-efixedYesYesNo
heart-etmplYesYesNo
cutieYesNoNon/a

Known Issues

IssueImpact
Auto-merge ~60% under loadARC runners sometimes don't spin up
No Discord notification on manual mergeThread doesn't close
Release-please PRs bypass pipelineBot PRs: no CI/Discord/review
Xcode Cloud checks on non-iOS reposAuto-merge filters them out

Apps

AppBundle IDStatusVersionPriceBackend
Nutri-Eno.invotek.Nutri-EREADY_FOR_SALE1.0.4$4.99/moCF Workers
Fast-Eno.invotek.FastEREADY_FOR_SALE1.2FreeLocal
Count-Eno.invotek.CountEREADY_FOR_SALE1.0FreeLocal
Reward-Eno.invotek.RewardEIN_REVIEW#120$1.99/moFirebase
Drink-Eno.invotek.DrinkETestFlight#13FreeLocal
Heart-Eno.invotek.HeartENot in ASCFreeLocal

All: SwiftUI + XcodeGen + CutiE SDK + SwiftData. iOS 16.0 (Fast-E: 17). 39 locales.

Subscriptions (RevenueCat)

AppMonthlyYearly
Nutri-E$4.99$39.99
Reward-E$1.99$14.99

MCP Servers

Custom (13)

ServerPurposeRepo
appstoreconnectASC APIappstoreconnect-mcp
claude-memoryPersistent memoryclaude-memory-mcp
context-layerCodebase contextcontext-layer-mcp
cutie-mcpCuti-E platformcutie-mcp
deadline-trackerDeadlinesdeadline-tracker-mcp
discordDiscord messagingmcp-discord
email-inboxAgent email (CF Worker → D1)local
infra-healthInfra healthinfra-health-mcp
pushbullet-smsSMS / 2FApushbullet-sms-mcp
slack-notificationsSlackslack-notifications-mcp
submission-checklistApp submissionssubmission-checklist-mcp
telegram-notificationsTelegram (legacy)telegram-notifications-mcp
totpTOTP 2FAtotp-mcp

Third-Party (5) + Cloud (1)

ServerPurpose
playwrightBrowser automation
githubGitHub API
cloudflareWorkers/D1/KV
bitwardenSecrets vault
context7Library docs
revenuecat (cloud)Subscriptions

Credentials

Admin Accounts

AccountPurpose
invotekas@gmail.comInvotek admin — Cloudflare, Tailscale, CF Access, Claude Max
codiedev42@gmail.comDev — Bitwarden, Xcode Cloud, Google Drive
post@stigjohnny.noPersonal — vCluster Platform

Credential Inventory (Bitwarden Names Only)

CategoryEntryUsed ByExpiry
GitHubRELEASE_PATRelease auto-approve2026-05-30
GitHubGitHub OAuth TokenDocker runners
AppleASC API Keyappstoreconnect-mcp
CloudCloudflare API TokenCF MCP + Actions
CloudOpenAI API KeyBlog + Nutri-E
DiscordBot Tokens (x4)Each agent
RevenueRevenueCat API KeyRC MCP
SMSPushbullet API KeySMS MCP
GCP: Workload Identity Federation (keyless).
GitHub Apps: PEM on hosts, 1hr tokens, 30min refresh.
Claude Max: One sub (invotekas@gmail.com), cron keepalive (3-day), M4 push fallback.

Architecture

Full Topology

                         +-------------------------------------+
                         |           CLOUDFLARE                |
                         |  5 domains, 27 Workers, D1, KV     |
                         |  2 Tunnels (Grafana, vCluster)      |
                         +-----------------+-------------------+
                                           |
                         +-----------------+-------------------+
                         |  GITHUB (3 orgs, 69 repos)          |
                         |  5 GitHub Apps, Copilot Review      |
                         +-----------------+-------------------+
                                           |
              +----------------------------+----------------------------+
              |                            |                            |
    +-----------------+       +-----------------+        +-----------------+
    | DISCORD         |       | REVENUECAT      |        | APP STORE       |
    | 4 bots, 5+ ch   |       | 2 apps w/ subs  |        | CONNECT         |
    +--------+--------+       +-----------------+        | 6 apps          |
             |                                            +-----------------+
    =========|==========================================================
             |              TAILSCALE MESH (100.x.x.x)
    =========|==========================================================
             |
    +--------+-----------------------------------------------------+
    | OSLO                                                          |
    | +-------------------+  +-----------------------------------+ |
    | | MacBook Air M4    |  | Dell Precision 5520 (k3s)         | |
    | | Codi-E + 3 exec   |  | +-------------------------------+ | |
    | | 9 macOS runners   |  | | ArgoCD (self-managed)         | | |
    | | LaunchAgents      |  | | ARC: 18 Linux runner sets     | | |
    | | Token push/refresh |  | | ATL-E (k8s deploy)           | | |
    | +-------------------+  | | NFS <- DS412+ NAS (~9TB)      | | |
    |                         | | vCluster Platform             | | |
    | +-------------------+  | |  +- Tablez vCluster            | | |
    | | Mac Mini M4       |  | |     (Flux, 6 C# services,     | | |
    | | iBuild-E+iClaw-E  |  | |      Postgres, Valkey,        | | |
    | | pf + ACL sandbox  |  | |      Grafana/Prom/Loki/Tempo) | | |
    | +-------------------+  | +-------------------------------+ | |
    |                         +-----------------------------------+ |
    | +-------------------+  +--------------+  +--------------+    |
    | | Pi4-03 8GB        |  | Pi4-02       |  | Pi4-01       |    |
    | | Pi-E (OpenClaw)   |  | Review-E     |  | Exit node    |    |
    | | Sonnet 4.6        |  | (agent-runnr)|  +--------------+    |
    | +-------------------+  +--------------+                      |
    +--------------------------------------------------------------+
    +--------------------------------------------------------------+
    | BOSTON (Hostinger DC)                                          |
    | +-------------------+                                         |
    | | VPS srv1099021    |                                         |
    | | Volt-E (OpenClaw) |                                         |
    | | Sonnet 4.6        |                                         |
    | +-------------------+                                         |
    +--------------------------------------------------------------+

Agent Communication

User (Stig-Johnny)
     |
     v
Claude-3 (Orchestrator)
     |
     +--> GitHub Issues --> Claude-4/5/6 (local) + Pi-E/Volt-E (Discord)
     +--> Discord #tasks --> All agents
     +--> Workspace Messages --> Claude-4/5/6

Any Agent creates PR
     v
request-review.yml --> Discord thread --> Review-E approves
     v
auto-merge.yml --> Squash merge
     v
release-please --> Release PR --> RELEASE_PAT approve --> GitHub Release