Multirepo modules
Kaddo represents not only the main architecture repo, but also the secondary repos (frontend, backend, workers, infra…) as living modules of the same system.
Two levels of descriptor
kaddo module --initwritesarchitecture/module.yml— a repo describing itself as a module (name, domains, contracts it exposes/consumes). Use this inside a secondary repo.kaddo modules mapwrites.kaddo/modules.ymlin the architecture repo — the system view, where each secondary repo is registered and given a knowledge structure underarchitecture/modules/<id>/.
kaddo modules map # register a secondary repo as a module (interactive)kaddo modules list # list mapped modulesMapping a module
kaddo modules map asks for a name, repository path (relative to the architecture
repo), type (frontend · backend · worker · mobile · library ·
infrastructure · data · unknown), main technology, owner and related
capabilities. It then:
- Records the module in
.kaddo/modules.yml(upsert by id — re-mapping updates in place, never duplicates). - Generates a knowledge structure from the central template registry (existing files are never overwritten — they are reported as kept):
architecture/modules/<id>/ module-design.md stack.md security.md standards.md diagrams/.gitkeep adrs/.gitkeepThe generated .md files use the official module-design, module-stack,
module-security and module-standards templates, with front matter prefilled
from the module metadata — including a code: glob (<repoPath>/**):
---type: module-designmodule: storefront-webname: Storefront Webstatus: draftowner: web-teamrepoPath: ../frontendmoduleType: frontendmainTechnology: Next.jscapabilities: - checkoutcode: - ../frontend/**---The
code:globs declare ownership consistently. Defaultkaddo guardstill reads only the current repo’sgit diff, but the opt-inkaddo guard --workspacealso checks local mapped module repos and matches their changes against these globs — see guard → Workspace mode. It never clones or calls remote APIs.
Example: architecture-repo + frontend + backend + infra
# in the architecture repokaddo initkaddo modules map # Frontend → ../frontend (frontend, Next.js)kaddo modules map # Backend → ../backend (backend, NestJS)kaddo modules map # Infra → ../infra (infrastructure, Terraform)kaddo modules listResult:
.kaddo/modules.ymlarchitecture/modules/ frontend/{module-design,stack,security,standards}.md diagrams/ adrs/ backend/ {module-design,stack,security,standards}.md diagrams/ adrs/ infra/ {module-design,stack,security,standards}.md diagrams/ adrs/The generated templates are deliberately thin — refine each one with the matching
Kaddo agent (module-design-agent, stack-agent, security-agent,
standards-agent) in your LLM, using .kaddo/context-pack.md as input. The front
matter and quality checklist come from the template registry, so module artifacts stay
consistent with the rest of Kaddo.
Global vs module-level artifacts
- Global (whole system):
kaddo add standards|security|stack|git-strategywritesarchitecture/<topic>.mdonce for the system. See Standards, security & stack and Git strategy. - Module-level (per repo):
architecture/modules/<id>/*.md, generated bykaddo modules map.
Kaddo never scans the secondary repos, never calls a Git/GitHub API, and never runs a security scan. It maps structure deterministically; your LLM agents do the interpretation.