ReadonlyagentSubagents dir, holding flat <dir>/<name>.md, e.g. agents ("" = none).
ReadonlycommandSlash-commands dir, holding flat <dir>/<name>.md, e.g. commands.
ReadonlyhooksConvention path for a standalone hooks file, e.g. hooks/hooks.json.
ReadonlyinstructionTop-level instruction file, e.g. CLAUDE.md.
ReadonlyintraDirs scanned for dangling intra-plugin file references.
ReadonlymanifestPlugin manifest, e.g. .claude-plugin/plugin.json.
ReadonlymaterializeDir the surfaces are materialized under, e.g. .claude.
ReadonlymcpStandalone MCP config file, e.g. .mcp.json.
ReadonlymcpManifest key declaring MCP servers, e.g. mcpServers.
ReadonlynameStable identifier, e.g. "claude-code".
ReadonlypluginEnv token expanded to the plugin's absolute root in hook commands.
ReadonlysettingsHow the settings file is encoded — "json" (Claude Code's settings.json) or
"toml" (Codex's config.toml [hooks]). The loader dispatches a parser on
it, so a TOML-configured harness's hooks aren't silently read as zero.
ReadonlysettingsRepo settings carrying hooks, e.g. .claude/settings.json or .codex/config.toml.
ReadonlyskillSkills dir, holding the nested <dir>/<name>/SKILL.md, e.g. skills.
ReadonlysurfaceSurface dirs materialized into the sandbox, e.g. skills/agents/commands.
PluginLayout — the plugin/repo LAYOUT port (hexagonal format axis, the filesystem half). A harness's plugin layout is where its instruction file, skills, subagents, commands, hooks and settings live on disk, plus the env token expanded to the plugin root. The loader (
loadPlugin) reads those from this descriptor instead of hard-coding Claude Code's.claude-plugin//.claude/conventions, so a second harness (Codex) supplies its ownPluginLayoutand reuses the same loader.Paths are repo-relative (POSIX-style,
join-friendly). The Claude Code implementation isclaudeCodeLayoutinsrc/adapters/claude-code/layout.ts.