Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
.PHONY: docs-check
.PHONY: docs-check task-agent-catalog-check

MINT_VERSION ?= 4.2.687

docs-check:
task-agent-catalog-check:
python3 scripts/check-task-agent-catalog.py

docs-check: task-agent-catalog-check
npx --yes mint@$(MINT_VERSION) validate
npx --yes mint@$(MINT_VERSION) broken-links --check-anchors --check-redirects --check-snippets
27 changes: 27 additions & 0 deletions data/task-agent-catalog.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"schema_version": 1,
"default_model": "glm-5.2:cloud",
"default_harness": "codex",
"harnesses": [
{
"id": "codex",
"image": "ghcr.io/libops/cli-sandbox@sha256:c0dc9a8a354df9fc0fced0bddb0b8a4b117d2ceb9e67353a135405145e8214d5"
}
],
"models": [
{
"id": "glm-5.2:cloud",
"gateway_image_repository": "us-docker.pkg.dev/libops-images/public/task-agent-ollama-glm-5-2-cloud",
"gateway_upstream_url": "https://ollama.com",
"upstream_model": "glm-5.2",
"inference_provider": "Ollama Cloud",
"inference_location": "Ollama Cloud infrastructure",
"nat_slot": 0
}
],
"gateway_vault": {
"role": "task-agent-gateway",
"path": "secret-internal/task-agent/ollama_api_key",
"field": "value"
}
}
3 changes: 2 additions & 1 deletion infrastructure/current-release-status.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ description: "A dated availability record for the independently released artifac
There is not yet a published, platform-wide known-good release set for the managed shared-router and private-PPB request path. The architecture pages describe the target contract, but they are not evidence that this integration is generally available. Do not change production DNS or infrastructure for that path until a later status record identifies every immutable artifact and its green end-to-end release gate.
</Warning>

This snapshot was reviewed on **July 19, 2026 at 10:52 UTC**. It is a release record, not a moving "latest" lookup. A later tag does not silently update the compatibility claims on this page.
This snapshot was reviewed on **August 8, 2026**. It is a release record, not a moving "latest" lookup. A later tag does not silently update the compatibility claims on this page. Older dated references below remain evidence for those exact artifacts; they are not claims that the referenced version is the newest release.

## Status meanings

Expand Down Expand Up @@ -38,6 +38,7 @@ The table deliberately does not invent an image digest, template commit, signatu

