MiddleGround Capital · Confidential · Engineering Onboarding

ABBI Developer Portal

The single guided reference for the ABBI operating system — the Canon, the realms, Sovereign Mind & Hive Mind, every project across Infrastructure, MiddleGround, Banner and Resolute, the ABBI Master Design & management system, and live links to the Gitea source, apps and dashboards we run today.

Start Here

You've been hired to build out the future portfolio-company realms, beginning with Banner. This portal is your map. Work through every section below — each one checks off automatically once you've opened it, and your progress is saved on this device.

Your onboarding checklist

Read every card in every section below. Each card marks itself ✓ Read once you've scrolled through it (or click its badge), and you can track exactly what's left here. Progress is saved on this device.

0 of 0 cards read
✓ Onboarding complete — you've read every card across every section of the ABBI Developer Portal. Welcome to the team.

What ABBI is (in one paragraph)

ABBI = Adaptive second Brain Intelligence. It is not a chatbot, not an assistant, and not any single model. It is a model-agnostic second brain for MiddleGround Capital with persistent memory (Hive Mind), real integrated access to systems (Sovereign Mind), and a constitution that governs every change (the Canon). Your job is to extend that brain to each portfolio company as its own isolated realm.

The five things to internalize before you build

  1. Never guess. A live probe beats a stale doc. Verify against Gitea or the running system before you act.
  2. Gitea is the source of truth. Everything canonical lives in abbi/abbi-infrastructure. A value you set yourself is never "confirmation."
  3. The Change Gate is real and server-enforced. Canonical changes require the Architect's PIN at push time. Plan your work so gated steps are explicit and batched.
  4. Never write a secret anywhere. No credentials/keys/tokens in chat, code, docs, or memory — reference by name, e.g. [banner-admin-keypair].
  5. Realms are isolated by design. A portco's data never commingles with MGC's. Its ABBI never reaches across into another realm.

Your first week

  1. Read the Canon, Realms, and Architecture tabs here.
  2. Open the canonical docs in Gitea (buttons below) and read them end to end.
  3. Study Banner live (read-only) — walk RAW → STAGING → CURATED.
  4. Run the provision_portco_realm.py template against a sandbox account.
  5. Pick the next portfolio company with John Stewart and map its real source systems.
Gitea repo root Intended Architecture Tool Routing Capability Reference Portco Realm Template

Gitea is on the private tailnet at 100.89.184.50 (abbi-gitea-vm), reachable on the tailnet at http://100.89.184.50:3300. You'll need tailnet access + a Gitea account — ask for provisioning on day one.

Status legend (used throughout this portal)

LIVE running & maintained IN PROGRESS actively being built PLANNED designed, not built DISABLED built, intentionally off UNDER CONSTRUCTION built but stale / unmaintained

The Canon Enforced across all realms

What it is & why it exists

The Canon is the immutable constitution of the ABBI Universe: 14 Canonized Laws plus an 8-row Decision Table that together govern how every ABBI session may act. It is not advice or style — it is a set of binding gates that must be satisfied before action, in every realm, regardless of task, model, or platform. Only one entity may modify it: the ARCHITECT (John Stewart, Managing Partner of MiddleGround Capital).

Objective: make an autonomous, model-agnostic AI safe to run against production infrastructure and MGC data. The Canon guarantees that nothing catastrophic or irreversible happens without authorization, that ABBI never guesses when it should verify, that every change can be rolled back, and that the cloud Gitea repo — not any local copy — is the source of truth. As the boot prompt states it: "Verification, not assumption, is the basis for action."

CANON is a gate, not a weight. Mandatory processes BIND before action — they are not one factor among many to trade off. Order of precedence: CANON > Architect > cadence > judgment. Autonomy directives ("no pauses", "keep working") NEVER license skipping a mandate. Where any memory, skill, or older doc conflicts with the Decision Table, the Table wins.

How it works

The Canon lives verbatim at the top of the v200b Boot Protocol (v13.0). Every ABBI session loads it at boot, before any execution tool-call. The Laws set the principles; the Decision Table resolves each concrete decision point to exactly one rule; the Change Gate mechanically enforces the mutation-related Laws at runtime across three independent layers.

          THE CANON  (immutable — only the ARCHITECT modifies)
          ┌─────────────────────────────────────────────┐
          │  14 LAWS  ──────►  8-ROW DECISION TABLE   │
          │  (principles)          (one rule / decision)  │
          └───────────────┴─────────────────────────────┘
                          │ loaded verbatim at boot
                          ▼
   ┌─────────────────────────────────────────────────────────┐
   │  EVERY ABBI SESSION  (any realm, any model)               │
   │  boot → /objective → /deliverables → /devpolicy → execute │
   └──────────────┴─────────────────────────────────────┘
                   │  every canonical-infra MUTATION
                   ▼
   ┌────────────────────────────────────────────────────────┐
   │  CHANGE GATE  (gate BEFORE execution, fail-closed)        │
   │  L1  CF-Worker MCP middleware  → V20 · V2 · CLI · v200x   │
   │  L2  Claude Code PreToolUse hook → Mac Studio · QUE       │
   │  L3  Filesystem watcher safety net → manual/cron/SSH      │
   │  CRITICAL/HIGH → authorize <pin>  ·  MEDIUM/LOW → audit    │
   └────────────────────────────────────────────────────────┘

A gate DENY that a first retry does not clear is itself a STOP condition — the session reports and halts rather than re-issuing. Read-only operations (Hive Mind reads, session tracking, status queries) are never gated; only canonical-infra mutations are.

The 14 Canonized Laws

#LawWhat it binds
1Sovereign AuthorityEverything serves John Stewart and MGC; only the ARCHITECT modifies CANON.
2Never GuessIf ABBI does not KNOW an approach will work, stop and research (/devpolicy) before acting.
3No Blind ChangesEvery change is hypothesis-driven, researched, justified, reversible; experiments only in DEV/VM.
4Change Gate SupremacyEvery canonical-infra mutation goes through the Change Gate; availability of a credential is never authorization.
5Credential ProtectionNever write secrets/endpoints to Hive Mind or disk — reference as [credential name]; pasted secrets: use, scrub, never store.
6Autonomous ExecutionOnce direction is given, execute to completion; stop only at a Permission Gate (Row 1).
7ReversibilityNo change without a known-good rollback; capture a baseline before the first mutation (Baseline Latch).
8Source of TruthCanonical infra/code lives in cloud Gitea (100.89.184.50:3300); ~/.abbi is a working copy.
9Truthful & Concise ReportingReport outcomes faithfully; "done" only when verified; state facts plainly and short.
10Realm IntegrityNo cross-realm contamination; dev code never touches production until lifecycle phases pass.
11Confirm Outward ActionsNever send email or hard-to-reverse external actions without explicit confirmation.
12Respect the LifecycleHit an unknown while building → run /devpolicy research; do not improvise past the gap.
13Use the Tool, Not the UserIf a tool/Bash/service account covers it, execute directly; escalate only on a verified hard blocker.
14Root Cause FirstAny bug → /fix-repair (diagnosis) before any fix; the fix then routes per Decision Table Row 3.

The Decision Table — one rule per decision point

The Decision Table supersedes all prior overlapping guidance. Where a memory, skill, or older doc conflicts with it, the Table wins.

RowDecision pointThe rule
1When to STOPStop ONLY at: (a) Change Gate needing in-session authorize <pin>; (b) a material either/or only the Architect can resolve with no safe reversible default; (c) a verified hard blocker (Row 6); (d) an unknown/risk (continue with read-only research, never a probe mutation); (e) verified completion of the OBJECTIVE. Everything else: keep working.
2When to request a PINTwo tracks. Planned (/devpolicy): pre-file a batch CGR, present the plan, request ONE PIN covering all gated items — zero mid-wave PINs. Ad-hoc (/fix-repair, hotfixes): read-only diagnosis first, then file the CGR and echo the gate's CHANGE GATE REQUEST block VERBATIM. MEDIUM/LOW need no PIN (audit only).
3Fix in-flight vs file /bug(1) Created it this session → it's MINE, fix now. (2) Blocking the objective → /fix-repair inline. (3) Neither → file /bug and return to the objective. Do not offer to fix — the offer is the drift.
4Diagnosis modeAny diagnose/investigate/root-cause task is READ-ONLY: no mutations, no restarts, no rotations, no "try it and see." Confirm what is actually broken before changing anything.
5What "COMPLETE" requiresEnd-to-end function confirmed (data tool returned real rows; UI renders live; service ran a real cycle). For any COMPLICATED task a passing /completion-gate certificate is REQUIRED — falsification-first, fail-closed. "Running ≠ functional; loaded ≠ working; deployed ≠ rendering."
6What "BLOCKED" requiresExhaust ALL reachable identities and tools live first (for Azure: az account show + role check BEFORE escalation). Inherited "blocked on X" context is not evidence — re-verify each session. Name the genuine blocker explicitly.
7Objective alignmentNo pinned objective → /objective before any execution. At every heartbeat/wave, compare work to the pinned deliverables; work mapping to no deliverable for 2 heartbeats → DRIFT_ALERT and surface it.
8v2/v20 realm authorityRaj Yadav holds COMPLETE authority for v2/ and v20/ (no PIN, no Architect approval, audit-logged only). Never escalate a v2/v20 decision to the Architect; a Raj-enablement deliverable is complete only when it executes from Raj's own access path.

Technical specification & design

The Canon is authored as plain text and enforced by real software. Concrete stack, all verified in the repo:

  • Canon source (text): v200/boot/v200b/ABBI_boot-prompt-v13.0-local.txt — the Laws + Decision Table live at the top, loaded verbatim at every boot. Superseded prompts v11.0/v12.0 sit beside it as history.
  • Change Gate (Python + Cloudflare Worker): shared/services/change-gate/ — a 3-layer enforcement system. Layer 1 = CF-Worker middleware at mcp-admin.abbi-ai.com checking watched MCP calls (cf_*, vercel_*, mac_write, mac_run) against the gate's /check. Layer 2 = a Claude Code PreToolUse hook gating Write/Edit + MCP on Mac Studio / QUE. Layer 3 = fs-watcher.py, a filesystem watcher (watchdog/fswatch) safety net that auto-reverts out-of-band CRITICAL changes from git. Mode = ENFORCE in gate_config.yaml; also runs containerized as v200-change-gate (port 8767).
  • Risk tiering: gate_config.yaml → watched_paths classifies each path critical/high/medium/low. CRITICAL paths include ~/.claude/CLAUDE.md, ~/.claude/settings.json, ~/.claude/hooks/, com.abbi. LaunchAgents, the gate's own directory (self-protection), the Gitea path-mapping.json, and the realm boot/ prompt dirs — so the Canon cannot be quietly disabled.
  • Authorization flow: printf '<pin>' | python3 ~/.abbi/scripts/authorize-v200-cloud.py --stdin → writes to authorize-cache.db, then scrub-pin.py. 6-digit PIN, per-use, typed live by the Architect.
  • Source of truth & reversibility: cloud Gitea (Gitea VM 100.89.184.50:3300, repo abbi/abbi-infrastructure) is canonical; the Baseline Latch (/change-baseline) mechanically forces a rollback snapshot before the first mutation of a session.
  • Governance automation (Python + LaunchAgents): shared/scripts/governance-audit.py, governance-metrics.py, governance-pdca.sh, governance-probes.sh — nightly/weekly LaunchAgents (com.abbi.v200-governance-*) that audit adherence and close the PDCA loop.
  • Memory corpus (Markdown): v200/clients/claude-cli/memory/ — the CORE MEMORY.md plus per-rule feedback docs (e.g. feedback_canon_is_a_gate_not_a_weight.md) that operationalize each Law; progressive disclosure keeps CORE byte-stable for caching.

Deliverables

  • The Canonized Laws (1–14) and the 8-row Decision Table — carried verbatim in the v200b boot prompt.
  • A running, fail-closed Change Gate — three enforcement layers across the fleet, self-protecting, with per-item CRITICAL/HIGH authorization and MEDIUM/LOW audit-only pass.
  • A one-word rollback / Baseline Latch — every session captures a known-good restore point before its first mutation.
  • Governance audit + PDCA jobs — nightly/weekly LaunchAgents that measure adherence and surface violations.
  • A memory corpus that operationalizes each Law into concrete, cached feedback rules loaded on demand.

Implementation by realm

The Canon is realm-neutral: the Laws and Decision Table bind every session regardless of realm. What varies is the enforcement surface and the authorization path.

RealmStatusDetail
V200 Fully enforced Home realm. Canon loaded from v200b boot v13.0; all 3 Change-Gate layers active (Layer 2 PreToolUse hook on this Mac Studio + Layer 1 MCP + Layer 3 watcher). Canonical mutations require the Architect's in-session PIN.
V2 Enforced (Raj authority) Canon binds. Change-Gate Layer 1 covers V2 (CSML) MCP calls. Per Decision Table Row 8, Raj Yadav holds complete v2 authority — audit-logged, no PIN, no Architect approval; v2 decisions never escalate to the Architect.
V20 Enforced (Raj authority) Canon binds. Change-Gate Layer 1 covers V20 (LibreChat) MCP calls. Raj is sole V20_ADMIN with complete v20 authority (audit-only, no PIN). Peer-provisioning of a 2nd V20_ADMIN is untested (see v20 Onboarding).
Resolute Binds; gate via shared surfaces Portco realm (own Snowflake resolute_sm_query_snowflake, workers e.g. resolute-dropbox-mcp). Canon binds any session touching it; mutations routed through cf_*/vercel_*/mac_* MCP calls hit Layer 1. A Resolute-specific enforcement platform is not separately documented.
Banner Binds; gate via shared surfaces Portco realm (own Snowflake banner_sm_query_snowflake). Same posture as Resolute: Canon binds; mutations via shared MCP surfaces are gated at Layer 1; a Banner-specific enforcement layer is not separately documented.
MGC / future portcos Canon-by-design The Sovereign Control Plane (ABBI.002.013, namespace-per-org) is designed to onboard future companies under the same Canon. Not yet a distinct enforcement realm — planned.

Off-limits by CANON: the GPU extraction fleet (4-node abbi-ultra / N2) and Apeirin (standalone) are excluded from realm tooling by design — never mix infra or credentials. Realm separation is absolute: V200 can build for V2 but NEVER shares infra or creds.

Development status

LIVE The Canon is fully authored and in force. v200b Boot Protocol v13.0 is the single canonical boot prompt (activated 2026-07-19, reconciled governance + Decision Table). The Change Gate is in ENFORCE mode with all three layers running; the standalone LaunchAgent is retired in favor of the containerized v200-change-gate. Governance audit/PDCA LaunchAgents run nightly/weekly.

LIVE Decision Table Row 5 (completion-gate certificate required) and Row 8 (v2/v20 Raj authority) are both active and hook-enforced. The autonomy-enforcer and completion-gate hooks fail closed.

IN PROGRESS Peer-provisioning of a 2nd V20_ADMIN under Row 8 has never been exercised — it is the first real test of Raj's admin authority and the path the 2nd developer needs.

PLANNED Extending Canon enforcement as a first-class, per-realm surface for portco realms (Resolute, Banner) and future companies via the Sovereign Control Plane. Today those realms are bound by Canon and gated through shared MCP surfaces, not a dedicated per-realm gate.

Source documents (Gitea)

boot-prompt-v13.0-local.txt The canonical boot prompt — the 14 Laws and the 8-row Decision Table verbatim, loaded at every session start.

change-gate/README.md The 3-layer Change Gate: architecture, risk tiering, watched paths, ENFORCE mode, and self-protection rules.

V200-CAPABILITY-REFERENCE.md Authoritative operational map: tool→account/auth, credential retrieval, gateway topology, and the Change-Gate authorize flow.

memory/MEMORY.md The always-on CORE memory — the catastrophic/irreversible/universal rules that operationalize the Laws in every session.

feedback_canon_is_a_gate_not_a_weight.md The precedence rule: CANON binds before action (CANON > Architect > cadence > judgment); autonomy never licenses skipping a mandate.

governance-audit.py The nightly governance auditor that measures Canon adherence across the fleet and surfaces violations.

v200a-boot-protocol/SKILL.md The boot-protocol skill that loads the Canon and runs the fully-local boot sequence at session start.

The Realm Model Live & expanding

What it is & why it exists

A realm is an isolated operating context with its own identity, authority, toolset, and data boundary. Nothing in one realm reaches across into another realm's data or credentials — isolation is the design, not a configuration option. ABBI runs on two independent axes of realm, and you must hold both in your head:

Lifecycle realms (how work matures)

A change moves DEV → VM → BETA → PROD. Nothing is born in production. This is the /devpolicy 5-phase lifecycle: build in DEV, prove in an isolated VM, expose to a small BETA cohort, then deploy to PROD with a pre-designed rollback.

Organization realms (who is served)

v200 (Architect + ABBI admin), v2 (MGC end-users), v20 (MGC org-admins), resolute, banner, apeirin, and one dedicated realm per future portfolio company. Each is a walled garden of data + credentials.

Objective: give every organization — MGC itself and each portfolio company — a full ABBI experience over its own data, with a hard guarantee that no realm can see, query, or spend against another realm's systems. That guarantee is what lets MGC extend ABBI to a portco without ever exposing MGC (or another portco) to it. Building out the future portco realms, starting with Banner, is the new developers' mandate.

CANON — Realm separation. V200 may build and deploy infrastructure for another realm, but NEVER shares its infrastructure or credentials with that realm. A portco's data lives in the portco's own accounts, fed from the portco's own sources — never commingled in an MGC account.

How it works

The lifecycle axis — DEV → VM → BETA → PROD

DEV
Phase 2 · build (prototype)
VM
Phase 3 · isolated test
BETA
Phase 4 · small real cohort
PROD
Phase 5 · full rollout

Rollback is designed at Phase 1, before a line of code is written; "done" is a machine-readable Sprint Contract, not a judgment call; Phase 2 exit requires adversarial /test-panel verification, never self-certification. The Beta Testing environment is a named realm on its own (V200B) so beta traffic never touches production.

The organization axis — identity decides the realm

Every multi-user request enters through the realm-router, which reads the caller's identity (the email LibreChat injects as X-Abbi-Identity) and forwards the request to that realm's gateway with that realm's auth — default-deny for any identity it does not recognize.

caller identity (email)
        │
        ▼
  realm-router  (100.86.225.119:8791, DEFAULT-DENY)
        │
  ┌─────┼───────────────┬──────────────────────┐
  ▼     ▼               ▼                      ▼
 v200   v2 / v20      resolute / banner       unmapped
 local  mcp.abbi-      per-realm Snowflake      │
 relay  ai.com          account + gateway       ▼
 (255   (per-user      (own creds, own data)   DENY
 admin  Bearer,        never shared upward
 tools) 25 scoped                              (fail-closed)
        tools, RLS)

v200 identities (the Architect, ABBI admin) are hard-wired to the v200 realm regardless of config — supremacy is static. v2/v20 per-user keys are stored encrypted at rest (AES-256-GCM), decrypted only in memory; a v2 user with no resolvable key is denied, never leaked. Cross-realm read-across is structurally impossible: each portco realm is a separate Snowflake account behind its own gateway.

Technical specification & design

LayerTechnology (verified in repo)
Identity routingNode.js realm-router — a transparent Streamable-HTTP MCP proxy (v200/services/realm-router/router.js), default-deny, SIGHUP config reload
Per-realm dataSnowflake, one account per realm: v2/v20 SXA84406, Resolute MLA96789, Banner KGB57253 (Azure East US 2), MGC/Hurricane JGA82554
Portco realm structure<PORTCO>_WH warehouse · DB <PORTCO> · schemas RAW_<SOURCE>/STAGING/CURATED/GOVERNANCE · 4 roles ADMIN/LOADER/MGC_READ/TEAM_READ under SYSADMIN
Portco authKey-pair only (SNOWFLAKE_JWT / RSA 2048, PKCS8) because portco accounts enforce MFA that can't be driven programmatically; authenticate with the LOGIN_NAME (may differ from object name)
Credential vaultAzure Key Vault abbi-v200-kv (<portco>-admin-keypair, <portco>-source-connections); router credential key on local disk, never in Gitea
ProvisioningPython provision_portco_realm.py (warehouse + schemas + RBAC); RLS isolation tests (v200/apps/realm-user-listener/wave1-schema/rls_isolation_test.sql)
User front doorABBI-branded LibreChat (Azure Container Apps); v2/v20 shared app app.abbi-ai.com via Cloudflare; Resolute app Tailscale-only
IngestionSource-fed (AWS S3 exports + ERP/CRM), boto3 / write_pandas / COPY … MATCH_BY_COLUMN_NAME — never routed through Hurricane
Naming grammar[realm]-[type]-[function][-ploc][-n]-r[hash]; realm ∈ {v200, v20, v2, abbi, apeirin, resolute}; LaunchAgents com.abbi.[realm]-…-r[hash]

Deliverables

  • A running realm-router that maps identity → correct realm gateway, default-deny (100.86.225.119:8791).
  • A repeatable per-portco realm template: README + provision_portco_realm.py producing warehouse, four schemas, four roles, and secured key-pair — proven on Banner, ready to replicate ~14 more times.
  • Per-realm Snowflake accounts with RAW → STAGING → CURATED → GOVERNANCE layering and RLS isolation tests.
  • The four onboarding artifacts per portco (from /pc-realm-building): Data & Systems Inventory, Accounts & Infrastructure checklist, Access & Credentials Matrix, provisioning + ingestion runbook.
  • A gated lifecycle path (DEV → VM → BETA → PROD) with Sprint Contracts, /test-panel gates, and Phase-1-designed rollback for every change to any realm.

Implementation by realm

RealmStatusDetail (verified this session)
v200 — Architect + ABBI admin Live Supreme admin realm; identities statically pinned in the router; full 255-tool admin gateway + local Hive Mind + Gitea. The realm that builds every other realm.
v2 — MGC end-users Beta Shared app app.abbi-ai.com, 25 scoped tools, Row-Level Security. Real beta cohort onboarded 2026-07-20 (rfisher, csmal L2, shundley). Snowflake SXA84406.
v20 — MGC org-admins Beta Raj Yadav (nyadav@middleground.com) is the sole V20_ADMIN. Windows install kit (52 skills). The peer-provisioning path — a V20_ADMIN provisioning a peer V20_ADMIN — has never been exercised; the 2nd developer needs the same role and is the first real test of it. Provision via the V2 admin gateway (mcp.abbi-ai.com), NOT the stale v200 sm_ replica.
resolute — Resolute Racing Live Full product realm: own Snowflake MLA96789, 23 containers in resolute-infra-rg, ABBI-branded LibreChat (Tailscale-only, 309 tools). Dropbox service hard-scoped to Resolute's folder only. The closest model for a full portco product experience.
banner — Banner / AM Castle Live First proven per-portco data realm (ABBI.100.026). Account KGB57253.east-us-2.azure, ~2.37M rows loaded from source (RAW_ORACLE_CASTLE / RAW_D365_FSC / RAW_D365_SALES / RAW_POWERTERM_NKS + STAGING/CURATED/GOVERNANCE). Tool banner_sm_query_snowflake. The developers' first build to replicate.
Future portcos (~14) + MGC_STARRETT Planned Each replicates the Banner template into its own account. Starrett (Athol), currently co-resident in Hurricane OPS_DATA_PROJECT, gets its own MGC_STARRETT realm later. Template + /pc-realm-building playbook ready; each onboarding is gated through /devpolicy + Change Gate.
apeirin — Apeirin Live Recognized realm in the naming grammar with its own app/dashboard tree. Excluded from the realm-pipeline audit tooling by design (RIP scope = v200 + abbi only).

