A skill is a focused, reusable playbook. It says what it does, when to use it, and the method to follow: "Add idempotency keys to mutating endpoints", "Define least-privilege RBAC for a workload", "Instrument API endpoints for observability". The engine adds a skill's instructions to a turn so the model works the way the skill describes. Skills come from the public catalog at skills.openeng.app, and you adopt the ones you want on the Console's Skills page (Building blocks → Skills).
Status on September 25, 2026: OpenEng AI isn't live yet
The Console and Web Console interfaces load, but the OpenEng AI API routes and the Broker aren't deployed. Nothing can be saved or published, and no AI engine can register or connect. Pro, Enterprise and pay-as-you-go launch in Q4 2026 and can't be purchased yet. This page describes OpenEng AI as it works once those services are live (status).
Agents, templates and skills
All three shape what the model is told, at different sizes:
| Kind | What it is | How it's applied |
|---|---|---|
| Agent | A persona: a system prompt, optionally its own model | Replaces the base system prompt for the turn |
| Template | A blueprint for a big, structured deliverable | Added as the turn's authoritative blueprint |
| Skill | A focused method for one kind of task | Added under the turn's "Active skills" |
They combine: a message can run as an agent, follow a template and carry several skills at once.
The catalog
As of September 25, 2026, the catalog holds 885 skills in 18 categories: APIs & Integration, CI/CD & Release, Cloud & Kubernetes, Coding & Refactoring, Data & Analytics, Databases & SQL, Debugging & Diagnostics, DevOps & Infrastructure, Documentation & Writing, Frontend & UI, Git & Version Control, Memory & Knowledge, Observability & Monitoring, Performance & Profiling, Project & Planning, Self-Improvement & Curation, Testing & QA, and Web Research & Scraping.
Every skill has an id skill_, a name, a one-line description, a version, a category and
tags. Its full text is a Markdown file at https://, which is exactly
what the engine reads. The site's catalog file is
skills.openeng.app/catalog.json.
The Skills page: Mine and Catalog
- Catalog lists the shipped skills with their category and version, and a filter box. Adopt
creates your own copy: a new id (
skill_usr_…) that remembers the catalog id it came from, under a unique name (adopting a second skill with a name you already use adds a number, such as "Docs writer 2"). Skills you've already adopted show an Adopted badge instead of the button. - Mine lists the skills you've adopted, with their catalog reference and id. Delete removes your copy; config versions you already published keep the reference they froze.
The page is adopt-only: there is no New skill button, because the Console can't author a
skill from scratch yet. To write your own, use a local SKILL.md file (see
Local skills).
The Library adopts skills too: importing a bundle adopts each skill it names.
Use skills in a config
- Adopt the skills on the Skills page.
- Open the config and go to its Skills step ("Adopted skills"), then pick the ones this config should carry. The step lists only skills you've adopted.
- Publish the config. For each selected skill, the published config records the catalog id it came from.
On every turn served on that config, the engine adds the selected skills to the instructions, under an "Active skills" heading. For a catalog skill it reads the text from skills.openeng.app, unless the machine has a local skill with the same id (a local copy always wins). A skill that can't be found is skipped with a notice, and the turn carries on without it.
Scope one message
In the Web Console at app.openeng.app, you can add a skill to a single
message: type /skill <id> before the message (the composer suggests the skills in the running
config), or tick it in the component selector beside the composer. Scopes combine, so one message
can carry /agent, /template and several /skill prefixes. You type it as one line; here it's
broken at each prefix so it fits:
/template tpl_def_kubernetes-deployment-manifests
/skill skill_def_cloud-apply-rbac-least-privilege
write the manifests for the payments service
The skill's text is added to that message's instructions only.
Local skills: SKILL.md
The engine also reads skills from files on the machine it runs on:
| Where | Scope |
|---|---|
~/ | Your skills on this machine |
<workdir>/ | One project; wins over a user skill with the same name |
The user directory moves if you set OPENENG_, or if the config's Global paths step
sets a skills path. A SKILL.md starts with front matter (name, description, and an optional
allowed-tools list, which is advisory), followed by the instructions:
---
name: rustfix
description: Fix Rust build errors
allowed-tools: read_file, edit, check
---
Run cargo, read the error, edit the file, re-run.
You use a local skill by scoping a message to it with /skill <name>. A local skill whose name
matches a skill id the config selects is used in place of the catalog text on that machine.
Self-improving skills
Self-improving skills is a separate switch in the config's Settings step: "The agent learns from runs to refine its skills, on-device." It's one of the engine's shipped on-device cores, so it adds no role slot and downloads no model. A Library bundle can ask for it to be turned on when you import it.
Plan & tier notes
Adopting skills and selecting them into configs is open on every plan. Running a config needs the
openeng engine, which starts only on an active Pro plan (Plans & billing).
Troubleshooting
"skill '…' not found locally — skipped". The engine couldn't find a local SKILL.md with that
id, and couldn't fetch a catalog skill's text from skills.openeng.app. Check the machine's network,
and that the id is right (Skills → Mine shows each skill's catalog reference).
I can't create a new skill in the Console. The Skills page is adopt-only for now. Write a local
SKILL.md instead.
The config's Skills step is empty. It lists only skills you've adopted. Adopt some on the Skills page first.
"Catalog may be stale." The Console couldn't reach skills.openeng.app and is showing the last copy it loaded.