Most multi-agent setups stop at "LLM A hands off to LLM B." That covers a lot of ground, but some tasks are execution-heavy : hit a URL, parse the HTML, notice the page is bot-blocked, fall back to a curated source, run a fee calculation, and return something structured enough that the next agent can trust it. Wrapping all of that inside a plain chat completion is the wrong abstraction. KaibanJS adds ExternalCodingAgent for exactly this case: one task in a Team is executed by a local developer CLI , today Claude Code or OpenCode , plus a mock backend for CI—while every other part of the team lifecycle stays identical: interpolated task descriptions, context passing, completion handlers, HITL gates, and errors when the subprocess fails. This post covers the API surface and then walks a concrete implementation: a three-agent team that handles flight cancellations converted into future travel credits, eligibility first, customer review with a mandatory approval gate second, and conditional resolution last.…