Skip to content
Back to skills

Okf Catalog

ASecurity

Create, follow, and continuously update an Open Knowledge Format (OKF) knowledge catalog for a project. Use whenever starting a project, documenting project knowledge (tables, datasets, metrics, APIs, playbooks, decisions, runbooks), or when an OKF bundle needs a new/updated concept doc, index.md, or log.md entry. Covers v0.1 bundle structure, frontmatter fields, reserved files, cross-links, and §9 conformance.

  • 2 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 19, 2026
ai-agentsgotestinggitapidatabase

Works with

  • api

Security analysis

A100/100

Scanned September 19, 2026

npx -y skills add theesfeld/claude-okf --skill okf-catalog --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Okf Catalog?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Okf Catalog
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/theesfeld-okf-catalog/badge)](https://www.skillsdirectory.com/skills/theesfeld-okf-catalog)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: okf-catalog
description: Create, follow, and continuously update an Open Knowledge Format (OKF) knowledge catalog for a project. Use whenever starting a project, documenting project knowledge (tables, datasets, metrics, APIs, playbooks, decisions, runbooks), or when an OKF bundle needs a new/updated concept doc, index.md, or log.md entry. Covers v0.1 bundle structure, frontmatter fields, reserved files, cross-links, and §9 conformance.
---

# Maintaining an OKF knowledge catalog

**OKF (Open Knowledge Format)** is Google Cloud's vendor-neutral, agent-agnostic
standard for project knowledge: plain markdown + YAML frontmatter + files, no database,
no SDK. This plugin treats OKF as a **prime directive** — *every* project gets a catalog,
kept current. (The SessionStart hook is what enforces that; see the repo README to dial it
back or turn it off.)

- Spec (the standard is young and evolving):
  <https://raw.githubusercontent.com/GoogleCloudPlatform/knowledge-catalog/main/okf/SPEC.md>
- Current version: **v0.1**.

**Strict adherence is non-negotiable.** Before *creating* a new bundle or running a
conformance pass, **WebFetch the live spec above** and confirm the version + clauses — do
not rely on the summary in this skill, which can lag the standard. If the live spec
disagrees with anything here, **the live spec wins**; follow it and note the divergence.
The hard floor never relaxes: every non-reserved `.md` is UTF-8, opens/closes with `---`,
parses as YAML, and carries a non-empty `type`.

## Placement (do this first on a new catalog)

If the project has no bundle and placement is ambiguous, **ask the user where to put it.**
Default when unprompted: an `okf/` directory at the project root. Once chosen, that
directory is the **bundle root**.

## Bundle anatomy

A bundle is a directory tree. Each non-reserved `.md` = one **concept** (a table, dataset,
metric, API endpoint, playbook, service, architectural decision…). Group concepts into
subdirectories that mirror the domain.

```
okf/                         # bundle root
├── index.md                 # directory listing; ONLY index.md allowed to carry frontmatter
├── log.md                   # newest-first change history
├── datasets/
│   ├── index.md
│   └── orders_db.md
├── tables/
│   ├── index.md
│   ├── orders.md
│   └── customers.md
└── metrics/
    ├── index.md
    └── weekly_active_users.md
```

## Concept document = frontmatter + body

```markdown
---
type: BigQuery Table          # REQUIRED — the only mandatory field. Short string.
title: Orders                 # recommended — human-readable display name
description: One row per completed customer order.   # recommended — one sentence
resource: https://console.cloud.google.com/bigquery?p=acme&d=sales&t=orders  # recommended — canonical URI
tags: [sales, revenue]        # recommended — YAML list
timestamp: 2026-05-28T14:30:00Z   # recommended — ISO 8601 of last meaningful change
---
# Schema

| Column | Type | Description |
|--------|------|-------------|
| `order_id` | STRING | Globally unique order identifier. |
| `customer_id` | STRING | FK to [customers](/tables/customers.md). |

# Examples

...

# Citations

[1] [Source title](https://example.com)
```

**Frontmatter rules (§4.1):**
- `type` is the **only required** field and must be **non-empty**.
- Recommended, in priority order: `title`, `description`, `resource`, `tags`, `timestamp`.
- Producers MAY add any extra keys; never strip unknown keys you find — preserve them.
- Pick `type` values that are stable and meaningful to the project ("API Endpoint",
  "Metric", "Playbook", "ADR", "Service", "Postgres Table"). They are not centrally registered.

**Body:** standard markdown. Conventional section headings: `# Schema`, `# Examples`,
`# Citations`. Lead with what a reader/agent most needs.

## Cross-links

- Absolute (bundle-root relative), begins with `/`: `[customers](/tables/customers.md)`
- Relative: `[other](./other.md)`

Links are untyped; the relationship is conveyed by surrounding prose. Broken links are
tolerated by the spec but fix them when you notice them.

## Reserved files — never use these names for concepts

**`index.md`** — directory listing for the level it sits in. No frontmatter, **except**
the bundle-root `index.md`, which MAY declare the version:

```markdown
---
okf_version: "0.1"
---
# Sales knowledge catalog

* [Orders](tables/orders.md) - One row per completed customer order.
* [Customers](tables/customers.md) - One row per customer.
```

Non-root `index.md` carries no frontmatter — just headings and a bullet list of
`* [Title](relative-url) - short description`, descriptions mirroring each concept's
`description`.

**`log.md`** — chronological change history, **newest first**, dates as `## YYYY-MM-DD`:

```markdown
# Update Log

## 2026-06-13
* **Creation**: Added `tables/orders.md`.
* **Update**: Revised `metrics/weekly_active_users.md` definition.
```

## "Continuously update" — the part people forget

Whenever the project changes in a way that affects documented knowledge:
1. Edit the affected concept doc(s); bump their `timestamp`.
2. Add/adjust `index.md` entries for any new/removed concepts.
3. Append a dated entry to the bundle-root (and relevant subdirectory) `log.md`.

Before declaring project work done, the catalog must reflect the change. A stale catalog
is unfinished work.

## §9 conformance — what "fully adhere" means

A bundle conforms iff:
1. Every **non-reserved** `.md` has a parseable YAML frontmatter block.
2. Every such frontmatter has a **non-empty `type`**.
3. `index.md`/`log.md` follow the structures above when present.

Plus the spec-body MUSTs that flank §9: files are **UTF-8** (§4); reserved filenames
`index.md`/`log.md` are **never** reused for concepts (§3.1); `log.md` entries use the
`**Action**: description` convention under `## YYYY-MM-DD` headings, newest-first (§7);
cross-links prefer the absolute, `/`-prefixed bundle-root form (§5).

Consumers MUST NOT reject a bundle for: missing optional fields, unknown `type` values,
unknown extra keys, broken cross-links, or missing `index.md`. So: be liberal in what you
add, strict about `type` + parseable UTF-8 frontmatter.

Verify with the **`okf-auditor`** agent before declaring done.

## Anti-patterns / corrections

- **Do not** copy field schemas from third-party blogs. The undercodetesting.com article
  invents `id`, `links`, `references`, `updated` — these are NOT OKF. The real required
  field is `type`; the recommended set is title/description/resource/tags/timestamp.
- **Do not** put frontmatter in a non-root `index.md`.
- **Do not** give a concept doc an empty or missing `type`.
- **Do not** treat the catalog as write-once — it lives with the project.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…