I am wondering if there is a detailed explanation about how ASE chooses the INCAR tags, since VASP already provides default values for a lot of tags, does ASE choose the default values? There are a few parameters that might be tricky, for example, ISMEAR should be different for different systems, it depends on whether the system is metal or semiconductor. My question is: How does ASE choose the INCAR tags smartly or does ASE just choose the default values?
ASE in general picks the VASP default, by simply not including the tag if not directly asked for. This is done by setting the tag to "None" which has no meaning in VASP. Then when the INCAR is generated, the tag is simply not output, leaving VASP to fall back on its default behavior.
For things such as the functional, ASE does attempt to set up things as properly as possible with regards to the VASP manual. The "recommended" setup dataset also corresponds to the VASP wiki recommended pseudopotentials.
ASE does not set any defaults based on metal vs semiconductor, I vaguely think Pymatgen might have some functionality for this though.
If you do not set kpoints, the gamma point will be used, however you must request the vasp_gam executable for the speedup associated with gamma point only calculations manually.