The ready-made building blocks OpenEng offers come from public catalogs. Each catalog is a small
website of its own at <kind>., where you can browse and search it, and each publishes the
same data as JSON for the Console and the engine to read. Everything on this page is public: no
sign-in and no key.
You don't need any of these files to use OpenEng. The Console shows every catalog on its own pages and lets you adopt or import entries from there (The Console). This page is for anyone who wants to script against the catalogs, check what a config refers to, or pin a version.
The catalogs
Each catalog's name links to its site. Entry counts are from each catalog.json on September 25,
2026; the catalogs grow, so read count (or the length of the entry list) for the current number.
| Catalog | Entries | ID prefix | What an entry is |
|---|---|---|---|
| Agents | 1,092 | agent_def_ | An agent's operating brief: a single worker (810) or an orchestrator that delegates to sub-agents (282). In the Console: Building blocks → Agents (Agents). |
| Skills | 885 | skill_def_ | A focused playbook the engine adds to a turn. Building blocks → Skills (Skills). |
| Templates | 754 | tpl_def_ | A prompt set: a system prompt the engine combines with your prompt. Building blocks → Templates (Templates). |
| Models | 28 | mdl_def_ | An on-device, Ollama-library model (it runs through a local Ollama daemon you install) with its minimum requirements. Building blocks → Models (Models). |
| Cells | 550 | cell_def_ | A small tool server for one cloud service that you deploy in your own cloud account: 260 for AWS, 150 for Azure and 140 for Google Cloud; 435 read and 115 write. Connect → Cells (Cells). |
| Plugins | 14 | plg_def_ | A behavior that gates, transforms, observes or enriches a call at the engine's gateway. Govern → Plugins (Plugins). |
| Roles | 1,524 | role_def_ | A behavioral rule-set that makes an agent work like a named professional. Govern → Roles (Roles). |
| Library | 8 | lib_def_ | A bundle of agents, skills, templates and cells, with optional model picks, that you import into a config as one unit. Building blocks → Library (Library). |
| Loops | 6 | loop_def_ | A global loop: a request, a source of iterations and a stopping rule. Two run as published; the four work-items loops need a source that works first (The loop catalog). Building blocks → Loops. |
| Connectors | 252 | connector_def_ | A connector for the engineering apps: source you deploy in your own cloud to reach a cloud or data system from Terminal, Kubernetes or Data. 240 capability packages (80 capabilities, each for AWS, Google Cloud and Azure) and 12 standalone connectors (Kubernetes, Kafka, two object stores and eight databases) (Connectors). |
| Integrations | 7 | connector_def_ | An integration for OpenEng AI: GitHub, GitLab, Jira, Canva, ElevenLabs, Datadog and Kubernetes, each a remote endpoint your engine dials. Connect → Connectors (Integrations). |
Two catalogs share the connectors site but are different things: the connectors are for the engineering apps, and the integrations are what the Console's Connect → Connectors page lists (Glossary).
Each entry also has a page on its catalog site, such as
models.openeng.app/m/codegemma-7b. The part of that URL
after the path prefix is a URL-friendly name, and it isn't always the same as the end of the entry's
id: that model's id is mdl_.
IDs
Every item's id says where it came from.
| Form | Example | What it means |
|---|---|---|
<prefix>_def_<name> | tpl_, cell_ | A shipped default from a public catalog. It's the same for everyone, and no one can edit it. |
<prefix>_usr_<uid>_<suffix> | agt_usr_<uid>_… | Something you created, adopted or copied in the Console. <uid> is your user id: once the API is live it checks the owner on every read and write, so only your account, and anyone you share a config or public template with, can read the item. |
<name>_<suffix> | A config. The API makes up the id when you create the config; the Configs page shows it on each card with a copy button (Configs). |
Prefixes you'll see on your own items include mdl (models), agt (agents), tpl (templates),
sch (schedulers), cell (cells), mcp (MCP servers), stp (storage points), skill, loop and
connector.
Version pins: <id>@<version>
Once something is published it never changes, and <id>@<version> names exactly one published
version:
- Configs. Every publish freezes a new version of the config. The Console's version timeline
offers the pinned id
<id>@<version>for copying (The version timeline), and the engine's log names the config version it serves the same way, for examplewarm-up: config <id>@.<version> READY - Templates. Publishing a template you wrote freezes an unchangeable copy of it at
<id>@<version>(Templates). - Catalogs. Each catalog version is frozen in its own file,
catalog/(below).v<version>. json
The catalog.json contract
Every catalog site serves the same files:
| Path | What it is |
|---|---|
/catalog.json | The current catalog. This is what the Console reads. |
/catalog/index.json | The published versions of the catalog: {"latest": …,. |
/catalog/v<version>.json | One version of the catalog, frozen: it never changes once published. |
/<name>.md | For agents, skills, templates and roles: one entry's full Markdown body, where <name> is the entry's id without its <prefix>_def_ part. |
The integrations catalog is the exception: it's at connectors.
and has no index or versioned copies.
The catalogs don't all use the same envelope. Each one is a JSON object with the entries in a list named after the catalog, plus version fields:
| Catalog | Envelope | Pinned file today |
|---|---|---|
| agents, templates, cells, connectors | { "version", | catalog/ |
| library | { "version", | catalog/v1.json |
| skills, plugins, roles | { "schemaVersion", | catalog/v1.json |
| models | { "schemaVersion", | catalog/v3.json (v1 and v2 are still served) |
| loops | { "schemaVersion", | catalog/v2.json |
| integrations | { "version", | none |
An entry's id is in its id field, its publicId field, or both, depending on the catalog.
curl -s https://skills.openeng.app/catalog.json | jq '.count' # 885 on September 25, 2026
curl -s https://agents.openeng.app/catalog/index.json # {"latest":"1.0.0","versions":["1.0.0"]}
curl -s https://templates.openeng.app/ab-experiment-plan.md # one template's full prompt
A few catalog sites publish more than the catalog:
- models.openeng.app also serves
runtimes.json(13 runtimes and the model formats each one runs) andproviders.json(12 providers) (Models). - loops.openeng.app also serves
catalog/and astrategies. json /referencepage: the iteration strategies the engine uses inside a single turn, published as reference data. They aren't loops you run (Loop strategies). - connectors.openeng.app also serves each connector's source as a zip under
/packages/, and the write-key generator at connectors.openeng.app/write-key (Connectors). - roles.openeng.app is for browsing. The AI engine doesn't read it: it uses the signed roles pack from releases.openeng.app (Release integrity).
The public release feed
releases.openeng.app shows the engineering apps' releases with their
release notes; releases. shows one product. The feeds behind it, and those
of the AI engine's packs, are public JSON:
https://releases.openeng.app/v1/<product>/<channel>/latest # the newest release
https://releases.openeng.app/v1/<product>/<channel>/versions # {"versions": [ … ]}, newest first
Products with a feed on September 25, 2026:
| Product | Newest version | What it is |
|---|---|---|
terminal | 0.0.4 | The Terminal engine |
kubernetes | 0.0.5 | The Kubernetes engine |
data | 0.0.4 | The Data engine |
git | 0.0.1 | The Git engine. It has a release record but no published binary (Install). |
roles | 1.1.0 | The signed behavioral-roles pack the AI engine uses |
specialists | 1.0.0 | The AI engine's sub-agent specialist pack |
The engineering-app releases are filed on the beta channel, and the stable URLs serve the same
releases, because that's what the engines check. So a record you fetch from a stable URL can say
"channel": "beta". The AI engine checks the engine product on its own channel (stable unless you
set OPENENG_); on September 25, 2026 that feed has no release yet
(The engine).
Note
A product or channel with no release answers latest with the releases site's web page,
even though the response says application/, and its versions can be that page too or an
empty list ({"versions": []}, as for chat). If you script against the feed, check that the body
starts with { and that the list isn't empty.
A release record, shortened:
{
"product": "terminal",
"channel": "beta",
"version": "0.0.4",
"releaseDate": "2026-09-19",
"notes": "OpenEng Terminal Engine 0.0.4 — every endpoint moves to openeng.app.",
"changelog": ["…"],
"critical": false,
"minSupportedVersion": "0.0.1",
"artifacts": [
{
"platform": "linux",
"arch": "x86_64",
"url": "https://openeng.app/engine/terminal/bin/openeng-terminal-linux-x86_64",
"checksum": "sha256:6e07aa7f…"
}
]
}
artifactshas one entry per platform and CPU: where the binary is and itssha256:checksum. Release records hold only these pointers; the binaries are served from openeng.app. Every engine checks the checksum before it installs an update (Release integrity).criticalandminSupportedVersion: a critical release, or any newer release when the running AI engine is older thanminSupportedVersion, is swapped in on disk right away instead of at the engine's next start, and the engine asks you to restart it (The engine). App engines always move to the newest release when they start.- Each version is its own record, so
versionsis the full history.