Skip to content

Intelligence layers

Coro’s behaviour is authored as Markdown: agents, workflows, skills, and memory bundles. Shipping updates does not require recompiling the runner—rather, deterministic resolver code overlays several sources into the tree a job actually reads.

Three layers

LayerTypical locationAudience
BasePackage @coro-ai/intelligence-base inside the runnerGeneric, tenant-agnostic defaults
Tenant overlaySettings → Advanced → Paths → Intelligence git remote (solo), explicit tenant.overlay in config, or the cloud bundle (team)Company-specific snippets, trackers, wording
Repo overlay<repository>/.coro/ in the cloned projectRepo-local conventions

At runtime these stack into <workingDir>/<jobId>/_intelligence/ so every phase sees a single unified tree.

Merge semantics

Two rules apply deterministically:

PathsBehaviourWhy
.claude/CLAUDE.mdAppend with provenance bannersEveryone extends the same bootstrap instructions
memory/**/*.mdAppend with bannersKnowledge accumulates; nothing is silently erased
Everything else (agents/, workflows/, .claude/skills/, etc.)Last-wins replacement per file pathOverrides are explicit and predictable

Because replacement is per-file, a tenant can drop in a customised agents/coder.md without touching unrelated agents.

When the resolver runs

Resolution happens:

  1. At job start — Base + tenant are always known.
  2. At phase boundaries — The resolver re-materialises idempotently. That matters because many jobs clone the target repo in an early phase; only afterwards does .coro/ exist on disk, which is picked up automatically on the next boundary.

Agents must treat _intelligence as read-only product of the resolver. Writable proposal flows target explicit tenant or repo git clones—never the synthesized tree.

Go deeper