diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 0ca18c5d9347929e25955437221abcce39fb8cb7..b712a2e11d5b54d102a844be63537ee6e9723c64 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,6 +2,8 @@
 include:
   - project: shore/ci-stuff
     file: templates/pre-commit.yml
+  - project: shore/ci-stuff
+    file: templates/pre-commit-repo.yml
   - project: shore/ci-stuff
     file: templates/python.yml
 
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 41ea1a5d5a1dc6e8fe58cae4810e2b9fb6be5ebd..072e6610f1d0acf9ec07f5dd17e898a6f6dec1ae 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -24,13 +24,6 @@ repos:
     hooks:
       - id: detect-secrets
 
-  - repo: https://github.com/amperser/proselint.git
-    rev: 0.10.2
-    hooks:
-      - id: proselint
-        types: [plain-text]
-        exclude: LICENSE
-
   - repo: https://gitlab.com/devopshq/gitlab-ci-linter.git
     rev: v1.0.2
     hooks:
@@ -60,7 +53,7 @@ repos:
       - id: black
         args:
           - |
-              --line-length=79
+            --line-length=79
 
   - repo: https://github.com/PyCQA/prospector.git
     rev: 1.5.3.1
@@ -103,3 +96,8 @@ repos:
     rev: '0.47'
     hooks:
       - id: check-manifest
+
+  - repo: https://github.com/pre-commit/pre-commit.git
+    rev: v2.15.0
+    hooks:
+      - id: validate_manifest
diff --git a/.pre-commit-hooks.yaml b/.pre-commit-hooks.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..85f4f570dd16d24fe268b71e093bb06636cce2c1
--- /dev/null
+++ b/.pre-commit-hooks.yaml
@@ -0,0 +1,8 @@
+---
+  - id: yamltool  # yamllint disable-line rule:indentation
+    name: YAML tool
+    description: Validate and pretty-print YAML files.
+    language: python
+    entry: yt
+    args: ["--in-place"]
+    types: [yaml]
diff --git a/MANIFEST.in b/MANIFEST.in
index 3db680179333f6783a5aac2ba617d805df1d44dd..4bfa04a5820f6eaeec0e68c58579d896de4b5a86 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,5 +1,6 @@
 include *.rst
 include *.txt
 exclude .pre-commit-config.yaml
+exclude .pre-commit-hooks.yaml
 exclude .gitlab-ci.yml
 exclude .gitignore
diff --git a/README.rst b/README.rst
index 97bf73a3f1df09c65132c0a94929037a82990f5a..540c9358570e5638aa8cfa1034458e8d6d854974 100644
--- a/README.rst
+++ b/README.rst
@@ -16,20 +16,43 @@ Usage
 
 .. code:: shell
 
-   usage: yt [-h] [infile] [outfile]
+    usage: yt [-h] [-i] [files ...]
 
-   YAML tool, a clone of the json.tool Python module for YAML.
+    YAML tool, a clone of the json.tool Python module for YAML.
 
-   This tool provides a simple command line interface to validate and pretty-print
-   YAML documents while trying to preserve as much as possible from the original
-   documents (like comments and anchors).
+    This tool provides a simple command line interface to validate and pretty-print
+    YAML documents while trying to preserve as much as possible from the original
+    documents (like comments and anchors).
 
-   positional arguments:
-     infile      a YAML file to be validated or pretty-printed
-     outfile     write the output of infile to outfile
+    positional arguments:
+      files           a YAML file to be validated or pretty-printed
 
-     optional arguments:
-       -h, --help  show this help message and exit
+    optional arguments:
+      -h, --help      show this help message and exit
+      -i, --in-place  Perform the pretty-print in place, overwriting the existing files.
+
+    When enabling --in-place, all files are processed as input files.
+    When --in-place is not enabled and there are more then 2 files
+    passed, the last files is considered as the output file. If you
+    wish to pretty-print multiple files and output to standard out,
+    specify the last file as "-" .
+    Please note that specifying multiple input files will concatenate
+    them, resulting in a single file that has multiple documents.
+
+pre-commit hook
+---------------
+
+YAML tool can be used as a `pre-commit <https://pre-commit.com/>` hook by
+adding the following to your :code:`.pre-commit-config.yaml` file:
+
+.. code:: yaml
+
+    ---
+    repos:
+      - repo: https://git.shore.co.il/nimrod/yamltool.git
+        rev: 0.1.0  # Check for the latest tag or run pre-commit autoupdate.
+        hooks:
+          - id: yamltool
 
 License
 -------
