diff --git a/tools/ndn-autoconfig/multicast-discovery.hpp b/tools/ndn-autoconfig/multicast-discovery.hpp
index b2a63ed..f8a86d8 100644
--- a/tools/ndn-autoconfig/multicast-discovery.hpp
+++ b/tools/ndn-autoconfig/multicast-discovery.hpp
@@ -33,7 +33,7 @@
 
 namespace ndn::autoconfig {
 
-/** \brief multicast discovery stage
+/** \brief Multicast discovery stage.
  *
  *  This stage locates an NDN gateway router, commonly known as a "hub", in the local network by
  *  sending a hub discovery Interest ndn:/localhop/ndn-autoconf/hub via multicast. This class
diff --git a/tools/ndn-autoconfig/ndn-fch-discovery.cpp b/tools/ndn-autoconfig/ndn-fch-discovery.cpp
index c6df1b7..52521e7 100644
--- a/tools/ndn-autoconfig/ndn-fch-discovery.cpp
+++ b/tools/ndn-autoconfig/ndn-fch-discovery.cpp
@@ -127,11 +127,7 @@
 class HttpException : public std::runtime_error
 {
 public:
-  explicit
-  HttpException(const std::string& what)
-    : std::runtime_error(what)
-  {
-  }
+  using std::runtime_error::runtime_error;
 };
 
 NdnFchDiscovery::NdnFchDiscovery(const std::string& url)
diff --git a/tools/ndn-autoconfig/ndn-fch-discovery.hpp b/tools/ndn-autoconfig/ndn-fch-discovery.hpp
index 64d3899..cfdcb51 100644
--- a/tools/ndn-autoconfig/ndn-fch-discovery.hpp
+++ b/tools/ndn-autoconfig/ndn-fch-discovery.hpp
@@ -31,15 +31,15 @@
 namespace ndn::autoconfig {
 
 /**
- * @brief Discovery NDN hub using NDN-FCH protocol
+ * @brief Discover NDN hub using NDN-FCH protocol.
  *
- * @see https://github.com/cawka/ndn-fch/blob/master/README.md
+ * @see https://github.com/named-data/ndn-fch/blob/master/README.md
  */
 class NdnFchDiscovery : public Stage
 {
 public:
   /**
-   * @brief Create stage to discover NDN hub using NDN-FCH protocol
+   * @brief Create stage to discover NDN hub using NDN-FCH protocol.
    */
   explicit
   NdnFchDiscovery(const std::string& url);
diff --git a/tools/ndn-autoconfig/procedure.hpp b/tools/ndn-autoconfig/procedure.hpp
index c5dc0bb..0af3980 100644
--- a/tools/ndn-autoconfig/procedure.hpp
+++ b/tools/ndn-autoconfig/procedure.hpp
@@ -52,7 +52,7 @@
   void
   initialize(const Options& options);
 
-  /** \brief run HUB discovery procedure once
+  /** \brief Run HUB discovery procedure once.
    */
   void
   runOnce();
@@ -74,7 +74,7 @@
   registerPrefixes(uint64_t hubFaceId, size_t index = 0);
 
 public:
-  /** \brief signal when procedure completes
+  /** \brief Signal when procedure completes.
    *
    *  Argument indicates whether the procedure succeeds (true) or fails (false).
    */
diff --git a/tools/ndn-autoconfig/stage.hpp b/tools/ndn-autoconfig/stage.hpp
index d11309b..7c1247c 100644
--- a/tools/ndn-autoconfig/stage.hpp
+++ b/tools/ndn-autoconfig/stage.hpp
@@ -33,7 +33,7 @@
 
 namespace ndn::autoconfig {
 
-/** \brief a discovery stage
+/** \brief A discovery stage.
  */
 class Stage : boost::noncopyable
 {
@@ -47,20 +47,20 @@
   virtual
   ~Stage() = default;
 
-  /** \brief get stage name
+  /** \brief Get stage name.
    *  \return stage name as a phrase, typically starting with lower case
    */
   virtual const std::string&
   getName() const = 0;
 
-  /** \brief start running this stage
+  /** \brief Start running this stage.
    *  \throw Error stage is already running
    */
   void
   start();
 
 protected:
-  /** \brief parse HUB FaceUri from string and declare success
+  /** \brief Parse HUB FaceUri from string and declare success.
    */
   void
   provideHubFaceUri(const std::string& s);
@@ -76,13 +76,13 @@
   doStart() = 0;
 
 public:
-  /** \brief signal when a HUB FaceUri is found
+  /** \brief Signal when a HUB FaceUri is found.
    *
    *  Argument is HUB FaceUri, may not be canonical.
    */
   util::Signal<Stage, FaceUri> onSuccess;
 
-  /** \brief signal when discovery fails
+  /** \brief Signal when discovery fails.
    *
    *  Argument is error message.
    */
diff --git a/tools/nfdc/channel-module.hpp b/tools/nfdc/channel-module.hpp
index 6698ae8..02b01ad 100644
--- a/tools/nfdc/channel-module.hpp
+++ b/tools/nfdc/channel-module.hpp
@@ -32,7 +32,7 @@
 
 using ndn::nfd::ChannelStatus;
 
-/** \brief provides access to NFD channel dataset
+/** \brief Provides access to NFD channel dataset.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/FaceMgmt#Channel-Dataset
  */
 class ChannelModule : public Module, noncopyable
@@ -47,7 +47,7 @@
   void
   formatStatusXml(std::ostream& os) const override;
 
-  /** \brief format a single status item as XML
+  /** \brief Format a single status item as XML.
    *  \param os output stream
    *  \param item status item
    */
@@ -57,7 +57,7 @@
   void
   formatStatusText(std::ostream& os) const override;
 
-  /** \brief format a single status item as text
+  /** \brief Format a single status item as text.
    *  \param os output stream
    *  \param item status item
    */
diff --git a/tools/nfdc/command-arguments.hpp b/tools/nfdc/command-arguments.hpp
index 6dc060a..91d17e0 100644
--- a/tools/nfdc/command-arguments.hpp
+++ b/tools/nfdc/command-arguments.hpp
@@ -38,7 +38,7 @@
 using ndn::nfd::FacePersistency;
 using ndn::nfd::RouteOrigin;
 
-/** \brief contains named command arguments
+/** \brief Contains named command arguments.
  */
 class CommandArguments : public std::map<std::string, std::any, std::less<>>
 {
@@ -62,7 +62,7 @@
     return getOptional<T>(key).value_or(defaultValue);
   }
 
-  /** \brief get an optional boolean argument as tribool
+  /** \brief Get an optional boolean argument as tribool.
    *  \return the argument value, or boost::logic::indeterminate if the argument is omitted on command line
    */
   boost::logic::tribool
diff --git a/tools/nfdc/command-definition.hpp b/tools/nfdc/command-definition.hpp
index 26e309b..07ecd15 100644
--- a/tools/nfdc/command-definition.hpp
+++ b/tools/nfdc/command-definition.hpp
@@ -30,73 +30,73 @@
 
 namespace nfd::tools::nfdc {
 
-/** \brief indicates argument value type
+/** \brief Indicates argument value type.
  */
 enum class ArgValueType {
-  /** \brief boolean argument without value
+  /** \brief Boolean argument without value.
    *
    *  The argument appears in CommandArguments as bool value `true`.
    *  It must not be declared as positional.
    */
   NONE,
 
-  /** \brief any arguments
+  /** \brief Any arguments.
    *
    *  The argument appears in CommandArguments as std::vector<std::string>.
    *  It must be declared as positional, and will consume all subsequent tokens.
    */
   ANY,
 
-  /** \brief boolean
+  /** \brief Boolean.
    *
    * The argument appears in CommandArguments as bool.
    */
   BOOLEAN,
 
-  /** \brief non-negative integer
+  /** \brief Non-negative integer.
    *
    *  The argument appears in CommandArguments as uint64_t.
    *  Acceptable input range is [0, std::numeric_limits<int64_t>::max()].
    */
   UNSIGNED,
 
-  /** \brief arbitrary string
+  /** \brief Arbitrary string.
    *
    *  The argument appears in CommandArguments as std::string.
    */
   STRING,
 
-  /** \brief report format 'xml' or 'text'
+  /** \brief Report format 'xml' or 'text'.
    *
    *  The argument appears in CommandArguments as nfd::tools::nfdc::ReportFormat.
    */
   REPORT_FORMAT,
 
-  /** \brief Name prefix
+  /** \brief Name prefix.
    *
    *  The argument appears in CommandArguments as ndn::Name.
    */
   NAME,
 
-  /** \brief FaceUri
+  /** \brief FaceUri.
    *
    *  The argument appears in CommandArguments as ndn::FaceUri.
    */
   FACE_URI,
 
-  /** \brief FaceId or FaceUri
+  /** \brief FaceId or FaceUri.
    *
    *  The argument appears in CommandArguments as either uint64_t or ndn::FaceUri.
    */
   FACE_ID_OR_URI,
 
-  /** \brief face persistency 'persistent' or 'permanent'
+  /** \brief Face persistency 'persistent' or 'permanent'.
    *
    *  The argument appears in CommandArguments as ndn::nfd::FacePersistency.
    */
   FACE_PERSISTENCY,
 
-  /** \brief route origin
+  /** \brief Route origin.
    *
    *  The argument appears in CommandArguments as ndn::nfd::RouteOrigin.
    */
@@ -106,14 +106,14 @@
 std::ostream&
 operator<<(std::ostream& os, ArgValueType vt);
 
-/** \brief indicates whether an argument is required
+/** \brief Indicates whether an argument is required.
  */
 enum class Required {
   NO = false, ///< argument is optional
   YES = true  ///< argument is required
 };
 
-/** \brief indicates whether an argument can be specified as positional
+/** \brief Indicates whether an argument can be specified as positional.
  */
 enum class Positional {
   NO = false, ///< argument must be named
@@ -121,7 +121,7 @@
 };
 
 /**
- * \brief Defines a command
+ * \brief Defines a command.
  */
 class CommandDefinition
 {
@@ -157,7 +157,7 @@
     return m_title;
   }
 
-  /** \brief set one-line description
+  /** \brief Set one-line description.
    *  \param title one-line description, written in lower case
    */
   CommandDefinition&
@@ -168,7 +168,7 @@
   }
 
 public: // arguments
-  /** \brief declare an argument
+  /** \brief Declare an argument.
    *  \param name argument name, must be unique
    *  \param valueType argument value type
    *  \param isRequired whether the argument is required
@@ -181,7 +181,7 @@
          Positional allowPositional = Positional::NO,
          const std::string& metavar = "");
 
-  /** \brief parse a command line
+  /** \brief Parse a command line.
    *  \param tokens command line tokens
    *  \param start command line start position, after noun and verb
    *  \throw Error command line is invalid
diff --git a/tools/nfdc/command-parser.hpp b/tools/nfdc/command-parser.hpp
index 52ba292..e7046e0 100644
--- a/tools/nfdc/command-parser.hpp
+++ b/tools/nfdc/command-parser.hpp
@@ -33,7 +33,7 @@
 
 namespace nfd::tools::nfdc {
 
-/** \brief indicates which modes is a command allowed
+/** \brief Indicates which modes is a command allowed.
  */
 enum AvailableIn : uint8_t {
   AVAILABLE_IN_NONE     = 0,
@@ -46,7 +46,7 @@
 std::ostream&
 operator<<(std::ostream& os, AvailableIn modes);
 
-/** \brief indicates which mode is the parser operated in
+/** \brief Indicates which mode is the parser operated in.
  */
 enum class ParseMode : uint8_t {
   ONE_SHOT = AVAILABLE_IN_ONE_SHOT, ///< one-shot mode
@@ -56,7 +56,7 @@
 std::ostream&
 operator<<(std::ostream& os, ParseMode mode);
 
-/** \brief parses a command
+/** \brief Parses a command.
  */
 class CommandParser : noncopyable
 {
@@ -70,7 +70,7 @@
     }
   };
 
-  /** \brief add an available command
+  /** \brief Add an available command.
    *  \param def command semantics definition
    *  \param execute a function to execute the command
    *  \param modes parse modes this command should be available in, must not be AVAILABLE_IN_NONE
@@ -79,13 +79,13 @@
   addCommand(const CommandDefinition& def, const ExecuteCommand& execute,
              std::underlying_type_t<AvailableIn> modes = AVAILABLE_IN_ALL);
 
-  /** \brief add an alias "noun verb2" to existing command "noun verb"
+  /** \brief Add an alias "noun verb2" to existing command "noun verb".
    *  \throw std::out_of_range "noun verb" does not exist
    */
   CommandParser&
   addAlias(const std::string& noun, const std::string& verb, const std::string& verb2);
 
-  /** \brief list known commands for help
+  /** \brief List known commands for help.
    *  \param noun if not empty, filter results by this noun
    *  \param mode include commands for the specified parse mode
    *  \return commands in insertion order
@@ -93,7 +93,7 @@
   std::vector<const CommandDefinition*>
   listCommands(std::string_view noun, ParseMode mode) const;
 
-  /** \brief parse a command line
+  /** \brief Parse a command line.
    *  \param tokens command line
    *  \param mode parser mode, must be ParseMode::ONE_SHOT, other modes are not implemented
    *  \throw NoSuchCommandError command not found
@@ -113,12 +113,12 @@
     AvailableIn modes;
   };
 
-  /** \brief map from command name or alias to command definition
+  /** \brief Map from command name or alias to command definition.
    */
   using CommandContainer = std::map<CommandName, shared_ptr<Command>>;
   CommandContainer m_commands;
 
-  /** \brief commands in insertion order
+  /** \brief Commands in insertion order.
    */
   std::vector<CommandContainer::const_iterator> m_commandOrder;
 };
diff --git a/tools/nfdc/cs-module.hpp b/tools/nfdc/cs-module.hpp
index 3c78765..f2cbef9 100644
--- a/tools/nfdc/cs-module.hpp
+++ b/tools/nfdc/cs-module.hpp
@@ -33,23 +33,23 @@
 
 using ndn::nfd::CsInfo;
 
-/** \brief provides access to NFD CS management
+/** \brief Provides access to NFD CS management.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/CsMgmt
  */
 class CsModule : public Module, noncopyable
 {
 public:
-  /** \brief register 'cs config' command
+  /** \brief Register 'cs config' command.
    */
   static void
   registerCommands(CommandParser& parser);
 
-  /** \brief the 'cs config' command
+  /** \brief The 'cs config' command.
    */
   static void
   config(ExecuteContext& ctx);
 
-  /** \brief the 'cs erase' command
+  /** \brief The 'cs erase' command.
    */
   static void
   erase(ExecuteContext& ctx);
diff --git a/tools/nfdc/face-helpers.hpp b/tools/nfdc/face-helpers.hpp
index 5c4ea18..1ceb976 100644
--- a/tools/nfdc/face-helpers.hpp
+++ b/tools/nfdc/face-helpers.hpp
@@ -34,7 +34,7 @@
 using ndn::nfd::FaceStatus;
 
 /**
- * \brief Procedure to find a face
+ * \brief Procedure to find a face.
  */
 class FindFace : noncopyable
 {
@@ -57,19 +57,19 @@
   explicit
   FindFace(ExecuteContext& ctx);
 
-  /** \brief find face by FaceUri
+  /** \brief Find face by FaceUri.
    *  \pre execute has not been invoked
    */
   Code
   execute(const FaceUri& faceUri, bool allowMulti = false);
 
-  /** \brief find face by FaceId
+  /** \brief Find face by FaceId.
    *  \pre execute has not been invoked
    */
   Code
   execute(uint64_t faceId);
 
-  /** \brief find face by FaceId or FaceUri
+  /** \brief Find face by FaceId or FaceUri.
    *  \param faceIdOrUri either a FaceId (uint64_t) or a FaceUri
    *  \param allowMulti effective only if \p faceIdOrUri contains a FaceUri
    *  \throw ndn::bad_any_cast faceIdOrUri is neither uint64_t nor FaceUri
@@ -77,7 +77,7 @@
   Code
   execute(const std::any& faceIdOrUri, bool allowMulti = false);
 
-  /** \brief find face by FaceQueryFilter
+  /** \brief Find face by FaceQueryFilter.
    *  \pre execute has not been invoked
    */
   Code
@@ -114,7 +114,7 @@
     return m_errorReason;
   }
 
-  /** \brief print results for disambiguation
+  /** \brief Print results for disambiguation.
    */
   void
   printDisambiguation(std::ostream& os, DisambiguationStyle style) const;
@@ -123,7 +123,7 @@
   std::optional<FaceUri>
   canonize(const std::string& fieldName, const FaceUri& uri);
 
-  /** \brief retrieve FaceStatus from filter
+  /** \brief Retrieve FaceStatus from filter.
    *  \post m_res == Code::OK and m_results is populated if retrieval succeeds
    *  \post m_res == Code::ERROR and m_errorReason is set if retrieval fails
    */
@@ -139,14 +139,14 @@
 };
 
 /**
- * \brief Canonize a FaceUri
+ * \brief Canonize a FaceUri.
  * \return canonical FaceUri (nullopt on failure) and error string
  */
 std::pair<std::optional<FaceUri>, std::string>
 canonize(ExecuteContext& ctx, const FaceUri& uri);
 
 /**
- * \brief Helper to generate exit code and error message for face canonization failures
+ * \brief Helper to generate exit code and error message for face canonization failures.
  * \param uri The FaceUri
  * \param error The error string returned by the canonization process
  * \param field An optional field identifier to include with the message
diff --git a/tools/nfdc/face-module.cpp b/tools/nfdc/face-module.cpp
index 446a281..136a4f9 100644
--- a/tools/nfdc/face-module.cpp
+++ b/tools/nfdc/face-module.cpp
@@ -131,7 +131,7 @@
   }
 }
 
-/** \brief order persistency in NONE < ON_DEMAND < PERSISTENCY < PERMANENT
+/** \brief Order persistency in NONE < ON_DEMAND < PERSISTENCY < PERMANENT.
  */
 static bool
 persistencyLessThan(FacePersistency x, FacePersistency y)
diff --git a/tools/nfdc/face-module.hpp b/tools/nfdc/face-module.hpp
index 1d3eac8..1f7393a 100644
--- a/tools/nfdc/face-module.hpp
+++ b/tools/nfdc/face-module.hpp
@@ -34,33 +34,33 @@
 
 using ndn::nfd::FaceStatus;
 
-/** \brief provides access to NFD face management
+/** \brief Provides access to NFD face management.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/FaceMgmt
  */
 class FaceModule : public Module, noncopyable
 {
 public:
-  /** \brief register 'face list', 'face show', 'face create', 'face destroy' commands
+  /** \brief Register 'face list', 'face show', 'face create', 'face destroy' commands.
    */
   static void
   registerCommands(CommandParser& parser);
 
-  /** \brief the 'face list' command
+  /** \brief The 'face list' command.
    */
   static void
   list(ExecuteContext& ctx);
 
-  /** \brief the 'face show' command
+  /** \brief The 'face show' command.
    */
   static void
   show(ExecuteContext& ctx);
 
-  /** \brief the 'face create' command
+  /** \brief The 'face create' command.
    */
   static void
   create(ExecuteContext& ctx);
 
-  /** \brief the 'face destroy' command
+  /** \brief The 'face destroy' command.
    */
   static void
   destroy(ExecuteContext& ctx);
@@ -74,7 +74,7 @@
   void
   formatStatusXml(std::ostream& os) const override;
 
-  /** \brief format a single status item as XML
+  /** \brief Format a single status item as XML.
    *  \param os output stream
    *  \param item status item
    */
@@ -84,7 +84,7 @@
   void
   formatStatusText(std::ostream& os) const override;
 
-  /** \brief format a single status item as text
+  /** \brief Format a single status item as text.
    *  \param os output stream
    *  \param item status item
    *  \param wantMultiLine use multi-line style
@@ -92,7 +92,7 @@
   static void
   formatItemText(std::ostream& os, const FaceStatus& item, bool wantMultiLine);
 
-  /** \brief print face action success message to specified ostream
+  /** \brief Print face action success message to specified ostream.
    *  \param os output stream
    *  \param actionSummary description of action taken
    *  \param resp response control parameters to print
@@ -100,7 +100,7 @@
   static void
   printSuccess(std::ostream& os, const std::string& actionSummary, const ControlParameters& resp);
 
-  /** \brief print face response parameters to specified ostream
+  /** \brief Print face response parameters to specified ostream.
    *  \param os output stream
    *  \param ia ItemAttributes used to format output
    *  \param resp response control parameters to print
diff --git a/tools/nfdc/fib-module.hpp b/tools/nfdc/fib-module.hpp
index e182f59..50200cb 100644
--- a/tools/nfdc/fib-module.hpp
+++ b/tools/nfdc/fib-module.hpp
@@ -33,7 +33,7 @@
 using ndn::nfd::FibEntry;
 using ndn::nfd::NextHopRecord;
 
-/** \brief provides access to NFD FIB management
+/** \brief Provides access to NFD FIB management.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/FibMgmt
  */
 class FibModule : public Module, noncopyable
@@ -48,7 +48,7 @@
   void
   formatStatusXml(std::ostream& os) const override;
 
-  /** \brief format a single status item as XML
+  /** \brief Format a single status item as XML.
    *  \param os output stream
    *  \param item status item
    */
@@ -58,7 +58,7 @@
   void
   formatStatusText(std::ostream& os) const override;
 
-  /** \brief format a single status item as text
+  /** \brief Format a single status item as text.
    *  \param os output stream
    *  \param item status item
    */
diff --git a/tools/nfdc/format-helpers.hpp b/tools/nfdc/format-helpers.hpp
index 2ee28ba..0f04c16 100644
--- a/tools/nfdc/format-helpers.hpp
+++ b/tools/nfdc/format-helpers.hpp
@@ -43,12 +43,12 @@
   const std::string& s;
 };
 
-/** \brief print XML text with special character represented as predefined entities
+/** \brief Print XML text with special character represented as predefined entities.
  */
 std::ostream&
 operator<<(std::ostream& os, const Text& text);
 
-/** \brief print true as an empty element and false as nothing
+/** \brief Print true as an empty element and false as nothing.
  */
 struct Flag
 {
@@ -77,7 +77,7 @@
 
 namespace text {
 
-/** \brief print a number of whitespaces
+/** \brief Print a number of whitespaces.
  */
 struct Spaces
 {
@@ -87,7 +87,7 @@
 std::ostream&
 operator<<(std::ostream& os, const Spaces& spaces);
 
-/** \brief print different string on first and subsequent usage
+/** \brief Print different string on first and subsequent usage.
  *
  *  \code
  *  Separator sep(",");
@@ -122,7 +122,7 @@
 std::ostream&
 operator<<(std::ostream& os, Separator& sep);
 
-/** \brief print attributes of an item
+/** \brief Print attributes of an item.
  *
  *  \code
  *  ItemAttributes ia(wantMultiLine, 3);
@@ -141,7 +141,7 @@
 class ItemAttributes : noncopyable
 {
 public:
-  /** \brief constructor
+  /** \brief Constructor.
    *  \param wantMultiLine true to select multi-line style, false to use single-line style
    *  \param maxAttributeWidth maximum width of attribute names, for alignment in multi-line style
    */
@@ -174,7 +174,7 @@
 std::ostream&
 operator<<(std::ostream& os, const ItemAttributes::Attribute& attr);
 
-/** \brief print boolean as 'on' or 'off'
+/** \brief Print boolean as 'on' or 'off'.
  */
 struct OnOff
 {
@@ -184,7 +184,7 @@
 std::ostream&
 operator<<(std::ostream& os, OnOff v);
 
-/** \brief print boolean as 'yes' or 'no'
+/** \brief Print boolean as 'yes' or 'no'.
  */
 struct YesNo
 {
diff --git a/tools/nfdc/forwarder-general-module.hpp b/tools/nfdc/forwarder-general-module.hpp
index 239cea6..6b1b49b 100644
--- a/tools/nfdc/forwarder-general-module.hpp
+++ b/tools/nfdc/forwarder-general-module.hpp
@@ -32,7 +32,7 @@
 
 using ndn::nfd::ForwarderStatus;
 
-/** \brief provides access to NFD forwarder general status
+/** \brief Provides access to NFD forwarder general status.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/ForwarderStatus
  */
 class ForwarderGeneralModule : public Module, noncopyable
@@ -47,7 +47,7 @@
   void
   formatStatusXml(std::ostream& os) const override;
 
-  /** \brief format a single status item as XML
+  /** \brief Format a single status item as XML.
    *  \param os output stream
    *  \param item status item
    */
@@ -57,7 +57,7 @@
   void
   formatStatusText(std::ostream& os) const override;
 
-  /** \brief format a single status item as text
+  /** \brief Format a single status item as text.
    *  \param os output stream
    *  \param item status item
    */
diff --git a/tools/nfdc/help.hpp b/tools/nfdc/help.hpp
index 19df8c1..80b37fe 100644
--- a/tools/nfdc/help.hpp
+++ b/tools/nfdc/help.hpp
@@ -30,7 +30,7 @@
 
 namespace nfd::tools::nfdc {
 
-/** \brief writes the list of available commands to a stream
+/** \brief Writes the list of available commands to a stream.
  *  \param os the output stream to write the list to
  *  \param parser instance of CommandParser containing the commands to list
  *  \param mode only the commands available in this mode are listed
@@ -40,7 +40,7 @@
 helpList(std::ostream& os, const CommandParser& parser,
          ParseMode mode = ParseMode::ONE_SHOT, std::string_view noun = "");
 
-/** \brief tries to help the user, if requested on the command line
+/** \brief Tries to help the user, if requested on the command line.
  *
  *  Depending on the provided command line arguments \p args, this function can either
  *  open the man page for a specific command, or list all commands available in \p parser.
diff --git a/tools/nfdc/module.hpp b/tools/nfdc/module.hpp
index 6793b3e..af0f651 100644
--- a/tools/nfdc/module.hpp
+++ b/tools/nfdc/module.hpp
@@ -35,7 +35,7 @@
 using ndn::nfd::CommandOptions;
 using ndn::nfd::Controller;
 
-/** \brief provides access to an NFD management module
+/** \brief Provides access to an NFD management module.
  *  \note This type is an interface. It should not have member fields.
  */
 class Module
@@ -44,7 +44,7 @@
   virtual
   ~Module() = default;
 
-  /** \brief collect status from NFD
+  /** \brief Collect status from NFD.
    *  \pre no other fetchStatus is in progress
    *  \param controller a controller through which StatusDataset can be requested
    *  \param onSuccess invoked when status has been collected into this instance
@@ -57,14 +57,14 @@
               const Controller::DatasetFailCallback& onFailure,
               const CommandOptions& options) = 0;
 
-  /** \brief format collected status as XML
+  /** \brief Format collected status as XML.
    *  \pre fetchStatus has been successful
    *  \param os output stream
    */
   virtual void
   formatStatusXml(std::ostream& os) const = 0;
 
-  /** \brief format collected status as text
+  /** \brief Format collected status as text.
    *  \pre fetchStatus has been successful
    *  \param os output stream
    */
diff --git a/tools/nfdc/rib-module.hpp b/tools/nfdc/rib-module.hpp
index 22d4e76..d81f6a7 100644
--- a/tools/nfdc/rib-module.hpp
+++ b/tools/nfdc/rib-module.hpp
@@ -34,33 +34,33 @@
 using ndn::nfd::RibEntry;
 using ndn::nfd::Route;
 
-/** \brief provides access to NFD RIB management
+/** \brief Provides access to NFD RIB management.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/RibMgmt
  */
 class RibModule : public Module, noncopyable
 {
 public:
-  /** \brief register 'route list', 'route show', 'route add', 'route remove' commands
+  /** \brief Register 'route list', 'route show', 'route add', 'route remove' commands.
    */
   static void
   registerCommands(CommandParser& parser);
 
-  /** \brief the 'route list' command
+  /** \brief The 'route list' command.
    */
   static void
   list(ExecuteContext& ctx);
 
-  /** \brief the 'route show' command
+  /** \brief The 'route show' command.
    */
   static void
   show(ExecuteContext& ctx);
 
-  /** \brief the 'route add' command
+  /** \brief The 'route add' command.
    */
   static void
   add(ExecuteContext& ctx);
 
-  /** \brief the 'route remove' command
+  /** \brief The 'route remove' command.
    */
   static void
   remove(ExecuteContext& ctx);
@@ -83,21 +83,21 @@
   static void
   listRoutesImpl(ExecuteContext& ctx, const RoutePredicate& filter);
 
-  /** \brief format a single status item as XML
+  /** \brief Format a single status item as XML.
    *  \param os output stream
    *  \param item status item
    */
   void
   formatItemXml(std::ostream& os, const RibEntry& item) const;
 
-  /** \brief format a RibEntry as text
+  /** \brief Format a RibEntry as text.
    *  \param os output stream
    *  \param entry RIB entry
    */
   static void
   formatEntryText(std::ostream& os, const RibEntry& entry);
 
-  /** \brief format a Route as text
+  /** \brief Format a Route as text.
    *  \param os output stream
    *  \param entry RIB entry
    *  \param route RIB route within \p entry
diff --git a/tools/nfdc/status-report.hpp b/tools/nfdc/status-report.hpp
index 67ff429..f1a84a6 100644
--- a/tools/nfdc/status-report.hpp
+++ b/tools/nfdc/status-report.hpp
@@ -46,7 +46,7 @@
 std::ostream&
 operator<<(std::ostream& os, ReportFormat fmt);
 
-/** \brief collects and prints NFD status report
+/** \brief Collects and prints NFD status report.
  */
 class StatusReport : noncopyable
 {
@@ -56,7 +56,7 @@
   ~StatusReport() = default;
 #endif
 
-  /** \brief collect status via chosen \p sections
+  /** \brief Collect status via chosen \p sections.
    *
    *  This function is blocking. It has exclusive use of \p face.
    *
@@ -66,13 +66,13 @@
   uint32_t
   collect(Face& face, KeyChain& keyChain, Validator& validator, const CommandOptions& options);
 
-  /** \brief print an XML report
+  /** \brief Print an XML report.
    *  \param os output stream
    */
   void
   formatXml(std::ostream& os) const;
 
-  /** \brief print a text report
+  /** \brief Print a text report.
    *  \param os output stream
    */
   void
@@ -83,7 +83,7 @@
   processEvents(Face& face);
 
 public:
-  /** \brief modules through which status is collected
+  /** \brief Modules through which status is collected.
    */
   std::vector<unique_ptr<Module>> sections;
 };
diff --git a/tools/nfdc/status.cpp b/tools/nfdc/status.cpp
index 081eea9..f0e4f9d 100644
--- a/tools/nfdc/status.cpp
+++ b/tools/nfdc/status.cpp
@@ -92,7 +92,7 @@
   }
 }
 
-/** \brief single-section status command
+/** \brief Single-section status command.
  */
 static void
 reportStatusSingleSection(ExecuteContext& ctx, bool StatusReportOptions::*wantSection)
@@ -102,7 +102,7 @@
   reportStatus(ctx, options);
 }
 
-/** \brief the 'status report' command
+/** \brief The 'status report' command.
  */
 static void
 reportStatusComprehensive(ExecuteContext& ctx)
diff --git a/tools/nfdc/status.hpp b/tools/nfdc/status.hpp
index c563ad7..2a1972c 100644
--- a/tools/nfdc/status.hpp
+++ b/tools/nfdc/status.hpp
@@ -43,12 +43,12 @@
   bool wantStrategyChoice = false;
 };
 
-/** \brief collect a status report and write to stdout
+/** \brief Collect a status report and write to stdout.
  */
 void
 reportStatus(ExecuteContext& ctx, const StatusReportOptions& options);
 
-/** \brief registers status commands
+/** \brief Registers status commands.
  *
  *  Providing the following commands:
  *  \li status report
diff --git a/tools/nfdc/strategy-choice-module.hpp b/tools/nfdc/strategy-choice-module.hpp
index 502d66b..43ac78b 100644
--- a/tools/nfdc/strategy-choice-module.hpp
+++ b/tools/nfdc/strategy-choice-module.hpp
@@ -33,33 +33,33 @@
 
 using ndn::nfd::StrategyChoice;
 
-/** \brief provides access to NFD Strategy Choice management
+/** \brief Provides access to NFD Strategy Choice management.
  *  \sa https://redmine.named-data.net/projects/nfd/wiki/StrategyChoice
  */
 class StrategyChoiceModule : public Module, noncopyable
 {
 public:
-  /** \brief register 'strategy list', 'strategy show', 'strategy set', 'strategy unset' commands
+  /** \brief Register 'strategy list', 'strategy show', 'strategy set', 'strategy unset' commands.
    */
   static void
   registerCommands(CommandParser& parser);
 
-  /** \brief the 'strategy list' command
+  /** \brief The 'strategy list' command.
    */
   static void
   list(ExecuteContext& ctx);
 
-  /** \brief the 'strategy show' command
+  /** \brief The 'strategy show' command.
    */
   static void
   show(ExecuteContext& ctx);
 
-  /** \brief the 'strategy set' command
+  /** \brief The 'strategy set' command.
    */
   static void
   set(ExecuteContext& ctx);
 
-  /** \brief the 'strategy unset' command
+  /** \brief The 'strategy unset' command.
    */
   static void
   unset(ExecuteContext& ctx);
@@ -73,7 +73,7 @@
   void
   formatStatusXml(std::ostream& os) const override;
 
-  /** \brief format a single status item as XML
+  /** \brief Format a single status item as XML.
    *  \param os output stream
    *  \param item status item
    */
@@ -83,7 +83,7 @@
   void
   formatStatusText(std::ostream& os) const override;
 
-  /** \brief format a single status item as text
+  /** \brief Format a single status item as text.
    *  \param os output stream
    *  \param item status item
    *  \param wantMultiLine use multi-line style
