Open Knowledge Format for Crossplane v2
LLM wiki kit
First committed by jkroepke
Published in jkroepke/okf-crossplane-v2. Publisher page
37 GitHub stars
What it is
LLM-wiki in OKF (Open Knowledge Format) for Crossplane v2
AutoGineer overview, from the brain’s own files
The okf-crossplane-v2 repository provides a versioned, source-backed knowledge catalog designed to help AI agents and developers navigate the Crossplane v2 ecosystem. It aggregates information from Go API types, CRDs, package metadata, and documentation into a structured format. By utilizing the Open Knowledge Format (OKF), it enables agents to perform precise lookups on providers, composition functions, and API definitions. The project includes a dedicated MCP server that allows agents to query live repository data, such as CRD definitions, versioning, and examples, ensuring that the information retrieved is grounded in specific, versioned source code.
How it works
Memory model: LLM wiki
AutoGineer overview, from the brain’s own files
The system organizes technical knowledge into a catalog of Markdown files stored in the catalog folder. These files contain OKF metadata and provenance links. An MCP server, which can be self-hosted or used via a public endpoint, ingests this catalog into a DuckDB instance. Agents interact with this data through specific tools that resolve provider versions, search CRDs, and retrieve documentation or examples. The system relies on specialized researcher agents defined in the .agents folder to maintain and validate the knowledge base, ensuring that facts are linked to stable source code and documentation.
| Folder | Role | Files |
|---|---|---|
| .codex | agent-config | 25 |
| .github | agent-config | 2 |
| skills | agent-instructions | 1 |
| .agents | folder | 37 |
| .codex-plugin | folder | 1 |
| .okf | folder | 2 |
| .pi | folder | 27 |
| .plugin | folder | 1 |
| catalog | folder | 120 |
| mcp | folder | 12 |
Requirements
Apps: Docker
API keys (by name): GITHUB_TOKEN
Works with: Claude Code, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Amp, Cline, JetBrains Junie, Devin (ex-Windsurf)
Set it up
- Download the brain as a ZIP and unzip it where you keep your notes or project: https://mp-staging.autogineer.com/agent-brains/jkroepke/okf-crossplane-v2/download
Point Claude Code at .codex-plugin/plugin.json: it does not read that file on its own.
cd okf-crossplane-v2 && claude
AutoGineer scanned these files at commit df24ac2.
Add crossplane-v2-okf to .mcp.json:
{ "mcpServers": { "crossplane-v2-okf": { "type": "http", "url": "https://crossplane.mcp.jkroepke.de/mcp" } } }Or add it with the Claude Code CLI:
claude mcp add --transport http crossplane-v2-okf https://crossplane.mcp.jkroepke.de/mcpYour data is sent to crossplane.mcp.jkroepke.de.
First committed by jkroepke. Published in jkroepke/okf-crossplane-v2. Licence: Apache License 2.0.
Usage
AutoGineer overview, from the brain’s own files
- Querying CRD definitions for specific Crossplane providers
- Retrieving versioned examples for composition functions
- Resolving stable provider versions and their associated documentation
- Integrating Crossplane knowledge into AI agent workflows via MCP
- “Find the latest version of the AWS provider and list its CRDs.”
- The agent uses the get_versions and provider_crd_search tools to return the canonical repository name and a list of available CRDs for the specified provider.
- “Show me the definition for the S3Bucket CRD in the latest AWS provider.”
- The agent retrieves the YAML definition of the requested CRD using the provider_crd_get_definition tool, ensuring the output is token-efficient.
Documentation by jkroepke
Image: CI Image: GitHub license Image: GitHub Repo stars Image: BundleDex
Open Knowledge Format for Crossplane v2
This repository provides a structured knowledge catalog for the Crossplane v2 ecosystem using Open Knowledge Format v0.2.
The goal is to make Crossplane concepts, APIs, providers, composition functions, documentation, and practical examples easier to discover and understand. The catalog is designed for both humans and knowledge-aware tools.
Installation
WARNING
The public MCP server is a temporary early-access service for early adopters. Its availability is not guaranteed, and it may change or be removed without notice. It is intended to bridge the current tooling gap until the OKF ecosystem provides practical, end-user-friendly solutions that run locally. For reliable or production use, self-host the included container.
Install the companion skill and hosted OKF-aware MCP server together as a plugin for every detected supported agent:
npx plugins add jkroepke/okf-crossplane-v2Pass --target codex to install only in Codex. Restart the selected agents
after installation.
Alternatively, install the hosted OKF-aware MCP server globally:
npx add-mcp \
https://crossplane.mcp.jkroepke.de/mcp \
--name crossplane-v2-okf \
--globalThen install the companion skill so the agent prefers this bundle over generic documentation providers for Crossplane v2 questions:
npx skills add jkroepke/okf-crossplane-v2 \
--skill crossplane-v2-okf \
--globalBoth standalone installers detect supported agents and ask where the integration should be installed. Restart the selected agent after installation.
The public MCP health endpoint is available at https://crossplane.mcp.jkroepke.de/healthz.
Self-hosting the MCP server
The included container fetches this repository, ingests catalog/ into a DuckDB catalog, and serves the okf-mcp tools over Streamable HTTP.
docker compose up --build --detachTo authenticate the server's GitHub requests, export GITHUB_TOKEN before
starting the container. The token is optional.
The local MCP endpoint is http://127.0.0.1:8000/mcp. Put it behind a TLS reverse proxy for crossplane.mcp.jkroepke.de.
The catalog is refreshed at container startup. If fetching or ingestion fails and a previous catalog exists in the volume, the server continues with that last successful catalog.
The MCP tools are read-only, but the public endpoint has no application-level authentication. Apply request limits and access controls at the reverse proxy when required.
Crossplane package tools
The server adds these tools backed by OSS GitHub repositories:
get_versions(name)resolves an OSS provider or function repository and returns its canonical repository name,versions.latest, a compact list of recent stable versions, and tag counts. Pass the returned provider name to the CRD tools.provider_crd_search(provider_name, provider_version, crd_search_term)searches CRDs in one explicit provider package version. The search term supports case-insensitive shell-style wildcards.provider_crd_get_definition(provider_name, provider_version, crd_name, path?)returns the complete CRD definition as token-efficient YAML. Use a dotted path such as.specor.spec.versions[0]to return only a subtree.provider_crd_get_examples(provider_name, provider_version, crd_name)returns GitHub repository paths for generated and handwritten examples. Without an API version, it selects the latest served CRD API version, for exampleexamples-generated/namespaced/ec2/v1beta2/route.yaml.provider_crd_get_terraform_docs(provider_name, provider_version, crd_name)returns the Terraform provider repository, version, and documentation path. It reads the Crossplane provider Makefile and the generated controller mapping instead of inferring the Terraform resource name.
crd_name accepts a Kind, group/Kind, group/version/Kind, or a YAML fragment containing apiVersion and kind.
Use an OSS GitHub repository name such as crossplane-contrib/provider-upjet-aws or crossplane-contrib/function-go-templating. A small set of historical package aliases is mapped to their known OSS source repositories; unmapped upbound/... names are rejected rather than guessed.
The CRD tools require an explicit provider version. The value latest is also supported and selects the highest stable semantic-version Git tag. Self-hosted deployments need outbound HTTPS access to GITHUB_API_URL and GITHUB_RAW_URL.
Successful remote fetches are cached in memory. Git tag listings use the configurable short FETCH_CACHE_TTL_SECONDS (default: 300 seconds); CRDs, definitions, examples, and Terraform metadata resolved at immutable Git tags are cached for 30 days. FETCH_CACHE_MAX_ENTRIES (default: 512) bounds memory use.
Why this repository exists
Crossplane knowledge is distributed across many repositories and kinds of sources:
Go API types and runtime implementations
CustomResourceDefinitions and OpenAPI schemas
package metadata
tests and executable examples
official Crossplane documentation
community implementations and real-world composition examples
Upjet-based providers add another layer. Their Crossplane managed resources are generated from Terraform provider resources, while the Terraform documentation often contains more details about the underlying cloud APIs and configuration fields.
This repository connects these sources in one versioned catalog without replacing the original documentation.
Knowledge structure
Knowledge is stored as small Markdown documents under catalog/. Each document represents an independently useful concept and includes OKF metadata, provenance in sources, keyed claim footnotes, and relationships to related concepts.
Repository validation pins okf-ingest 0.11.0, which adds OKF v0.2 core support, including generated.at freshness fallback and preservation of the new frontmatter families (upstream support commit).
If the task is to build a Crossplane v2 Composition, start with the Composition developer route. It routes agents through separate API/provider, pipeline/security, and testing/packaging concepts without pretending that provider-specific schemas or credentials are universal.
The catalog is intended to be:
Source-backed: important statements link to source code, schemas, tests, examples, or official documentation.
Version-aware: sources are tied to specific repository revisions.
Navigable: overview documents connect related concepts without requiring readers to know the source repository layout.
Incremental: providers, functions, services, documentation areas, and example repositories can be added in focused batches.
License
This project is licensed under the Apache License 2.0.
catalog/functions/function-go-templating/extra-resources.md
type: function title: ExtraResources in function-go-templating description: Request cluster resources by name or labels and consume them directly or through pipeline context. resource: https://github.com/crossplane-contrib/function-go-templating/tree/0a1e6d386f4363fae257ddbfb5b497416370e830/example/extra-resources tags: [crossplane, composition-function, extra-resources, context] generated: { by: "process:okf-v0.2-migration", at: "2026-08-20T06:45:13Z" } sources:
id: readme-extraresources-declaration-dynamic-selectors-and-access resource: 'https://github.com/crossplane-contrib/function-go-templating/blob/0a1e6d386f4363fae257ddbfb5b497416370e830/README.md#L159-L216' title: 'README ExtraResources declaration, dynamic selectors, and access'
id: requirement-fields-and-selector-conversion resource: 'https://github.com/crossplane-contrib/function-go-templating/blob/0a1e6d386f4363fae257ddbfb5b497416370e830/extraresources.go#L16-L62' title: 'Requirement fields and selector conversion'
id: rendered-requirement-processing-and-response-requirements resource: 'https://github.com/crossplane-contrib/function-go-templating/blob/0a1e6d386f4363fae257ddbfb5b497416370e830/fn.go#L311-L330' title: 'Rendered requirement processing and response requirements'
id: direct-and-context-lookup-helpers resource: 'https://github.com/crossplane-contrib/function-go-templating/blob/0a1e6d386f4363fae257ddbfb5b497416370e830/function_maps.go#L143-L164' title: 'Direct and context lookup helpers'
id: context-merge-behavior resource: 'https://github.com/crossplane-contrib/function-go-templating/blob/0a1e6d386f4363fae257ddbfb5b497416370e830/extraresources.go#L64-L117' title: 'Context merge behavior'
id: bundled-direct-access-helper-example resource: 'https://github.com/crossplane-contrib/function-go-templating/blob/0a1e6d386f4363fae257ddbfb5b497416370e830/example/functions/getExtraResources/composition.yaml#L18-L34' title: 'Bundled direct-access helper example'
id: repository-apache-2-0-license resource: 'https://github.com/crossplane-contrib/function-go-templating/blob/0a1e6d386f4363fae257ddbfb5b497416370e830/LICENSE' title: 'Repository Apache-2.0 license'
id: legacy-then-current-context-merge-call-order resource: 'https://github.com/crossplane-contrib/function-go-templating/blob/0a1e6d386f4363fae257ddbfb5b497416370e830/fn.go#L370-L384' title: 'Legacy-then-current context merge call order'
id: crossplane-protocol-contract-for-missing-required-resources resource: 'https://github.com/crossplane/crossplane/blob/09ffaea39ccaea0f80817e35b5bbd3632b4e7e0d/proto/fn/v1/run_function.proto#L70-L92' title: 'Crossplane protocol contract for missing required resources'
id: crossplane-required-resource-fetch-repeat-and-stabilization-loop resource: 'https://github.com/crossplane/crossplane/blob/09ffaea39ccaea0f80817e35b5bbd3632b4e7e0d/internal/xfn/required_resources.go#L67-L149' title: 'Crossplane required-resource fetch, repeat, and stabilization loop'
id: exact-name-notfound-and-label-list-fetch-behavior resource: 'https://github.com/crossplane/crossplane/blob/09ffaea39ccaea0f80817e35b5bbd3632b4e7e0d/internal/xfn/required_resources.go#L171-L227' title: 'Exact-name NotFound and label-list fetch behavior'
id: helper-tests-for-empty-items-and-absent-paths resource: 'https://github.com/crossplane-contrib/function-go-templating/blob/0a1e6d386f4363fae257ddbfb5b497416370e830/function_maps_test.go#L572-L593' title: 'Helper tests for empty items and absent paths'
id: template-execution-fatal-result-path resource: 'https://github.com/crossplane-contrib/function-go-templating/blob/0a1e6d386f4363fae257ddbfb5b497416370e830/fn.go#L90-L118' title: 'Template execution fatal-result path'
id: crossplane-fetch-error-propagation-into-the-composition-pipeline resource: 'https://github.com/crossplane/crossplane/blob/09ffaea39ccaea0f80817e35b5bbd3632b4e7e0d/internal/controller/apiextensions/composite/composition_functions.go#L378-L409' title: 'Crossplane fetch-error propagation into the Composition pipeline'
id: released-cluster-scoped-label-tests resource: 'https://github.com/crossplane-contrib/function-go-templating/blob/0a1e6d386f4363fae257ddbfb5b497416370e830/fn_test.go#L1083-L1147' title: 'Released cluster-scoped label tests'
id: namespaced-exact-name-test resource: 'https://github.com/crossplane-contrib/function-go-templating/blob/0a1e6d386f4363fae257ddbfb5b497416370e830/fn_test.go#L1762-L1822' title: 'namespaced exact-name test'
id: go-template-variable-assignment-scope-and-break resource: 'https://github.com/golang/go/blob/d563bc4ba3301156c1e6b115a89c659b00d71fe7/src/text/template/doc.go#L121-L127' title: 'Go-template variable assignment, scope, and break'
id: variable-declaration-and-reassignment resource: 'https://github.com/golang/go/blob/d563bc4ba3301156c1e6b115a89c659b00d71fe7/src/text/template/doc.go#L283-L310' title: 'variable declaration and reassignment'
id: sprig-list-helpers resource: 'https://github.com/Masterminds/sprig/blob/e708470d529a10ac1a3f02ab6fdd339b65958372/docs/lists.md#L1-L125' title: 'Sprig list helpers'
id: dictionary-helpers resource: 'https://github.com/Masterminds/sprig/blob/e708470d529a10ac1a3f02ab6fdd339b65958372/docs/dicts.md#L38-L106' title: 'dictionary helpers'
id: function-go-templating-s-sprig-function-map resource: 'https://github.com/crossplane-contrib/function-go-templating/blob/0a1e6d386f4363fae257ddbfb5b497416370e830/function_maps.go#L24-L62' title: 'function-go-templating''s Sprig function map' source_repository: crossplane-contrib/function-go-templating source_tag: v0.12.2 source_commit: 0a1e6d386f4363fae257ddbfb5b497416370e830 source_paths:
README.md
extraresources.go
fn.go
fn_test.go
function_maps.go
function_maps_test.go
example/extra-resources/composition.yaml
example/functions/getExtraResources/composition.yaml
example/functions/getExtraResourcesFromContext/composition.yaml supporting_source_repository: crossplane/crossplane supporting_source_tag: v2.3.3 supporting_source_commit: 09ffaea39ccaea0f80817e35b5bbd3632b4e7e0d supporting_source_paths:
proto/fn/v1/run_function.proto
internal/xfn/required_resources.go
internal/xfn/required_resources_test.go
internal/controller/apiextensions/composite/composition_functions.go feature_state: Alpha feature_state_basis: >- The rendered special resource uses meta.gotemplating.fn.crossplane.io/v1alpha1.
Overview
A template can render the special
meta.gotemplating.fn.crossplane.io/v1alpha1 ExtraResources object to ask
Crossplane to fetch Kubernetes resources from the local cluster. Each entry
under requirements has an arbitrary key that later identifies the returned
group.[^readme-extraresources-declaration-dynamic-selectors-and-access][^requirement-fields-and-selector-conversion]
The implementation can return rendered selectors as response requirements and can consume matching resources when they are present in a function request. The bundled example emits a requirement and reads returned items in the same template.[^readme-extraresources-declaration-dynamic-selectors-and-access][^rendered-requirement-processing-and-response-requirements]
Schema
Each requirement supports:[^requirement-fields-and-selector-conversion]
| Field | Use | Meaning |
|---|---|---|
apiVersion | Semantically necessary | API version passed to the protocol selector. This function does not validate that it is non-empty. |
kind | Semantically necessary | Kind passed to the protocol selector. This function does not validate that it is non-empty. |
matchName | Conditional | Exact resource name. Used when it is non-empty. |
matchLabels | Conditional | Label map. Used when matchName is empty; an empty map therefore selects by an empty label set. |
namespace | No | Namespace for a namespaced resource. In v0.12.2 the implementation copies it only when matchName is non-empty; it is ignored on the matchLabels path. Omit it for a cluster-scoped resource. |
The template itself may compute selector values from request data, including labels derived from the observed composite resource.[^readme-extraresources-declaration-dynamic-selectors-and-access]
Behavior
Multiple
ExtraResourcesdocuments may contribute requirements, but requirement keys must be unique across the rendered output. A duplicate key produces a fatal function result.[^rendered-requirement-processing-and-response-requirements]A non-empty
matchNametakes precedence overmatchLabels. WhenmatchNameis empty, the function constructs a label selector frommatchLabels.[^requirement-fields-and-selector-conversion] This conflicts with the field comment, which says defined labels cause the name to be ignored; the catalog follows runtime behavior.The current
required_resourcesprotocol field receives every selector. For compatibility with the older interface, the deprecatedextra_resourcesfield also receives cluster-scoped selectors.[^rendered-requirement-processing-and-response-requirements]Fetched results are exposed in template data by requirement key.
getExtraResources . "key"reads the current request'srequiredResources[key].items, falling back toextraResources[key].items; a missing key returnsnil.[^direct-and-context-lookup-helpers]The function copies fetched results into response context at
apiextensions.crossplane.io/extra-resources. Within either the legacyextra_resourcesmap or currentrequired_resourcesmap, request groups replace same-key groups from incoming context and unrelated context groups are retained.[^context-merge-behavior]When both protocol maps are non-empty, the function processes legacy results first and current results second. Each merge starts from the incoming request context, so the second response-context write supersedes the first. Current
required_resourcesgroups therefore win; legacy-only groups from that same invocation are not guaranteed to survive.[^context-merge-behavior][^legacy-then-current-context-merge-call-order]getExtraResourcesFromContext . "key"readscontext[apiextensions.crossplane.io/extra-resources][key].items; a missing entry returnsnil. This is useful in a later pipeline step or when reading resources accumulated by an earlier invocation.[^direct-and-context-lookup-helpers][^context-merge-behavior]
No-match execution
requiredResources is protocol terminology for resources Crossplane must try
to fetch. It does not require at least one matching object. Crossplane
v2.3.3 and function-go-templating v0.12.2 handle a successful zero-match lookup
as follows:[^crossplane-protocol-contract-for-missing-required-resources][^crossplane-required-resource-fetch-repeat-and-stabilization-loop]
The function returns the selector in its response requirements.
Crossplane attempts the lookup and records the requirement key even when no object matched.
Crossplane calls the function again with the empty result.
The function renders normally. Once it returns the same requirements, Crossplane considers them stable and continues the Composition pipeline.
The released code preserves a low-level distinction between selector types:
| Selector | Zero-match representation | Outcome |
|---|---|---|
Exact matchName | Kubernetes NotFound becomes a nil resource group without an error. | The requirement key is recorded and the function is called again. |
matchLabels | A successful empty List becomes a resource group with zero items. | The requirement key is recorded and the function is called again. |
The function helpers may expose a present zero-item path as an empty slice and
an absent path as nil; protobuf-to-map conversion can also omit an empty
repeated items field. Ordinary range treats both as zero elements, and the
bundled examples normalize them with default (list).[^exact-name-notfound-and-label-list-fetch-behavior][^helper-tests-for-empty-items-and-absent-paths]
No-match behavior is therefore permissive by default: the composition
continues and a range over the result emits nothing. A template that needs at
least one object must enforce that condition itself. Template evaluation errors
still produce a fatal function result, actual Kubernetes fetch errors other
than NotFound abort the pipeline step, and requirements that keep changing
eventually fail the bounded stabilization loop.[^crossplane-required-resource-fetch-repeat-and-stabilization-loop][^template-execution-fatal-result-path][^crossplane-fetch-error-propagation-into-the-composition-pipeline]
Example
This summarized pattern requests resources by label, then safely iterates over the returned list:[^readme-extraresources-declaration-dynamic-selectors-and-access][^bundled-direct-access-helper-example]
apiVersion: meta.gotemplating.fn.crossplane.io/v1alpha1
kind: ExtraResources
requirements:
buckets:
apiVersion: s3.aws.upbound.io/v1beta1
kind: Bucket
matchLabels:
example: "true"
---
{{- range $resource := (getExtraResources . "buckets" | default (list)) }}
# Use $resource here.
{{- end }}The example is summarized from the Apache-2.0-licensed project source; it is not a verbatim runnable Composition and the selected API version and kind must exist in the cluster.[^bundled-direct-access-helper-example][^repository-apache-2-0-license]
Template-side namespace filter
This illustrative template-side pattern retains the first returned item from
the composite's namespace, then uses it outside the loop. break stops the
template scan after that match:[^go-template-variable-assignment-scope-and-break][^variable-declaration-and-reassignment]
{{- $selected := dict }}
{{- $namespace := $.observed.composite.resource.metadata.namespace }}
{{- range $extraResource := (getExtraResources . "bucket" | default (list)) }}
{{- if eq $extraResource.resource.metadata.namespace $namespace }}
{{- $selected = $extraResource }}
{{- break }}
{{- end }}
{{- end }}
{{- if $selected }}
# Render a desired resource using $selected.resource here.
{{- end }}getExtraResources reads the items already included in the function request;
it does not construct or alter an ExtraResources selector.[^direct-and-context-lookup-helpers] This is
therefore a template-side consumption filter: it can prevent
cross-namespace items from influencing rendered desired resources, but cannot
narrow the earlier all-namespace List, reduce its RBAC requirement, or avoid
the associated lookup cost.[^requirement-fields-and-selector-conversion][^exact-name-notfound-and-label-list-fetch-behavior]
Sprig v3.3.0 has no predicate-based list filter or nested-field finder for this
unstructured result shape. Its list helpers operate on whole list items, while
pluck selects a top-level key from explicitly supplied dictionaries and dig
traverses one dictionary. The range is therefore still needed to find a
matching item; the variable assignment and break are Go-template syntax, not
Sprig functions.[^go-template-variable-assignment-scope-and-break][^variable-declaration-and-reassignment][^sprig-list-helpers][^dictionary-helpers][^function-go-templating-s-sprig-function-map]
Limitations
The special
ExtraResourcesobject is a function rendering directive, not a Kubernetes object that is added to desired composed resources.[^rendered-requirement-processing-and-response-requirements]Label selectors are equality maps only; this schema does not expose set-based selector expressions.[^requirement-fields-and-selector-conversion]
matchLabelsworks for cluster-scoped resources; the released tests cover both a non-empty label map and an empty label map.[^released-cluster-scoped-label-tests][^namespaced-exact-name-test] The limitation is namespace scoping: although the schema acceptsnamespacebesidematchLabels, v0.12.2 returns the label selector before copying the namespace. Crossplane consequently receives an empty namespace and performs an all-namespace label list, subject to RBAC, rather than limiting the list to the supplied namespace. The only released namespaced test usesmatchName.[^requirement-fields-and-selector-conversion][^exact-name-notfound-and-label-list-fetch-behavior][^released-cluster-scoped-label-tests][^namespaced-exact-name-test]The README's response illustration shows arrays directly beneath requirement keys, but its access syntax and released helpers read an
itemsenvelope. Follow the implementation-backedrequiredResources[key].itemsshape.[^readme-extraresources-declaration-dynamic-selectors-and-access][^direct-and-context-lookup-helpers]Retrieval timing and any result-count limit are controlled by Crossplane's composition-function protocol, not by the template helper. The selected function source does not define its own count limit.
This function forwards empty
apiVersionorkindstrings and does not validate that exactly one match field is set. Any protocol-side rejection is outside the selected function source.[^requirement-fields-and-selector-conversion]Because result lookup returns
nilfor absent paths, usedefault (list)before ranging when a request may have no result.[^direct-and-context-lookup-helpers][^bundled-direct-access-helper-example]For a namespaced
matchLabelsrequirement, a template-side namespace test filters only the returned results. It is not a retrieval-scope or least-privilege mitigation; usematchNamewhen an exact name is available.The early-stop pattern is first-match-wins. If multiple resources in the composite's namespace match, define a stronger selector or an explicit selection policy before using the retained item.
Do not use the word
requiredas a cardinality guarantee. The selected protocol and implementations impose no minimum match count.[^crossplane-protocol-contract-for-missing-required-resources][^crossplane-required-resource-fetch-repeat-and-stabilization-loop]
Relationships
See template functions for all helper signatures and request data and context for the rest of the request available to templates. Composed-resource RBAC identifies the Crossplane Core service account as the required-resource read principal; do not grant these reads to the Function pod merely because the Function declared the selector.
[^readme-extraresources-declaration-dynamic-selectors-and-access]: README ExtraResources declaration, dynamic selectors, and access
[^requirement-fields-and-selector-conversion]: Requirement fields and selector conversion
[^rendered-requirement-processing-and-response-requirements]: Rendered requirement processing and response requirements
[^direct-and-context-lookup-helpers]: Direct and context lookup helpers
[^context-merge-behavior]: Context merge behavior
[^bundled-direct-access-helper-example]: Bundled direct-access helper example
[^repository-apache-2-0-license]: Repository Apache-2.0 license
[^legacy-then-current-context-merge-call-order]: Legacy-then-current context merge call order
[^crossplane-protocol-contract-for-missing-required-resources]: Crossplane protocol contract for missing required resources
[^crossplane-required-resource-fetch-repeat-and-stabilization-loop]: Crossplane required-resource fetch, repeat, and stabilization loop
[^exact-name-notfound-and-label-list-fetch-behavior]: Exact-name NotFound and label-list fetch behavior
[^helper-tests-for-empty-items-and-absent-paths]: Helper tests for empty items and absent paths
[^template-execution-fatal-result-path]: Template execution fatal-result path
[^crossplane-fetch-error-propagation-into-the-composition-pipeline]: Crossplane fetch-error propagation into the Composition pipeline
[^released-cluster-scoped-label-tests]: Released cluster-scoped label tests and namespaced exact-name test
[^namespaced-exact-name-test]: namespaced exact-name test
[^go-template-variable-assignment-scope-and-break]: Go-template variable assignment, scope, and break and variable declaration and reassignment
[^variable-declaration-and-reassignment]: variable declaration and reassignment
[^sprig-list-helpers]: Sprig list helpers and dictionary helpers
[^dictionary-helpers]: dictionary helpers
[^function-go-templating-s-sprig-function-map]: function-go-templating's Sprig function map
242 files
- .agents/agents/okf-crossplane-cli-update-researcher/AGENT.md
- .agents/agents/okf-crossplane-core-code-researcher/AGENT.md
- .agents/agents/okf-crossplane-core-design-researcher/AGENT.md
- .agents/agents/okf-crossplane-core-docs-researcher/AGENT.md
- .agents/agents/okf-crossplane-core-update-researcher/AGENT.md
- .agents/agents/okf-crossplane-docs-update-researcher/AGENT.md
- .agents/agents/okf-crossplane-researcher/AGENT.md
- .agents/agents/okf-crossplane-runtime-update-researcher/AGENT.md
- .agents/agents/okf-function-auto-ready-researcher/AGENT.md
- .agents/agents/okf-function-environment-configs-researcher/AGENT.md
- .agents/agents/okf-function-go-templating-project-history-researcher/AGENT.md
- .agents/agents/okf-function-go-templating-researcher/AGENT.md
- .agents/agents/okf-function-go-templating-sprig-researcher/AGENT.md
- .agents/agents/okf-function-go-templating-update-researcher/AGENT.md
- .agents/agents/okf-function-kro-kro-researcher/AGENT.md
- .agents/agents/okf-function-kro-researcher/AGENT.md
- .agents/agents/okf-function-sdk-go-researcher/AGENT.md
- .agents/agents/okf-function-sequencer-researcher/AGENT.md
- .agents/agents/okf-function-sequencer-update-researcher/AGENT.md
- .agents/agents/okf-function-tag-manager-researcher/AGENT.md
- .agents/agents/okf-reviewer/AGENT.md
- .agents/agents/okf-source-scout/AGENT.md
- .agents/agents/okf-upjet-researcher/AGENT.md
- .agents/agents/okf-xprin-update-researcher/AGENT.md
- .agents/skills/okf-open-knowledge-format/SKILL.md
- .agents/skills/okf-open-knowledge-format/references/conversion.md
- .agents/skills/okf-open-knowledge-format/references/examples.md
- .agents/skills/okf-open-knowledge-format/references/spec-v02.md
- .agents/skills/okf-open-knowledge-format/scripts/validate.sh
- .agents/skills/okf-updates/SKILL.md
- .agents/skills/okf-updates/agents/openai.yaml
- .agents/skills/okf/SKILL.md
- .agents/skills/okf/agents/openai.yaml
- .agents/skills/okf/references/evidence-contract.md
- .agents/skills/okf/references/okf-profile.md
- .agents/skills/okf/references/okf-spec.md
- .agents/skills/okf/references/sources.yaml
- .codespellrc
- .codex-plugin/plugin.json
- .codex/agents/okf-crossplane-cli-update-researcher.toml
- .codex/agents/okf-crossplane-core-code-researcher.toml
- .codex/agents/okf-crossplane-core-design-researcher.toml
- .codex/agents/okf-crossplane-core-docs-researcher.toml
- .codex/agents/okf-crossplane-core-update-researcher.toml
- .codex/agents/okf-crossplane-docs-update-researcher.toml
- .codex/agents/okf-crossplane-researcher.toml
- .codex/agents/okf-crossplane-runtime-update-researcher.toml
- .codex/agents/okf-function-auto-ready-researcher.toml
- .codex/agents/okf-function-environment-configs-researcher.toml
- .codex/agents/okf-function-go-templating-project-history-researcher.toml
- .codex/agents/okf-function-go-templating-researcher.toml
- .codex/agents/okf-function-go-templating-sprig-researcher.toml
- .codex/agents/okf-function-go-templating-update-researcher.toml
- .codex/agents/okf-function-kro-kro-researcher.toml
- .codex/agents/okf-function-kro-researcher.toml
- .codex/agents/okf-function-sdk-go-researcher.toml
- .codex/agents/okf-function-sequencer-researcher.toml
- .codex/agents/okf-function-sequencer-update-researcher.toml
- .codex/agents/okf-function-tag-manager-researcher.toml
- .codex/agents/okf-reviewer.toml
- .codex/agents/okf-source-scout.toml
- .codex/agents/okf-upjet-researcher.toml
- .codex/agents/okf-xprin-update-researcher.toml
- .codex/config.toml
- .dockerignore
- .editorconfig
- .github/workflows/ci.yaml
- .github/zizmor.yml
- .gitignore
- .mcp.json
- .okf/claim-ledger.md
- .okf/sources.lock.yaml
- .pi/agents/okf-crossplane-cli-update-researcher.md
- .pi/agents/okf-crossplane-core-code-researcher.md
- .pi/agents/okf-crossplane-core-design-researcher.md
- .pi/agents/okf-crossplane-core-docs-researcher.md
- .pi/agents/okf-crossplane-core-update-researcher.md
- .pi/agents/okf-crossplane-docs-update-researcher.md
- .pi/agents/okf-crossplane-researcher.md
- .pi/agents/okf-crossplane-runtime-update-researcher.md
- .pi/agents/okf-function-auto-ready-researcher.md
- .pi/agents/okf-function-environment-configs-researcher.md
- .pi/agents/okf-function-go-templating-project-history-researcher.md
- .pi/agents/okf-function-go-templating-researcher.md
- .pi/agents/okf-function-go-templating-sprig-researcher.md
- .pi/agents/okf-function-go-templating-update-researcher.md
- .pi/agents/okf-function-kro-kro-researcher.md
- .pi/agents/okf-function-kro-researcher.md
- .pi/agents/okf-function-sdk-go-researcher.md
- .pi/agents/okf-function-sequencer-researcher.md
- .pi/agents/okf-function-sequencer-update-researcher.md
- .pi/agents/okf-function-tag-manager-researcher.md
- .pi/agents/okf-reviewer.md
- .pi/agents/okf-source-scout.md
- .pi/agents/okf-upjet-researcher.md
- .pi/agents/okf-xprin-update-researcher.md
- .pi/prompts/okf-updates.md
- .pi/prompts/okf.md
- .pi/settings.json
- .plugin/plugin.json
- AGENTS.md
- ATTRIBUTION.md
- Dockerfile
- LICENSE
- README.md
- catalog/cli/control-plane-projects.md
- catalog/cli/generated-go-model-accessors.md
- catalog/cli/generated-go-runtime-objects.md
- catalog/cli/index.md
- catalog/cli/local-composition-rendering.md
- catalog/cli/xrd-convert.md
- catalog/composition-api-and-provider-contracts.md
- catalog/composition-developer-starter.md
- catalog/composition-pipeline-and-security.md
- catalog/composition-testing-and-packaging.md
- catalog/core/composed-resource-identity-and-replacement.md
- catalog/core/composed-resource-rbac.md
- catalog/core/composite-resource-definition.md
- catalog/core/composite-resource-model.md
- catalog/core/composition-gitops-health.md
- catalog/core/composition-project-layout.md
- catalog/core/composition.md
- catalog/core/configurations/configuration.md
- catalog/core/configurations/dependencies-and-authoring.md
- catalog/core/configurations/index.md
- catalog/core/configurations/package.md
- catalog/core/configurations/revision.md
- catalog/core/controlled-rollout-of-composition-functions-design.md
- catalog/core/cross-namespace-synchronization-patterns.md
- catalog/core/environment-config.md
- catalog/core/index.md
- catalog/core/managed-resource-activation-policy.md
- catalog/core/managed-resource-anatomy.md
- catalog/core/managed-resource-controls-and-conditions.md
- catalog/core/managed-resource-definition.md
- catalog/core/managed-resource-external-identity.md
- catalog/core/managed-resource-lifecycle.md
- catalog/core/managed-resource-management-policies-project-history.md
- catalog/core/managed-resource-management-policies.md
- catalog/core/managed-resource-references-and-provider-config.md
- catalog/core/managed-resources.md
- catalog/core/minimal-managed-resource-activation.md
- catalog/core/namespaced-composition-boundaries.md
- catalog/core/native-composition-environment-removal.md
- catalog/core/pushsecret-external-store-pattern.md
- catalog/core/realtime-composition-project-history.md
- catalog/core/realtime-composition-reconciliation.md
- catalog/core/tenant-xr-api-security.md
- catalog/core/usages-and-clusterusages.md
- catalog/core/xrd-api-version-evolution.md
- catalog/core/xrd-cel-validation.md
- catalog/core/xrd-openapi-schema.md
- catalog/core/xrd-subresources-and-display.md
- catalog/core/xrd-unknown-data.md
- catalog/functions/composition-function-specification.md
- catalog/functions/composition-functions.md
- catalog/functions/environment-config-pipeline.md
- catalog/functions/function-auto-ready/built-in-health-checks.md
- catalog/functions/function-auto-ready/cel-health-checks.md
- catalog/functions/function-auto-ready/index.md
- catalog/functions/function-auto-ready/input.md
- catalog/functions/function-auto-ready/package.md
- catalog/functions/function-auto-ready/readiness.md
- catalog/functions/function-environment-configs/index.md
- catalog/functions/function-environment-configs/input.md
- catalog/functions/function-environment-configs/package.md
- catalog/functions/function-environment-configs/selection-and-merge.md
- catalog/functions/function-go-templating/connection-details.md
- catalog/functions/function-go-templating/context.md
- catalog/functions/function-go-templating/environment-source.md
- catalog/functions/function-go-templating/extra-resources.md
- catalog/functions/function-go-templating/index.md
- catalog/functions/function-go-templating/input.md
- catalog/functions/function-go-templating/package.md
- catalog/functions/function-go-templating/patterns/index.md
- catalog/functions/function-go-templating/patterns/manual-readiness.md
- catalog/functions/function-go-templating/patterns/non-composed-resource-readiness.md
- catalog/functions/function-go-templating/patterns/provider-backed-external-query.md
- catalog/functions/function-go-templating/patterns/provider-kubernetes-object-readiness.md
- catalog/functions/function-go-templating/patterns/safe-status-and-connection-publication.md
- catalog/functions/function-go-templating/patterns/sveltos-clustersummary-readiness.md
- catalog/functions/function-go-templating/patterns/yaml-document-boundaries.md
- catalog/functions/function-go-templating/project-history.md
- catalog/functions/function-go-templating/rendered-output.md
- catalog/functions/function-go-templating/request-data.md
- catalog/functions/function-go-templating/response-ttl.md
- catalog/functions/function-go-templating/runtime-options.md
- catalog/functions/function-go-templating/sprig.md
- catalog/functions/function-go-templating/template-functions.md
- catalog/functions/function-kro/graph-evaluation.md
- catalog/functions/function-kro/index.md
- catalog/functions/function-kro/input.md
- catalog/functions/function-kro/package.md
- catalog/functions/function-sequencer/index.md
- catalog/functions/function-sequencer/input.md
- catalog/functions/function-sequencer/sequencing.md
- catalog/functions/index.md
- catalog/functions/operation-functions.md
- catalog/functions/overview.md
- catalog/functions/package.md
- catalog/functions/scheduled-and-watched-operations.md
- catalog/index.md
- catalog/log.md
- catalog/providers/crd-schema-discovery.md
- catalog/providers/index.md
- catalog/providers/provider-connection-details-source-retrieval.md
- catalog/providers/provider-families.md
- catalog/providers/provider-landscape.md
- catalog/providers/provider-package-revisions.md
- catalog/providers/upjet-terraform-provenance.md
- catalog/sdk/crd-cache-schema-stripping.md
- catalog/sdk/index.md
- catalog/sdk/provider-development/generate-test-package.md
- catalog/sdk/provider-development/index.md
- catalog/sdk/provider-development/managed-reconciler.md
- catalog/sdk/provider-development/managed-resource-apis.md
- catalog/sdk/provider-development/provider-configuration.md
- catalog/sdk/provider-development/start-here.md
- catalog/tools/index.md
- catalog/tools/xprin-crossplane-cli-tiers.md
- catalog/tools/xprin-crossplane-version.md
- catalog/tools/xprin-function-container-reuse.md
- catalog/tools/xprin-test-artifacts-export.md
- catalog/tools/xprin-test-suites.md
- catalog/tools/xprin-update-goldens.md
- compose.yaml
- mcp/README.md
- mcp/entrypoint.sh
- mcp/fetch_cache.py
- mcp/git_source.py
- mcp/github_source.py
- mcp/provider_crd_tools.py
- mcp/pyproject.toml
- mcp/server.py
- mcp/tests/test_git_source.py
- mcp/tests/test_github_source.py
- mcp/tests/test_provider_crd_tools.py
- mcp/uv.lock
- mise.toml
- renovate.json
- skills-lock.json
- skills/crossplane-v2-okf/SKILL.md
Advantages
- Provides version-aware knowledge by linking facts to specific repository revisions. evidence: README.md
- Connects distributed sources like Go APIs, CRDs, and documentation into a single navigable catalog. evidence: README.md
Limitations
- The public MCP server is provided as an early-access service and is not intended for production use without self-hosting. evidence: README.md
- Requires explicit provider versions for CRD tools, as it does not guess or infer versions automatically. evidence: README.md
Security
Risk level: Low risk
This brain runs
Agent instructions that run or fetch something (26)
.agents/agents/okf-function-go-templating-researcher/AGENT.md:Write for Crossplane users who want to install and use `function-go-templating` in Compositions..agents/agents/okf-reviewer/AGENT.md:`mise run lint` succeeds after the final fixes and before the root or parent agent creates a commit..agents/agents/okf-reviewer/AGENT.md:Run `mise run lint` as the final validation command..agents/skills/okf-open-knowledge-format/SKILL.md:If the user agrees to install:.agents/skills/okf-open-knowledge-format/SKILL.md:uv tool install okflint.agents/skills/okf-open-knowledge-format/SKILL.md:pip install okflint.agents/skills/okf-open-knowledge-format/SKILL.md:kcmd push --dry-run.agents/skills/okf-updates/SKILL.md:Run this workflow only after the user explicitly invokes `$okf-updates`, `/skill:okf-updates`, or `/okf-updates`..agents/skills/okf-updates/SKILL.md:Run at most three direct researchers at once..agents/skills/okf-updates/SKILL.md:A requester reply that selects one or more candidate IDs from this explicitly invoked workflow is explicit permission to run the normal OKF update logic for those candidates..agents/skills/okf-updates/SKILL.md:Run deterministic validation, `okf-reviewer`, and `mise run lint`..agents/skills/okf/SKILL.md:Run this workflow only after the user explicitly invokes `$okf`, `/skill:okf`, or `/okf`..agents/skills/okf/SKILL.md:After all review fixes, run `mise run lint`..agents/skills/okf/SKILL.md:Commit every intended file only after reviewer approval and a successful lint run..agents/skills/okf/SKILL.md:Run the Core docs and Core code researchers together when a concept needs both user-facing guidance and exact served API shape..agents/skills/okf/SKILL.md:Run independent read-heavy research in parallel, with at most three direct agents..agents/skills/okf/SKILL.md:After all fixes, run `mise run lint` and fix every reported issue..agents/skills/okf/SKILL.md:The reviewer may return `APPROVED` only after the final lint run succeeds..agents/skills/okf/SKILL.md:Non-thinking coding models such as Qwen3-Coder-Next can run every project agent without incompatible reasoning controls..agents/skills/okf/SKILL.md:deterministic validation and `mise run lint` resultsAGENTS.md:Run the normal workflow only when the user explicitly invokes `$okf`, `/skill:okf`, or `/okf`, or selects a feature candidate returned by an explicitly invoked `$okf-updates`, `/skill:okf-updates`, or `/okf-updates` workflow.AGENTS.md:Run update discovery only when the user explicitly invokes `$okf-updates`, `/skill:okf-updates`, or `/okf-updates`.AGENTS.md:Run deterministic validation and the `okf-reviewer` before committing the changes.AGENTS.md:After the final review fixes, run `mise run lint` before creating any commit.AGENTS.md:After reviewer approval and a successful lint run, commit every intended change.AGENTS.md:Create commits with a Developer Certificate of Origin sign-off by default by using `git commit --signoff` (or `git commit -s`).
MCP servers (1)
.mcp.json(crossplane-v2-okf):https://crossplane.mcp.jkroepke.de/mcp· uses the network
- Low risk: network-instructions (.agents/skills/okf-open-knowledge-format/SKILL.md:214)
Attribution and licence
- First committed by
jkroepke
- Publisher
- Jan-Otto Kröpke (Community)
- Source
- jkroepke/okf-crossplane-v2 · commit df24ac2
- Licence
- Apache License 2.0 (files served here)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Contributors
- jkroepke
AutoGineer is not affiliated with or endorsed by jkroepke.
Download
The ZIP holds the files AutoGineer serves, with ATTRIBUTION.md and the licence. Download okf-crossplane-v2.zip