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.ymland 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 tosetup.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
| Primitive | What it is | Always loaded? |
|---|---|---|
| Rule | A standing instruction β coding style, security, patterns. | Yes β every conversation has the active rules in context. |
| Skill | An on-demand capability β engaged when the userβs intent matches its description. | No β loaded when relevant. |
| Hook | A runtime guard β fires at a Claude Code lifecycle event. | N/A β fires deterministically, not context-loaded. |
| Command | A slash command that wraps a skill or CLI subcommand. | N/A β invoked by the user. |
Plus two composite primitives:
| Composite | What it is |
|---|---|
| Bundle | A package of skills + roles + rules curated by intent. The Quick-mode wizard picks bundles for you. |
| Role | A persona with its own model, tools allowlist, and skill bias (@architect, @writer, @backend-developer). |
Pages in this section
- Manifest-driven generation β how
.octopus.ymlbecomes 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.