[{"data":1,"prerenderedAt":395},["ShallowReactive",2],{"navigation_docs":3,"-docs-architecture-key-principles":208,"-docs-architecture-key-principles-surround":390},[4,40,73,112,136,151],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fdocs\u002Fgetting-started","docs\u002F1.getting-started",[10,15,20,25,30,35],{"title":11,"path":12,"stem":13,"icon":14},"Key Features","\u002Fdocs\u002Fgetting-started\u002Fkey-features","docs\u002F1.getting-started\u002F1.key-features","i-lucide-blocks",{"title":16,"path":17,"stem":18,"icon":19},"Why Zeeq?","\u002Fdocs\u002Fgetting-started\u002Fintroduction","docs\u002F1.getting-started\u002F2.introduction","i-lucide-house",{"title":21,"path":22,"stem":23,"icon":24},"Org Onboarding","\u002Fdocs\u002Fgetting-started\u002Forg-onboarding","docs\u002F1.getting-started\u002F3.org-onboarding","i-lucide-rocket",{"title":26,"path":27,"stem":28,"icon":29},"Connecting Agents","\u002Fdocs\u002Fgetting-started\u002Fconnecting-agents","docs\u002F1.getting-started\u002F4.connecting-agents","i-lucide-plug",{"title":31,"path":32,"stem":33,"icon":34},"Harness Tuning","\u002Fdocs\u002Fgetting-started\u002Fharness-tuning","docs\u002F1.getting-started\u002F5.harness-tuning","i-lucide-wrench",{"title":36,"path":37,"stem":38,"icon":39},"FAQ","\u002Fdocs\u002Fgetting-started\u002Ffaq","docs\u002F1.getting-started\u002F6.faq","i-lucide-circle-question-mark",{"title":41,"icon":6,"path":42,"stem":43,"children":44,"page":6},"Feature Overview","\u002Fdocs\u002Fkey-features","docs\u002F2.key-features",[45,49,53,57,61,65,69],{"title":46,"path":47,"stem":48,"icon":14},"Knowledge Libraries","\u002Fdocs\u002Fkey-features\u002Fknowledge-libraries","docs\u002F2.key-features\u002F1.knowledge-libraries",{"title":50,"path":51,"stem":52,"icon":14},"Code Reviews","\u002Fdocs\u002Fkey-features\u002Fcode-reviews","docs\u002F2.key-features\u002F2.code-reviews",{"title":54,"path":55,"stem":56,"icon":14},"Code Review as Agent Tool","\u002Fdocs\u002Fkey-features\u002Fcode-review-tool","docs\u002F2.key-features\u002F3.code-review-tool",{"title":58,"path":59,"stem":60,"icon":14},"Zeeq Tools Telemetry","\u002Fdocs\u002Fkey-features\u002Ftool-and-docs-telemetry","docs\u002F2.key-features\u002F4.tool-and-docs-telemetry",{"title":62,"path":63,"stem":64,"icon":14},"Session Telemetry","\u002Fdocs\u002Fkey-features\u002Fsession-telemetry","docs\u002F2.key-features\u002F5.session-telemetry",{"title":66,"path":67,"stem":68,"icon":14},"Dynamic Skills","\u002Fdocs\u002Fkey-features\u002Fdynamic-skills","docs\u002F2.key-features\u002F6.dynamic-skills",{"title":70,"path":71,"stem":72,"icon":14},"World Model (2026 Q3)","\u002Fdocs\u002Fkey-features\u002Fworld-model","docs\u002F2.key-features\u002F7.world-model",{"title":74,"path":75,"stem":76,"children":77,"page":6},"Managing Zeeq","\u002Fdocs\u002Fmanaging-zeeq","docs\u002F3.managing-zeeq",[78,83,88,93,97,102,107],{"title":79,"path":80,"stem":81,"icon":82},"Local Development","\u002Fdocs\u002Fmanaging-zeeq\u002Flocal-development","docs\u002F3.managing-zeeq\u002F0.local-development","i-lucide-square-terminal",{"title":84,"path":85,"stem":86,"icon":87},"GitHub Configuration","\u002Fdocs\u002Fmanaging-zeeq\u002Fgithub-configuration","docs\u002F3.managing-zeeq\u002F1.github-configuration","i-lucide-github",{"title":89,"path":90,"stem":91,"icon":92},"Organizations and Membership","\u002Fdocs\u002Fmanaging-zeeq\u002Forgs-membership-invitations","docs\u002F3.managing-zeeq\u002F2.orgs-membership-invitations","i-hugeicons-cube",{"title":46,"path":94,"stem":95,"icon":96},"\u002Fdocs\u002Fmanaging-zeeq\u002Fdocument-libraries","docs\u002F3.managing-zeeq\u002F3.document-libraries","i-lucide-library-big",{"title":98,"path":99,"stem":100,"icon":101},"LLM Settings Configuration","\u002Fdocs\u002Fmanaging-zeeq\u002Fllm-settings-configuration","docs\u002F3.managing-zeeq\u002F4.llm-settings-configuration","i-hugeicons-ai-magic",{"title":103,"path":104,"stem":105,"icon":106},"Agent Code Review","\u002Fdocs\u002Fmanaging-zeeq\u002Fagent-code-reviews","docs\u002F3.managing-zeeq\u002F5.agent-code-reviews","i-hugeicons-chat-spark-01",{"title":108,"path":109,"stem":110,"icon":111},"Credentials & API Tokens","\u002Fdocs\u002Fmanaging-zeeq\u002Fcredentials","docs\u002F3.managing-zeeq\u002F6.credentials","i-hugeicons-key-01",{"title":113,"path":114,"stem":115,"children":116,"page":6},"Runtime Configuration","\u002Fdocs\u002Fconfiguration","docs\u002F5.configuration",[117,122,126,131],{"title":118,"path":119,"stem":120,"icon":121},"Google Cloud Configuration","\u002Fdocs\u002Fconfiguration\u002Fgcp-runtime","docs\u002F5.configuration\u002F1.gcp-runtime","i-hugeicons-google",{"title":84,"path":123,"stem":124,"icon":125},"\u002Fdocs\u002Fconfiguration\u002Fgithub-configuration","docs\u002F5.configuration\u002F2.github-configuration","i-hugeicons-github",{"title":127,"path":128,"stem":129,"icon":130},"Local OpenIddict Certificates","\u002Fdocs\u002Fconfiguration\u002Flocal-openiddict-certificates","docs\u002F5.configuration\u002F3.local-openiddict-certificates","i-lucide-file-lock",{"title":132,"path":133,"stem":134,"icon":135},"System Admin Access","\u002Fdocs\u002Fconfiguration\u002Fsystem-admin-access","docs\u002F5.configuration\u002F4.system-admin-access","i-hugeicons-shield-01",{"title":137,"path":138,"stem":139,"children":140,"page":6},"Metrics","\u002Fdocs\u002Fmetrics","docs\u002F6.metrics",[141,146],{"title":142,"path":143,"stem":144,"icon":145},"Metrics Dashboard","\u002Fdocs\u002Fmetrics\u002Fmetrics-dashboard","docs\u002F6.metrics\u002F1.metrics-dashboard","i-hugeicons-analytics-01",{"title":147,"path":148,"stem":149,"icon":150},"Metrics Pipeline","\u002Fdocs\u002Fmetrics\u002Fmetrics-pipeline","docs\u002F6.metrics\u002F2.metrics-pipeline","i-hugeicons-database-02",{"title":152,"path":153,"stem":154,"children":155,"page":6},"Design and Architecture","\u002Fdocs\u002Farchitecture","docs\u002F9.architecture",[156,161,166,171,176,180,184,189,194,199,204],{"title":157,"path":158,"stem":159,"icon":160},"Key Architecture Principles","\u002Fdocs\u002Farchitecture\u002Fkey-principles","docs\u002F9.architecture\u002F0.key-principles","i-lucide-pencil-ruler",{"title":162,"path":163,"stem":164,"icon":165},"MCP Tools Inventory","\u002Fdocs\u002Farchitecture\u002Ftools-inventory","docs\u002F9.architecture\u002F1.tools-inventory","i-lucide-hammer",{"title":167,"path":168,"stem":169,"icon":170},"Caching","\u002Fdocs\u002Farchitecture\u002Fcaching","docs\u002F9.architecture\u002F2.caching","i-lucide-database",{"title":172,"path":173,"stem":174,"icon":175},"Messaging and Queueing","\u002Fdocs\u002Farchitecture\u002Fmessaging-and-queueing","docs\u002F9.architecture\u002F3.messaging-and-queueing","i-lucide-message-square",{"title":177,"path":178,"stem":179,"icon":87},"GitHub Comment Rendering","\u002Fdocs\u002Farchitecture\u002Fgithub-comment-rendering","docs\u002F9.architecture\u002F4.github-comment-rendering",{"title":181,"path":182,"stem":183,"icon":87},"GitHub Integration","\u002Fdocs\u002Farchitecture\u002Fgithub-integration","docs\u002F9.architecture\u002F5.github-integration",{"title":185,"path":186,"stem":187,"icon":188},"LLM Settings and Secret Storage","\u002Fdocs\u002Farchitecture\u002Fllm-settings-and-secret-storage","docs\u002F9.architecture\u002F6.llm-settings-and-secret-storage","i-lucide-key",{"title":190,"path":191,"stem":192,"icon":193},"Organization Activation and Routes","\u002Fdocs\u002Farchitecture\u002Forganization-activation-and-routes","docs\u002F9.architecture\u002F7.organization-activation-and-routes","i-lucide-door-open",{"title":195,"path":196,"stem":197,"icon":198},"MCP Uploaded-Diff Code Reviews","\u002Fdocs\u002Farchitecture\u002Fmcp-uploaded-diff-code-reviews","docs\u002F9.architecture\u002F8.mcp-uploaded-diff-code-reviews","i-lucide-file-search",{"title":200,"path":201,"stem":202,"icon":203},"Repository Content Ingest","\u002Fdocs\u002Farchitecture\u002Frepository-content-ingest","docs\u002F9.architecture\u002F9.repository-content-ingest","i-lucide-file-stack",{"title":205,"path":206,"stem":207},"Telemetry Ingest (2026 Q3)","\u002Fdocs\u002Farchitecture\u002Ftelemetry-ingest","docs\u002F9.architecture\u002F9.telemetry-ingest",{"id":209,"title":157,"body":210,"description":383,"extension":384,"links":385,"meta":386,"navigation":387,"path":158,"seo":388,"stem":159,"__hash__":389},"docs\u002Fdocs\u002F9.architecture\u002F0.key-principles.md",{"type":211,"value":212,"toc":374},"minimark",[213,218,222,226,229,256,259,262,265,301,308,316,320,331,334,338,345,348,357,361,365,368,371],[214,215,217],"h2",{"id":216},"summary","Summary",[219,220,221],"p",{},"Zeeq's system architecture is guided by a few key principles:",[214,223,225],{"id":224},"_1-prefer-minimal-infrastructure-sprawl","1. Prefer minimal infrastructure sprawl",[219,227,228],{},"Zeeq's core features can all run on a single Postgres database instance including:",[230,231,232,236,244,247,250,253],"ul",{},[233,234,235],"li",{},"Postgres for the message queue (via Brighter)",[233,237,238,239,243],{},"Postgres for the cache layer (via ",[240,241,242],"code",{},"HybridCache"," connecting to Postgres using unlogged tables)",[233,245,246],{},"Postgres for the main application data",[233,248,249],{},"Postgres for the telemetry",[233,251,252],{},"Postgres for lock coordination and leases",[233,254,255],{},"Postgres for data protection backing",[219,257,258],{},"The design intentionally does not depend on Redis, but maintains the ability and option to add Redis via interfaces to replace the components.",[219,260,261],{},"The goal is to allow organizations to self-host with minimal additional infrastructure beyond deploying the container and connecting to an existing Postgres resource",[219,263,264],{},"Some optimizations are required for this to work:",[266,267,268,281],"table",{},[269,270,271],"thead",{},[272,273,274,278],"tr",{},[275,276,277],"th",{},"Approach",[275,279,280],{},"Reasoning",[282,283,284,293],"tbody",{},[272,285,286,290],{},[287,288,289],"td",{},"Unlogged tables",[287,291,292],{},"Use when the data is disposable and can be regenerated. This reduces WAL volume and write overhead.",[272,294,295,298],{},[287,296,297],{},"Partitioned tables",[287,299,300],{},"Use when the data grows unbounded and read scenarios will be generally scoped to a single partition or the data can be truncated (e.g. telemetry)",[219,302,303,307],{},[304,305,306],"em",{},"That said",", Zeeq's production runtime has variants:",[230,309,310,313],{},[233,311,312],{},"Pub\u002FSub for message queue (instead of Postgres)",[233,314,315],{},"Cloud KMS for key management (instead of .NET's default data protection provider)",[214,317,319],{"id":318},"_2-differentiate-configuration-and-secrets","2. Differentiate configuration and secrets",[219,321,322,323,326,327,330],{},"Secrets should be stored in Secret Manager or a secure vault while ",[304,324,325],{},"configuration"," should be placed into the ",[240,328,329],{},"appsettings.*.json"," files.",[219,332,333],{},"This makes configuration easy to manage and highly visible and easy to understand while true secrets are stored in secure vaults.",[214,335,337],{"id":336},"_3-partitioning-of-data-by-organization-id","3. Partitioning of data by organization ID",[219,339,340,341,344],{},"The ",[240,342,343],{},"organization_id"," must be a part of all primary keys for organization scoped data.",[219,346,347],{},"This ensures:",[349,350,351,354],"ol",{},[233,352,353],{},"Data is always scoped to the organization and cannot be accidentally shared across organizations.",[233,355,356],{},"Indexes are optimized for filtering by organization ID, which is the most common query pattern.",[358,359,360],"note",{},"This also makes it possible to implement Citus in the future if needed.",[214,362,364],{"id":363},"_4-use-cursors-for-pagination","4. Use cursors for pagination",[219,366,367],{},"The system uses date-based cursors in on many of the tables like the PRs, the code review findings, the telemetry since this data is generally read in sets only by date.",[219,369,370],{},"A key note here is that because the partitions are date-based, many indexes include the date as part of the index.",[219,372,373],{},"The API layer uses an encoded token which makes querying by cursor a bit more ergonomic.",{"title":375,"searchDepth":376,"depth":376,"links":377},"",2,[378,379,380,381,382],{"id":216,"depth":376,"text":217},{"id":224,"depth":376,"text":225},{"id":318,"depth":376,"text":319},{"id":336,"depth":376,"text":337},{"id":363,"depth":376,"text":364},"High level architecture principles that guide the design of the system.","md",null,{},{"icon":160},{"title":157,"description":383},"1fXADreDMuj5gM8wMK_ca8jbhQjYsn7h-Hr4KKYKGiI",[391,393],{"title":147,"path":148,"stem":149,"description":392,"icon":150,"children":-1},"How application metrics are captured, batched, stored, and served for the dashboard.",{"title":162,"path":163,"stem":164,"description":394,"icon":165,"children":-1},"An inventory of the MCP tools and their instructions.",1785298597274]