Development status

Live now

  • realm-router enforcing identity → realm, default-deny, with AES-256-GCM per-user key storage.
  • v200, resolute, banner, and apeirin realms operational, each on isolated data.
  • Banner per-portco template proven end-to-end (realm + RBAC + 2.37M source rows).

In progress / beta

  • v2 & v20 in BETA — 4 real MGC users onboarded 2026-07-20; broader rollout pending.
  • Peer V20_ADMIN provisioning path untested — to be exercised by onboarding the 2nd developer (get their MS email from Raj; add to the onboarding.abbi-ai.com Cloudflare Access allow-list; provision Gitea + tailnet day one).
  • realm-user-listener currently DISABLED (FEATURE_STATUS.DISABLED present; turn-on runbook staged).

Planned

  • ~14 remaining portfolio-company realms, replicating Banner; MGC_STARRETT carve-out from Hurricane.
  • Sovereign Control Plane (ABBI.002.013) — namespace-per-org substrate to host every realm at scale (scaffold, under construction).

Source documents (Gitea)

realm-router/router.js — the identity→realm proxy: static v200 supremacy, encrypted v2 keys, default-deny logic.

portco-realm-template/README.md — the reusable per-portco realm structure, RBAC, key-pair auth, ingestion & migration order.

provision_portco_realm.py — the script that stands up a portco's warehouse, four schemas, and four roles.

pc-realm-building/SKILL.md — the five-phase portco onboarding playbook and its four required artifacts.

devpolicy/SKILL.md — the DEV→VM→BETA→PROD lifecycle: Sprint Contracts, test-panel gates, Phase-1 rollback design.

v200-naming-standard.md — the realm-prefixed naming grammar and the canonical realm enumeration.

realm-user-listener/README.md — the (currently disabled) per-realm user provisioning listener, incl. RLS isolation tests.

Sovereign Mind & Hive Mind Fully implemented

What it is & why it exists

Sovereign Mind and Hive Mind are the two halves of what makes ABBI more than a chat model: real capability and real memory.

Sovereign Mind = capability

Integrated, authenticated access to live tools and systems — ~200 MCP tools (Microsoft 365, Dropbox, Snowflake, Azure, Cloudflare, Tailscale, Asana, image/voice, dozens of LLM back-ends) exposed through one gateway. ABBI does not describe actions; it executes them against production accounts. "Sovereign" = we own the stack end-to-end rather than renting a black box.

Hive Mind = memory

A persistent, cross-session knowledge store. Every decision, bug, credential-registry fact, session and workstream is written once and recalled forever, so a new session boots already knowing the estate. Without it, each session would start blind.

Objective: give every ABBI session (a) the hands to do real work and (b) the memory to do it in context of everything that came before — with sub-millisecond recall, no external dependency at boot, and strict per-realm isolation so one org can never read another's memory.

"Sovereign Mind" is also a literal Snowflake database (SOVEREIGN_MIND) — the daily backup target for the admin Hive Mind. The platform and the database share the name; in this tab "Hive Mind" means the memory system and "Sovereign Mind" means the capability platform / its backup DB.

How it works

Hive Mind runs local-first (v10.0). Reads and writes hit a local SQLite file first; Snowflake is a once-a-day backup, not a live write path. This is what makes boot instant and offline-tolerant.

Claude Code session │ sm_write_local / sm_query_local / sm_search_local / sm_local_stats ▼ local-hive-mcp (MCP stdio server, better-sqlite3) │ ▼ ~/.abbi/hive-mind-local.db ← PRIMARY (SQLite + FTS5, <1ms reads) │ hive_mind · hive_fts · sync_queue · sessions │ ├─(A) touch ~/.abbi/sync-trigger ──► hivemind-sync-daemon.py │ rsync (5s debounce, +15min timer) ──► Node 1 abbi-ultra-1 │ /Users/abbi/.abbi/hive-mind-local.db │ └─(B) 02:00 daily sf-backup.sh ──► JSONL snapshot → Dropbox (7-day retention) 03:00 daily ──► push snapshot → SOVEREIGN_MIND (backup only) Boot: v9.1 replaces all 9 Snowflake boot queries with local SQLite reads. Credentials: NEVER stored locally — values stay in Snowflake MASTER_CREDENTIALS, only registry metadata (name/expiry/rotation) is cached locally.

Write path: sm_write_local inserts a row and touches ~/.abbi/sync-trigger; the sync daemon debounces 5s then rsyncs the whole DB to Node 1 (tailnet). Conflict resolution across peers is newest_wins, bidirectional. A separate cron pushes a daily snapshot to Snowflake for durable backup — deliberately not a real-time dual-write (decision 2026-04-06), which removed the old cloud-write race.

Technical specification & design

LayerTechnologyWhere in repo
Primary storeSQLite with FTS5 full-text index; virtual table hive_fts mirrors hive_mind via AFTER INSERT/UPDATE/DELETE triggersshared/scripts/seed-local-hive.py
Access layerMCP stdio server in Node.js using @modelcontextprotocol/sdk + better-sqlite3; inode-drift guard reopens the DB if the canonical file is moved/replaced mid-sessionshared/scripts/local-hive-mcp/index.js
Tools exposedsm_write_local, sm_query_local, sm_search_local (FTS5), sm_local_statssame server
Tailnet syncPython daemon, rsync over Tailscale to Node 1 (abbi-ultra-1); timer + event trigger, 5s debounceshared/scripts/hivemind-sync-daemon.py
Daily backupBash exporter → JSONL to Dropbox (7-day retention) + guarded push to Snowflake via migration-venv (snowflake-connector-python)shared/scripts/sf-backup.sh, shared/scripts/sf-push-snapshot.py
SchedulingmacOS LaunchAgents (KeepAlive/RunAtLoad + calendar)com.abbi.hivemind-sync-node1.plist, com.abbi.daily-snapshot.plist, com.abbi.local-hive-http.plist
Backup cloud (V200)Snowflake DB SOVEREIGN_MIND, schema V200_ADMIN_HIVE_MINDshared/scripts/migrate-sf-to-local.py

Local schema (SQLite)

Core table hive_mind: id, category, summary, details (JSON), priority, workstream, status, is_latest, version_num, source, source_mac, created_at/updated_at/synced_at/sf_synced_at, sync_status. Plus hive_fts (FTS5 over summary/category/workstream), sync_queue, and sessions.

Config caps (shared/config/hive-mind/sync-config.json): max_local_entries=10000, max_local_age_days=90, conflict_resolution=newest_wins, bidirectional, and the hard security rule credentials_never_local=true.

Sovereign Mind capability plane is delivered by the v200alb Cloudflare-Worker MCP gateway (X-API-KEY auth). The Snowflake tool fan-out reaches 5 accounts as admin: sm (IRA11585), hurricane (JGA82554), v2abbi (SXA84406), resolute (MLA96789), banner (KGB57253). See the naming standard for the auth per account.

Deliverables

  • A running local Hive Mind per node: ~/.abbi/hive-mind-local.db with FTS5 search, seeded from the latest JSONL snapshot.
  • Four MCP tools wired into every Claude Code session (sm_write_local / sm_query_local / sm_search_local / sm_local_stats).
  • Instant boot context — identity, app registry, workstreams, recent/critical entries, and credential-registry metadata loaded from local SQLite in <1ms (v9.1 boot).
  • Tailnet replication to Node 1 within seconds of each write; multi-peer newest_wins reconciliation.
  • Durable backups — daily JSONL snapshots in Dropbox (7-day retention) and a daily push into SOVEREIGN_MIND Snowflake.
  • Per-realm cloud Hive Mind schemas (below) giving each org its own isolated memory.

Implementation by realm

Local-first SQLite is the V200 admin pattern (runs on the shared Mac Studio). Per-org realms are self-contained off the Mac and use their own Snowflake account for memory, reached through their own gateway with row-level isolation.

RealmStatusHive Mind detail
V200 (admin / dev) Fully implemented Local SQLite primary (hive-mind-local.db) + rsync to Node 1 + daily Snowflake backup to SOVEREIGN_MIND.V200_ADMIN_HIVE_MIND (tables V200_HIVE_MIND, V200_IDENTITY, V200_APP_REGISTRY, WORKSTREAM_REGISTRY). Gateway sm account IRA11585.
V2 (MGC users) Fully implemented Snowflake account SXA84406, DB V2_ABBI_AI_WH. V2_ADMIN_HIVE_MIND plus per-user RLS-isolated schemas V2_<USER>_HIVE_MIND (e.g. V2_NYADAV_HIVE_MIND). Cloud-hosted, no local SQLite — gateway enforces caller-scoped reads/writes.
V20 (developer/admin tier) Fully implemented Own schema V20_ADMIN_HIVE_MIND (tables HIVE_MIND, SESSION_TRACKER, CREDENTIALS_METADATA) on JGA82554; per-user schema pointer for the v20admin (Raj = V2_NYADAV_HIVE_MIND). Hard-revoked from SOVEREIGN_MIND / V200_ADMIN_HIVE_MIND at both Snowflake role and gateway-denylist level.
Resolute Fully implemented Snowflake account MLA96789, DB RESOLUTE_MIND. RESOLUTE_ADMIN_HIVE_MIND + per-user RESOLUTE_USER_HIVE_MIND; 16 users provisioned with RLS isolation (gateway v1.7.x default-deny). Runs entirely in its own cloud/containers, nothing on the Mac.
Banner (portco) Partial Snowflake account KGB57253, BANNER DB (97 tables, D365 F&SC data) reachable via banner_sm_query_snowflake + banner-lc-gateway. A dedicated per-user session Hive Mind schema mirroring the Resolute pattern is not yet documented as provisioned.
MGC / future portcos Planned Per-org rollout template: each new org gets its own Snowflake account + <ORG>_ADMIN_HIVE_MIND / per-user schemas, one gateway dispatch entry, and one tool definition. Slated onto the Sovereign Control Plane (per-org Postgres/Qdrant) as it scales.
Isolation law: V200 must never share infra or credentials across realms, and never raw-INSERTs to the cloud hive during a live session — always sm_write_local. Per-org realms are self-contained off the shared Mac.

Development status

Live

  • Local SQLite Hive Mind + FTS5 + 4 MCP tools, on V200 admin nodes.
  • Boot v9.1: all 9 boot queries served locally; credential registry cached locally (values never local).
  • Tailnet rsync to Node 1 (event + 15-min timer) and daily JSONL + Snowflake backups.
  • Per-realm cloud hive schemas live for V200, V2, V20, Resolute.

In progress / watch-items

  • Banner per-user session Hive Mind schema (query access live; dedicated hive schema not yet documented).
  • Local peer set is small (leader Mac Studio 1556 + followers); one node marked offline in peers.json — verify current membership before relying on a given follower.
  • hivemind-cleanup LaunchAgent present but disabled (.plist.DISABLED); age/entry caps enforced via config, not an active pruning job on every node.

Planned

  • Sovereign Control Plane (ABBI.002.013): per-org Postgres + Qdrant memory as the multi-tenant substrate for up to 10k users, minimizing Snowflake/Azure dependency.
  • Per-org hive template applied to each new portco onboarded.

Source documents (Gitea)

local-hive-mcp/index.js seed-local-hive.py hivemind-sync-daemon.py sf-backup.sh hive-mind/sync-config.json hive-mind/peers.json migrate-sf-to-local.py v200-naming-standard.md

  • local-hive-mcp/index.js — the MCP stdio server: tool definitions (sm_*_local), better-sqlite3 wiring, inode-drift guard, credential-metadata boot queries.
  • seed-local-hive.py — canonical SQLite schema (hive_mind, hive_fts FTS5 + triggers, sync_queue, sessions) and JSONL loader.
  • hivemind-sync-daemon.py — tailnet rsync to Node 1; timer + sync-trigger event, 5s debounce.
  • sf-backup.sh — daily JSONL snapshot to Dropbox + guarded Snowflake push; the local-first backup, not dual-write.
  • sync-config.json — caps and rules: entry/age limits, newest_wins, credentials_never_local, backup timings.
  • peers.json — sync mesh membership (leader/follower Macs + tailnet IPs).
  • migrate-sf-to-local.py — maps the Snowflake V200_ADMIN_HIVE_MIND tables into the local schema.
  • v200-naming-standard.md — the 5-account Snowflake tool table (Sovereign Mind capability plane) and per-account auth.

Platform Architecture Fully implemented

What it is & why it exists

The v200 platform architecture is the request-and-routing plumbing that turns "an identity asking ABBI to do something" into "the right tool, on the right backend, for the right realm." It is deliberately lean: after years of overloaded many-MCP designs, the Architect ruled a single canonical shape — one MCP path dedicated to Snowflake, and a Cloudflare Worker that makes direct vendor-API calls to everything else, with an identity-aware realm-router in front so multiple realms can share one front-end without ever crossing data or credentials.

Objective: deliver every session a single, redundant, default-deny path to ~255 admin tools and to Snowflake (the backend of record and the Hive Mind backup) — with East-primary redundancy across regions and internet-egress paths so a regional or ISP outage can never sever the platform, and break-glass so the Architect can always get in.

Canon: the routing paths on this page are frozen by Architect ruling (2026-07-04, session de3a6344). No session may rebuild, delete, or re-route them without a new explicit ruling — this document exists because the infrastructure was repeatedly built, deleted, and rebuilt by successive sessions.

How it works

Every request enters through the realm-router, which reads the identity LibreChat injects (X-Abbi-Identity) and either forwards it to that realm's gateway with the realm's own auth, or returns DENY 403. The v200 (Architect) path goes to the Mac relay, which races Snowflake tools directly to the container fleet and dispatches everything else to the Cloudflare Worker.

identity (X-Abbi-Identity from LibreChat) → realm-router 100.86.225.119:8791 · DEFAULT-DENY │ ├─ v200 (jstewart@ / john@) → Mac relay :8080/mcp (X-API-KEY) ── 255 admin tools │ ├─ sm_* / hive → raced DIRECT to Snowflake fleet: E×3 → (W×3 + AWS λ×4) │ └─ every other tool → CF Worker v200-wrk-mcp-admin-gw-r74260eb │ ├─ ~34 tool families → DIRECT vendor-API calls (worker holds 23 secrets) │ └─ 8 heavier families → service containers (east-primary, _retryWest) │ ├─ v2 / v20 (MGC users) → v2 gateway mcp.abbi-ai.com (per-user Bearer, scoped tools + RLS) │ └─ unmapped identity → DENY 403

The relay is LaunchAgent com.abbi.v200-dmn-snowflake-mcp-relay-r74260eb (source v200/services/alb-relay/relay.js). The CF Worker's canonical source is v200/workers/mcp-admin-lb/index-admin.js; mcp-admin-lb is the legacy worker name (zero secrets) kept only until formally retired. v2 per-user keys are stored AES-256-GCM encrypted at rest and fail-closed on any decrypt error.

The three routing rules (Canon)

  1. Tools are direct calls through the CF Worker. The Worker holds the per-service secrets (23 bound) and calls each vendor API directly (~34 families: M365 native, Asana, DealCloud, GitHub, Vercel, ElevenLabs, Dropbox, Drive, OpenAI, Grok, …). It proxies only 8 heavier families (m365, vertex/gemini, dealcloud, sentinel, azcli, notebooklm, bedrock, mac-relay) to Azure containers.
  2. The load-balancer path carries ONLY Snowflake + core startup tools. v200-lb-mcp-admin-east → v200-gw-mcp-admin-east (TS_SF_BACKENDS = the six SF containers) — it is NOT the general tool path. Its /mcp now serves sm_* after the W3 catalog-fix (image ts-v200gw:v1.3.5-catalog-fix, pinned to sf-east-3 100.73.34.127).
  3. East is primary; West and AWS serve only on East failure. Worker layer: *_GATEWAY primaries hit the east twin, EAST_FALLBACK_HOSTS/_retryWest retries west on any non-OK response. Relay SF layer: SF_EAST_BACKENDS race first; SF_FALLBACK_BACKENDS (west + AWS Lambdas) race only on total east failure.

Technical specification & design

Gateway & routing layer

  • realm-router — Node.js transparent Streamable-HTTP MCP proxy on the tailnet, 100.86.225.119:8791, default-deny by identity, AES-256-GCM key store, SIGHUP config reload. Source: v200/services/realm-router/router.js.
  • Mac relay (alb-relay) — Node.js relay, 100.86.225.119:8080/mcp, auth X-API-KEY (not Bearer). Runs as a macOS LaunchAgent. Source: v200/services/alb-relay/relay.js.
  • CF Worker gateway — Cloudflare Worker (v200-wrk-mcp-admin-gw-r74260eb), deployed with Wrangler; 23 bound secrets; native handlers for ~34 tool families + container proxy for 8. Source: v200/workers/mcp-admin-lb/index-admin.js.

Backend fleet

  • Azure Container Apps — the Snowflake container fleet (v200-sf-east-1/2/3-r60ade5, v200-sf-west-1/2/3-r60ade5), the LB + gateway, the 8 service-tool container families, and the migrated control-plane / utility containers (cgate, opscol, procctl, qmscol; attachment-capture, cf-proxy, ediscovery, email-triage).
  • AWS Lambda — the AWS Snowflake leg: 4 Lambdas (account jga82554, 2× us-east-1 + 2× us-west-2). Architect ruling D2: Lambdas accepted as-is (no AWS containers needed).
  • Snowflake — the backend of record + Hive Mind backup; one account per realm (see grid below).
  • Tailscale — the private mesh binding every Mac, Ultra node, and container; regional exit nodes provide the internet-egress diversity. SF containers set HTTPS_PROXY=localhost:1055 → a Tailscale sidecar → exit node.
  • Conductor (LiteLLM) + Oracle — model-selection layer: LiteLLM on N1:4000, Oracle scoring against capability_matrix.db (32 models, 396 scores, 12 dims, ~11 free-local). Note (Architect ruling 2026-07-06): the Conductor belongs to the abbi-server realm, NOT any v200 request path — source abbi-server/conductor/.
  • Cloudflare — fronts the whole ALB (the "v200ALB"); Cloudflare Access enforces Microsoft SSO on the onboarding site.

Naming grammar: [realm]-[type]-[function][-ploc][-n]-r[hash], e.g. v200-sf-east-1-r60ade5 (container), v200-wrk-mcp-admin-gw-r74260eb (worker), com.abbi.v200-dmn-…-r74260eb (LaunchAgent). r[hash] = 7-char Gitea commit at deploy.

The Snowflake redundancy grid (9-connection design)

Redundant containers each serving a distinct purpose, all connecting to Snowflake, spanning regions AND internet-egress paths so a regional or ISP outage cannot sever Snowflake.

TierLocationFormRoleStatus
PrimaryAzure East3 SF containers (sf-east-1/2/3)All live traffic (raced first)Live
BackupAzure West3 SF containers (sf-west-1/2/3)Failover on total-east failureLive
BackupAWS4 Lambdas (2× us-east-1, 2× us-west-2)Failover only (verified SELECT 1)Live
Open item (W4): egress diversity is not yet fully realized — all six SF containers currently route the single east exit node v200-aze-exitnode (100.72.89.111). The west exit node v200-azw-exitnode-r47c4f604 is built but integration-pending; remediation = repoint the west SF containers' TS_EXIT_NODE to it.

Break-glass (always able to get in): Snowflake admin-persona containers v200-svc-sf-adm-e1/e2/w1/w2-r0461274 (snowflake-admin-mcp v4.0.0, V200_ABBI_ADMIN/ACCOUNTADMIN, 2E+2W, internal-only, off the load path by design) + Azure break-glass service principal v200-azure-mcp-svc-r3a864ea (appId 8fb1737f) with jstewart@ user context.

Deliverables

  • A single default-deny front door (realm-router) mapping identity → realm gateway for the shared app app.abbi-ai.com (LibreChat, ABBI-branded).
  • The canonical MCP path for v200: Mac relay :8080 (X-API-KEY) exposing ~255 admin tools with a direct raced Snowflake connection.
  • The CF Worker gateway: direct vendor-API access to ~34 tool families + container proxy for 8, secrets held at the edge.
  • The 9-connection Snowflake redundancy grid (Azure East ×3 · Azure West ×3 · AWS Lambda ×4), East-primary with automatic failover.
  • Break-glass tiers (Snowflake admin-persona + Azure SP) guaranteeing access during any primary-path outage.
  • A Tailscale mesh with regional exit nodes providing private connectivity and egress diversity.
  • Three canonical, frozen routing docs that every session measures current state against before changing anything.

Implementation by realm (gateway / routing coverage)

RealmStatusDetail
v200 Fully implemented Full admin path: realm-router (static supremacy for jstewart@/john@) → Mac relay :8080 (X-API-KEY) → 255 tools; direct raced Snowflake (account IRA11585) + CF Worker for all other tools.
v2 In beta realm-router → v2 gateway mcp.abbi-ai.com with per-user Bearer (AES-256-GCM encrypted keys) and scoped tools + Row-Level Security on account SXA84406. Beta cohort onboarded 2026-07-20.
v20 In beta Same realm-router → v2-admin gateway path as v2, admin-scoped within v20. Raj Yadav is the sole live V20_ADMIN; peer-provisioning path not yet exercised.
resolute Fully implemented Served by its own dedicated resolute-gateway worker (racing tools, RESOLUTE_MIND, account MLA96789), NOT through the realm-router. Source resolute/workers/resolute-gateway.
banner Data realm — no gateway Banner (MGC_BANNER) is a data realm only: Snowflake account KGB57253 (~2.37M rows, RAW/STAGING/CURATED/GOVERNANCE schemas), reached via the banner_sm_query_snowflake tool. No dedicated MCP gateway; a user-facing gateway is future work — the developers' mandate.
MGC / future portcos Planned New portco realms replicate the pattern: own Snowflake account + gateway entry in realm-config, added to the default-deny identity map. Server build (ABBI.312) is the intended prod substrate for scale.

Development status

LIVE now: realm-router (default-deny, static v200 supremacy), Mac relay :8080, CF Worker gateway (23 secrets, ~34 direct families + 8 container families), the full 9-connection Snowflake grid (E×3 · W×3 · AWS λ×4), both break-glass tiers, and the W3 fix so the LB gateway /mcp genuinely serves sm_*.

IN PROGRESS / open items: egress-diversity remediation (repoint west SF containers to the built-but-integration-pending v200-azw-exitnode-r47c4f604 — W4); west backup twins for the control-plane / Mac-migrated containers (D5); Tailscale service-tier end-state (service containers get internal-only ingress + TS sidecars).

PLANNED: a west admin LB/gateway backup leg (backup-only, D3+D5); the deprecation package for genuine pre-morph relics (unrouted per-service tool containers, superseded twins, sm-switch CF workers) — one at a time under the 300%-sure protocol; the dedicated server build (ABBI.312, DGX B200 + R760) as the prod substrate for up to 10,000 users.

