feat(schema): add models/tools/agents to drive schema updates#481
feat(schema): add models/tools/agents to drive schema updates#481ramizpolic wants to merge 6 commits into
Conversation
Signed-off-by: Ramiz Polic <rpolic@cisco.com>
|
The latest Buf updates on your PR. Results from workflow Buf CI / buf (pull_request).
|
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Signed-off-by: Ramiz Polic <rpolic@cisco.com>
Signed-off-by: Ramiz Polic <rpolic@cisco.com>
Signed-off-by: Ramiz Polic <rpolic@cisco.com>
There was a problem hiding this comment.
Pull request overview
This PR introduces a new OASF top-level Record envelope and a universal recursive Module envelope, alongside initial v1alpha1 module payload protos for resource/*, interface/*, and traits/*, plus worked JSON examples and a rewritten DATA_MODELS.md to document the new taxonomy and composition rules.
Changes:
- Added
types/v2alpha1protos forRecordand the recursiveModuleenvelope. - Added initial module payload protos for resources (models/skills), interfaces (MCP/A2A), and traits (permissions/evaluation/requirements), plus shared objects (Artifact/EnvVar/HttpHeader).
- Added multiple worked example records under
examples/and rewroteDATA_MODELS.mdto reflect the new data model.
Reviewed changes
Copilot reviewed 22 out of 22 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| schema/objects/descriptor.json | Removes the legacy descriptor object from the JSON metaschema. |
| proto/agntcy/oasf/types/v2alpha1/record.proto | Defines the new top-level Record envelope for publications. |
| proto/agntcy/oasf/types/v2alpha1/module.proto | Defines the universal recursive Module envelope (type, data, modules). |
| proto/agntcy/oasf/objects/v1/http_header.proto | Adds reusable HttpHeader object for auth/metadata headers. |
| proto/agntcy/oasf/objects/v1/env_var.proto | Adds reusable EnvVar object for runtime environment variables. |
| proto/agntcy/oasf/objects/v1/artifact.proto | Adds reusable Artifact object for external payload references. |
| proto/agntcy/oasf/modules/traits/runtime/v1alpha1/requirements.proto | Adds traits/runtime/requirements trait payload. |
| proto/agntcy/oasf/modules/traits/quality/v1alpha1/evaluation.proto | Adds traits/quality/evaluation trait payload. |
| proto/agntcy/oasf/modules/traits/access/v1alpha1/permissions.proto | Adds traits/access/permissions trait payload. |
| proto/agntcy/oasf/modules/resource/skill/v1alpha1/prompt.proto | Adds resource/skill/prompt resource payload. |
| proto/agntcy/oasf/modules/resource/skill/v1alpha1/agentskill.proto | Adds resource/skill/agentskill resource payload. |
| proto/agntcy/oasf/modules/resource/model/v1alpha1/language.proto | Adds resource/model/language resource payload for LMs. |
| proto/agntcy/oasf/modules/interface/framework/v1alpha1/mcp.proto | Adds interface/framework/mcp interface payload for MCP servers. |
| proto/agntcy/oasf/modules/interface/framework/v1alpha1/a2a.proto | Adds interface/framework/a2a interface payload for A2A-exposed agents. |
| examples/tools/devops.json | Adds a worked example record for a DevOps agent-skill collection. |
| examples/tools/coverage.json | Adds a worked example record for a Codecov coverage skill. |
| examples/models/openai.json | Adds a worked example record for a hosted OpenAI model. |
| examples/models/local-models.json | Adds a worked example record for local/self-hosted models. |
| examples/agents/ui-dev.json | Adds a worked example record for a UI-dev MCP server collection. |
| examples/agents/mcp.json | Adds a worked example record for a GitHub Copilot MCP server. |
| DATA_MODELS.md | Full rewrite documenting the new Record/Module tree, taxonomy, and composition. |
| .vscode/settings.json | Adds an (empty) VS Code workspace settings file. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Signed-off-by: Ramiz Polic <rpolic@cisco.com>
|
It is also possible to represent the core record object as a Module due to nesting and make Directory work with arbitrary modules as TLD objects, but this would require a fair amount of changes and can be tracked for |
Signed-off-by: Ramiz Polic <rpolic@cisco.com>
akijakya
left a comment
There was a problem hiding this comment.
I like the overall direction, including dropping the original Record object and compose records only with modules.
There was a problem hiding this comment.
I think deleting this is a bit premature, also breaks the CI
There was a problem hiding this comment.
I really like that we can have an UI like this, it should be added properly to the OASF UI (integrate it with the Phoenix framework in Elixir)!
There was a problem hiding this comment.
With this many fields in the A2A and MCP protos, aren't we slipping into maintaining other project's schemas? Shouldn't only fields that have value in record/module discovery be added?
| repeated string authentication = 7; | ||
|
|
||
| // Link to the artifact where the full agent card can be retrieved. | ||
| agntcy.oasf.objects.v1.Artifact artifact = 8; |
There was a problem hiding this comment.
Shouldn't artifact be a module-level field?

Overview
Introduces a cleaner data model for OASF: a top-level
Recordcarriesidentity, and every payload hangs off it as a tree of typed modules
organised into three tiers —
resource/,interface/, andtraits/. Six worked examples and a fullDATA_MODELS.mdrewrite shipwith the schema so the shape is easy to learn from real records.
Why
The previous module split (
core/*+integration/*) made it difficult to answer:property? Nothing in the type string told you.
which was hard to remember and easy to misuse.
The new shape answers all three at a glance:
resource/,interface/,traits/) tells you the role.replace (properties, deepest wins).
Recordis a first-class top-level message; modules are strictly itspayload.
The taxonomy at a glance
Placement rules:
resource/*andinterface/*are subjects — they sit under therecord root, and may nest
traits/*scoped to them.traits/*are leaves — they never host children. Nesting a traitinside a subject narrows the scope; the inner trait replaces the outer
one for that subtree.
What changed in the repo
New: top-level types
proto/agntcy/oasf/types/v2alpha1/record.proto—Recordmessage withschema_version,name,version,description,created_at,authors,licenses,publisher,skills,domains,annotations,and
modules[].proto/agntcy/oasf/types/v2alpha1/module.proto— recursiveModuleenvelope (
type,annotations,data,modules[]).New: modules, versioned per family
Each module family has its own local
v1alphaN— bumping one family doesnot force any other to bump.
resource/model/languageLanguagemodules/resource/model/v1alpha1/language.protoresource/skill/agentskillAgentSkillmodules/resource/skill/v1alpha1/agentskill.protoresource/skill/promptPromptmodules/resource/skill/v1alpha1/prompt.protointerface/framework/mcpMcpmodules/interface/framework/v1alpha1/mcp.protointerface/framework/a2aA2Amodules/interface/framework/v1alpha1/a2a.prototraits/access/permissionsPermissionsmodules/traits/access/v1alpha1/permissions.prototraits/quality/evaluationEvaluationmodules/traits/quality/v1alpha1/evaluation.prototraits/runtime/requirementsRequirementsmodules/traits/runtime/v1alpha1/requirements.protoNew: worked examples
Six real-world records under examples/:
3.3 70B, Qwen 2.5 Coder 7B, Mistral 7B v0.3),
openai.json (OpenAI o1).
agent-skill), devops.json (docker, kubectl,
terraform, github-actions, prometheus).
ui-dev.json (Figma, Photoshop, React,
Playwright).
Each demonstrates nested
traits/*overriding record-level defaults, andper-subject
traits/quality/evaluationblocks.Documentation
tree, taxonomy, composition, catalog, authoring guide, versioning.
Out of scope (follow-up work)
actor/*tier —actor/agent,actor/crew,actor/workflowandtheir selector grammar (
$.children.<type>.<name>,$.steps.<id>).server/**(Elixir) still contains lookups keyedon the old
core/*type strings.schema/still reflects the old catalog.Examples
Follow-up PRs should enable the following structure
Single agent
MAS system