Plugin manifests
agent-os ships one repository that is a valid plugin — and a valid marketplace — on both platforms. The plugin manifests and one npm package manifest provide the distribution surfaces.
.claude-plugin/plugin.json
The Claude Code plugin manifest.
{
"name": "agent-os",
"description": "A lightweight agent operating system with explicit workflows and automatic disciplines, shared between Claude Code and Codex.",
"version": "0.11.0",
"author": { "name": "Lucas Skog" },
"homepage": "https://sockulags.github.io/agent-os/",
"repository": "https://github.com/sockulags/agent-os",
"keywords": ["workflow", "planning", "code-review", "verification", "scope-control", "skills"]
}Claude discovers skills from the skills/ directory by convention, so no path field is needed.
.claude-plugin/marketplace.json
Makes the repository installable as a personal marketplace pointing at itself:
{
"name": "agent-os-marketplace",
"owner": { "name": "Agent OS Maintainers" },
"plugins": [
{
"name": "agent-os",
"source": "./",
"description": "A lightweight agent operating system with explicit workflows and automatic disciplines, shared between Claude Code and Codex."
}
]
}.codex-plugin/plugin.json
The Codex plugin manifest. It needs an explicit skills path, and it carries the interface block that Codex surfaces in its plugin UI — including websiteURL, which points at this documentation site.
{
"name": "agent-os",
"version": "0.11.0",
"homepage": "https://sockulags.github.io/agent-os/",
"repository": "https://github.com/sockulags/agent-os",
"skills": "./skills/",
"interface": {
"displayName": "Agent OS",
"shortDescription": "Explicit workflows and automatic disciplines",
"longDescription": "…",
"developerName": "Lucas Skog",
"category": "Engineering",
"websiteURL": "https://sockulags.github.io/agent-os/"
}
}homepage is the top-level pointer; interface.websiteURL is the one Codex renders next to the plugin. Both point at the same place, so a user who finds the plugin through either surface lands on these docs.
.agents/plugins/marketplace.json
The Codex-side local marketplace:
{
"name": "agent-os",
"interface": { "displayName": "Agent OS" },
"plugins": [
{
"name": "agent-os",
"source": { "source": "local", "path": "./" },
"policy": { "installation": "AVAILABLE", "authentication": "ON_INSTALL" },
"category": "Productivity"
}
]
}package.json
The root npm manifest exposes the guided installer as the agent-os binary and packages the complete skills/ tree with the policy source. Direct installation therefore needs neither a repository checkout nor a host CLI. The plugin manifests remain available for users who explicitly choose native marketplace installation.
{
"name": "@sockulags/agent-os",
"version": "0.11.0",
"type": "module",
"bin": {
"agent-os": "./cli/index.mjs"
},
"files": ["cli/", "policy.md", "skills/"]
}This makes npx @sockulags/agent-os install and npx @sockulags/agent-os update self-contained. The installer records its owned skill directories in .agent-os-install.json, updates only those directories, and preserves unrelated host skills.
Per-skill invocation gating
Manual invocation is expressed differently on each platform, and both files must exist for every manual skill.
Claude reads frontmatter in SKILL.md:
---
name: shape-work
description: …
disable-model-invocation: true
---Codex reads skills/<name>/agents/openai.yaml:
policy:
allow_implicit_invocation: falseA skill missing one of these is invocable by the model on that platform, which is exactly the failure mode the workflow non-invocation eval cases exist to catch.
Version bumps
The version lives in both plugin manifests and package.json. All three get bumped in the same commit, together with the validated documentation copies — see the release routine.