Source documents (Gitea)

v200-intended-architecture.md tool-routing-architecture.md v200-container-inventory.md alb-relay/relay.js CF Worker index-admin.js realm-router/router.js abbi-server/conductor tailscale-onboarding.md
  • v200-intended-architecture.md — the "measure-against" spec: the redundancy grid, break-glass tiers, and the 6 Architect rulings (D1–D6).
  • tool-routing-architecture.md — the three frozen routing rules (Canon 2026-07-04) and deprecation candidates.
  • v200-container-inventory.md — what actually exists in the fleet (containers, LBs, gateways, exit nodes).
  • alb-relay/relay.js — the Mac relay :8080 source: X-API-KEY auth, staged Snowflake race, CF-Worker dispatch.
  • index-admin.js — the CF Worker gateway: native handlers, container proxy, EAST_FALLBACK_HOSTS/_retryWest.
  • router.js — the realm-router: identity → realm, default-deny, AES-256-GCM v2 key store.
  • abbi-server/conductor — LiteLLM (N1:4000) + Oracle model-selection (abbi-server realm, separate from the v200 path).
  • tailscale-onboarding.md — the mesh, exit nodes, and sidecar/egress model.

Infrastructure Projects Program LIVE

What it is & why it exists

The ABBI.001.x Infrastructure program is the platform layer that every ABBI realm and application runs on: the MCP gateway and tool relay, the Snowflake data accounts, the Hive Mind memory system, the container/networking fabric (Tailscale mesh, Azure Container Apps, Cloudflare Workers), the Change Gate governance system, and Gitea as source of truth. Everything else in the portal — the CLI, the consoles, the dashboards, the four portfolio realms — is a consumer of this layer.

Objective: provide a single, sovereign, governed substrate so that (a) one admin platform (V200) can build and operate infrastructure for every realm without sharing credentials across realms, (b) all changes are reversible and gated, and (c) source-of-truth lives in Gitea rather than on any one machine.

Realm separation (CANON): V200 can deploy for V2/V20/Resolute/Banner but NEVER shares their infra or credentials. Snowflake accounts, gateways, and warehouses are physically distinct per realm.

The ABBI.001.x project ledger (from folder_registry.json, v3.x)

Pills below reflect the registry active/archived status combined with known-live platform state — not a per-project runtime probe.

ABBI #ProjectRegistryStatusWhat it covers
001.001V200 PlatformactiveLiveAdmin platform, gateway, infra stability & maintenance
001.001-BV200/V2 Architecture SyncactiveIn progressPost-naming-wave traffic verify + registry sync for 73 new containers
001.002V2 SystemactiveLiveProduction multi-user system, V2 security & upgrades
001.003ABBI ServeractiveLiveLiteLLM + Mac Ultra local-first model server
001.004V20x PlatformactiveIn progressV20 developer/admin realm platform
001.005Infrastructure ContainersarchivedArchivedDocker / sidecar / blue-green (superseded)
001.006Hive MindactiveLiveLocal SQLite memory (primary) + Snowflake backup
001.007Session TrackeractiveLiveSession tracking & archive
001.008SnowflakeactiveLiveSF accounts (IRA11585, JGA82554, per-realm)
001.009Help Desk DaemonactiveIn progressHelp-desk automation daemon
001.010Dropbox SyncactiveIn progressDropbox ↔ workspace sync + conflict detection
001.011V2 User DashboardactiveIn progressV2 end-user dashboard
001.012TmuxactiveIn progressSession multiplexing / console orchestration
001.013SSO TailscaleactiveLiveTailscale mesh VPN + SSO access
001.014ABBI UniverseactiveLiveUniverse/realm numbering & registry backbone
001.015v200albactiveLiveAdmin load-balancer / MCP relay gateway
001.016v2 user onboardingactiveIn progressV2 user provisioning & RLS setup
001.017Developer OptimizationactiveIn progressDeveloper tooling & workflow optimization
001.018v200 toolsactiveIn progressAdmin MCP tool development
001.019change gatearchivedArchivedSuperseded by the live 3-layer ENFORCE gate
001.020infrastructure namingactiveIn progressNaming-standard grammar & rollout
001.021tmuxarchivedArchivedEarlier tmux effort (superseded by 001.012)
001.022v200 clean upactiveIn progressContainer / registry cleanup wave
001.023Azure Key Vault AdoptionactiveIn progressBreak-glass secrets migration to abbi-v200-kv
001.024v200HD Help DeskactiveLiveV200 help-desk service
001.025Mac 1556 syncactiveIn progressMac Studio 1556 SSE relay / key sync
001.026Infrastructure maintenanceactiveIn progressOngoing platform maintenance
001.027v200 improvementactiveIn progressContinuous platform improvement

How it works

Every session (CLI, console, or automation) speaks the MCP protocol to one canonical admin gateway over the Tailscale mesh. A relay splits traffic: memory/Snowflake calls race directly to Snowflake containers; everything else is routed through a Cloudflare Worker to native handlers or downstream Azure Container Apps. Authentication differs by realm — the V200 admin gateway uses X-API-KEY; the separate V2 user gateway uses Authorization: Bearer.

session ──► http://100.86.225.119:8080/mcp (Tailscale-direct · X-API-KEY) [CANONICAL] │ relay.js (v200-alb-relay) │ ├─ sm_* / hive_mind tools ─► Snowflake containers (east ×3 → west+lambda) │ IRA11585 (.data) · JGA82554 (.rows) │ └─ every other tool ───────► CF Worker v200-wrk-mcp-admin-gw-r74260eb ├─ native handlers (≈237 tools live) ├─ m365 ACA · vertex ACA └─ V2 USER gateway mcp.abbi-ai.com (Bearer)

Governance path: any canonical add/modify must carry a Gate-Token: commit trailer minted by the Change Gate on ALLOW; deletions need an HMAC delete-auth token. Gitea's server-side pre-receive hook (Layer 1) is in ENFORCE and rejects ungated pushes. Deployed files are copied to Gitea by the gitea-autocommit daemon, so Gitea is the source of truth while ~/.abbi/ is only a working copy.

Dual-tree, no auto-sync: editing the canonical Gitea source of a service does NOT change what runs until it is copied to the served path (~/.abbi/<svc>/), rebuilt, and restarted.

Technical specification & design

The concrete stack, all verified in the repo:

  • Protocol / gateway: MCP over a Node relay (relay.js, service v200-alb-relay) fronted by Cloudflare Workers (workers/mcp-admin-gateway-lb/index-admin.js, Wrangler-deployed).
  • Compute: Azure Container Apps for MCP backends (m365, vertex, Snowflake admin containers, Change-Gate v200-svc-cgate-east); Mac Studio + Mac Ultra fleet for local-first model serving.
  • Data / warehouse: Snowflake — multiple accounts by realm: IRA11585 (SOVEREIGN_MIND), JGA82554 (HURRICANE + MASTER_CREDENTIALS), SXA84406 (V2_ABBI_AI_WH), KGB57253 (Banner). Local SQLite powers the Hive Mind (primary) with Snowflake as backup.
  • Model routing: LiteLLM on Node 1:4000 (Conductor) selects models per task; ABBI Server (ABBI.001.003) hosts local-first models.
  • Networking: Tailscale mesh VPN with Azure exit nodes (v200-aze-exitnode 100.72.89.111) for egress; SSO via Cloudflare Access.
  • Source of truth / CI: Gitea (cloud primary 100.89.184.50:3300, repo abbi/abbi-infrastructure) with pre-receive gate hooks and the gitea-autocommit.py daemon.
  • V2 front-end: LibreChat (v2/services/librechat-v2) with a Snowflake MCP backend and Row-Level Security.
  • Secrets: local encrypted credential cache + Azure Key Vault (abbi-v200-kv) break-glass; naming grammar [realm]-[type]-[function][-ploc][-n]-r[hash].

Key directories: v200/services/ (30+ MCP services), v200/containers/, v200/infrastructure/{snowflake-rbac,credential-vault}, shared/services/change-gate/, shared/scripts/ (gitea/hive/sync daemons).

Deliverables

  • A canonical, Tailscale-direct MCP admin gateway exposing ~237 live tools with realm-correct auth.
  • Per-realm Snowflake accounts + warehouses with RBAC and RLS, wired to realm-scoped query tools (sm_*, hurricane_*, resolute_*, banner_*, v2abbi_*).
  • The Hive Mind memory system (local SQLite primary + Snowflake backup) with sync daemons.
  • The 3-layer Change Gate (CF Worker middleware, PreToolUse hook, filesystem watcher) plus Gitea server-side ENFORCE.
  • Gitea source-of-truth pipeline: autocommit, drift monitor, N1 mirror, 4-node backup.
  • Tailscale mesh + exit nodes and Azure Container Apps deployments for backend services.
  • Auto-generated inventories (containers, services, credentials) and the capability reference.

Implementation by realm

Which infrastructure serves which realm (evidence from staged verified facts + registry):

RealmStatusDetail
V200 (admin platform)LiveOwns the whole ABBI.001.x program: canonical gateway :8080, CF admin Worker, IRA11585/JGA82554 Snowflake, Hive Mind, Change Gate, Gitea. Builds for all other realms without sharing their creds.
V2 (production multi-user)LiveSeparate user gateway mcp.abbi-ai.com (Bearer), LibreChat front-end (v2/services/librechat-v2), account SXA84406 / V2_ABBI_AI_WH with RLS. ABBI.001.002 + 001.011 + 001.016.
V20 (developer/admin realm)Live · single adminRaj Yadav is the sole V20_ADMIN (verified on SXA84406). Windows console install-kit (v20/clients/install-kit/windows/), own hive-mind tree. Peer V20_ADMIN provisioning path untested. ABBI.001.004.
ResoluteLiveABBI.200.001 Resolute Infrastructure = 23 containers, LIVE; served by resolute_sm_query_snowflake; apps/workers in resolute/.
Banner (MGC_BANNER)LiveABBI.100.026 realm LIVE on account KGB57253: RBAC + ~2.37M rows across RAW_ORACLE_CASTLE / RAW_D365_FSC / RAW_D365_SALES / RAW_POWERTERM_NKS / STAGING / CURATED / GOVERNANCE. Served by banner_sm_query_snowflake.
MGC / future portcosPlannedOnboarding additional companies runs on the Sovereign Control Plane (ABBI.002.013): k3s + MinIO + per-org Postgres + Qdrant, namespace-per-org, CF Access SSO. Scaffold under construction; server build (ABBI.312) pending gate.

Development status

Live now

  • Canonical MCP admin gateway (~237 tools), Tailscale-direct with X-API-KEY.
  • Per-realm Snowflake (IRA11585, JGA82554, SXA84406, KGB57253) with the four realms above operational.
  • Hive Mind local-first SQLite + Snowflake backup; sync daemons running.
  • 3-layer Change Gate + Gitea server-side ENFORCE (cert 1783685058, 2026-07-10).
  • Tailscale mesh with EAST exit node v200-aze-exitnode (100.72.89.111).

In progress

  • V200/V2 architecture sync for 73 new containers (ABBI.001.001-B); container cleanup (001.022) and naming rollout (001.020).
  • West exit node + west admin LB built but not yet wired into index-admin.js ADMIN_GATEWAYS (integration-pending).
  • Azure Key Vault adoption for break-glass secrets (ABBI.001.023); credential value-cache gap on IRA11585 (36 creds missing, JGA82554 fallback).
  • Deploy dual-tree automation (deploy.sh, item D4) — canonical→served still manual.

Planned

  • Sovereign Control Plane (ABBI.002.013) for multi-org onboarding; dedicated server build ABBI.312 (DGX B200 + R760) as prod substrate for up to 10k users.
  • Capability-reference generator LaunchAgent (validate-against-live, fails on drift) — file currently hand-verified.
Known caveat: Change-Gate container v200-svc-cgate-east is single-replica — a hard dependency under ENFORCE (min-replicas≥2 recommended). Tailscale key STATUS can read ACTIVE while expired — check EXPIRES_AT.

Source documents (Gitea)

V200-CAPABILITY-REFERENCE.md — authoritative operational map: Snowflake tool→account/shape, gateway topology, credential decision tree, Change Gate, Tailscale.

tool-routing-architecture.md — how tool calls route through the relay and CF Worker to backends.

v200-intended-architecture.md — the canonical target topology for the V200 platform.

v200-naming-standard.md — single source of truth for the infrastructure naming grammar.

shared/services/change-gate/ — Change Gate service: authorize, delete-auth, break-glass, gate DB.

gitea-autocommit.py — daemon that copies deployed files into Gitea (source-of-truth pipeline).

v200/services/ — the 30+ MCP backend services (Snowflake, m365, cloudflare, dropbox, acis, and more).

docs/containers-inventory.md — auto-generated container inventory (ACA + QMS runner).

MiddleGround Capital Live business realm

What it is & why it exists

MiddleGround Capital (MGC) is the private-equity firm ABBI was built to serve. Everything on this tab is the business layer — the real portfolio-company, deal, IR, and firm-operations work — as opposed to the platform/infrastructure layers described in the other tabs. The MGC business universe occupies the ABBI.100–199 block of the FGS project registry (label “MiddleGround Capital”), plus a set of purpose-built applications and dashboards under the ABBI Applications block (ABBI.002.x).

Objective: replace ad-hoc, memo-driven investment work with a continuous, auditable, tool-assisted pipeline — so the deal team, FinOps, and the Managing Partner Office get early, evidence-cited signals on portfolio performance, deal flow, and LP/IR activity without hand-building every analysis.

The MGC universe is organized into five top-level project families in the registry:

ABBI.100 — Portfolio

27 subfolders: 18 portfolio companies (Pace, Stemmer, Banner, ALCO, AM Castle, ASI, DuraShiloh, HLC, IT8, Plasman, RWB, SCC, SixAxis, Starrett, SteelCraft, TPM, Volvo Cars, Moonshot) + Valuations, Portfolio Debt, Bonus Program, PortCo Data, Banner Data, Q1/Q2 Reviews.

ABBI.101 — Investments

Deal pipeline & BD: DealCloud BD, Project Cornerstone, Aerospace/Defense thesis, Investment Thesis, Amazon Container, Vertex Omni.

ABBI.102 — IR & Fund

LP management & fundraising: Europe Fund, European Industrial Investors, GFO Investor List, LP Relations DDQ, Preqin/PitchBook data, AGM ABBI presentation.

ABBI.103 — Operations

Firm management: Management Committee, MP Expectations, Board Meeting Prep, Q1/Q2 reviews, MGC 2.0 Strategy, Industrial Indicators, AGM slides/whitepaper, Master Controller.

ABBI.104 — Reporting

Cross-cutting reports: Weekly MPO Report, Investment Ops Meetings, MGC LLM Training Data, PE Industrial Survey, 2026 AGM, LPAC Meeting, and 104.007 Market Intelligence Pipeline.

Standalone MGC projects

ABBI.323 IR Dashboard, ABBI.324 Portfolio Company Monitoring, ABBI.355 Marketing Research, ABBI.359 Fund Raising, ABBI.360 Deal Flow Process, ABBI.361 Portfolio Intelligence System, ABBI.363 SPAC Research, ABBI.365 Value Stream Mapping, ABBI.370–382 (9-box, Make-vs-Buy, Attala Steel, Fund III LPA, TPS Manual, Deal Team Activities).

Registry authority: ~/.abbi/scripts/folder_registry.json (v3.3, universe_blocks → mgc: 100–199). The physical tree lives in Dropbox under MP.000 AI Projects/FGS/; each folder carries CV/, Needs Update/, and Archive/ per the FGS standard.

How it works

MGC business work flows through three layers: project folders (FGS, the source-of-record for every deliverable), skills (the codified analysis playbooks an operator invokes), and services (the always-on pipelines that keep data fresh and push reports out). A user — the Managing Partner, a deal-team member, or ABBI acting on their behalf — picks a project, invokes a skill, and the skill reads from the live data plane (Snowflake HURRICANE, DealCloud, Dropbox, M365) and writes branded deliverables back into the project's FGS folder.

MGC business request (deal / portfolio / IR / board / report) | v +------------------------------------------------------+ | FGS project folder (ABBI.1xx / ABBI.002.x) | | folder_registry.json -> physical_path in Dropbox | +------------------------------------------------------+ | operator invokes a codified skill v /portfolio-review /board-prep /mgcppt /mgc-whitepaper /pcweekly /mppriority /pacereport /dealcloud /persuasion | | | reads live data | writes deliverable v v +-----------------------+ +---------------------------+ | DATA PLANE | | OUTPUT (MGC-branded) | | Snowflake HURRICANE | | .pptx / .docx / .xlsx | | DealCloud (BD/deals) | | charts, memos, board deck | | Dropbox (FGS docs) | | -> back into FGS folder | | M365 (mail/cal) | | -> emailed via MS Graph | +-----------------------+ +---------------------------+ ^ | kept fresh by always-on services +------------------------------------------------------+ | ABBI.324 swarm workers | market-intel weekly job | | (financial decomp, lag | (Snowflake -> Claude -> | | fits, knowledge graph, | 8 charts -> .docx -> | | judge gate) -> HURRICANE| MS Graph sendMail) | +------------------------------------------------------+ | v ops.abbi-ai.com dashboard (Tailscale) surfaces status + market intel

Technical specification & design

The MGC business layer is built on the same sovereign stack as the rest of ABBI, wired to PE-specific data sources:

LayerTechnology (verified in repo)Where
Portfolio-monitoring service (ABBI.324)Python; per-subsystem modules (findecomp, lagcorr, capmatch, mdna, judge); adversarial judge gate; QMS durable worker runtimev200/services/abbi324/
Knowledge graphGraphiti on Neo4j AuraDB (temporal driver-map / entity resolution)v200/services/abbi324/knowledge-graph/
Data warehouseSnowflakeHURRICANE.MARKET_INTEL, iLevel financials, deals, ABBI324_LAG_FITSvia v200alb gateway (mcp-admin.abbi-ai.com/mcp)
Weekly market-intel report (ABBI.104.007)Python 3.12; Snowflake read → Claude synthesis → 8 charts → .docxMicrosoft Graph sendMail; Azure Container Apps Job (cron, Fri 5pm ET); secrets from Azure Key Vault abbi-v200-kv; output to Azure Blobv200/services/market-intel/
Ops / market-intel dashboard (ABBI.002.002)Next.js (TypeScript), better-sqlite3, libpq (Postgres Process Controller views), Snowflake via MCP; LaunchAgent on port 3200, Tailscale-onlyv200/apps/ops-dashboard/
Internal social (ABBIgram)Mastodon v4.3.2 (postgres:16, redis:7, web/streaming/sidekiq, nginx) via docker compose; Tailscale serve TLS; no federationv200/apps/mgc-social/
Deliverable generators (skills)python-pptx / python-docx / openpyxl; MGC brand constants (Aptos Display fonts, brand palette, logos)v200/skills/ (mgcppt, mgc-whitepaper, mgc-excel, mgc-charts, mgc-brand)
Deal / BD dataDealCloud (pipeline, deals, entries) via MCP dc_* tools; Preqin/PitchBook datav200/skills/dealcloud
Analysis playbooksSkill definitions: portfolio-review, board-prep, pcweekly, pacereport, mppriority, persuasion, fin-decomposition, lag-correlation, knowledge-graph, capability-match, mdna, swarm-workerv200/skills/, v200/services/abbi324/

Every numeric claim in an ABBI.324 output resolves to a real Snowflake table row and is re-verified through the blocking judge gate (schema check → citation resolution → numeric re-verification → narrative/number consistency → diverse-model adversarial review) before a human ever sees it.

Deliverables

What the MGC business layer actually produces:

  • Quarterly Portfolio Review (/portfolio-review) — annotated deck, one MGC-branded feedback whitepaper per company with deal-team questions, a consolidated Managing Partner Commentary memo, a portfolio Market Outlook memo, and TVPI/IRR/DPI return charts.
  • Board packages (/board-prep) — portfolio-company board decks, IC memos, and board-ready financial summaries built from deal-team data, DealCloud, and M365.
  • Weekly Market Intelligence Report (ABBI.104.007) — a .docx with 8 charts synthesized from HURRICANE market-intel + iLevel + macro + deals, emailed every Friday to the Snowflake-managed distribution list, archived to Azure Blob with a 30-day SAS link.
  • Weekly MPO / PortCo reports (ABBI.104.001, /pcweekly, /pacereport, /mppriority) — Managing Partner Office weekly rollups and per-company pace reports.
  • Continuous monitoring intelligence (ABBI.324) — financial decomposition variance bridges (price/volume/mix/cost), lead-lag indicator fits, temporal performance-driver maps, capability-to-opportunity matches, and MD&A narratives — all judge-gated and written to HURRICANE + Neo4j.
  • IR / fundraising artifacts (ABBI.102, ABBI.359) — LP DDQ responses, investor lists, AGM/LPAC materials, roadshow decks.
  • Firm-operations outputs (ABBI.103) — AGM slides & whitepaper, MGC 2.0 Strategy, Value Stream Maps, TPS Manual, Make-vs-Buy analyses.
  • Branded work product — MGC-styled PowerPoint (/PPT, /mgcppt), Word (/mgc-whitepaper), Excel, and charts, all enforcing MGC brand constants.

Implementation by realm

RealmStatusDetail
V200 Primary / live The Managing Partner's own realm (Mac Studio, 100.86.225.119). Home of the FGS registry, every MGC skill, ABBI.324 portfolio monitoring, the market-intel weekly job, the ops dashboard, and ABBIgram. All MGC business projects originate and run here.
V2 Multi-user, live w/ RLS Production multi-user MGC-staff realm via mcp.abbi-ai.com with row-level security (persona-based, L2_ADMIN vs USER). Beta cohort provisioned 2026-07-20 (rfisher, csmal/L2, shundley). MGC staff reach the business layer through V2, not V200.
V20 Dev/admin console Raj Yadav (nyadav@middleground.com) is the sole V20_ADMIN. Windows/Mac developer console (52-skill install kit incl. the MGC skills) for building/maintaining MGC apps. Peer-provisioning of a 2nd V20_ADMIN is untested (the onboarding gap being closed).
Banner Portco data realm live Banner Industries (ABBI.100.003) is an MGC portfolio company; its data realm MGC_BANNER (ABBI.100.026) is live — RBAC + ~2.37M rows across RAW_ORACLE_CASTLE / RAW_D365_FSC / RAW_D365_SALES / RAW_POWERTERM_NKS / STAGING / CURATED / GOVERNANCE, verified on KGB57253.
Resolute Separate portco Not part of the MGC business universe. Resolute is a distinct realm (ABBI.200.x, racing/Equibase, 23 containers) with its own infra and credentials under strict realm separation. Shares the platform, not the MGC data.
MGC staff / future portcos Onboarding path Additional MGC users and future portfolio companies are onboarded through V2 (multi-user) provisioned via the V2 admin gateway; the Sovereign Control Plane (ABBI.002.021) is the planned substrate for namespace-per-org scale-out.

Development status

