After reading chapter 7 Different Layer, Different Abstraction in "A Philosophy of Software Design"[0] I decided to change the design of the application. The chapter claims that "Pass-Through Methods" are red flags. Pass-through methods don't add functionality, as the name indicates, they take arguments and pass them through to other methods, without changing the parameters.
I thought that the former design would be great because I could separate the module into two layers: Database (ji.e. json) i/o and the command-line functionalities. I handled most of the functionality in the database layer while the command-line layer didn't add much but passed the args to the database layer.
Now the database layer is only responsible for getting the data, without processing the data. The processing is done directly from the cli-layer. That way the cli-layer becomes really meaningful by contributing functionality.
John Ousterhout also advises using general-purpose methods over specialized methods. The database-layer is now very general-purpose, its main function is to provide access to data, but not manipulate data.
[0]Ousterhout, John. A Philosophy of Software Design, 2nd Edition (p. 51). Yaknyam Press. Kindle Edition.