diff --git a/yamltool/__main__.py b/yamltool/__main__.py
index a978124242148e6be1316a86befc35d5315c08a6..11df57d2c7db534ce9b70c291aa0e7c9daba5e47 100644
--- a/yamltool/__main__.py
+++ b/yamltool/__main__.py
@@ -9,43 +9,72 @@ documents (like comments and anchors).
 import argparse
 import pathlib
 import sys
+import textwrap
 import ruamel.yaml  # pylint: disable=import-error
 
 
 def main():
     """Main entrypoint."""
+    epilog = textwrap.dedent(
+        """
+        When enabling --in-place, all files are processed as input files.
+        When --in-place is not enabled and there are more then 2 files
+        passed, the last files is considered as the output file. If you
+        wish to pretty-print multiple files and output to standard out,
+        specify the last file as "-" .
+        Please note that specifying multiple input files will concatenate
+        them, resulting in a single file that has multiple documents."""
+    )
     parser = argparse.ArgumentParser(
         description=__doc__,
+        epilog=epilog,
         formatter_class=argparse.RawDescriptionHelpFormatter,
     )
     parser.add_argument(
-        "infile",
-        nargs="?",
-        type=argparse.FileType(encoding="utf-8"),
+        "files",
+        nargs="*",
+        type=pathlib.Path,
         help="a YAML file to be validated or pretty-printed",
-        default=sys.stdin,
     )
     parser.add_argument(
-        "outfile",
-        nargs="?",
-        type=pathlib.Path,
-        help="write the output of infile to outfile",
-        default=None,
+        "-i",
+        "--in-place",
+        help="Perform the pretty-print in place, overwriting the existing files.",  # noqa: E501
+        action="store_true",
     )
     options = parser.parse_args()
-    with options.infile as infile:
-        try:
-            yaml = ruamel.yaml.YAML(typ="rt")
-            yaml.explicit_start = True
-            yaml.indent(mapping=2, sequence=4, offset=2)
-            yaml.preserve_quotes = True
-            if options.outfile is None:
-                out = sys.stdout
+    try:
+        yaml = ruamel.yaml.YAML(typ="rt")
+        yaml.explicit_start = True
+        yaml.indent(mapping=2, sequence=4, offset=2)
+        yaml.preserve_quotes = True
+        if options.in_place:
+            if len(options.files) == 0:
+                raise Exception("You must provide a list of files to process.")
+            for file in options.files:
+                with open(file, "r", encoding="utf-8") as infile:
+                    docs = list(yaml.load_all(infile))
+                with open(file, "w", encoding="utf-8") as outfile:
+                    yaml.dump_all(docs, outfile)
+        else:
+            if len(options.files) < 2:
+                outfile = sys.stdout
+            elif options.files[-1] == "-":
+                outfile = sys.stdout
+                options.files.pop(-1)
+            else:
+                outfile = open(  # pylint: disable=consider-using-with
+                    options.files[-1], "w", encoding="utf-8"
+                )
+                options.files.pop(-1)
+            if options.files:
+                for file in options.files:
+                    with open(file, "r", encoding="utf-8") as infile:
+                        yaml.dump_all(yaml.load_all(infile), outfile)
             else:
-                out = options.outfile.open("w", encoding="utf-8")
-            yaml.dump_all(yaml.load_all(infile), out)
-        except Exception as ex:
-            raise SystemExit(ex)  # pylint: disable=raise-missing-from
+                yaml.dump_all(yaml.load_all(sys.stdin), outfile)
+    except Exception as ex:
+        raise SystemExit(ex)  # pylint: disable=raise-missing-from
 
 
 if __name__ == "__main__":