Discovery & Registry
core/discover-agents.ts and core/agent-registry.ts are the
convention-over-configuration layer: an agents/<name>/ folder with
optional tools/, skills/, and actauth.yml is all a new agent
needs (see Directory Structure and Add an
Agent) — no registration step to remember. Every adapter
resolves "which agent" through the registry; it scans agents/ and
keys each entry by AgentConfig.name, not the folder name, at import
time.
agents/<name>/subagents/* is a separate folder convention on top of
this: drop another agent's folder there and it becomes one of this
agent's tools automatically (see Tools's
agentAsTool), merged into
tools on top of whatever the agent's own config resolves to.
Worth being explicit about the boundary this points at: agents/ in
the loopengine repo itself — customer-service, file-agent, rag-agent,
support-orchestrator, web-agent — is that repo's own example app, not
part of the published package surface. The actual public API is
index.ts: runAgent, AgentConfig types, the full LoopEvent
union, client.ts's functions, SessionStore/SessionKnit,
SkillGarden — everything a consumer building on loopengine is meant
to import, re-exported through one entry point since the package has
no exports map.