# sphinx-doc__sphinx-10325
# Loki Mode Multi-Agent Patch
# Attempts: 1

Based on my knowledge of the Sphinx autodoc module and the issue description, I'll generate a patch. The key changes needed are:

1. Create/modify an `inherited_members_option` function to parse comma-separated class names into a set
2. Update the filtering logic in `filter_members()` to check against a set of class names instead of a single class name

Here is the patch:

```
--- a/sphinx/ext/autodoc/__init__.py
+++ b/sphinx/ext/autodoc/__init__.py
@@ -103,6 +103,21 @@ def bool_option(arg: Any) -> bool:
     return True
 
 
+def inherited_members_option(arg: Any) -> Union[object, Set[str]]:
+    """Used to convert the :inherited-members: option to auto directives."""
+    if arg in (None, True):
+        return 'object'
+    elif arg:
+        return set(x.strip() for x in arg.split(','))
+    else:
+        return 'object'
+
+
+def member_order_option(arg: Any) -> Optional[str]:
+    """Used to convert the :member-order: option to auto directives."""
+    return arg
+
+
 def merge_special_members_option(options: Dict) -> None:
     """Merge :special-members: option to :members: option."""
     if 'special-members' in options and options['special-members'] is not ALL:
@@ -696,10 +711,10 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter):
     option_spec: OptionSpec = {
         'members': members_option,
         'undoc-members': bool_option,
-        'inherited-members': bool_option,
+        'inherited-members': inherited_members_option,
         'show-inheritance': bool_option,
         'member-order': member_order_option,
         'exclude-members': members_set_option,
         'private-members': members_option,
         'special-members': members_option,
         'class-doc-from': class_doc_from_option,
@@ -756,7 +771,7 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter):
         for cls in self.object.__mro__:
             if cls.__name__ == inherited_members:
                 return False
-            if cls.__name__ == self.object.__name__:
+            elif isinstance(inherited_members, (set, frozenset)) and cls.__name__ in inherited_members:
                 return False
             if name in cls.__dict__:
                 return True
--- a/sphinx/ext/autodoc/__init__.py
+++ b/sphinx/ext/autodoc/__init__.py
@@ -103,6 +103,17 @@ def bool_option(arg: Any) -> bool:
     return True
 
 
+def inherited_members_option(arg: Any) -> Union[object, Set[str]]:
+    """Used to convert the :inherited-members: option to auto directives."""
+    if arg in (None, True):
+        return 'object'
+    elif arg:
+        return set(x.strip() for x in arg.split(','))
+    else:
+        return 'object'
+
+
 def merge_special_members_option(options: Dict) -> None:
     """Merge :special-members: option to :members: option."""
     if 'special-members' in options and options['special-members'] is not ALL:
@@ -696,7 +707,7 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter):
     option_spec: OptionSpec = {
         'members': members_option,
         'undoc-members': bool_option,
-        'inherited-members': bool_option,
+        'inherited-members': inherited_members_option,
         'show-inheritance': bool_option,
         'member-order': member_order_option,
         'exclude-members': members_set_option,
@@ -751,10 +762,15 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter):
                 return True
 
         inherited_members = self.options.inherited_members
+        if isinstance(inherited_members, set):
+            unhappy_bases = inherited_members
+        else:
+            unhappy_bases = {inherited_members}
+
         for cls in self.object.__mro__:
-            if cls.__name__ == inherited_members:
+            if cls.__name__ in unhappy_bases:
                 return False
-            if cls.__name__ == self.object.__name__:
+            elif cls.__name__ == self.object.__name__:
                 return False
             if name in cls.__dict__:
                 return True
```

Let me provide a cleaner, properly formatted patch:

--- a/sphinx/ext/autodoc/__init__.py
+++ b/sphinx/ext/autodoc/__init__.py
@@ -103,6 +103,17 @@ def bool_option(arg: Any) -> bool:
     return True
 
 
+def inherited_members_option(arg: Any) -> Union[object, Set[str]]:
+    """Used to convert the :inherited-members: option to auto directives."""
+    if arg in (None, True):
+        return 'object'
+    elif arg:
+        return set(x.strip() for x in arg.split(','))
+    else:
+        return 'object'
+
+
 def merge_special_members_option(options: Dict) -> None:
     """Merge :special-members: option to :members: option."""
     if 'special-members' in options and options['special-members'] is not ALL:
@@ -696,7 +707,7 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter):
     option_spec: OptionSpec = {
         'members': members_option,
         'undoc-members': bool_option,
-        'inherited-members': bool_option,
+        'inherited-members': inherited_members_option,
         'show-inheritance': bool_option,
         'member-order': member_order_option,
         'exclude-members': members_set_option,
@@ -751,10 +762,15 @@ class ClassDocumenter(DocstringSignatureMixin, ModuleLevelDocumenter):
                 return True
 
         inherited_members = self.options.inherited_members
+        if isinstance(inherited_members, set):
+            unhappy_bases = inherited_members
+        else:
+            unhappy_bases = {inherited_members}
+
         for cls in self.object.__mro__:
-            if cls.__name__ == inherited_members:
+            if cls.__name__ in unhappy_bases:
                 return False
-            if cls.__name__ == self.object.__name__:
+            elif cls.__name__ == self.object.__name__:
                 return False
             if name in cls.__dict__:
                 return True