Many real-world tasks can be decomposed into pipelines of sequential operations (where subtasks may themselves be composed of one or more pipelines). JGram is a framework enabling rapid development of such multi-agent systems. Each agent’s services are specified in the JGram Description Language (JDL), and automatically converted into Java source templates. These services may be invoked synchronously (analogous to function call) or asynchronously (analogous to message passing), in a manner that is transparent to the service’s implementation. Complex tasks are created by composing several agent services into hierarchical JGram pipelines in which each agent may dynamically delegate its subtasks to other agents in a recursive manner, and in which errors are handled by a cross-agent, exception mechanism. Although JGram agents communicate using Java’s Remote Method Invocation (RMI) protocol, the framework provides significant enhancements such as authentication, encrypted channels,...