Skip to main content

Cross-team calls

lmctl teams can be stored as .lmctl teamfiles. A teamfile is a document made of _MEMBER_ lines: a Lead plus the members that work with that Lead.

Intra-team wiring

Intra-team wiring is implicit. If a member appears as a _MEMBER_ line in the teamfile, that member is already connected to the team's Lead. You do not need to declare anything else for members of the same team.

Cross-team calls

Cross-team calls work automatically at runtime. A team's Lead can send to a member of another team over the chat / MCP path without any declaration in the teamfile — there is nothing to wire up or maintain. Address the target member of the other team and the message is delivered.

Runtime cycle protection

Because cross-team calls are unrestricted, lmctl applies runtime cycle protection so a runaway loop cannot spin forever. A cross-team send is stopped when its target is already an active ancestor in the live call chain and either:

  • it recurs within ~60 seconds (rapid-loop guard), or
  • it has been revisited more than twice.

Legitimate back-and-forth (up to two slow revisits) and fan-out / diamond patterns — two teams independently calling a shared third team — are allowed. Only genuine runaway recursion is stopped.

When a call is stopped, the agent receives an error like:

cross-team cycle detected (a.lmctl:Lead → b.lmctl:Coder → a.lmctl:Lead); stopping to prevent a runaway loop.

Deprecated: _CONNECT_ and lmctl connect

The static _CONNECT_ teamfile statement and the lmctl connect command have been removed. You no longer declare cross-team edges. Legacy teamfiles that still contain _CONNECT_ lines are not broken: the lines are parsed as a no-op and ignored, and lmctl lint <teamfile.lmctl> prints a deprecation warning suggesting you delete them.

lmctl lint <teamfile.lmctl> validates the teamfile and warns about stale or placeholder session ids. lmctl seed <teamfile.lmctl> fills missing or placeholder session ids by calling each member's configured native provider.