Go backward to Learning.
Go up to Semantics of the Symbol Level.
Go forward to Default knowledge.

Input and output
================

Soar interacts with the outside world through a set of input and output
modules.  It receives sensory data and transmits motor commands via
augmentations of the top state.  This provides a single locus for testing
changes in the environment as well as performing external actions.  It also
prevents subgoals from having hidden side-effects by modifying the outside
world independently of higher contexts.  Although it may appear to restrict
access in subgoals, the top state can always be accessed indirectly by making
it an augmentation of a state in a subgoal.

Input from the external environment appears as special augmentations of the
top state.  The attributes of these augmentations are determined by
user-provided input functions.  These functions are called before each
elaboration cycle and before quiescence. Therefore, there is no direct
control of input from the actions of productions, nor does the system ever
"hang" while it waits for input.  Any control of input, such as moving a
sensor or waiting for new input, must be performed deliberately through the
use of motor commands or wait operators.

Output is performed by creating special augmentations of the top state.  Just
as with input, the exact attributes and structure of these augmentations are
determined by user-provided output functions.  The output functions are
called whenever the relevant augmentations are modified in working memory.
Functions for text input and output are provided; other input and output
functions depend on the application and must be written by the user.  See
Section See Adding Input and Output Routines on page *Note Adding Input
and Output Routines:: for complete details of input and output in Soar.