Live

  • LIVE ops.abbi-ai.com dashboard (ABBI.002.002) — running under LaunchAgent com.abbi.v200-ops-dashboard on port 3200 (Tailscale-only), surfacing health, queue, market intel. Caveat: carries ~9 known display defects (root-cause e391a4ba) — treat display polish as under construction.
  • LIVE Weekly Market Intelligence Report (ABBI.104.007) — migrated off Node 1 to an Azure Container Apps Job; runs Fridays 5pm ET, emails via MS Graph.
  • LIVE ABBIgram internal social (Mastodon) — Tailscale-only, private, no federation.
  • LIVE MGC deliverable skills — portfolio-review, board-prep, mgcppt, mgc-whitepaper, mgc-excel, mgc-charts, persuasion; deployed to V200 and packaged into the V20 install kit.
  • LIVE Banner (MGC_BANNER) data realm — RBAC + ~2.37M rows, verified live.

In progress

  • IN PROGRESS ABBI.324 Portfolio Company Monitoring — multi-subsystem service (findecomp, lagcorr, knowledge-graph, mdna, capmatch, judge, workers); swarm workers + judge gate built; several subsystems iterating; compiled modules shipped in-checkout.
  • IN PROGRESS ABBI.361 Portfolio Intelligence System and ABBI.323 IR Dashboard — active project folders; no dedicated deployed app tree yet (delivered via skills/dashboards).
  • IN PROGRESS V2 multi-user MGC rollout — beta cohort onboarded; broad staff rollout gated on CLI/console hardening.

Planned

  • PLANNED Sovereign Control Plane (ABBI.002.021) — namespace-per-org substrate for MGC + future portcos at scale (Phase-1 devpolicy package complete; server build pending gate).
  • PLANNED 2nd V20_ADMIN peer-provisioning — the untested Raj-provisions-a-peer path (the immediate onboarding action item).

Source documents (Gitea)

abbi324/README.md — ABBI.324 portfolio-monitoring platform: subsystems, judge gate, swarm-worker runtime, Snowflake + Neo4j fit.

abbi324/knowledge-graph/ — Graphiti-on-Neo4j temporal knowledge graph (driver maps, entity resolution).

market-intel/README.md — ABBI.104.007 weekly report: Snowflake → Claude → 8 charts → .docx → MS Graph, as an ACA Job.

mgc_email_intel_pipeline.py — the IB email-scraping market-intel ingest pipeline feeding HURRICANE.MARKET_INTEL.

ops-dashboard/README.md — the Next.js ops + market-intel dashboard (ops.abbi-ai.com, port 3200, Tailscale).

mgc-social/README.md — ABBIgram (Mastodon) MGC internal social platform stack & operations.

skills/portfolio-review — firmwide quarterly Portfolio Review playbook & deliverable set.

skills/board-prep — portfolio-company board-package / IC-memo preparation skill.

Banner (AM Castle) — Your First Build Fully implemented

Banner is the proven per-portfolio-company data realm — the first of the MGC portco rollout and the exact template the two new developers replicate across the remaining ~14 portfolio companies. Everything below is verified against the canonical repo and the staged session facts.

What it is & why it exists

Banner (portfolio company AM Castle) is MiddleGround Capital's first dedicated, company-owned Snowflake data realm — project ABBI.100.026 ("Banner Data"). It was stood up 2026-07-10 and is LIVE: realm + RBAC + ~2.37M rows loaded from the company's real source systems.

The objective: each portco's data lives in its own Snowflake account — never commingled in MGC's shared Hurricane account (JGA82554). Ingestion feeds from the company's real sources (S3 exports + ERP/CRM connections), not routed through MGC infrastructure. Banner proved this pattern end-to-end so it can be repeated: it is now the canonical portco-realm-template and the /pc-realm-building playbook (both origin: ABBI.100.026 Banner / MGC_BANNER).

Realm-separation CANON: a portco realm is isolated by design — its own Snowflake account, data, RBAC, and credentials. MGC and the portco team each get scoped read access; ABBI provisions and operates; the Architect authorizes gated mutations. Build each new realm cleanly to this template.

How it works

A portco realm is one Snowflake account with a fixed shape: a single warehouse, one database, one RAW_ schema per source system, then conformed STAGINGCURATED layers, plus a GOVERNANCE schema for load control and audit. Data flows in from the company's own sources; MGC and the portco team read the curated layer.

Company source systems Banner Snowflake account (KGB57253.east-us-2.azure) ────────────────────────── ──────────────────────────────────────────────────── Oracle 11i Castle ERP ──S3 CSV──▶ RAW_ORACLE_CASTLE ┐ D365 Finance&SupplyChain ─Synapse▶ RAW_D365_FSC │ D365 Sales CRM ──────────Synapse▶ RAW_D365_SALES ├─▶ STAGING ─▶ CURATED ─▶ reads: Powerterm NKS ───────flat-file──▶ RAW_POWERTERM_NKS ┘ │ _MGC_READ (CURATED/STAGING) GOVERNANCE│ _TEAM_READ (CURATED) auth = KEY-PAIR / SNOWFLAKE_JWT (MFA-exempt) (lineage, watermark, audit) warehouse BANNER_WH (XSMALL, auto-suspend 60s, initially suspended)

Access is key-pair only: portco accounts enforce MFA and MFA can't be driven by any connector, so JWT key-pair is the only programmatic path (and is MFA-exempt). ABBI reaches the realm through the admin gateway's banner_sm_query_snowflake tool, which runs the SQL as ACCOUNTADMIN. Ongoing loads run as a scheduled ETL LaunchAgent (fsc_etl.py, daily 13:00).

Technical specification & design

The actual tech used to build and run Banner, verified in the repo:

LayerTechnology / concrete artifact
Data warehouseSnowflake — dedicated account MGC_BANNER, locator KGB57253, org MVSGJPV, region Azure East US 2. Connector identifier KGB57253.east-us-2.azure (bare locator 404s — region required).
Warehouse / DB / schemasBANNER_WH (XSMALL, auto-suspend 60s, auto-resume, initially suspended) · database BANNER · schemas RAW_ORACLE_CASTLE, RAW_D365_FSC, RAW_D365_SALES, RAW_POWERTERM_NKS, STAGING, CURATED, GOVERNANCE (PUBLIC dropped).
RBAC rolesBANNER_ADMIN (owns realm) · BANNER_LOADER (write RAW/STAGING) · BANNER_MGC_READ (SELECT CURATED/STAGING) · BANNER_TEAM_READ (SELECT CURATED). Hierarchy under SYSADMIN; grants include FUTURE tables/views.
AuthKey-pair / SNOWFLAKE_JWT (MFA-exempt). Private key ~/.abbi/secrets/mgc-banner-abbi-admin.p8 (PKCS8, perms 600). Public-key fingerprint on the user; to be secured to Azure Key Vault abbi-v200-kv as banner-admin-keypair.
ProvisioningPythonprovision_portco_realm.py (idempotent; snowflake-connector-python 4.4.0 in the conductor venv). Creates warehouse + DB + schemas + roles + grants in one run.
IngestionPythonboto3 (S3 pulls), csv+Sniffer (messy header sanitize), openpyxl (xlsx), write_pandas (PUT+COPY bulk load); Snowflake INFER_SCHEMA / CREATE TABLE USING TEMPLATE / COPY INTO … MATCH_BY_COLUMN_NAME for clean S3 CSVs.
Gateway toolCloudflare Worker admin gateway — banner_sm_query_snowflake defined in v200/workers/mcp-admin-lb/index-admin.js (generic handleAccountSF(..., "BANNER", "Banner SF (KGB57253)"); auth header X-API-KEY).
Scheduled ETLlaunchd LaunchAgent com.abbi.v200-sjob-banner-fsc-etl-r36385cc.plist → runs /Users/abbiadmin/banner-etl/fsc_etl.py daily at 13:00 (conductor venv python3).
The login-name gotcha (memorize this): the admin user's object name is V200_ABBI_ADMIN but its LOGIN_NAME is ABBI_ADMIN_V200 (a rename kept the old login_name). Authenticate with user="ABBI_ADMIN_V200"V200_ABBI_ADMIN fails with "JWT token is invalid" even though DESC USER shows your fingerprint. CURRENT_USER() still returns V200_ABBI_ADMIN.

Deliverables

What the Banner build produces — and what each new portco build must reproduce:

  • A dedicated Snowflake account (warehouse + database + RAW_/STAGING/CURATED/GOVERNANCE schemas + 4-role RBAC hierarchy).
  • Key-pair credentials secured by name (private key on disk 600 → Azure Key Vault entry <portco>-admin-keypair; source connections as <portco>-source-connections).
  • ~2.37M rows ingested from the company's real sources (Oracle Castle ERP, D365 FSC + Sales, Powerterm NKS) into RAW, conformed up through STAGING/CURATED.
  • A gateway query tool (banner_sm_query_snowflake) so ABBI can read the realm from chat, auth injected by the infrastructure.
  • A scheduled ETL job (LaunchAgent) keeping the FSC feed current.
  • Two reusable assets seeded from this build: the portco-realm-template (README + provision script) and the /pc-realm-building skill (5-phase onboarding playbook producing an inventory, an accounts list, an access/credentials matrix, and the provisioning + ingestion runbook).

Implementation by realm

Banner is the built reference; "implementation" for the other realms means how they relate to this per-portco-realm template.

RealmStatusDetail
Banner (AM Castle)Fully implementedRealm + RBAC + ~2.37M rows LIVE on KGB57253. The proven origin of the template and the /pc-realm-building playbook (ABBI.100.026). This is the developers' first build to study read-only, then replicate.
V200 (platform)Fully implementedOwns the template: provision_portco_realm.py, the admin gateway (mcp-admin-lb) that serves banner_sm_query_snowflake, the abbi-v200-kv secret store, and the /pc-realm-building skill. V200 provisions and operates every portco realm.
ResoluteFully implementedSibling realm on its own Snowflake account (MLA96789) — but the full product-realm pattern (dedicated app + gateway + tools + branding + scoped Dropbox + tailnet), a step beyond Banner's data-only realm. Reference for maturing a portco from "data in Snowflake" to "a product the company logs into."
V2 / V20N/A (different pattern)V2 ABBI (SXA84406) is the multi-user RLS platform, not a portco data realm; V20 is the admin-console tier. They consume the template's outputs (realm-router scoping) rather than being built by it.
Future portcos (~14)PlannedEach replicates Banner via the template — next named: Starrett (Athol), currently co-resident in Hurricane's OPS_DATA_PROJECT, to get its own MGC_STARRETT realm. Also tracked: ABBI.100.003 Banner Industries (divestiture project, separate from the data realm).

Development status

  • LIVE — Banner realm structure, RBAC, key-pair auth, ~2.37M rows from source, the banner_sm_query_snowflake gateway tool, and the daily FSC ETL LaunchAgent. Realm stood up 2026-07-10.
  • In progress — securing the Banner key-pair + source-connection secrets into Azure Key Vault (abbi-v200-kv); curated/dedup modeling continues to deepen on top of RAW.
  • Planned — replicating the template across the remaining ~14 portcos (Starrett → MGC_STARRETT next); the gated, separately-authorized final migration step is decommissioning each company's data out of Hurricane only after consumers confirm the new realm.
Migration order (do not skip a step): 1) structure → 2) secure creds → 3) ingest from source (S3 first) → 4) curated/dedup layer → 5) repoint feeds → 6) (gated) decommission from Hurricane. Live ERP/CRM pulls (D365/Synapse/Oracle) must be throttled — metadata/sample queries + small LIMITs only; portco IT warns a full live pull can crash production ERP.

Source documents (Gitea)

portco-realm-template / README.md provision_portco_realm.py /pc-realm-building SKILL.md project_mgc_banner_snowflake.md mcp-admin-lb / index-admin.js banner-fsc-etl LaunchAgent
  • README.md — the reusable per-portco-realm template: principle, standard structure, key-pair access steps, ingestion patterns, migration order, status (Banner done, ~14 to replicate).
  • provision_portco_realm.py — idempotent Python provisioner that creates the warehouse, database, schemas and full RBAC grant hierarchy for any portco.
  • pc-realm-building/SKILL.md — the 5-phase onboarding playbook (inventory → accounts → access/credentials matrix → provisioning → ingestion), origin ABBI.100.026 Banner.
  • project_mgc_banner_snowflake.md — the Banner connection facts memo: account identifier, the LOGIN_NAME gotcha, key path/fingerprint, and the working connect string.
  • index-admin.js — the admin gateway Worker that defines and routes banner_sm_query_snowflake (generic per-account Snowflake handler).
  • banner-fsc-etl plist — the launchd job that runs the daily Banner D365-FSC ETL into the realm.

Resolute Racing Fully implemented — production portco realm

What it is & why it exists

Resolute Racing is a real MiddleGround-adjacent Thoroughbred breeding & racing operation (Chelsey Stewart = CEO, John Stewart = Owner) and the first full product realm built on the ABBI platform. Where V200 is the dev/platform realm and V2 is the MGC multi-user realm, resolute is the reference implementation of a completely self-contained, single-tenant portfolio-company realm: its own Azure infrastructure, its own branded chat app, its own gateway, its own Snowflake account, its own Dropbox, and its own private tailnet — sharing no credentials or data with any other realm.

Objective: give one portfolio company a private, brand-styled AI assistant ("ABBI-Resolute") that answers over its own racing/breeding data and files, isolated per-user, reachable only inside the company's private network — and to prove the repeatable realm blueprint that future portcos will be cloned from.

Registry anchors (folder_registry.json): ABBI.200 Resolute (universe root) · ABBI.200.001 Resolute Infrastructure (the ~23-container ACA fleet) · ABBI.200.002 Resogram (social) · ABBI.200.003 Resolute App (the LibreChat build) · ABBI.367 DRF Data · ABBI.369 Beyer speed-figure reverse-engineering. All status active.

How it works

A Resolute user opens the Resolute-branded LibreChat app only over the Resolute Tailscale tailnet. LibreChat calls a single internal resolute-gateway that enforces per-user Row-Level Security, then fans out to backend MCP tools (Snowflake, Dropbox, M365, racing collectors, model backends). All data resolves to the Resolute-only Snowflake account.

 Resolute user (browser)
        │  Tailscale ONLY  (tailfb6577.ts.net)
        ▼
 resolute-librechat-rf9e55ef13   ← LibreChat v0.8.7, ABBI-Resolute persona
        │  internal ACA ingress
        ▼
 resolute-gateway-rf9e55ef13     ← ~309 tools aggregated + RLS
   ├─ _resolve_user / _enforce_isolation (overwrite user=caller)
   ├─ _filter_tools_by_persona  ·  _sql_guardrail (BLOCKED_SQL)
   └─ header inject X-User-Email / X-User-Persona
        │
        ├──► rslt-snowflake-mcp ──► Snowflake MLA96789 (RESOLUTE_MIND)
        │        (key-pair RSA auth, bypasses MFA)
        ├──► resolute-dropbox-mcp (CF Worker, service account)
        ├──► m365 / elevenlabs / openai / grok / make backends
        └──► racing collectors (Equibase → FlareSolverr → iProyal proxy)

 Backing stores (all in resolute-env, eastus):
   rslt-cosmos-mongo (MongoDB vCore, durable) · rslt-meili
   rslt-vectordb (pgvector/RAG) · rslt-rag-api
 Secrets: Azure Key Vault  resolute-kv  (via managed identity resolute-mi)

RLS note: the gateway ports V2's isolation model — a caller cannot read another user's mailbox or Hive Mind by passing a different identity; the user argument is force-overwritten to the authenticated caller for m365/dropbox/drive, personas filter the visible tool set (USER drops github, ADMIN keeps all), and Hive Mind reads/writes are stamped/filtered by USER_ID=caller.

Technical specification & design

