An ensemble is a single command that can dispatch subcommands to other commands. For example [string] is a built-in ensemble. The ensemble command allows an ensemble command to be created that redirects to other commands. Create an ensemble by having multiple commands that all share the same prefix. For example: proc {test open} {name} { ... } proc {test close} {handle} { ... } proc {test show} {handle} { ... } Then simply: ensemble test Now a new command, test, is created that will invoke the other commands based on the first argument. For example: set h [test open file.txt] test show $h test close $h By default ensemble expects the commands to be named " ". If another prefix is used, this can be specified with the -automap option. e.g. ensemble test -automap test. This could be used if the commands were named test.open, test.close, test.show Note that ensembles are dynamic, not fixed at the point of creation. This means, for example, that we can can create a new commands, "test reverse" after the ensemble has been created and it can still be invoked as test reverse ... It is easy to create an ensemble for commands in a namespace by simply using -automap :: however for compatibility with Tcl, 'namespace ensemble create' is provided that does with when invoked within a namespace. e.g. namespace eval test { namespace ensemble create proc open {name} { ... } proc close {handle} { ... } proc show {handle} { ... } } test open file.txt