       case .missingEntry(let key):
         return "Missing entry for key \(key)."
       case .multipleErrors(let errors):
-        return errors.map { $0.localizedDescription }.joined(separator: "\n")
+        return errors.map { String(describing: $0) }.joined(separator: "\n")
       case .pathNotFound(let path):
         return "File \(path) not found."
       case .unknownParser(let name):

          )
        } catch let error as Config.Error {
          // Prefix the name of the command for a better error message
          throw error.withKeyPrefixed(by: parserCmd.name)
        }
      }
    }
    self.commands = cmds
  }
}


    guard let config = yaml as? [String: Any] else {
      throw Config.Error.wrongType(key: nil, expected: "Dictionary", got: type(of: yaml))
    }
    self.inputDir = (config[Keys.inputDir.rawValue] as? String).map { Path($0) }
    self.outputDir = (config[Keys.outputDir.rawValue] as? String).map { Path($0) }

    var cmds: [String: [ConfigEntry]] = [:]
    var errors: [Error] = []
    for (cmdName, cmdEntry) in config.filter({ Keys(rawValue: $0.0) == nil }).sorted(by: { $0.0 < $1.0 }) {
      if let parserCmd = ParserCLI.command(named: cmdName) {
        do {
          cmds[parserCmd.name] = try ConfigEntry.parseCommandEntry(
            yaml: cmdEntry,