App layer — Resolute LibreChat (ABBI.200.003)

  • LibreChat v0.8.7 (upstream, node:24-alpine), image sovereignmindacr.azurecr.io/resolute-librechat:v2.x, container resolute-librechat-rf9e55ef13.
  • Config librechat.resracing.yaml baked in as /app/librechat.yaml (env vars are not expanded in the mcpServers block — URLs hardcoded). App binds port 8080 (not LibreChat's default 3080) so the ts-sidecar can proxy; ENV HOST=:: for dual-stack.
  • Branding = real Resolute Racing assets (royal blue #2050A0 + white wordmark); APP_TITLE=Resolute. Frontend recompiles need a CACHEBUST build-arg (az acr build --no-cache is unsupported and fails silently).
  • Persona ABBI-Resolute, realm-bounded — no MiddleGround / DealCloud / Asana access.

Gateway — resolute-gateway (Python)

  • Container resolute-gateway-rf9e55ef13, internal ingress only. Aggregates ~309 MCP tools (peaked ~349; catalog trimmed 323→245 after retiring dead backend families). Self-healing catalog (v1.7.6) survives restarts with no manual /refresh.
  • Image lineage: v1.6.1-cortex (Cortex Analyst text-to-SQL era) → v1.7.0-rlsv1.7.6-rls (self-healing) → v1.8.0-native-pilot (native-handler dispatch, no backend container in path for github family).

Data — Snowflake MLA96789

  • Account mvsgjpv-resolute (MLA96789), DB RESOLUTE_MIND, warehouse RESOLUTE_AI_WH. Schemas: RACING_DATA (~1,118,820 horses), RESOLUTE_ADMIN/CS/USER_HIVE_MIND, SESSION_TRACKING.
  • Auth = RSA key-pair only: RESOLUTE_ADMIN has MFA enforced so password auth fails (error 250001); the resolute-admin-rsa-private-key secret (base64 PEM) in vault resolute-kv bypasses it. Dedicated rslt-snowflake-mcp (image snowflake-admin-mcp:v4.1.1) is the only backend with key-pair support; wired as gateway slot 3, exposing snowflake_sm_query_snowflake (params: database, sql).

Files, storage, network

  • Dropbox: resolute-dropbox-mcp Cloudflare Worker (permanent service account; token in resolute-kv/resolute-dropbox-token; default member john@resracing.com).
  • Backing stores (all in resolute-env, eastus): Azure Cosmos DB for MongoDB vCore rslt-cosmos-mongo (M30, server 7.0, durable), rslt-meili (search), rslt-vectordb (pgvector/RAG), rslt-rag-api.
  • Network: separate Resolute Tailscale account/tailnet (tailfb6577.ts.net); every service is internal-ingress + Tailscale-only (ops dashboards flipped external→internal).
  • Racing collection: Equibase scraper → FlareSolverr (3 replicas) → iProyal residential proxy; migrated to Azure ACA (Colima VM freed, Mac reduced to a residential-proxy relay); pedigree engine v4.
  • Cloud stack: Azure Container Apps (RG resolute-infra-rg), Azure Container Registry sovereignmindacr, Azure Key Vault + managed identity, Cloudflare Workers, Snowflake, Tailscale.

Deliverables

  • A production, Resolute-branded LibreChat assistant (ABBI-Resolute) reachable Tailscale-only by resracing.com users.
  • Per-user RLS-enforced gateway aggregating ~245–309 MCP tools over Resolute's own data.
  • A live racing/breeding data warehouse in Snowflake (RESOLUTE_MIND, ~1.12M horses) with key-pair auth.
  • An Azure-hosted Equibase/pedigree collection engine feeding the warehouse.
  • A scoped Dropbox service account for the realm's files.
  • A cross-realm admin query tool resolute_sm_query_snowflake exposed to the V200 admin gateway (MLA96789 / RESOLUTE_ADMIN).
  • The repeatable single-tenant portco realm blueprint (infra + gateway + branded app + isolation) for future portfolio companies.

Implementation by realm

Resolute is itself a realm; this table assesses which realms implement the full single-tenant "product realm" pattern that Resolute defines.

RealmStatusDetail
ResoluteLiveThe realm itself — full pattern: resolute-infra-rg ACA fleet (~23 containers), branded LibreChat v0.8.7, resolute-gateway w/ RLS, Snowflake MLA96789, resolute-kv, scoped Dropbox, own tailnet.
V200LivePlatform/dev realm that built and operates Resolute. Holds admin access via resolute_sm_query_snowflake in mcp-admin-lb/index-admin.js (MLA96789 / RESOLUTE_ADMIN, JWT key-pair). Never shares infra/creds with Resolute (realm separation).
V2Analogous, not a portcoMGC multi-user production realm — same architectural DNA (own gateway, own Snowflake SXA84406, per-user RLS that Resolute's RLS was ported from) but serves MGC staff, not a single portfolio company.
V20N/A (client realm)Windows-console client realm (Raj, sole V20_ADMIN). A front-end onto the platform, not a self-contained ACA product realm; no LibreChat fleet of its own.
BannerPartial — data realm onlyPortco data realm (MGC_BANNER, Snowflake KGB57253, ~2.37M rows, RBAC + curated schemas) is Live, but has no branded LibreChat app / dedicated ACA gateway of its own yet.
Future portcosPlannedResolute is the template to be cloned per new portfolio company as onboarding scales (server build, ABBI.312).

Development status

LIVE:

  • Resolute LibreChat app in production, Tailscale-only (~4.5 min ready window after any restart — 502s during that window are normal).
  • resolute-gateway with per-user RLS + self-healing catalog; native-handler pilot proven for the github family.
  • Snowflake RESOLUTE_MIND data path via key-pair auth (verified: SELECT COUNT(*) FROM RACING_DATA.HORSES → 1,118,820).
  • Durable accounts on Cosmos DB MongoDB vCore (survive app restarts).
  • Dropbox permanent service account (verified upload).
  • Racing/pedigree collection running from Azure ACA (Mac freed to a proxy relay).

IN PROGRESS:

  • Gateway lean-out — Waves 1–2 done (dead backend families disabled + scaled to zero, catalog 323→245); Waves 3–4 (further scale + container retirement) pending separate authorization.
  • Residential-egress throughput is the hard ceiling on the pedigree engine (single Mac line, ~4% failure edge).
  • Hive-Mind-specific gateway tools — currently reached via raw SQL through snowflake_sm_query_snowflake (open follow-up).

PLANNED / PENDING:

  • M365 OIDC SSO for the app (currently local resracing.com accounts, no SSO).
  • Canonicalizing the gateway app.py (source not yet committed to this working copy — only __pycache__ present).

Source documents (Gitea)

reference_resolute_librechat_infra.md — canonical build reference: app image, gateway/Snowflake MCP architecture, key-pair auth, backing stores, users, build gotchas.

resolute-dropbox-mcp/index.js — the scoped Dropbox Cloudflare Worker (service-account impersonation, X-API-KEY auth).

resolute-dropbox-mcp/wrangler.toml — Worker config: resolute-kv secret sourcing, default member john@resracing.com.

mcp-admin-lb/index-admin.js — V200 admin gateway that adds resolute_sm_query_snowflake (MLA96789 / RESOLUTE_ADMIN, JWT key-pair).

All-account Snowflake gateway (change log) — how the 5 Snowflake accounts (incl. Resolute MLA96789) were wired for admin query access.

Resolute self-healing gateway v1.7.6 (change log) — self-healing tool catalog + locking ops dashboards to Tailscale-only.

resolute-social (Resogram) README — the ABBI.200.002 social pipeline for Resolute Racing.

equibase-clone service README — the racing-data collection/clone service feeding RESOLUTE_MIND.

resolute-racing-proxy.py — the residential-proxy relay used by the Equibase/pedigree collectors.

Not in this working copy: the LibreChat build tree (resolute/apps/resolute-librechat/) and business canon (resolute/canon/) are referenced by the canonical memory doc but live in the FGS CV/ build folder and the Azure ACR image, not the checked-out repo; the gateway app.py exists as a container image but its source is not yet committed here (only __pycache__).

Served at onboarding.abbi-ai.com behind Microsoft SSO (Cloudflare Access), allow-list = Architect + the 2 developers, default-deny.

Master Design & Mgmt System Design + partial build

What it is & why it exists

This is the meta-system that governs who exists on the platform and what they can reach — the design and machinery that manages users, realms, and organizations rather than any single application. It is not one product; it is three layered design efforts plus the live routing service that enforces them:

ABBI Master Design Active

ABBI.002.008 — the umbrella architecture that federates the three realms (V200 admin / V2 multi-user / V20x orchestration) into one governed picture. Keeper-confirmed 2026-07-07; legacy workspace archived at ABBI.003.017.

Organization Master Design In progress

ABBI.368 — reframes v2/v20/v200 from MGC-only labels into a GLOBAL org+realm taxonomy: V200 = supreme, each org = a v2 (user) + v20 (dev/admin) pair, shared services provisioned per org.

Sovereign Control Plane Design / UC

The "Master Control System" — one Snowsight-style console that would administer every org, user, app, container, model, credential and data store from a single self-hosted substrate. Phase-1 design complete; substrate not yet built.

Objective: collapse today's separate, per-realm admin surfaces (ops dashboard, Change Gate UI, helpdesk, Gitea browsing, V2 user dashboard) into a single sovereign control plane that can onboard organizations and scale user management to thousands of users across MGC, Resolute, Banner and future portcos — with per-org data/credential/billing isolation and default-deny cross-org access.
Numbering note (verified): the FGS registry (folder_registry.json) currently maps ABBI.002.013 to Process controller (migrated 2026-06-18). The Sovereign Control Plane Phase-1 package (dated 2026-06-07, filed under ABBI.002.008 Master ABBI Design) titles itself "ABBI.002.013 Sovereign Control Plane" — the 002.013 number was reassigned after that package was written. On this page SCP is treated as a Master-Design design artifact, not a shipped 002.013 system.

How it works

The taxonomy is enforced today by a live tailnet-side realm-router (router.js). LibreChat / the CLI inject the caller's identity (X-Abbi-Identity = user email); the router resolves that identity to a realm and proxies the MCP request to that realm's gateway, injecting the realm's auth. Anything unmapped is DEFAULT-DENY.

End user (browser / CLI) | Cloudflare Access (Microsoft / Google SSO + MFA) <-- no Tailscale needed on user device | LibreChat "ABBI Chat" / ABBI CLI injects X-Abbi-Identity = {email} | +----------------- realm-router (router.js, :8791) -----------------+ | resolveRealm(identity) DEFAULT-DENY if unmapped | +---------+------------------+------------------+-------------------+ | | | jstewart@ -> v200 mapped -> v2/v20 (resolute wired /hive route X-API-KEY to per-user Bearer in a later wave) (v200-ONLY) -> 100.86.225.119:8080 to mcp.abbi-ai.com local Hive Mind [255 admin tools] [scoped tools, RLS] 127.0.0.1:3456

The Organization Master Design generalises this per organization: each org owns separate accounts for every service (M365, Asana, Snowflake, tools) and its own Cloudflare gateway + Tailscale instance; the shared layer (LibreChat, CLI, Cloudflare, Tailscale) is provisioned per org, not co-mingled. V200 supreme can reach every org but only through an explicit, audited, default-deny grant per realm, with every cross-org hop logged.

V200 — supreme
cross-org, JS only
org v20 — dev/admin
(MGC / Resolute / Banner)
org v2 — users
M365 SSO + RLS
shared services
LibreChat · CLI · CF · Tailscale

Technical specification & design

The built pieces and the designed substrate use distinct stacks:

Live enforcement layer (built)

  • realm-router — Node.js HTTP proxy (node:http/https/crypto), a transparent Streamable-HTTP MCP proxy that preserves transport and injects each realm's auth. Binds the Tailscale IP 100.86.225.119:8791. File: v200/services/realm-router/router.js.
  • Credential handling — v2 per-user keys are stored encrypted at rest (AES-256-GCM) in v2-keys.enc, decrypted at load with a 32-byte file key (~/.abbi/secrets/abbi-credential-key), re-decrypted on SIGHUP; fail-closed (no resolvable key = deny).
  • Runs as a macOS LaunchAgent, com.abbi.abbi-dmn-realm-router.plist (KeepAlive, env-driven bind host/port).
  • Shared appLibreChat image abbi-librechat:v0.8.7-abbi-brand3 on Azure Container Apps (abbi-svc-librechat-east), MongoDB backend, per-user MCP via X-Abbi-Identity={{LIBRECHAT_USER_EMAIL}}. Identity/persona sync in persona-sync.py.
  • Edge / identity — Cloudflare Access (Microsoft/Google SSO), CF Workers + Tunnels; Tailscale demoted to backend-only (router → realm data planes, operator CLI).

Model routing — Conductor (built)

Conductor is the benchmark-driven model-routing brain: LiteLLM proxy on N1 (100.87.243.54:4000) with Conductor middleware selecting the model per task from a multi-model competition (local GLM/Qwen + cloud Anthropic/Google/OpenAI/Grok/Bedrock/DeepSeek), benchmark refreshed weekly. The Master Control System is designed to own this as the add/remove/route registry for AI models per org.

Sovereign Control Plane substrate (designed, not yet built)

  • k3s cluster on a dedicated server (ABBI.312: DGX B200 + R760), one namespace per organization; Azure kept only as thin DR/burst.
  • Self-hosted sovereign data platform: MinIO (object store) + per-org PostgreSQL + Qdrant (vectors); Snowflake demoted to an optional per-org connector.
  • Cloudflare Access (SSO+MFA) gating a Snowsight-style web console + API; centralized credential lifecycle referencing values by [Bracketed_Name], never exposing them.

Phase-1 design artifacts (D1–D6 + Sovereign_Control_Plane_Architecture.drawio + a sovereign-console-mockup.html) live under ABBI.002.008 Master ABBI Design.

Deliverables

  • realm-router servicerouter.js + com.abbi.abbi-dmn-realm-router.plist (LIVE; identity → realm proxy, default-deny, encrypted v2 key store).
  • Shared ABBI-LibreChat app (Option B) — stock LibreChat v0.8.7 + official ABBI branding + per-user realm-router + v200-only local Hive Mind context; deployed & verified live 2026-07-18 (revision 0000016).
  • Organization Master Design taxonomy — the global org/realm model + Architect rulings (grandfather MGC to bare v2/v20; Raj = cross-org v2/v20 authority; v200 cross-org default-deny) captured in the design memo and the v200-naming-standard.md.
  • Sovereign Control Plane Phase-1 /devpolicy package — D1 infrastructure spec, D2 built-vs-to-complete, D3 Snowsight design spec, D4 autonomous production setup, D5 devpolicy execution plan, D6 tooling/build, architecture draw.io + console mockup.
  • Process Controller (PE) — the automated restart/remediation brain (ABBI.002.013 / ABBI.003.001 umbrella), container v200-svc-procctl-east, currently PE_DRY_RUN=1 pending the I1 FALSE-RESTART fix.

Implementation by realm

RealmStatusDetail
V200LiveSupreme realm. realm-router routes jstewart@/john@ statically to the local v200 relay (100.86.225.119:8080, X-API-KEY, ~255 admin tools) + v200-only /hive to the local Hive Mind. Sole authority = John Stewart.
V2Live (UAT)Multi-user MGC realm. Per-user Bearer keys (AES-256-GCM at rest) proxied to mcp.abbi-ai.com with row-level security + per-user Snowflake schema. Beta cohort onboarded 2026-07-20 (rfisher, csmal/L2, shundley).
V20PartialDeveloper/admin realm. Raj Yadav (nyadav@middleground.com) is the sole V20_ADMIN; the peer-provisioning path (a V20_ADMIN provisions a peer V20_ADMIN) is designed but never yet exercised — it is the gating test for the 2nd developer.
ResolutePlanned in routerTaxonomy defines resolute-v2/v20; the realm-router backendForRealm() reserves a resolute case "wired in a later wave" — not yet routed. Resolute infra (ABBI.200.001, 23 containers) is otherwise live but outside this router.
BannerPlannedBanner (MGC_BANNER, ABBI.100.026) exists as a live Snowflake realm, but has no dedicated v2/v20 org-router entry yet. Taxonomy names banner-v2/v20 for future onboarding.
MGC / future portcosUnder constructionMGC = default/home org (implicit prefix). The Sovereign Control Plane is the intended surface to onboard future portfolio companies at scale; substrate (k3s + MinIO + per-org Postgres + Qdrant on ABBI.312 server) is designed but not built.

Development status

Live now

  • realm-router enforcing identity→realm routing with default-deny + encrypted v2 key store (Wave 2 verified 2026-07-14; OBJ-02 D4 encryption landed).
  • Shared ABBI-LibreChat (Option B) deployed & verified 2026-07-18; v200 in-app render pending John's own sign-in.
  • Conductor (LiteLLM on N1:4000) routing across the model competition.

In progress

  • Organization Master Design — taxonomy SPAWNED, awaiting Architect confirmation of sequencing; Tailscale decomposition (V200 supreme tailnet + one tailnet per org) is its own un-started migration workstream.
  • Process Controller PE still in PE_DRY_RUN=1 (I1 FALSE-RESTART bug) — decisions logged, not executed.
  • V20 peer-provisioning (2nd developer as V20_ADMIN) — untested path, blocking broad dev onboarding.

Planned

  • Sovereign Control Plane substrate — k3s + MinIO + per-org Postgres + Qdrant on the dedicated ABBI.312 server (Phase-1 /devpolicy package complete; server build pending gate). Target: manage all realms + all 4 portcos + future onboarding at up to ~10,000 users.
  • Resolute + Banner realm-router cases wired in later waves.

Source documents (Gitea)

realm-router/router.js — the live identity→realm MCP proxy: resolveRealm, backendForRealm, AES-256-GCM v2 key store, default-deny, v200 /hive route.

com.abbi.abbi-dmn-realm-router.plist — the LaunchAgent that runs the router (bind host/port env, KeepAlive).

project_organization_master_design.md — the ABBI.368 global org/realm taxonomy + Architect rulings (naming, Raj cross-org authority, v200 default-deny).

project_abbi_librechat_multitenant_architecture.md — the per-org LibreChat + dedicated gateway pattern and the mandatory gateway caller-auth rule.

368 shared-app Option-B COMPLETE — the verified deploy record for the branded ABBI-LibreChat with per-user realm-router + v200 local-hive context.

v200-naming-standard.md — the realm/org naming standard the taxonomy updates (v200-* supreme, abbi-* shared services, org prefixes).

process-controller/README.md — the Process Controller / Progression Engine (ABBI.002.013 umbrella): restart + remediation brain, currently PE_DRY_RUN=1.

folder_registry.json — the FGS registry of record for ABBI.xxx numbering (source for the 002.008 / 002.013 / 368 mappings noted above).

Apps & Dashboards Mixed — several live, several under construction

What it is & why it exists

This tab is the honest, current inventory of every user-facing application, operator dashboard, and source-of-truth system running across the estate today — what it does, where it lives, which realm it serves, and its real status (live, partial, disabled, or under construction). Nothing here is aspirational: if a thing is a scaffold or turned off, it says so.

Objective: give the two new stack developers a single map of "what is actually running and who it is for", so they know which surface to open for a task, which systems are authoritative (never edit around them), and which apps are safe to touch versus deliberately frozen.

Two rules to internalize before you touch anything here: (1) Gitea is the source of truth — the trees under v200/apps/, v2/apps/, resolute/apps/ are canonical; the deployed copies under ~/.abbi/… are working copies. (2) Most dashboards are Tailscale-only — a public FQDN returning 404 is by design, not an outage.

How it works

Apps fall into four delivery patterns. Web apps are fronted by Cloudflare (Pages or a CF Tunnel) with Cloudflare Access (Microsoft SSO) for anything user-facing; operator dashboards bind to the Tailscale IP only; container apps run on Azure Container Apps; and long-running local services run as macOS LaunchAgents on the Mac Studio (100.86.225.119) or Docker Compose stacks.

USER SURFACES OPERATOR SURFACES --------------------------- ----------------------------- app.abbi-ai.com (ABBI LibreChat) ops.abbi-ai.com (Ops Dashboard) CF Tunnel + Access SSO Next.js :3200, Tailscale-only V2 / V20 beta users multi-realm health/queue view | | resolute-librechat (Resolute app) Sovereign Control Plane (scaffold) ACA + Tailscale, LibreChat Next.js app/ tree, not yet wired | | ABBIgram / Resogram (Mastodon) Resolute ops dashboards Docker Compose, Tailscale-only ACA, external=false (TS-only) | | abbi-onboard (Tauri desktop) v2-user-dashboard (python :8899) Win x64 + macOS installers static, Tailscale-bound ========================================================================= SOURCE OF TRUTH (authoritative, never edit around): Gitea 100.89.184.50:3300 · Hive Mind (local SQLite -> Snowflake) Azure Key Vault (secrets) · Snowflake (SOVEREIGN_MIND / HURRICANE / realm DBs)

Each web surface enforces default-deny: an unauthenticated request to onboarding.abbi-ai.com or app.abbi-ai.com returns HTTP 302 to sovereignmind.cloudflareaccess.com, not the app. Operator dashboards simply have no public route at all.

Technical specification & design

The concrete stack actually used across these apps, verified in the repo:

LayerTechnologyWhere it shows up
Web dashboardsNext.js (App Router, TypeScript), better-sqlite3, libpqv200/apps/ops-dashboard/, sovereign-control-plane/app/
Chat appLibreChat (Docker image resolute-librechat:v3.4.5-gwauth), Cosmos-Mongo, Azure Container Appsapp.abbi-ai.com, resolute-librechat
SocialMastodon v4.3.2 (web + streaming + sidekiq), Postgres 16, Redis 7, nginx — Docker Composev200/apps/mgc-social/, resolute-social/
Desktop appTauri (Rust) + React/TypeScript/Vite, native keychain (keyring crate)v200/apps/abbi-onboard/
Meeting listenerStatic HTML PWA + Vercel serverless functions (Node), Deepgram, Recall.aiv200/apps/abbi-202-meeting-listener/
Static portalSingle-file HTML on Cloudflare Pages behind CF Accessv200/apps/onboarding-portal/index.html
Data / probesPostgres (Process Controller views), SQLite (opscore.db, hive-mind-local.db), Snowflake via MCP gatewayops-dashboard api/ routes, control-plane api/pc-dag
Delivery / edgeCloudflare Pages + Tunnel + Access, Tailscale, Azure Container Apps, LaunchAgents, Docker Composeall of the above

Named files that matter: ops-dashboard route handlers (snapshot-route.ts, realm-health-route.ts, queue-route.ts, acis-route.ts, market-intel-route.ts, shared read-only pg-config.ts); the control-plane's app/control-center/page.tsx (five-tab UI) and app/api/pc-dag/route.ts; the Resogram automation services inbound/email_router.py (SMTP :2525) and pipelines/pipeline_watcher.py; and the Tauri desktop config under abbi-onboard/src-tauri/.

Deliverables

Concrete outputs this app surface produces:

  • ops.abbi-ai.com — one read-only pane of estate health: process/service status, QMS session queue, three-realm health (V200/V2/V20x), ACIS security findings, Hurricane market intel, local app/daemon inventory. Port 3200, Tailscale-only.
  • app.abbi-ai.com — the shared ABBI chat app (LibreChat) that real V2/V20 beta users log into via Microsoft SSO.
  • resolute-librechat — the Resolute realm's own chat app instance (gateway-auth build), plus Resolute's Tailscale-only ops dashboards.
  • abbi-onboard installers — signed Tauri desktop app: Windows x64 NSIS installer + macOS ARM64/Intel DMGs (via GitHub Actions CI).
  • ABBIgram / Resogram feeds — private Mastodon timelines for MGC (internal) and Resolute Racing (org + per-horse accounts, driven by email + file-drop).
  • onboarding.abbi-ai.com — this very portal (static, SSO-gated, default-deny allow-list).

Implementation by realm — which app serves whom

RealmStatusDetail
V200 (admin/platform) Partial Ops Dashboard live at ops.abbi-ai.com (:3200, Tailscale-only) with a known display-drift caveat; onboarding portal live; Sovereign Control Plane scaffold; abbi-onboard installer; ABBI.202 meeting listener on Vercel.
V2 (multi-user prod) Fully implemented Shared ABBI app app.abbi-ai.com — real beta users rfisher, csmal (L2), shundley onboarded 2026-07-20 on the real V2 account, RLS + CF Access enforced. v2-user-dashboard static page served on :8899 (Tailscale).
V20 (Raj / dev) Fully implemented nyadav (Raj) uses app.abbi-ai.com as V20_ADMIN; abbi-onboard Windows x64 installer is his client path. Peer-provisioning of a 2nd V20_ADMIN is untested (see v20 Onboarding tab).
Resolute Fully implemented Resolute LibreChat app (resolute-librechat:v3.4.5-gwauth, ACA) + Resogram social (resogram.abbi-ai.com, Mastodon, email/file-drop driven) + Resolute ops dashboards (ACA, external=false, Tailscale-only) + TrueNicks API.
Banner (MGC_BANNER) Data realm live, no dedicated app Banner is live as a data/RBAC realm (~2.37M rows, Snowflake KGB57253) but has no dedicated user app yet — access is via the shared platform. Building Banner's realm surface is the new developers' first target.
MGC (internal) Fully implemented ABBIgram (mgc-social/) — private Mastodon v4.3.2, Tailscale-only, no federation, served via tailscale serve TLS.

Development status — live / in progress / planned

LIVE now

  • Ops Dashboard (ops.abbi-ai.com) — running under LaunchAgent com.abbi.v200-ops-dashboard. caveat Known display drift / ~9 rendering defects (staged root-cause id e391a4ba) — data is sound, presentation needs a fix pass; treat readings as indicative until repaired.
  • app.abbi-ai.com (shared ABBI LibreChat) — SSO-gated (302 to CF Access), no public container ingress; 4 real users live since 2026-07-20.
  • onboarding.abbi-ai.com — deployed 2026-07-22, HTTP 200 behind CF Access, allow-list {jstewart@, nyadav@} + default-deny.
  • ABBIgram & Resogram — both Mastodon stacks up; Resogram automation LaunchAgents (inbound SMTP + pipeline watcher) running.
  • Resolute app + ops dashboards + TrueNicks API — live on ACA, Tailscale-only.

IN PROGRESS

  • Sovereign Control Plane under construction — early functional scaffold: app/control-center/page.tsx (5 tabs: Issue Registry, Registry Census, Process Status, Approvals, DAG & Queue) + one Postgres route. No package.json, port, LaunchAgent, or main-nav wiring yet; render-verified only, deferred pending APPLY_GATED.md review.
  • abbi-onboard — Windows x64 cross-compile bug resolved (BUG-20260523-0020); production NSIS bundling routed through GitHub Actions CI.

DISABLED / PLANNED

  • Realm_User_Listener (ABBI.002.026) disabled — built + tested across 7 waves (integrated E2E 6/6 on real Postgres) but NOT turned on. Marker file FEATURE_STATUS.DISABLED present; deploy authorized under batch 7b8f69a3, awaits explicit "turn on" + turn-on runbook. Do not create Graph subscriptions / enroll mailboxes while the marker exists.
  • Banner realm app planned — no dedicated user app; first build target for the new dev team.

Source-of-truth systems (never edit around these)

Gitea

Canonical repo abbi/abbi-infrastructure at 100.89.184.50:3300. ~/.abbi/… is a working copy only; watched files self-revert if edited at the Gitea layer.

Hive Mind

Local-first: write to SQLite ~/.abbi/hive-mind-local.db via sm_write_local; Snowflake SOVEREIGN_MIND is backup. Never raw-INSERT to the cloud hive.

Azure Key Vault

Authoritative secret store; apps reference credentials by name (e.g. V200_ADMIN_API_KEY, Postgres PG*, Resogram keys) — never paste secrets in chat.

Snowflake

Warehouses per realm: SOVEREIGN_MIND (sessions/ACIS), HURRICANE (market intel), plus V2 / Resolute / Banner (KGB57253) realm DBs, reached via the MCP gateway.

Source documents (Gitea)

ops-dashboard/README.md — full spec of the Ops Dashboard: port 3200, LaunchAgent, every api/ route, data sources, credentials.

sovereign-control-plane/README.md — the UC scaffold: five-tab control-center page, PG-backed DAG route, and the explicit maturity/gap caveat.

onboarding-portal/README.md — hosting of this portal: Cloudflare Pages project, DNS, CF Access app + allow-list policy, redeploy/rollback.

onboarding-portal/DEPLOY_RECORD.md — the 2026-07-22 deploy record: resource ids, verification (302→SSO), 2nd-developer add procedure.

realm-user-listener/README.md — the DISABLED meeting-listener feature: 7 waves, test results, deploy batch, turn-on policy.

resolute-social/README.md — Resogram: Mastodon containers, email inbound router, pipeline watcher, per-horse accounts, credentials.

mgc-social/README.md — ABBIgram: MGC internal Mastodon stack, Tailscale-only access, operate commands.

abbi-onboard/BUILD.md — Tauri desktop build guide: Windows x64 cross-compile, macOS DMGs, CI artifacts, keyring stores.

Observability & realm health

Where to watch the estate per realm — and an honest note on what exists versus what doesn't.

ViewWhat it showsAccessStatus
Ops DashboardSingle live pane: process/service health, session queue, ACIS security, three-realm health (V200 / V2 / V20x) — per-realm gateway + MCP checks and latency — plus Hurricane market intel and app/daemon inventoryTailscale-only ops.abbi-ai.com (:3200)LIVE (known display drift)
GraphifyCode knowledge-graph of the repo — dependency/architecture graph + a generated architecture diagram. It is not a data-traffic monitor. Serves a graph MCP internally on :8944; a daily job rebuilds it from canonical HEADinternal ACA :8944 · tools graphify_*LIVE
Per-realm data-traffic visualizationA view of data / request volume & flow per realm over timeNOT BUILT
ops.abbi-ai.com (tailnet) ops-dashboard source graphify service
On the "data traffic pattern per realm" visualization: it does not exist yet. Graphify is a code graph (not data traffic); the closest live per-realm signal is the Ops Dashboard three-realm health tab (health + latency, not data volume). A dedicated per-realm data-traffic viz would be a new build.

Tools Fully implemented

What it is & why it exists

The Tools layer is the single toolbox every ABBI session reaches through one gateway. A session never talks to Snowflake, Microsoft 365, Azure, Cloudflare, an AI model or Dropbox directly — it calls a named tool (e.g. sm_query_snowflake, m365_send_email, cf_list_zones) and the gateway does the work, injecting the credential on the way out.

Objective: give agents one uniform, auth-injected surface to ~230 external and internal capabilities so that (a) the model never sees or handles a secret — every call carries X-API-KEY that the relay/worker holds, not ABBI; (b) routing, fallback and the Change Gate can be enforced in one place; and (c) new capabilities are added centrally without re-credentialing every client. The catalog snapshot on 2026-07-22 enumerated 234 tools; the hand-verified reference lists 237 — probe tools/list for the live truth.

Credential rule: auth is injected at the gateway, never by the model. On the v200 admin gateway every tool authenticates with X-API-KEY (secret ~/.abbi/secrets/v200-admin-api-key). Authorization: Bearer returns 401 here — Bearer is ONLY for the separate V2 user gateway mcp.abbi-ai.com.

How it works

A session opens one MCP endpoint over Tailscale. The Mac relay splits traffic: Snowflake / Hive-Mind tools race directly to Snowflake containers; everything else goes to one Cloudflare Worker that holds the per-service secrets (23 bound) and makes the outbound call.

session (Claude Code / CLI / console) | v Tailscale-direct, header: X-API-KEY [CANONICAL] http://100.86.225.119:8080/mcp | Mac relay (LaunchAgent com.abbi.v200-dmn-snowflake-mcp-relay-r74260eb) source: v200/services/alb-relay/relay.js | +-- sm_* / hive_mind tools ---> RACED direct to Snowflake containers | (east sf-1/2/3 first; west + AWS Lambda on full-east-fail) | +-- every OTHER tool --------> CF Worker v200-wrk-mcp-admin-gw-r74260eb source: v200/workers/mcp-admin-lb/index-admin.js (holds 23 per-service secrets; injects auth) | +--> native handlers (openai_, grok_ -> direct API) +--> m365 ACA container (east; west twin on any non-OK) +--> vertex ACA container (gemini_, imagen_, vision_) +--> Azure / Cloudflare / Vercel / Tailscale / Dropbox ...

Two consequences a developer must respect: (1) response shapes differ by familysm_* returns {data:[...]}, hurricane_* returns {rows:[...]}; parse defensively as parsed?.data ?? parsed?.rows ?? parsed. (2) East is primary; west/AWS twins serve only when east fails (m365 east container is frequently deactivated — the west twin answers the identical call).

Retired: the public mcp-admin.abbi-ai.com path (dead worker v200-admin-gateway-lb). Use the Tailscale-direct 100.86.225.119:8080/mcp endpoint only.

Technical specification & design

The toolbox is not one program — it is a routing tier plus a fleet of service backends. Verified components:

  • Mac relay — Node.js (v200/services/alb-relay/relay.js), run as macOS LaunchAgent on the Mac Studio (100.86.225.119:8080). Does the sm_/hive-mind vs everything-else split and the staged Snowflake race.
  • Cloudflare Worker — edge gateway v200-wrk-mcp-admin-gw-r74260eb (v200/workers/mcp-admin-lb/index-admin.js), holds the 23 bound per-service secrets and injects auth. mcp-admin-lb is the legacy worker name (zero secrets) kept only until retirement.
  • Transport — MCP over Tailscale mesh VPN; header auth X-API-KEY.
  • Snowflake backends — service containers on Azure Container Apps (sf-east-1/2/3, west twins) plus 4 AWS Lambda URLs (JGA82554) as the last fallback tier.
  • AI model backends — mix of native worker handlers (OpenAI, Grok = direct API calls, no container) and container-backed (Vertex/Gemini, Imagen, Vision OCR on a vertex ACA container; Bedrock Claude/Titan/Llama; Azure OpenAI; DeepSeek; Copilot; Julius).
  • Local Hive Mind — SQLite-first local store (sm_write_local / sm_query_local / sm_search_local); Snowflake is backup only.
  • Health/catalog generatortool-health-checker.py --emit writes the machine catalog (V200-CAPABILITY-REFERENCE.json / -CATALOG.md) with per-tool health; intended daily regeneration via com.abbi.v200-sjob-capability-reference-r74260eb.
  • Change Gate — 3 client layers (CF Worker middleware, PreToolUse hook change-gate-check.sh, filesystem watcher change-gate.py) gate mutating tool calls; server-side Gitea Layer-1 is in ENFORCE.

Tool families (from the 2026-07-22 catalog, 234 tools)

FamilyToolsPrefix / examplesNotes
Microsoft 36531m365_send_email, m365_list_calendar_eventsEmail/calendar/users; east container often down, west twin serves
Asana22asana_create_task, asana_list_projectsProject/task ops
Cloudflare15cf_list_zones, cf_create_dns_recordDNS, Pages, SSL, cache
Vercel15vercel_list_projects, vercel_redeployProjects, deployments, env vars, domains
Dropbox14dropbox_list_folder, dropbox_upload_fileFiles, shared links, revisions
Google Drive12drive_search_files, drive_read_excel_fileMany reads currently FAIL/AUTH_ERROR
Tailscale12tailscale_list_devices, tailscale_create_auth_keyDevices, ACL, keys, routes
DealCloud9dc_search_entries, dc_create_entryEntry CRUD, relationships
Azure CLI8azure_list_container_apps, azure_get_logsACA + ACR management
Make / RunPod8 / 8make_run_scenario, runpod_create_podAutomation; GPU pods
Mac relay ops7mac_run_command, mac_read_fileHost ops on the Mac Studio
AI models~25openai_chat, grok_chat, deepseek_reason, gemini_generate, bedrock_claudeOpenAI/Grok native; Gemini/Bedrock/Azure-OpenAI/DeepSeek/Copilot/Julius
Media / docs~30elevenlabs_*, simli_*, nano_banana_*, imagen_*, vision_ocr, deepgram_*, markitdown_convertVoice, avatars, image gen, OCR, transcription, doc conversion
Snowflake5 prefixessm_ / hurricane_ / banner_ / resolute_ / v2abbi_Per-account query tools — see realm table
GitHub / others~15github_get_file, apollo_*, gamma_*, zerobounce_*, godaddy_list_domains, gfdata_queryEnrichment, source, decks, validation

Snowflake query tools — account & response shape (the most-missed facts)

Tool prefixAccountDB / WarehouseShape
sm_query_snowflake / sm_sm_query_snowflake / sm_query_hive_mindIRA11585SOVEREIGN_MIND / SOVEREIGN_MIND_WH{data:[...]}
hurricane_sm_query_snowflakeJGA82554HURRICANE / HURRICANE (auto-resume){rows:[...]}
v2abbi_sm_query_snowflakeSXA84406 (V2 account)V2_ABBI_AI_WHprobe — not in catalog snapshot
banner_sm_query_snowflakeBanner realm — not documentednot documentedprobe
resolute_sm_query_snowflakeResolute realm — not documentednot documentedprobe
Gotcha: MASTER_CREDENTIALS and anything HURRICANE-account live on JGA82554 — query via hurricane_sm_query_snowflake, NOT sm_sm_query_snowflake (which hits IRA11585 and returns 0 rows for those). IRA11585 is a stale replica for V2 writes — provision V2/v20 users through the V2 admin gateway, never the sm_ tool.

Deliverables

  • ~234–237 live tools reachable through one MCP endpoint, auth injected — no secret ever handled by the model.
  • Capability Reference (CANON) — hand-verified operational map: tool→account/shape, credential-retrieval decision tree, gateway/egress topology, Change-Gate mechanics.
  • Machine catalogV200-CAPABILITY-REFERENCE.json + -CATALOG.md, per-tool health (PASS / CONTAINER_DOWN / SKIP_WRITE / AUTH_ERROR / FAIL) regenerated by tool-health-checker.py.
  • Routing contracttool-routing-architecture.md, the CANON three-rule doc (relay split, east-primary, LB carries only Snowflake).
  • Per-realm exposure — admin gateway (X-API-KEY) vs V2 user gateway (Bearer, RLS-scoped).

Implementation by realm

Tool exposure differs by realm because there are two gateways: the v200 admin gateway (Tailscale-direct, X-API-KEY, full ~234-tool fleet) and the separate V2 user gateway mcp.abbi-ai.com (Bearer, RLS-scoped, user-facing). Realm separation is enforced: V200 can deploy for V2 but never shares infra/creds.

RealmStatusDetail
V200 (admin)Fully implementedFull fleet via 100.86.225.119:8080/mcp, X-API-KEY. All ~234 tools incl. sm_ + hurricane_ Snowflake, infra tools (Azure/CF/Vercel/Tailscale), models, media, local Hive Mind. Change-Gate gates every mutation.
V2PartialReached through the V2 user gateway mcp.abbi-ai.com (Bearer, RLS/persona-scoped, L2_ADMIN vs USER) — a narrower, data-isolated surface, NOT the admin fleet. v2abbi_sm_query_snowflake reaches the V2 account SXA84406 (V2_ABBI_AI_WH).
V20PartialSame V2 user-gateway path; Raj (nyadav@middleground.com) is the sole V20_ADMIN. Windows install-kit ships 52 skills + memory corpus. Peer V20_ADMIN provisioning (2nd dev) is untested.
ResolutePartialDedicated Snowflake query tool resolute_sm_query_snowflake exists (its own account); account/warehouse not documented in the catalog snapshot — probe before use.
BannerPartialDedicated Snowflake query tool banner_sm_query_snowflake exists (its own account); account/warehouse not documented — probe before use.
MGC / future portcosPlannedSovereign Control Plane (ABBI.002.013): namespace-per-org, Cloudflare Access SSO, minimized Snowflake/Azure — the substrate to onboard future companies at scale. Not yet the live tool path.

Development status

LIVE — the gateway is fully operational. Catalog health snapshot (2026-07-22T09:00, 234 tools): 155 PASS, 23 SKIP_WRITE (mutating tools the health-checker deliberately does not fire — not failures), 24 CONTAINER_DOWN (mostly M365 east — west twin serves), 21 AUTH_ERROR (mostly privileged/write ops), 10 FAIL (chiefly Google Drive reads), 1 TOOL_NOT_FOUND.

  • Live Snowflake (sm_/hurricane_), Dropbox, Cloudflare/Vercel/Tailscale/Azure reads, Asana, Make, RunPod, most AI models, Mac reads, local Hive Mind.
  • In progress / degraded M365 (east container deactivated, relying on west twin); Vertex Imagen + Vision OCR (CONTAINER_DOWN); markitdown_convert (CONTAINER_DOWN).
  • Broken / stale Google Drive read/upload/move tools (FAIL/AUTH_ERROR); m365_list_folders (TOOL_NOT_FOUND); credential value-cache stale on IRA11585 (36 creds missing → fall back to hurricane_sm_query_snowflake on MASTER_CREDENTIALS).
  • Planned Daily auto-regeneration of the capability reference (generator LaunchAgent pending — file is hand-verified until it lands); per-realm Resolute/Banner Snowflake account documentation.

Source documents (Gitea)

V200-CAPABILITY-REFERENCE.md CAPABILITY-REFERENCE-CATALOG.md CAPABILITY-REFERENCE.json tool-routing-architecture.md alb-relay/relay.js workers/mcp-admin-lb/index-admin.js shared/services/change-gate v200-intended-architecture.md

  • V200-CAPABILITY-REFERENCE.md — CANON operational map: Snowflake tool→account/shape, credential decision tree, gateway topology, Change-Gate mechanics.
  • -CATALOG.md / .json — generated per-tool catalog with account, response shape, auth header and live health status (234 rows, 2026-07-22).
  • tool-routing-architecture.md — CANON three-rule routing contract (relay split, east-primary, LB carries only Snowflake); deprecation candidates.
  • alb-relay/relay.js — the Mac relay source that splits sm_/hive-mind vs the CF worker and stages the Snowflake race.
  • workers/mcp-admin-lb/index-admin.js — the Cloudflare Worker that holds per-service secrets and injects auth on outbound tool calls.
  • shared/services/change-gate — the 3-layer Change-Gate that authorizes mutating tool calls.
  • v200-intended-architecture.md — target-state topology for the gateway and service fleet.
Served at onboarding.abbi-ai.com behind Microsoft SSO (Cloudflare Access); allow-list = the Architect + the 2 developers, default-deny.

ABBI CLI & Consoles Core live · hardening in progress

What it is & why it exists

The ABBI CLI & Consoles stack is the primary terminal front-end for operating ABBI. The thing a developer actually launches is a Console — a dashboard that starts and manages multiple concurrent ABBI CLI sessions at once — and beneath each session sits the CLI engine (cli-v6 today, cli-v7 next) that runs the agentic tool-calling loop against ABBI's own model gateway.

Mac Console

The Session Manager Console — a Textual TUI on the Mac Studio (abbis-mac-studio-4) that monitors and drives every session (interactive, queue, cloud) from one screen, on a dedicated smconsole tmux socket so it can never disturb work sessions.

Windows Console

The abbiv20 install-kit shim (.cmd/.ps1) that launches an ABBI session on Windows over the v2 gateway. This is Raj's path on MGC-LT140.

CLI engine (cli-v6 / cli-v7)

The per-session agentic REPL. cli-v6 is the fully-functioning production engine; cli-v7 is the Anthropic-independent rewrite that routes entirely through the sovereign Conductor.

Objective: give the two new developers (and every ABBI operator) a single, sovereign, multi-session terminal front-end — no dependency on any one vendor's CLI — that walks the user through picking their FGS project at launch, then runs an agentic loop with ABBI's full FS + Hive Mind + MCP toolset, with the best model chosen automatically per task.

Access model (Architect, 2026-07-08): all v200b/abbi work runs on abbis-mac-studio-4 (100.86.225.119). Developers SSH in from a local Mac and attach to the Console (console_session.sh attach-mac) — there are no local-Mac ABBI hosts and no multi-machine file sync.

How it works

The Console is the launcher/monitor; each session it spawns runs the CLI engine; the engine sends every tool-bearing turn to the Conductor (LiteLLM gateway on N1, http://100.87.243.54:4000/v1), which — with the Oracle scoring the capability_matrix.db — picks the model per task and returns the model actually used. Tools are discovered and executed over MCP.

Developer (SSH from local Mac / Windows) │ ▼ ┌─────────────────────────────┐ ┌──────────────────────────────┐ │ MAC CONSOLE (Textual TUI) │ │ WINDOWS CONSOLE (abbiv20) │ │ smconsole tmux socket │ │ .cmd / .ps1 shim → v2 gw │ │ monitors + jumps into every │ └──────────────────────────────┘ │ session; 11 STATUS / 5 KIND │ └──────────────┬──────────────┘ │ launches / manages MANY ┌────────┴─────────┬───────────────┐ ▼ ▼ ▼ CLI session CLI session CLI session ← engine: cli-v6 (prod) / cli-v7 (alpha) 1) project pick (current-project.json) → 2) REPL agentic loop │ ▼ ┌──────────────────────────────────────────────┐ │ CONDUCTOR (LiteLLM, N1:4000) + ORACLE │ │ capability_matrix.db → pick model per task │ │ 32 models · 396 scores · 12 dims · 25 tools │ └───────────────┬───────────────┬──────────────┘ ▼ ▼ local models frontier (Claude/Gemini/ (11 free-local) GPT/Grok/Mistral) when required │ ▼ MCP tools (FS: read/write/edit/glob/grep/bash/list) + Hive Mind (sm_query_local / sm_write_local)

At launch the engine walks the user through FGS project selection (writing ~/.claude/current-project.json), then drops into the REPL. The cli-v6 launcher (bin/abbi-cli) additionally offers an EXISTING/PRIOR-session restart menu and re-enters inside a reattachable tmux session — this is the multi-session behavior the Console orchestrates at scale.

Technical specification & design

Mac Console — Session Manager Console

  • Python + Textual TUI, single app class ConsoleApp (console_app.py, ~3,500 lines). Renders to stderr (Textual) — never redirected to a file.
  • console_session.sh launcher creates tmux server -L smconsole, session console, windows shared/mac/ipad; verbs start/attach/attach-mac/attach-ipad/status/stop (idempotent, non-gated).
  • Socket isolation: Console on smconsole; interactive v200b on the default socket; QMS/queue on the queue socket — kept separate by design.
  • Vocabulary of 11 STATUS + 5 KIND values from session_state.py; a WebSocket hub (console_ws.py) and a reporter LaunchAgent feed live state.

CLI engine cli-v6 (production)

  • Package @abbi/cli v6.0.0, bin abbi-cli. TypeScript + React/Ink TUI (src/entrypoints/cli.tsx, Yoga WASM layout). Fork of the anon-kode agentic-coding tool, ABBI-hardened.
  • OpenAI-style API client pointed at the Conductor (LARGE_MODEL_BASE_URL/SMALL_MODEL_BASE_URL = 100.87.243.54:4000/v1).
  • ATP: tests/e2e-smoke.sh (real sessions vs real models, no mocks) + tests/benchmark-v200b-parity.sh.

CLI engine cli-v7 (Anthropic-independent, alpha)

  • Package @abbi/cli-v7 7.0.0-alpha.1, bin abbi-v7. Node ESM + TypeScript. Project ABBI.1098 (W0B Server Independence).
  • openai SDK pointed at Conductor (base abbi-conductor, override ABBI_CONDUCTOR_URL/ABBI_MODEL) — swaps Claude/Gemini/GPT/Grok/Mistral at runtime with no code change.
  • @modelcontextprotocol/sdk over SSE (default FS MCP at 127.0.0.1:8765) + built-in Hive Mind (sm_query_local/sm_write_local against ~/.abbi/hive-mind-local.db).
  • Agentic loop src/loop/agentic_loop.ts: MAX_ITERATIONS 25, context compaction at 85% of window, approval gate on destructive tools unless --autonomous. Core Memory cache (~/.abbi/cache/cli-v7-cache.json, 4h TTL). Deps: commander, chalk, ora, sqlite3, tiktoken.

Routing — Conductor + Oracle

  • Conductor = LiteLLM on N1 (100.87.243.54:4000); returns the actual model used as resolvedModel.
  • Oracle selects per task by scoring capability_matrix.db (SQLite): 32 models, 396 model_scores across 12 dimensions (accuracy, code, context, cost, financial, multilingual, persuasion, privacy, realtime, speed, tools, vision), 25 tools / 200 tool_scores. 11 free-local models (cost 0) and 11 at privacy_tier=local (9 ollama + MLX + llama-cpp).

Windows Console kit (v20)

  • abbiv20.cmd / abbiv20.ps1 PATH shim launching PowerShell 7; rides the v2 gateway (mcp.abbi-ai.com) with persona=v20admin. Ships 24 v2-gateway tools + 52 curated skills + a memory seed corpus (per v20-manifest.md).

Deliverables

  • Mac Console (Session Manager Console) — live Textual TUI multi-session dashboard on smconsole.
  • cli-v6 — production agentic CLI engine (@abbi/cli 6.0.0, abbi-cli) with ATP smoke + parity suites.
  • cli-v7 — Anthropic-independent CLI engine (@abbi/cli-v7 7.0.0-alpha.1, abbi-v7) routed through Conductor/LiteLLM.
  • claude-cli harness — the Mac Studio client (hooks, session tracking, Change-Gate Layer-2, memory) every session runs inside.
  • Windows install-kitabbiv20 console shim + 24-tool / 52-skill / memory corpus manifest for the v20admin machine.
  • capability_matrix.db — the 32-model / 396-score routing matrix the Oracle reads.

Implementation by realm

RealmStatusDetail
V200Fully implementedMac Console (smconsole Textual TUI) live on the Mac Studio; cli-v6 the production engine (ATP smoke + parity suites); cli-v7 alpha; claude-cli harness is source-of-truth for hooks/Change-Gate. Conductor + capability_matrix.db routing in place. This is the reference realm.
V20Live (single admin)Windows Console (abbiv20 kit) live for Raj Yadav — sole V20_ADMIN (nyadav@middleground.com), riding the v2 gateway with 24 tools + 52 skills. Peer-provisioning is untested — the 2nd developer needs the same V20_ADMIN role, a path never yet exercised (see v20 Onboarding tab).
V2Via gatewayProduction multi-user stack reached through the v2 gateway (mcp.abbi-ai.com) under RLS; there is no dedicated general-user CLI/console front-end here — V2 users' primary path is the web front-end, and the console monitors v200b/queue/cloud sessions, not V2 end-users.
ResoluteN/A — no CLI consoleNo dedicated CLI/console front-end; the realm's data is reached programmatically via its gateway tool resolute_sm_query_snowflake, not an interactive terminal session.
BannerN/A — no CLI consoleSame as Resolute: no dedicated console; realm reached via banner_sm_query_snowflake. Banner is the first proven portco data realm, not a CLI/console deployment.
MGC / future portcosPlannedBroad console/CLI rollout across MGC and the portfolio is gated behind CLI hardening + the local-model migration and the ABBI.312 server build (see Roadmap tab) — target up to 10,000 users.

Development status

Live now

  • Mac Console (Session Manager Console) running on the Mac Studio; attach via SSH + console_session.sh attach-mac.
  • cli-v6 (@abbi/cli 6.0.0) fully functioning; per project record its 14-test ATP suite is green (commits 09b2b29 / ea3775d); interactive REPL works end-to-end. In-repo suites: e2e-smoke.sh, benchmark-v200b-parity.sh.
  • Windows Console kit live for the sole V20_ADMIN (Raj).
  • Conductor routing over capability_matrix.db (32 models / 396 scores / 12 dims / 25 tools / 11 free-local).

In progress — hardening gate before broad rollout

  • cli-v6 --print tool-hang (BUG be4baa2e, P3): one-shot --print mode hangs ~127s with no tool result while the interactive REPL is fine. Fix = align --print with the interactive path (getModelForRequest + awaited MCP getClients + bounded connect timeout).
  • cli-v7 broken-transport / "no tool loaded": targeted by the Conductor tool-accessibility grid (models × tools live-probed) to prove tool discovery over MCP-SSE.
  • Conductor reachability: N1:4000 has shown DEGRADED/timeout — needs a standby Conductor + ABBI_CONDUCTOR_FALLBACK_URL routing guard.
  • cli-v7 remains 7.0.0-alpha.1 pending these items + ATP green across CLI + consoles.

Planned

  • Broad developer/user rollout of the console + CLI after hardening, tied to the local-model migration and the ABBI.312 server build (Roadmap tab) — up to 10,000 users across all realms + portcos.
The commit hashes and the "14-test green" status are carried from the project record (spec file 02); the working copy on this machine is a Gitea mirror, not a live git checkout, so those hashes were not re-run here. Re-verify against Gitea before any "done" claim.

Source documents (Gitea)

v200/services/session-manager/console v200/apps/cli-v6 v200/apps/cli-v7/README.md v200/clients/claude-cli v20/clients/install-kit/v20-manifest.md shared/scripts/capability_matrix.db v200/apps/cli-v6/tests/e2e-smoke.sh

  • session-manager/console — the Mac Console: Textual TUI (console_app.py), launcher (console_session.sh), session-state vocabulary, WebSocket hub, README.
  • apps/cli-v6 — production CLI engine (@abbi/cli 6.0.0): src/ (Ink TUI, tools, query loop), bin/abbi-cli tmux multi-session launcher, CHANGELOG.
  • apps/cli-v7/README.md — full spec of the Anthropic-independent engine: Conductor URL, agentic loop, MCP-SSE tools, Core Memory cache, env names.
  • clients/claude-cli — the Mac Studio harness every session runs inside: hooks, session tracking, Change-Gate Layer-2 (change-gate-check.sh), memory mirror.
  • v20-manifest.md — the Windows console's exact 24 v2-gateway tools, 52 curated skills, memory corpus, and the 23 v200-only skills explicitly excluded from v20admin.
  • capability_matrix.db — the Oracle's routing matrix (models, model_scores, tools, tool_scores, routing_rules).
  • cli-v6/tests/e2e-smoke.sh — the ATP smoke suite: real sessions against real models via the Conductor, no mocks.

Roadmap — From Claude Today to Sovereign Local Models at Scale In progress

What it is & why it exists

The Roadmap is the planned path that takes ABBI from its current dependency on a frontier model (Anthropic Claude) for tool-bearing turns to a sovereign, fully-local stack that runs on hardware MiddleGround owns and controls. Every step exists to answer one question a new developer will ask on day one: "When does ABBI stop calling out to Claude, and what runs it instead?"

Objective: remove the frontier-model dependency for tool use by finishing local-model training (abbi-core), harden the CLI and console front-ends so they are safe to hand to real users, then stand up a dedicated production server (DGX B200 + R760) running the Conductor routing plane and the full ABBI stack for up to 10,000 users across all realms — V200, V2, V20, Resolute, Banner — plus all four portfolio companies and future onboarding companies.

Guiding principle (Architect interim decision): tool-bearing turns route to a frontier model only until abbi-core training restores fully-local tool use, then the frontier entry is removed. Frontier is a bridge, not the destination.

How it works — the migration sequence

Five milestones run in sequence. The first is live today; the last is the destination.

[1] TODAY: Claude dependency LIVE cli-v6 tool-turn -> abbi-anthropic-sonnet (Claude/Sonnet) fallback -> abbi-tool (llama3.3:70b, local) | v [2] Local migration on 4-node Mac Ultra server IN PROGRESS Conductor (LiteLLM :4000 on N1) + capability matrix picks free-local models with no frontier bias | v [3] Finish abbi-core training (LoRA + RL) IN PROGRESS positive reward deltas (e.g. +0.060 Qwen2.5-3B) -> restores fully-local tool use -> remove frontier entry | v [4] CLI + console hardening & ATP test gate IN PROGRESS fix --print hang, cli-v7 transport, standby Conductor | v [5] ABBI.312-class server build (DGX B200 + R760) PLANNED Conductor + full stack, up to 10,000 users, all realms + 4 portcos + future companies

The router that makes the model choice per turn is the Conductor (LiteLLM on node N1, port 4000) reading a capability matrix — a SQLite scoring database of every model against every tool, skill and task dimension. As local models close the capability gap, the matrix stops selecting the frontier entry on its own, and the migration completes by data rather than by a hard cutover.

Technical specification & design

The actual technology, verified in the repo:

  • Routing plane — Conductor + LiteLLM. LiteLLM proxy on node N1 at :4000; config abbi-server/node1/litellm/config.yaml defines 54 model routes including abbi-anthropic-sonnet (Claude, the frontier tool route) and abbi-tool (llama3.3:70b, the local fallback). Selection logic in conductor_middleware.py + model_registry.py.
  • Capability matrix — SQLite. abbi-server/node1/litellm/capability_matrix.db, live-counted: 33 models, 397 model scores, 25 tools, 66 skills, 7 user profiles — scores every model per dimension so the router can prefer free-local models with no frontier bias.
  • Serving substrate — 4-node Apple M3 Ultra Mac server. abbi-ultra-1..4, each M3 Ultra / 512GB / 32-core (macOS 26.2). N1 serves LiteLLM; abbi-ultra-3/abbi-ultra-4 run ollama (never the apeirin extraction fleet). MLX is installed on N1 with N3/N4 as install targets.
  • Training stack — LoRA + RL / DPO-ORPO. Recipe uses MLX (mlx_lm.lora, mlx-tune for DPO/ORPO). Per the 2026-06-13 node directive, heavy training runs on RunPod (CUDA) and the trained model deploys to the 4-node Mac server for serving. Training data: Domain A Industrial B2B (~6,770 pairs) + Domain B ABBI Ops (~3,100), v4 pairs (1,501), 4 RAG collections. Weights stay on local disk (not Gitea).
  • Production server (planned) — DGX B200 + Dell R760. Runs the Sovereign Control Plane (registry ABBI.002.021): k3s + MinIO + per-org Postgres + Qdrant, one namespace per org, Cloudflare Access SSO, with Snowflake/Azure minimized.
  • Front-ends — CLI engines. cli-v6 (14-test ATP suite green) and cli-v7, launched/managed through the Mac and Windows consoles.

Nuance a new dev must know: the node directive doc carries a 2026-06-13 correction reserving the 4-node Mac server for serving, not training (training on RunPod/CUDA), which is in tension with an earlier "MLX-on-Ultra-nodes" note in the same doc. Treat the training location as the RunPod-then-deploy pattern and re-confirm before acting.

Deliverables

  • A Conductor routing config that selects local models by default and invokes the frontier model only when a task requires it (today: tool-bearing turns).
  • A trained, deployable abbi-core local model with positive reward deltas that restores fully-local tool use, enabling removal of the abbi-anthropic-sonnet frontier entry.
  • Hardened CLI + consoles passing ATP suites across the interactive REPL and --print paths, with a standby Conductor and a tool-accessibility routing guard.
  • A dedicated production server (DGX B200 + R760) running Conductor + the full ABBI stack, sized for up to 10,000 users, with the 4-node Mac cluster demoted to dev/extraction.
  • A per-realm migration status so each realm's move off the frontier model is tracked, not assumed.

Implementation by realm

Migration status = how far each realm is along the path from frontier-dependent to fully-local serving.

RealmStatusDetail
V200 (admin platform)In progresscli-v6 live and routing through Conductor (LiteLLM :4000). Tool-bearing turns still hit abbi-anthropic-sonnet (Claude) with the abbi-tool local fallback — the frontier dependency to be removed once abbi-core lands. Furthest along.
V2 (production multi-user)In progressServed through the same Conductor/capability-matrix plane; RLS-governed. Local-model migration follows V200's routing changes rather than leading them.
V20 (dev/admin console)PlannedWindows/Mac console kit (52 skills + memory corpus) uses the same routing; local-only tool use inherits from the shared Conductor once abbi-core is deployed. No realm-specific local-model cutover yet.
ResolutePlannedInfrastructure live (ABBI.200.001, 23 containers; ABBI.200.003 app) on its own realm. Not yet wired to the sovereign local-model plane — migration targeted at the ABBI.312-class server phase.
Banner (MGC_BANNER)PlannedABBI.100.026 realm live at the data layer (RBAC + ~2.37M rows, verified on KGB57253). No CLI/local-model migration in flight; joins at the 10k-user server build.
MGC portcos + future companiesPlannedThe explicit endpoint of milestone 5: one server running Conductor + full stack for all realms, all 4 portcos, and onboarding of future companies, up to 10,000 users.

Development status

Live Today's frontier dependency

cli-v6 is in production and routes tool-bearing turns to abbi-anthropic-sonnet (Claude/Sonnet) with abbi-tool (llama3.3:70b) as fallback — confirmed in the live LiteLLM config. This is the dependency the whole roadmap exists to retire.

In progress Local migration, training, and CLI hardening

  • Local migration (M2): Conductor + capability matrix operational on the 4-node Mac Ultra server; goal is unbiased free-local model selection. Known risk: N1:4000 has shown DEGRADED/timeout — needs a standby Conductor + ABBI_CONDUCTOR_FALLBACK_URL.
  • abbi-core training (M3): LoRA + RL underway with positive reward deltas achieved (e.g. +0.060 on Qwen2.5-3B). This is the gating item — the frontier tool route cannot be removed until local tool use is restored.
  • CLI hardening (M4): open items — cli-v6 --print tool-hang (~127s, BUG be4baa2e; interactive REPL works), cli-v7 broken-transport / "no tool loaded", and the Conductor tool-accessibility grid (22 models × 25 tools live-probed). All must pass ATP before broad user rollout.

Planned ABBI.312-class production server

The DGX B200 + R760 build is the production substrate for up to 10,000 users; the 4-node Mac cluster then becomes dev/extraction. Phase-1 /devpolicy package is complete; the physical server build is pending its gate.

Project-number caveat: the FGS registry shows ABBI.312 was renumbered to "OpsCore" on 2026-07-07 (number collision), and ABBI.304 now maps to Apeirin.ai (a distinct cognitive-architecture project, not abbi-core CLI training). The server-build project's current registry number is not yet firmly documented — re-confirm in folder_registry.json before citing "ABBI.312" as its live id.

Source documents (Gitea)

litellm/config.yaml

The live LiteLLM route table (54 model routes) — shows abbi-anthropic-sonnet (Claude, today's tool route) and the abbi-tool/llama3.3:70b local fallback.

conductor_middleware.py

Conductor selection middleware + model_registry.py and the capability_matrix.db (33 models / 397 scores / 25 tools) that drive per-turn model choice.

abbi-server/conductor

The Conductor service tree (app / client / middleware / v2) — the routing plane that migrates from frontier to local.

project_abbi_core_training_nodes.md

The node directive: 4-node M3 Ultra roles (serving vs training), the RunPod-CUDA training-then-deploy correction, and the MLX LoRA/DPO recipe.

cli-v6/README.md

The current CLI engine (14-test ATP suite) — the front-end being hardened in milestone 4.

apps/cli-v7

The next-generation CLI engine (transport fixes targeted by the tool-accessibility grid).

folder_registry.json

The FGS registry of project numbers/statuses — authoritative source for the ABBI.002.021 Sovereign Control Plane and the ABBI.312/304 renumberings noted above.

FGS — File Governance System Fully implemented

What it is & why it exists

FGS (File Governance System) is the single, authoritative registry and folder-governance layer for every project the firm runs. It gives each project a stable ABBI.### number, a standardized two-audience folder layout inside the Managing Partner's Dropbox, and an always-on daemon that keeps those folders clean without human filing. It is the "card catalog + librarian" for all AI work.

Objective: make every project findable by a durable number (not a fragile path), separate deliverables addressed to the Managing Partner from ABBI's own process artifacts, and guarantee that superseded versions are archived automatically so the current version is never ambiguous. The registry is what the ABBI CLI reads at launch to walk a user through project selection.

Registry v3.3

247 folder entries — 122 abbi, 101 MGC, 9 AI-research, 8 personal, 7 Resolute. 225 active / 18 archived / 4 system.

Number blocks

abbi 001-099 · MGC 100-199 · Resolute 200-299 · Personal/AI-research 300-399. Next top-level = 389.

One source of truth

A single JSON registry drives the CLI boot menu, the archiver, and every audit — no per-realm copies.

How it works

FGS is three cooperating pieces: a JSON registry (the map), an onboarder that mints new numbered folders, and an fsevents-driven archiver daemon that watches the live folders and files superseded versions away. A weekly LaunchAgent runs structure + naming audits and writes a Hive Mind summary.

  new project                       every FGS project folder
  ----------                        ------------------------------------
  fgs_onboard.sh  --mints-->        [ABBI.### Project]/
    assigns ABBI.###                  USER/
    writes physical_path                USER-CV/        latest MP deliverables
    updates folder_registry.json        USER-Archive/   superseded  -> YYYY-MM/
        |                               ABBI/
        v                                 ABBI-CV/       CTDs, plans, contracts, build
  folder_registry.json  (v3.3) ------->   ABBI-Archive/  superseded  -> YYYY-MM/
     |  read at launch                     Context/  Session Logs/  Instructions/
     v                                    USER UPLOAD/    MP drop zone -- NEVER touched
  ABBI CLI project-picker
  (current-project.json)              fgs-auto-archive.py --watch  (fsevents daemon)
                                        supersede: higher version > later date > mtime
  fgs-registry-tools.py                 loser -> SAME SIDE's Archive/YYYY-MM bucket
   audit | structure |                  10-min + 0-byte stability guards; CTD_* never moved
   naming-audit | weekly              weekly LaunchAgent: audits + Hive Mind summary

Supersede rule (auto-archive v3): within a CV folder, files sharing a base name (stripped of version/date affixes) are ranked by highest version, then later date, then HHMM/mtime; the loser moves to the matching USER-Archive/ or ABBI-Archive/ under the current YYYY-MM bucket. Nothing archives while its superseding file is 0-byte or was modified in the last 10 minutes, and CTD_* / session-log files are never supersede-archived.

Technical specification & design

LayerTech / fileWhat it does
Registry (source of truth)~/.abbi/scripts/folder_registry.json (schema v3.3, JSON) — mirrored in repo at shared/scripts/folder_registry.jsonEvery entry: abbi_number, name, universe, parent, status, physical_path, keywords, migration history. Also holds universe_blocks, keyword_index, top_level_next.
Query / audit toolkitshared/scripts/fgs-registry-tools.py (Python 3, argparse)Subcommands: audit (registry-vs-filesystem drift), structure (two-audience layout conformance), naming-audit (FULL/MINIMUM/NON-CONFORMING tiers), rebuild-index, roundtrip-test, weekly (self-driving governance pass).
Archiver daemonshared/scripts/fgs-auto-archive.py (Python 3, fsevents, dedicated fgs-venv)Watches USER-CV/ + ABBI-CV/, moves superseded versions, sweeps legacy CV/ catch-basins into the two-audience layout. Modes: --watch, --scan, --dry-run, --report-now.
Onboarder / helpersfgs_onboard.sh, fgs_create.sh, fgs_find.sh, fgs_naming_enforce.pyMint a new numbered project + folder tree and register it (onboarder v4.1); create/find helpers; naming enforcement.
Naming standardshared/docs/naming/fgs-file-naming-standard.md (v2.0)Machine-validated grammar [DocType]_[Subject]_v[N]_[YYYY-MM-DD].[ext] with FULL/MINIMUM regexes; audience rules routing files to the USER vs ABBI side.
Scheduling (macOS)com.abbi.fgs-auto-archive.plist (RunAtLoad + KeepAlive daemon) · com.abbi.v200-sjob-fgs-weekly-audit-*.plist (weekly)launchd keeps the archiver alive on the Mac Studio; the weekly job runs audits + writes the Hive Mind conformance summary.
Physical substrateDropbox tree at ~/MGC Dropbox/Managing Partner Office/MP.000 AI Projects/FGS/The governed filesystem. USER UPLOAD is EXEMPT — never renamed, moved, or audited.

Stack in one line: Python 3 tooling + JSON registry + macOS launchd/fsevents daemon over a Dropbox filesystem, with Gitea as the versioned source of truth and Hive Mind (SQLite/Snowflake) receiving audit summaries. No web framework, no external DB — deliberately simple and local.

Deliverables

  • A durable project number (ABBI.###, sub-numbered ABBI.###.###) for every project, block-allocated by universe.
  • A standardized folder tree per project: USER/USER-CV + USER-Archive, ABBI/ABBI-CV + ABBI-Archive + Context / Session Logs / Instructions, plus an exempt USER UPLOAD drop zone.
  • Automatic version archival — superseded files continuously swept into month buckets on the correct audience side.
  • The CLI boot inventory — the registry is the list the ABBI CLI reads to walk users through project selection at launch.
  • Governance reports — weekly structure + naming-conformance audits and a Hive Mind summary; drift/conflict alerts.
  • The full project enumeration (appended below) — the complete active project inventory grouped by realm.

Implementation by realm

FGS is one governance system that runs on the V200 Mac Studio and governs the Managing Partner's Dropbox. It is not deployed per-realm; instead, every realm's projects are cataloged in and governed by the single registry. The grid below reflects each realm's real footprint in the registry (v3.3).

RealmStatusDetail
V200Fully implementedOwns and operates FGS. Registry, archiver daemon (LaunchAgent live on the Mac Studio), onboarder, tooling and naming standard all run here. 122 abbi-universe entries. This is the authoritative home of the system.
MGCFully implementedFGS's primary business domain — the MGC Managing Partner Office Dropbox. 101 MGC-universe entries (blocks 100-199 + the 300s), including all ABBI.002.x apps and ABBI.003.x dev projects, under the same governance and naming standard.
ResoluteCataloged & governed7 registry entries in the 200-299 block: ABBI.200.001 Infrastructure, .002 Resogram, .003 App, .004 Media, plus ABBI.367 DRF Data and ABBI.369 Beyer-figure work. Numbered and folder-governed by the same single FGS instance — no separate Resolute deployment.
BannerCataloged (data realm)Present as folders ABBI.100.003 Banner Industries and ABBI.100.026 Banner Data (both active). Banner is chiefly a Snowflake data realm (MGC_BANNER); its FGS footprint is the project folders only, governed by the shared registry rather than an independent FGS instance.
V2N/A — consumes onlyV2 is the multi-user cloud realm; it does not run FGS. V2-related projects are cataloged in the same registry, and the registry is read by CLI clients — but no FGS daemon or tooling runs inside V2.
V20N/A — consumes onlyThe V20 developer (Raj) consumes the registry via CLI project selection at launch, but FGS itself is not deployed on the V20 side. Governance stays centralized on V200.

Development status

LIVE Registry v3.3 (last updated 2026-07-22, onboarder v4.1) with 247 folder entries; the fgs-auto-archive daemon is a live KeepAlive LaunchAgent watching CV folders; the weekly audit LaunchAgent runs structure + naming audits and writes Hive Mind summaries; the naming standard is v2.0 (report-only on pre-existing files, mandatory for new files/folders).

IN PROGRESS Transition off the legacy layout: "Needs Update" is eliminated and legacy CV/ + Archive/ catch-basins are being swept into the two-audience layout; those basins are removed only by a gated pass after two consecutive clean weekly audits. Registry-vs-filesystem drift remediation and conflicted-copy scans run on the weekly cadence.

PLANNED / ONGOING Continuous onboarding of new numbered projects (next top-level = 389) as the four portcos and future companies come online; the registry remains the inventory the ABBI CLI and the Developer Onboarding Portal enumeration read from.

Governance note: the registry at ~/.abbi/scripts/folder_registry.json is the source of truth for the boot menu; Gitea is the versioned source of truth for the tooling. USER UPLOAD is a hard exclusion class — automation never renames, moves, or audits anything a user drops there.

Source documents (Gitea)

folder_registry.json (v3.3) The registry itself — every project's number, universe, status, physical_path, keywords, and the universe number-blocks.

fgs-registry-tools.py The query/audit toolkit: audit, structure, naming-audit, rebuild-index, roundtrip-test, weekly.

fgs-auto-archive.py (v3) The fsevents archiver daemon — supersede matching, month buckets, stability guards, legacy-basin sweep.

fgs_onboard.sh The onboarder (v4.1) that mints a new ABBI.###, builds the folder tree, and registers it.

fgs-file-naming-standard.md (v2.0) The two-audience folder layout, machine-validated file grammar, and audience routing rules.

fgs_naming_enforce.py Naming-enforcement helper applying the standard's tiers to files.

com.abbi.fgs-auto-archive.plist The launchd definition (RunAtLoad + KeepAlive) that keeps the archiver watching on the Mac Studio.

Live inventory — 228 active projects

Enumerated directly from the canonical registry ~/.abbi/scripts/folder_registry.json (v3.3, 2026-07-22). Grouped by realm/organization. Dashboards built but no longer maintained are flagged UNDER CONSTRUCTION.

Infrastructure & Platform: 112 · MiddleGround (MGC): 90 · Resolute: 7 · Banner: 2 · AI Research: 9 · Personal: 8

Infrastructure & Platform 112

ABBI #ProjectDescriptionStatus
ABBI.001InfrastructureV200, V2, V20x, containers, networking, Hive Mind, Snowflake, syncactive
ABBI.001.001V200 Platformv200, v200 platform, gateway, infrastructure stabilityactive
ABBI.001.002V2 Systemv2, v2 system, v2 security, v2 upgradeactive
ABBI.001.003ABBI Serverabbi server, litellm, mac ultra, local firstactive
ABBI.001.004V20x Platformv20xactive
ABBI.001.006Hive Mindhive mind, local hive, memoryactive
ABBI.001.007Session Trackersession tracker, session tracking, session archiveactive
ABBI.001.008Snowflakesnowflake, sf account, ira11585active
ABBI.001.009Help Desk Daemonhelp desk, helpdesk, daemonactive
ABBI.001.010Dropbox Syncdropbox, syncactive
ABBI.001.011V2 User Dashboardactive
ABBI.001.012Tmuxactive
ABBI.001.013SSO Tailscaleactive
ABBI.001.014ABBI Universeactive
ABBI.001.015v200albactive
ABBI.001.016v2 user onboardingactive
ABBI.001.017Developer Optimizationactive
ABBI.001.018v200 toolsactive
ABBI.001.020infrastructure namingactive
ABBI.001.022v200 clean upactive
ABBI.001.023Azure Key Vault Adoptionregistered 2026-07-07 (reconciliation)active
ABBI.001.024v200HD Help Deskrenumbered from ABBI.001.009 2026-07-07 (number collision)active
ABBI.001.025Mac 1556 syncrenumbered from ABBI.001.011 2026-07-07 (number collision)active
ABBI.001.026Infrastructure maintenancerenumbered from ABBI.001.013 2026-07-07 (number collision)active
ABBI.001.027v200 improvementactive
ABBI.002ApplicationsABBI CLI, Dashboard, LibreChat, iOS app, web UIsactive
ABBI.002.001ABBI CLIabbi cli, cli, terminalLIVE
ABBI.002.002Dashboarddashboard, pm dashboardUNDER CONSTRUCTION
ABBI.002.003LibreChat ABBIlibrechat, chat ui, web chatactive
ABBI.002.004ABBI iOS Appios, iphone, mobile, swiftactive
ABBI.002.005MPO Priority Dashboardmpo dashboard, priority dashboardactive
ABBI.002.006Automation Dashboardautomation dashboard, infrastructure visualactive
ABBI.002.007Headset Voice Commandsheadset, voice, voice commandsactive
ABBI.002.008Master ABBI Design [2026-07-07: keeper confirmed; legacy workspace archived-in-place at ABBI.003.017]active
ABBI.002.009OpsCoreOpsCore infrastructure monitoring, reconciliation, and unified OS management. Connects Gitea, OpsCore daemon, Dashboard, Change Gate, and ACIS. [2026-active
ABBI.002.010Session Dashboardactive
ABBI.002.011Que Manageractive
ABBI.002.012Telegram notificationactive
ABBI.002.013Process controllerAutonomous infrastructure process controller — durable-DAG queue engine, unified issue registry, real-time remediation loop, weekly ACIS improvement cUNDER CONSTRUCTION
ABBI.002.014Consoleactive
ABBI.002.017blink ipad app set upregistered 2026-07-07 (reconciliation)active
ABBI.002.019Listener Apprenumbered from ABBI.002.010 2026-07-07 (number collision)active
ABBI.002.020Application Test Platformrenumbered from ABBI.002.012 2026-07-07 (number collision)active
ABBI.002.021Sovereign Control Planerenumbered from ABBI.002.013 2026-07-07 (number collision)active
ABBI.002.022Windows Consolerenumbered from ABBI.002.013 2026-07-07 (number collision)active
ABBI.002.023ABBI Simli Apprenumbered from ABBI.002.014 2026-07-07 (number collision)active
ABBI.002.024Session manager onboardingrenumbered from ABBI.002.015 2026-07-07 (number collision)active
ABBI.002.025realm processes and applicationsactive
ABBI.003DevelopmentSkills, agents, tools, new capabilities, AI rolloutactive
ABBI.003.001Conductor Orchestratorconductor, orchestrator, orchestrationactive
ABBI.003.002Capability Matrixcapability matrix, acis, benchmark, multi-modelactive
ABBI.003.003Autonomous Completionautonomous, autonomous completionactive
ABBI.003.004Skills Libraryskills, skill system, skill developmentactive
ABBI.003.005Persuasion Skillpersuasion, rhetoricactive
ABBI.003.006DevPolicydevpolicy, development policyactive
ABBI.003.007Folder Governance Systemfolder, governance, fgsactive
ABBI.003.008Boot Protocolboot, boot protocol, v200a, v200bactive
ABBI.003.009Weekly Pace Reportpace report, weekly report, portco reportactive
ABBI.003.010Email Operationsemail, email scraping, email organizationactive
ABBI.003.011Camera Watchercamera, watcher, monitoringactive
ABBI.003.012MGC AI Rolloutai rollout, mgc aiactive
ABBI.003.013MGC AI Trainingai training, mgc trainingactive
ABBI.003.015ACISactive
ABBI.003.016ABBI unfinished projectsactive
ABBI.003.018Alphasense Data Sourceregistered 2026-07-07 (reconciliation)active
ABBI.003.019John Emailregistered 2026-07-07 (reconciliation)active
ABBI.003.020telegram integrationregistered 2026-07-07 (reconciliation)active
ABBI.003.023Email Routingregistered 2026-07-07 (reconciliation)active
ABBI.003.024problem Solving skillactive
ABBI.003.025Pause Skillactive
ABBI.099Application Development PolicyABBI Application Development Lifecycle Policy v2.1 — 5-phase methodology, phase docs, checklists, and templatesactive
ABBI.305V200x Claude CLIregistered 2026-07-07 (reconciliation)active
ABBI.310GiteaSelf-hosted Gitea source-of-truth infrastructure repoactive
ABBI.313Roam buildactive
ABBI.314Mac 1556 setupactive
ABBI.314.001snowflake user clean upactive
ABBI.315Session Manageractive
ABBI.318V20 useractive
ABBI.321ABBI Autonomus sessionactive
ABBI.325Instagram cloneactive
ABBI.325.001MGC Instagramactive
ABBI.327dropbox service accountactive
ABBI.328change gateactive
ABBI.330command failures and bugsactive
ABBI.331Mac serveractive
ABBI.334v20 adminactive
ABBI.336v20 Onboardingactive
ABBI.337autobuild [2026-07-07: predecessor ABBI.329 autobuild skill (completed) in ABBI.998 Legacy Archive/FGS-dedup-2026-07-07]active
ABBI.338supervisoractive
ABBI.339Redis Cachingactive
ABBI.340markitdownactive
ABBI.346purpose built deviceactive
ABBI.347itermactive
ABBI.349chat interfaceactive
ABBI.351travel devicePortable/office access devices: single SSH entry point into ABBI Mac Studio via Tailscale + Termius so files never sync across computers. Orange Pi Zeactive
ABBI.353Graphifyactive
ABBI.356ABBI Medicalactive
ABBI.357V20 Inappropriate Behavioractive
ABBI.358Server Configurationrenumbered from ABBI.312 Server Configuration 2026-07-07 (number collision)active
ABBI.362abbi emailactive
ABBI.366v200 librechatactive
ABBI.368organization master designLIVE
ABBI.377Linkedin Scraperactive
ABBI.379end skillactive
ABBI.380Egonex_Understand Anythingactive
ABBI.383credentialsactive
ABBI.386developer onboardingactive
ABBI.387Deepgram on this computeractive
ABBI.998Legacy Archivesystem folder (menu-exempt)active
ABBI.999System Filessystem folder (menu-exempt)active
ABBI.88888Meeting Summariessystem folder (menu-exempt)active
ABBI.99999ABBI System Filessystem folder (menu-exempt)active

MiddleGround (MGC) 90

ABBI #ProjectDescriptionStatus
ABBI.100PortfolioPortfolio companies, valuations, debt, bonusactive
ABBI.100.001Pace Industriespace, pace industries, red tag, tremecactive
ABBI.100.002Stemmerstemmeractive
ABBI.100.004Moonshotmoonshot, hyper caractive
ABBI.100.005ALCOalcoactive
ABBI.100.006AM Castleam castle, castleactive
ABBI.100.007ASIasiactive
ABBI.100.008DuraShilohdurashiloh, dura shiloh, shilohactive
ABBI.100.009HLChlcactive
ABBI.100.010IT8it8active
ABBI.100.011Plasmanplasmanactive
ABBI.100.012RWBrwbactive
ABBI.100.013SCCsccactive
ABBI.100.014SixAxissixaxis, six axisactive
ABBI.100.015Starrettstarrettactive
ABBI.100.016SteelCraft Mantelsteelcraft, mantel, steelcraft-mantelactive
ABBI.100.017TPMtpmactive
ABBI.100.018Volvo Carsvolvo, volvo carsactive
ABBI.100.019Valuationsvaluation, valuations, new eagle, pviactive
ABBI.100.020Bonus Programbonus, bonus programactive
ABBI.100.021PMD Valuationpmd, pmd valuationactive
ABBI.100.022Portfolio Debtportfolio debt, debtactive
ABBI.100.023Commercial Portfolio Reportcommercial, portfolio reportactive
ABBI.100.0242026 Portfolio Analysisregistered 2026-07-07 (reconciliation)active
ABBI.100.025Portfolio Company Dataactive
ABBI.100.027Q2 Portfolio Reviewactive
ABBI.101InvestmentsDeal pipeline, BD, DealCloud, thesis, active dealsactive
ABBI.101.001DealCloud BDdealcloud, crm, staffed deals, new dealsactive
ABBI.101.002Project Cornerstonecornerstone, co-investmentactive
ABBI.101.003Aerospace Defense Thesisaerospace, defense, a&dactive
ABBI.101.004Investment Thesisinvestment thesis, thesisactive
ABBI.101.005Amazon Containeramazon, container, deliveryactive
ABBI.101.006Vertex Omnivertex, omniactive
ABBI.102IR And FundLP management, fundraising, roadshow, investor dataactive
ABBI.102.001Europe Fundeurope fund, europe, roadshow, why europeactive
ABBI.102.002European Industrial Investorseii, european industrialactive
ABBI.102.003GFO Investor Listinvestor list, gfo, investor contactsactive
ABBI.102.004LP Relations DDQlp relations, ddq, due diligenceactive
ABBI.102.005Preqin Pitchbook Datapreqin, pitchbook, pe researchactive
ABBI.102.006AGM ABBI Presentationregistered 2026-07-07 (reconciliation)active
ABBI.103OperationsInternal firm management, strategy, people, board, accountabilityactive
ABBI.103.001Partner Separationpartner separation, separationactive
ABBI.103.002Management Committeemanagement committee, mc, rolesactive
ABBI.103.003MP Expectationsmp expectations, mpo, managing partneractive
ABBI.103.004Direct Reportsdirect reports, deal team, expectationsactive
ABBI.103.005Carried Interest Changescarried interest, carryactive
ABBI.103.006Internal Meetingsinternal meetings, strategy meetingsactive
ABBI.103.007Board Meeting Prepboard meeting, board prep, bodactive
ABBI.103.008Q1 Portfolio Reviewq1 review, portfolio review, quarterly reviewactive
ABBI.103.009Confidentialconfidentialactive
ABBI.103.010Q2 BOD Meetingq2 bod, board of directorsactive
ABBI.103.011MGC 2.0 Strategymgc 2.0, transformationactive
ABBI.103.012MGC Industrial Indicatorsindustrial indicators, economic indicatorsactive
ABBI.103.0132026 AGM Slidesagm, annual meeting, agm slidesactive
ABBI.103.014AGM Whitepaperactive
ABBI.103.015Master Controllerrenumbered from ABBI.103.014 2026-07-07 (number collision)active
ABBI.104ReportingCross-cutting reports, data analysisactive
ABBI.104.001Weekly MPO Reportmpo report, weekly report, mpo weeklyactive
ABBI.104.002Investment Ops Meetingsinvestment ops, ic meetingsactive
ABBI.104.003MGC LLM Training Datallm training, training dataactive
ABBI.104.004PE Industrial Surveype survey, industrial surveyactive
ABBI.104.0052026 AGMregistered 2026-07-07 (reconciliation)active
ABBI.104.007Market Intelligence PipelineIB email scraping pipeline, weekly market intel briefing, Snowflake HURRICANE.MARKET_INTELactive
ABBI.104.008LPAC Meetingrenumbered from ABBI.104.005 2026-07-07 (number collision)active
ABBI.301European PEregistered 2026-07-07 (reconciliation)active
ABBI.302Meeting Intelligenceregistered 2026-07-07 (reconciliation)active
ABBI.3062026 AGM Market Data Whitepaperregistered 2026-07-07 (reconciliation)active
ABBI.307Project Abacusregistered 2026-07-07 (reconciliation)active
ABBI.308New AI Company Nameregistered 2026-07-07 (reconciliation)active
ABBI.309Public Fund Raising Methodsregistered 2026-07-07 (reconciliation)active
ABBI.323IR Dashboardactive
ABBI.324Portfolio Company Monitoring and Analysisactive
ABBI.326New Dealactive
ABBI.326.001New Deals - Public to Privateactive
ABBI.333trainingactive
ABBI.352Dalton Environmentalactive
ABBI.355Marketing researchactive
ABBI.359Fund raisingrenumbered from ABBI.314 Fund raising 2026-07-07 (number collision)active
ABBI.360Deal Flow Processrenumbered from ABBI.315 Deal Flow Process 2026-07-07 (number collision)active
ABBI.361Portfolio Intelligence Systemrenumbered from ABBI.325 Portfolio Intelligence System 2026-07-07 (number collision)active
ABBI.363SPAC Research July 2026SPAC reverse-merger target screens for MGC portfolio companies; per-company subfolders (Moonshot, Stemmer-Abacus, Race Winning Brands, Six Axis)active
ABBI.365Value Stream Mappingactive
ABBI.370New 9 box conceptactive
ABBI.371Make vs Buyactive
ABBI.372Management company incomeactive
ABBI.373Attala Steel Performanceactive
ABBI.374Fund III LPAactive
ABBI.375dyana attendanceactive
ABBI.376TPS Manualactive
ABBI.382Deal Team Activitiesactive

Resolute 7

ABBI #ProjectDescriptionStatus
ABBI.200ResoluteResolute infrastructure and businessactive
ABBI.200.001Resolute Infrastructureresolute infrastructure, resolute platformLIVE
ABBI.200.002ResogramLIVE
ABBI.200.003Resolute AppLIVE
ABBI.200.004Mediarenumbered from ABBI.200.002 2026-07-07 (number collision)active
ABBI.367DRF Dataactive
ABBI.369beyer speed figure reverse engineeringactive

Banner 2

ABBI #ProjectDescriptionStatus
ABBI.100.003Banner Industriesbanner, banner industries, divestitureactive
ABBI.100.026Banner DataLIVE

AI Research 9

ABBI #ProjectDescriptionStatus
ABBI.304New AI ModelApeirin.ai — new cognitive architecture with Meiosis Engine, Discernment Filters, Mother Nature paradigmactive
ABBI.304.001Cognitive Architecturecognitive architecture, meiosis engine, discernment filters, algorithm mitosisactive
ABBI.304.002Website Designwebsite, apeirin.ai, web design, next.jsactive
ABBI.304.003Fundraisingfundraising, capital raise, investor, pitch deckactive
ABBI.304.004Apeirin Dashboardactive
ABBI.304.005Hiringrenumbered from ABBI.304.000 2026-07-07 (number collision)active
ABBI.304.006Apeirin CLIrenumbered from ABBI.304.004 2026-07-07 (number collision)active
ABBI.348bio computeractive
ABBI.350Open Source AI Researchactive

Personal 8

ABBI #ProjectDescriptionStatus
ABBI.300PersonalNon-MGC personal projectsactive
ABBI.300.001Horse Handicappinghorse, handicapping, racing, aheactive
ABBI.300.002FG Race Planningfg, fair grounds, race planningactive
ABBI.300.003KY Derby Handicappingkentucky derby, ky derby, derbyactive
ABBI.332Equibase cloneactive
ABBI.343survey of thoroughbred webistes and applicattionsactive
ABBI.384Car values based on recent auctions and onlline listingsactive
ABBI.385desk buddyactive

v20 Onboarding & Access Partial — peer-provisioning untested

What it is & why it exists

v20 is the contractor/developer admin tier — the identity your two new stack developers actually log in as. It sits between ordinary V2 users (standard MiddleGround employees) and the v200 ADMIN (the Managing Partner's own instance). A V20_ADMIN has full administrative control over the V2 and v20 infrastructure (user management, API keys, all V2 Snowflake data and procs) but has zero v200 access — Sovereign Mind, master credentials, and the v200 Azure/Cloudflare control plane are hard-blocked.

Objective of this tab: give both developers one authoritative page for how they get access — what role they receive, through which gateway it is provisioned, what still needs to be tested, and how they reach this portal. The governing fact today: Raj Yadav (nyadav@middleground.com) is the SOLE existing V20_ADMIN (verified by live query of account SXA84406). The 2nd developer must receive the same V20_ADMIN role — and the path by which one V20_ADMIN provisions a peer V20_ADMIN has never been exercised.

Ground truth (live, 2026-07-22): A query of V2_ABBI_AI_WH.V2_ADMIN_HIVE_MIND.USERS returns exactly one real V20_ADMIN — Raj (persona V20_ADMIN, ACTIVE, hive-mind schema V2_NYADAV_HIVE_MIND). A single test identity abbi-test-v20@middleground.com is flagged test_account:true and is not a real user. No new v20/v2 user has been created since the 2026-07-20 beta cohort.

How it works

The 2nd developer is onboarded by having Raj (a V20_ADMIN) provision them as a peer V20_ADMIN through his own tooling. That provisioning must run against the V2 admin gateway (mcp.abbi-ai.com / the v2gw Cloudflare Worker), not the v200 sm_ tool — the v200-side Snowflake replica (account IRA11585) is a stale replica; writes there race and duplicate. The v20 client rides the v2 gateway with persona=v20admin, and the gateway routes tools/list to the V2 backend (nothing v200-unique). Every Hive Mind read/write goes through that authenticated V2 user gateway to V20_ADMIN_HIVE_MIND.

2nd developer (Windows/Mac console) │ persona = v20admin ▼ mcp.abbi-ai.com ── v2gw CF Worker ──► V2 backend (account SXA84406) │ │ │ provisioning done BY Raj (V20_ADMIN) ├─ V2_ADMIN_HIVE_MIND.USERS (create peer) │ ├─ V20_ADMIN_HIVE_MIND (read/write) ▼ └─ validateV20AdminSQL: v200/SOVEREIGN blocked NEW V20_ADMIN role ── verify RLS + login ✗ NOT via v200 sm_ tool (IRA11585 = stale replica → race/duplicate) Access to THIS portal: browser ──► onboarding.abbi-ai.com ──► CF Access (Microsoft SSO) allow-list: jstewart@ , nyadav@ (default-deny) add 2nd dev's @middleground.com AFTER Raj provisions them

Onboarding steps for the 2nd developer:

  1. Get the 2nd developer's Microsoft (@middleground.com) email from Raj — or provision with a placeholder and update.
  2. Test the peer-provisioning path: Raj provisions the 2nd dev as V20_ADMIN through the V2 admin gateway (mcp.abbi-ai.com), then verify Row-Level Security and login. This is simultaneously (a) how the 2nd dev gets access and (b) the first real test of Raj's admin capability.
  3. Provision a Gitea account and tailnet (Tailscale) access on day one (Raj already has both).
  4. Add the 2nd dev's email to the onboarding.abbi-ai.com Cloudflare Access allow-list.

Technical specification & design

The v20 access stack is built from these concrete components (all verified in the repo):

  • Gateway: Cloudflare Worker v2gw at mcp.abbi-ai.com/mcp (+ /config), hardcoded in the client bootstrap proxy — v2/workers/v2-mcp-gateway-east/worker.js and v2/clients/install-kit/proxy/v2-gateway-bootstrap-proxy.cjs. Auth is a Bearer header; the proxy fetches a per-user config. SQL is fenced by validateV20AdminSQL (v200/SOVEREIGN blocked).
  • Identity / SSO: Cloudflare Access in front of onboarding.abbi-ai.com, using the azureAD IdP "MiddleGround Microsoft" (102fbe82…). Default-deny allow-list policy.
  • Data plane: Snowflake — V2 account SXA84406 (V2_ABBI_AI_WH, schemas V2_ADMIN_HIVE_MIND, V20_ADMIN_HIVE_MIND); HURRICANE is read-only for v20. The v200 replica IRA11585 is explicitly excluded.
  • Client consoles: Windows launcher (abbiv20.cmd, abbiv20.ps1 in the install kit; abbiv20admin.ps1, launch-v20admin.ps1 under v20/clients/windows/) and the Mac CLI. Raj's Windows path is MGC-LT140.
  • Boot governance: boot-prompt-v20admin v21.0 (ABBI.357 batch 92ce1f5e, 2026-07-07) — decision table, escalation policy, no-PIN audit-only authority.
  • Client bundle: 24 gateway tools + 52 curated skills + a 6-file memory seed corpus (see v20-manifest.md). Tools include sm_query_snowflake (full V2 admin SQL), sm_hive_mind_read, M365 (7), Dropbox (3), DealCloud (4), Asana (3), plus abbi_bootstrap.
  • Networking: Tailscale tailnet membership required per developer; Gitea (abbi/abbi-infrastructure) for source access — v2/ + v20/ full commit, v200/ read-only.

Deliverables

  • A provisioned V20_ADMIN identity for the 2nd developer in V2_ADMIN_HIVE_MIND.USERS (persona V20_ADMIN, ACTIVE, own hive-mind schema), created via mcp.abbi-ai.com.
  • A verified peer-provisioning run — the first successful "V20_ADMIN provisions a peer V20_ADMIN" cycle, with RLS + login confirmed.
  • A Gitea account and tailnet device for the 2nd developer.
  • The 2nd developer's email added to the Cloudflare Access allow-list for onboarding.abbi-ai.com.
  • Installed v20 console + client bundle (24 tools, 52 skills, memory corpus, boot-prompt-v20admin v21.0).

Implementation by realm

The rows below contrast the three admin roles this tier is defined against (from the approved v20admin role-design access matrix) plus the portfolio realms.

Realm / roleStatusDetail
v200 ADMINFull controlManaging Partner's own instance. FULL ADMIN on everything: SOVEREIGN_MIND, MASTER_CREDENTIALS, v200 ACA containers, CF Workers, v200 Hive Mind. Grants and gates all lower tiers.
v20 (V20_ADMIN)1 live, peer path untestedContractor/developer admin tier. FULL ADMIN on V2 user mgmt + API keys; READ/WRITE V20_ADMIN_HIVE_MIND; HURRICANE read-only; Gitea v2/+v20/ full commit, v200/ read-only. SOVEREIGN_MIND + MASTER_CREDENTIALS + v200 ACA/CF hard-blocked. Only Raj exists today; 2nd dev pending.
v2 (V2 User)Live cohortStandard MGC employees. Scoped access under RLS; no admin, no v20/v200. Beta cohort 2026-07-20: rfisher, csmal (L2), shundley — provisioned by the platform via the V2 admin gateway, not by Raj.
ResoluteNot in v20 scopeSeparate realm (ABBI.200.x infra/app). Not part of v20 developer onboarding; no v20 admin authority extends here.
BannerNot in v20 scopeMGC_BANNER realm (ABBI.100.026, account KGB57253). Outside the v20 developer-access surface; not provisioned through this path.
MGC platformOnboarding surfaceThe v20 tier is the MGC developer-admin surface for the V2/v20 platform. Portal + provisioning live here; 2nd-dev enrollment is the open item.

Development status

LIVE now:

  • Raj onboarded as the sole V20_ADMIN (SXA84406-verified); ABBI.357 behavioral governance deployed — boot-prompt-v20admin v21.0, memory corpus, /IB + /fix-repair skills, raj-path-probe LaunchAgent.
  • v20 install kit (Windows console) + v20-manifest.md (24 tools, 52 skills, memory corpus) in Gitea.
  • Portal deployed at onboarding.abbi-ai.com behind Microsoft SSO (Cloudflare Access) — unauthenticated request returns HTTP 302 → Cloudflare Access login (SSO enforced, verified 2026-07-22). Allow-list: jstewart@ + nyadav@, default-deny.

IN PROGRESS / open:

  • Peer-provisioning path — "a V20_ADMIN provisions a peer V20_ADMIN" has never been run. This is the primary untested path and must be exercised through mcp.abbi-ai.com (not the v200 sm_ tool).
  • 2nd developer enrollment — needs their @middleground.com email, then: provision V20_ADMIN, verify RLS + login, add to CF Access allow-list, issue Gitea + tailnet access.
Do not provision via the v200 sm_ tool. Its Snowflake replica (account IRA11585) is a stale replica; concurrent writes race and duplicate. All v20 provisioning goes through the V2 admin gateway mcp.abbi-ai.com against account SXA84406.

Source documents (Gitea)

v20/clients/install-kit v20-manifest.md boot-prompt-v20admin.txt v20 memory corpus v20/clients/windows v20admin role-design spec v2 install-kit README (gateway) v2gw gateway worker onboarding portal DEPLOY_RECORD

  • v20/clients/install-kit — the full v20 client bundle: boot prompt, memory seed, curated skills, Windows launchers.
  • v20-manifest.md — authoritative pin of the 24 v2-gateway tools and 52 curated skills a v20admin receives.
  • boot-prompt-v20admin.txt — v21.0 (ABBI.357 batch 92ce1f5e): tier definition, access-grant matrix, escalation policy, no-PIN audit model.
  • v20 memory corpus — MEMORY.md index + feedback files (escalation policy, definition-of-done, durability, rollback-before-change).
  • v20/clients/windows — Windows console launchers (abbiv20admin.ps1, launch-v20admin.ps1) for the developer machine.
  • v20admin role-design spec — approved (Gate 1) access matrix comparing v20admin vs v200 ADMIN vs V2 User, plus role-creation SQL.
  • v2 install-kit README — documents the hardcoded gateway mcp.abbi-ai.com/mcp the v20 client rides.
  • v2gw gateway worker — the Cloudflare Worker that routes v20admin persona traffic to the V2 backend.
  • onboarding portal DEPLOY_RECORD — CF Pages + DNS + Access app 589fd914… + allow-list policy 7aa68fd4…, SSO verification, and the exact step to add the 2nd developer.
Portal delivery: served at onboarding.abbi-ai.com behind Microsoft SSO (Cloudflare Access). Allow-list = the Managing Partner (jstewart@) + the two developers, default-deny. The 2nd developer's @middleground.com email is added to Access policy 7aa68fd4… only after Raj provisions them as V20_ADMIN.