Primitives are Perl functions that provide the basic interface between a client application and the Domain Manager.

A number of these are likely to be used directly by scripts and will be familiar to ASL developers. These include getInstances(), getChildren(), getExplainedBy().

Others are normally hidden from view because higher level features can be used instead, which ultimately call the primitives. For example, primitives that are not normally used directly are get() and invoke(). These are the calls that allow an instance's properties to be queried and its operations to be called. In both the API for Perl and ASL, these calls are normally invoked by using a classic object-oriented syntax.

The Smarts ASL Reference Guide provides further information about the Smarts data structures.

The Perl API is implemented as a set of Perl modules, which individual Perl scripts may access, by using the familiar ”use” directive. InCharge::session and InCharge::object offer the principal interface, which respectively provide connection sessions to Domain Managers and access to objects within those managers. Simultaneous sessions to multiple Domain Managers may be established within a single Perl script. Properties and methods of objects within those managers may be accessed as with C++, offering somewhat broader functionality than that afforded by ASL.