code: def add_agent(self, agent):
          
          agent_id = self.add_node(agent.name)
          self.add_typing(agent_id, 'agent')
          # Handle bound conditions
          for bc in agent.bound_conditions:
              # Here we make the assumption that the binding site
              # is simply named after the binding partner
              if bc.is_bound:
                  test_type = 'is_bnd'
              else:
                  test_type = 'is_free'
              bound_name = bc.agent.name
              agent_bs = get_binding_site_name(bc.agent)
              test_name = '%s_bound_to_%s_test' % (agent_id, bound_name)
              agent_bs_id = self.add_node(agent_bs)
              test_id = self.add_node(test_name)
              self.add_edge(agent_bs_id, agent_id)
              self.add_edge(agent_bs_id, test_id)
              self.add_typing(agent_bs_id, 'locus')
              self.add_typing(test_id, test_type)
  
          for mod in agent.mods:
              mod_site_str = abbrevs[mod.mod_type]
              if mod.residue is not None:
                  mod_site_str = mod.residue
              mod_pos_str = mod.position if mod.position is not None else ''
              mod_site = ('%s%s' % (mod_site_str, mod_pos_str))
              site_states = states[mod.mod_type]
              if mod.is_modified:
                  val = site_states[1]
              else:
                  val = site_states[0]
              mod_site_id = self.add_node(mod_site, {'val': val})
              self.add_edge(mod_site_id, agent_id)
              self.add_typing(mod_site_id, 'state')
          return agent_id
docs: Add an INDRA Agent and its conditions to the Nugget.