diff --git a/src/wp-includes/abilities-api/class-wp-abilities-registry.php b/src/wp-includes/abilities-api/class-wp-abilities-registry.php
--- a/src/wp-includes/abilities-api/class-wp-abilities-registry.php
+++ b/src/wp-includes/abilities-api/class-wp-abilities-registry.php
@@ -94,7 +94,8 @@ final class WP_Abilities_Registry {
 	 *     @type string   $description         The detailed description of what the ability does.
 	 *     @type string   $input_schema        The schema of the input data. Default empty array.
 	 *     @type string   $output_schema       The schema of the output data. Default empty array.
-	 *     @type string   $category            The ability category slug this ability belongs to.
+	 *     @type string   $category            Optional. The ability category slug this ability
+	 *                                        belongs to. Defaults to `uncategorized`.
 	 *     @type callable $permission_callback The callback used to check if the current user can perform the ability.
 	 *     @type callable $execute_callback    The callback used to perform the ability.
 	 *     @type array    $meta                Optional metadata for the ability. Default empty array.
@@ -198,7 +199,8 @@ final class WP_Abilities_Registry {
 	 *     @type string   $description         The detailed description of what the ability does.
 	 *     @type string   $input_schema        The schema of the input data. Default empty array.
 	 *     @type string   $output_schema       The schema of the output data. Default empty array.
-	 *     @type string   $category            The ability category slug this ability belongs to.
+	 *     @type string   $category            Optional. The ability category slug this ability
+	 *                                        belongs to. Defaults to `uncategorized`.
 	 *     @type callable $permission_callback The callback used to check if the current user can perform the ability.
 	 *     @type callable $execute_callback    The callback used to perform the ability.
 	 *     @type array    $meta                Optional metadata for the ability. Default empty array.
@@ -228,7 +230,11 @@ final class WP_Abilities_Registry {
 
 		$args = apply_filters( 'wp_register_ability_args', $args, $name );
 
-		// Validate ability category exists if provided (will be validated as required in WP_Ability).
+		if ( empty( $args['category'] ) ) {
+			$args['category'] = 'uncategorized';
+		}
+
+		// Validate ability category exists after applying the default.
 		if ( isset( $args['category'] ) ) {
 			$category = $this->get_registered_category( $args['category'] );
 
 
diff --git a/src/wp-includes/abilities-api.php b/src/wp-includes/abilities-api.php
--- a/src/wp-includes/abilities-api.php
+++ b/src/wp-includes/abilities-api.php
@@ -2050,12 +2050,13 @@ function wp_abilities_api_init() {
  * Registers a new ability.
  *
  * An ability is a specific piece of functionality that can be registered and executed within WordPress.
- * Abilities can be organized into categories which must be registered before abilities that reference them.
+ * Abilities can be organized into categories. If no category is provided, the ability is assigned to the
+ * built-in `uncategorized` category. Custom categories must be registered before abilities that reference them.
  *
  * This function should be called on the {@see 'wp_abilities_api_init'} action hook.
  * The ability name must be in the format `namespace/name` and can contain lowercase alphanumeric
  * characters, dashes, and underscores. Abilities will not be registered if the ability name is not unique,
- * if a category is specified but not registered, or if the ability data is invalid.
+ * if a custom category is specified but not registered, or if the ability data is invalid.
  *
  *     wp_register_ability( 'myplugin/hello-world', array(
  *         'label'               => __( 'Hello World', 'myplugin' ),
@@ -2072,8 +2073,9 @@ function wp_abilities_api_init() {
  *     @type string   $description         The detailed description of what the ability does.
  *     @type array    $input_schema        The schema of the input data. Default empty array.
  *     @type array    $output_schema       The schema of the output data. Default empty array.
- *     @type string   $category            The ability category slug this ability belongs to. The category
- *                                        must be registered using {@see wp_register_ability_category()}.
+ *     @type string   $category            Optional. The ability category slug this ability belongs to.
+ *                                        Defaults to `uncategorized`. Custom categories must be registered
+ *                                        using {@see wp_register_ability_category()}.
  *     @type callable $permission_callback The callback used to check if the current user can perform the ability.
  *     @type callable $execute_callback    The callback used to perform the ability.
  *     @type array    $meta                Optional metadata for the ability. Default empty array.
@@ -2234,7 +2236,9 @@ function wp_unregister_ability( string $name ): bool {
  *
  * Ability categories are used to group related abilities together. Categories must be registered before
  * abilities that reference them are registered. Core provides built-in categories for common use cases.
- * Plugin and theme developers can register their own categories to organize their abilities.
+ * Plugin and theme developers can register their own categories to organize their abilities. Abilities that
+ * omit a category are assigned to the built-in `uncategorized` category, which is intended as an escape hatch
+ * for simple or transitional registrations.
  *
  * This function should be called on the {@see 'wp_abilities_api_categories_init'} action hook.
  * The category slug must be unique and can contain lowercase alphanumeric characters, dashes, and underscores.
 
diff --git a/src/wp-includes/abilities.php b/src/wp-includes/abilities.php
--- a/src/wp-includes/abilities.php
+++ b/src/wp-includes/abilities.php
@@ -995,6 +995,14 @@ function wp_register_core_ability_categories(): void {
 		)
 	);
+
+	wp_register_ability_category(
+		'uncategorized',
+		array(
+			'label'       => __( 'Uncategorized' ),
+			'description' => __( 'Abilities that have not been assigned to a specific category.' ),
+		)
+	);
 }
 
 /**
 
diff --git a/tests/phpunit/tests/abilities-api/wpRegisterAbility.php b/tests/phpunit/tests/abilities-api/wpRegisterAbility.php
--- a/tests/phpunit/tests/abilities-api/wpRegisterAbility.php
+++ b/tests/phpunit/tests/abilities-api/wpRegisterAbility.php
@@ -117,6 +117,39 @@ class Tests_Abilities_API_wpRegisterAbility extends WP_UnitTestCase {
 		$this->assertSame( 'Test ability description.', $ability->get_description() );
 	}
+
+	/**
+	 * @ticket 65569
+	 */
+	public function test_register_ability_without_category_uses_uncategorized_category(): void {
+		global $wp_current_filter;
+
+		$wp_current_filter[] = 'wp_abilities_api_categories_init';
+		wp_register_ability_category(
+			'uncategorized',
+			array(
+				'label'       => 'Uncategorized',
+				'description' => 'Abilities that have not been assigned to a specific category.',
+			)
+		);
+		array_pop( $wp_current_filter );
+
+		$ability = wp_register_ability(
+			'test/without-category',
+			array(
+				'label'               => 'Test ability without category',
+				'description'         => 'Test ability description.',
+				'input_schema'        => array(),
+				'output_schema'       => array(),
+				'permission_callback' => '__return_true',
+				'execute_callback'    => static function (): array {
+					return array( 'success' => true );
+				},
+			)
+		);
+
+		$this->assertInstanceOf( WP_Ability::class, $ability );
+		$this->assertSame( 'uncategorized', $ability->get_category() );
+
+		wp_unregister_ability_category( 'uncategorized' );
+	}
 
 	/**
 	 * @ticket 64098