| Integration | Status | Gate that remains |
| --- | --- | --- |
| LibOps Task Agent | Blocked | The candidate catalog still pins `libops/cli-sandbox@sha256:c0dc9a8a354df9fc0fced0bddb0b8a4b117d2ceb9e67353a135405145e8214d5`, which predates the required managed-egress hardening, and the embedded skills manifest names a canonical source revision that has not been published. Promotion requires immutable replacement artifacts, provenance verification, repository branch-policy readiness, organization model-gateway readiness, and one complete task-to-reviewable-pull-request canary. The Dashboard must not offer Task Agent for a Site that is not active and release-qualified. |
| Cloud DNS and Certificate Manager through the global load balancer, Cloud Armor, shared Cloud Run router, and private per-site PPB | Blocked / preview | API commit [`1ffa3ee`](https://github.com/libops/api/commit/1ffa3ee5fd795d50844bf3594ffa8577cbd5dfb2) completed protected [Images run 29667962498, attempt 3](https://github.com/libops/api/actions/runs/29667962498/attempts/3) with bundle tag `sha-1ffa3ee5fd795d50844bf3594ffa8577cbd5dfb2-run-29667962498-attempt-3`. That run published signed, parity-checked GHCR and GAR manifests for `site-router@sha256:4bd36aad93e8d56ca2bdab090a5aba313bbdaf708cfc3c6a2eb8e83adf057cad`, `edge-controller@sha256:d5a2bbea2993a2d84730f66b6b09d8029f9c7daef5afd0d82f160c13eeb1af85`, and `edge-provider-mutator@sha256:c50e3de30b7d9fb3806557cfe6e57f6641bb556e4147a2565f945f8804e0d907`; signature claims and cross-registry manifest parity passed. Pin commit [`723ccaa`](https://github.com/libops/api/commit/723ccaa8d23ac0cdc0ba8833e5377fa22863fdc1) records those exact GAR digests as shared-infrastructure desired state. Production promotion still requires the shared-infrastructure Terraform apply and hosted canaries for DNS authorizations, certificates, and map entries; ordered Pub/Sub and dead-letter behavior; the static deny boundary; child-zone delegation and TTL-high-water teardown; exact-service-account state gateway and transactional outbox; private router-to-PPB origin; both Direct VPC egress paths; canonical client IP; application `Authorization` preservation; split timeouts; rollout; and rollback. Cloud CDN remains disabled. |
| Organization Vault three-image runtime | Blocked / preview | The shared publisher and verified WIF selector have passed protected-main publication for `vault-server`, released `vault-init` `1.0.6`, and released `vault-proxy` `2.0.3` through the cleanup-safe shared workflow. The aggregate runtime is still blocked until sitectl-admin's digest resolver and exact tag-commit/signature gate are released, all three independently built GAR manifests are pinned by digest, and the hosted API, Terraform, initialization, recovery, and rollback gates pass. Independently green image publications are not an aggregate runtime release. |
| Canonical API image set and production VM resolver | Blocked / preview | [Protected Images run 29667962498, attempt 3](https://github.com/libops/api/actions/runs/29667962498/attempts/3) published and verified `api`, `api-init`, `api-vault-agent`, and `control-plane`; `sitectl admin terraform libops-api` resolves the exact run tag to independent image digests. Production promotion still requires a deployment record naming the four private-GAR digests and their publication provenance, plus hosted proof of fresh VM bootstrap, detached same-SHA checkout, in-place refresh, rollback, and rejection of ambiguous legacy boot-disk discovery. |
Expand Down
6 changes: 4 additions & 2 deletions platform/coding-agent-workflow.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ title: "LibOps Task Agent Workflow"
description: "How LibOps connects the LibOps Task Agent, preview environments, GitHub pull requests, and staff review to safely customize sites"
---

import TaskAgentRuntime from "/snippets/task-agent-runtime.generated.mdx";

The **LibOps Task Agent** is an AI-assisted development tool that implements customization requests directly within your site repository. The agent operates against isolated development or ephemeral preview environments, so every change is staged and reviewable before it reaches production.

This workflow lets stakeholders propose and preview site changes without bypassing technical review, quality assurance, or established deployment controls.
Expand All @@ -13,9 +15,9 @@ The Task Agent is currently a managed-beta capability, not a generally available

## Models and execution boundary

The candidate production catalog contains one runtime selection: the `codex` harness through an exact digest of the [`libops/cli-sandbox`](https://github.com/libops/cli-sandbox) image, using the customer model name `glm-5.2:cloud`. Other harnesses and models are not supported options in this catalog. A catalog entry is configuration, not evidence that the runtime has passed promotion.
<TaskAgentRuntime />

Your organization's private Cloud Run service is an authenticated model gateway. It does not host model weights or perform inference. The gateway maps the customer model name `glm-5.2:cloud` to `glm-5.2` and forwards the request to Ollama Cloud at `https://ollama.com`, where inference runs. Access to the organization gateway remains private to authorized platform workloads.
A catalog entry is configuration, not evidence that the runtime has passed promotion. Access to the organization gateway remains private to authorized platform workloads.

LibOps reviews new runtime options before adding them to the production catalog; documentation and provisioning are updated together when support is available.

Expand Down
8 changes: 4 additions & 4 deletions quickstart.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ description: "Create and prepare your first supported LibOps site"
LibOps supports the same application templates in two operating models: run the Compose project on infrastructure you control, or use the managed platform. Start with the ownership model that matches your team; the downstream Git repository remains the reviewable source of truth in either case.

<CardGroup cols={2}>
<Card title="Use the managed platform" icon="cloud" href="https://dash.libops.io">
Create the organization, project, and Site in the dashboard while LibOps manages the surrounding infrastructure.
<Card title="Request the managed beta" icon="cloud" href="https://libops.io/#managed-beta">
Ask LibOps to review whether the currently released managed capability set fits your institution. Managed hosting is not a self-service offer yet.
</Card>
<Card title="Run a template yourself" icon="server" href="/templates/app-support">
Fork a supported Compose template and operate it on a laptop, campus server, VM, or supported cloud.
Expand All @@ -18,9 +18,9 @@ LibOps supports the same application templates in two operating models: run the

Choose the application that meets the service need, then name the institutional owner for content, access, upgrades, backups, and incident decisions. Review [Supported Applications](/templates/app-support) for the current application-ownership model before adding local code.

For a managed Site, sign in to the [LibOps dashboard](https://dash.libops.io). For a self-hosted Site, start with the matching downstream template and [fork ownership guide](/templates/downstream-forks).
For a managed Site, first [request a managed-beta review](https://libops.io/#managed-beta). LibOps provides Dashboard access only after accepting a beta scope whose required integrations have passed their release gates. For a self-hosted Site, start with the matching downstream template and [fork ownership guide](/templates/downstream-forks).

For a first managed purchase, the onboarding screen collects the organization name, a provider-verified GitHub account, the supported application template, VM size, and storage choice before checkout. After Stripe confirms payment, one durable provisioning operation creates the project, private managed repository, production Site, initial deployment, and IP allowlist. The progress screen reports that operation; closing the browser does not cancel it. If onboarding reports that setup needs support, do not submit another purchase or create duplicate resources—contact LibOps from the link on that screen.
For an accepted managed-beta engagement, the onboarding screen collects the organization name, a provider-verified GitHub account, the supported application template, VM size, and storage choice before checkout. After Stripe confirms payment, one durable provisioning operation creates the project, private managed repository, production Site, initial deployment, and IP allowlist. The progress screen reports that operation; closing the browser does not cancel it. If onboarding reports that setup needs support, do not submit another purchase or create duplicate resources—contact LibOps from the link on that screen.

## 2. Establish the resource boundary

Expand Down
48 changes: 48 additions & 0 deletions scripts/check-task-agent-catalog.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
#!/usr/bin/env python3
"""Validate customer Task Agent claims against the projected production catalog."""

import json
from pathlib import Path


def main() -> None:
docs_dir = Path(__file__).resolve().parent.parent
catalog = json.loads((docs_dir / "data" / "task-agent-catalog.json").read_text())
model = catalog["models"][0]
harness = catalog["harnesses"][0]

if catalog["default_model"] != model["id"] or catalog["default_harness"] != harness["id"]:
raise SystemExit("Task Agent catalog defaults must be supported entries")
if len(catalog["models"]) != 1 or len(catalog["harnesses"]) != 1:
raise SystemExit("update the customer runtime disclosure before expanding the production catalog")

workflow = (docs_dir / "platform" / "coding-agent-workflow.mdx").read_text()
for required_import in [
'import TaskAgentRuntime from "/snippets/task-agent-runtime.generated.mdx";',
"<TaskAgentRuntime />",
]:
if required_import not in workflow:
raise SystemExit(f"platform/coding-agent-workflow.mdx is missing {required_import}")

for relative in ["snippets/task-agent-runtime.generated.mdx", "snippets/task-agent.mdx"]:
content = (docs_dir / relative).read_text()
required = [
f"`{model['id']}`",
f"`{model['upstream_model']}`",
f"`{harness['id']}`",
model["inference_provider"],
]
if relative == "snippets/task-agent-runtime.generated.mdx":
required.extend([f"`{harness['image']}`", model["gateway_upstream_url"]])
missing = [value for value in required if value not in content]
if missing:
raise SystemExit(f"{relative} is missing catalog claims: {', '.join(missing)}")
for unsupported in ["kimi-k2.6", "`claude`", "`pi`", "`opencode`", "`gemini`"]:
if unsupported in content:
raise SystemExit(f"{relative} advertises unsupported runtime {unsupported}")
if "does not host model weights or perform inference" not in content and "not a model host" not in content:
raise SystemExit(f"{relative} must disclose the organization service's gateway-only boundary")


if __name__ == "__main__":
main()
10 changes: 10 additions & 0 deletions snippets/task-agent-runtime.generated.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{/* Generated by the API Task Agent catalog. Do not edit directly. */}

### Candidate production runtime catalog

- Harness: `codex` through `ghcr.io/libops/cli-sandbox@sha256:c0dc9a8a354df9fc0fced0bddb0b8a4b117d2ceb9e67353a135405145e8214d5`
- Customer model name: `glm-5.2:cloud`
- Inference provider: Ollama Cloud
- Inference location: Ollama Cloud infrastructure, not the customer GCP project

The private Cloud Run service in the customer organization is an authenticated gateway. It does not host model weights or perform inference. It forwards the fixed `glm-5.2:cloud` customer model to `glm-5.2` at `https://ollama.com`. No other harness or model is in the candidate catalog.