Auto Normals by default
Subscribe to msgbus

Very similarly to answer to Origins to the down of the object by default can check when a new object becomes active when it is the result of being freshly added by an add primitive operator.
Run this code, and any newly added primitive will have auto smooth on with 18 degrees.

as shown in origins to default, can change up all sorts of things.
import bpy
from math import radians

handle = object()

# make some default value
auto_smooth_default = (True, radians(18))

# Triggers when an object is made active
subscribe_to = bpy.types.LayerObjects, &quot;active&quot; # 

def notify_test(context):
    if (context.object.type == 'MESH'
            and getattr(context.active_operator, &quot;bl_idname&quot;, &quot;&quot;).startswith(&quot;MESH_OT_primitive_&quot;)
            and context.mode == 'OBJECT'):
        print(&quot;Setting auto smooth&quot;)
        me = context.object.data
        me.use_auto_smooth, me.auto_smooth_angle = auto_smooth_default
        # set all faces smooth
        me.polygons.foreach_set(
                &quot;use_smooth&quot;, 
                [me.use_auto_smooth] * len(me.polygons),
                )
bpy.msgbus.subscribe_rna(
    key=subscribe_to,
    owner=handle,
    args=(bpy.context,),
    notify=notify_test,
)

bpy.msgbus.publish_rna(key=subscribe_to)