Skip to content

Architecture

Octopus has one job: take a project manifest (.octopus.yml) and emit the right configuration for every AI coding agent the team uses. Each agent has different capabilities β€” Claude Code supports hooks and slash commands natively, Copilot expects everything inlined into one file, Codex sits in between. The architecture is the set of choices that make this work without the manifest needing to know about each agent.

The shape

.octopus.yml (the manifest β€” the only file you edit)
β”‚
β–Ό
octopus setup (the renderer β€” reads the manifest)
β”‚
β”œβ”€β”€ reads core/ rules/ skills/ (universal content)
β”œβ”€β”€ reads bundles/<name>.yml (expands bundle membership)
β”œβ”€β”€ reads agents/<name>/manifest.yml (per-agent capabilities)
β”‚
β–Ό
generated configuration per agent (.claude/, .github/, AGENTS.md, …)

Three properties are non-negotiable in this architecture:

  • The manifest is the single source of truth. Generated files are derived from .octopus.yml and never edited directly. If you need to change behaviour, you change the manifest.
  • Agents are interchangeable consumers. Adding support for a new agent (Gemini Flash, a custom in-house bot) is a manifest change in agents/<name>/, never a change to setup.sh.
  • Bundles are the unit of opinion. Individual skills and rules are technical primitives; bundles bundle them into a workflow shape (starter, quality, docs, growth, …) so users compose by intent.

The four primitives

PrimitiveWhat it isAlways loaded?
RuleA standing instruction β€” coding style, security, patterns.Yes β€” every conversation has the active rules in context.
SkillAn on-demand capability β€” engaged when the user’s intent matches its description.No β€” loaded when relevant.
HookA runtime guard β€” fires at a Claude Code lifecycle event.N/A β€” fires deterministically, not context-loaded.
CommandA slash command that wraps a skill or CLI subcommand.N/A β€” invoked by the user.

Plus two composite primitives:

CompositeWhat it is
BundleA package of skills + roles + rules curated by intent. The Quick-mode wizard picks bundles for you.
RoleA persona with its own model, tools allowlist, and skill bias (@architect, @writer, @backend-developer).

Pages in this section

  • Manifest-driven generation β€” how .octopus.yml becomes generated config, why the manifest is template-rendered rather than copied.
  • Agent capability matrix β€” what each agent supports natively and how Octopus translates the missing capabilities.
  • Bundle composition β€” how bundles expand to skills and rules, how transitive dependencies resolve.
  • Project structure β€” what lives where in the Octopus repository and how to navigate it.

Source: agent manifests Β· Source: bundles